summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/BackgroundJobs/CleanupLoginFlowV2.php46
-rw-r--r--core/Command/App/Disable.php47
-rw-r--r--core/Command/App/Enable.php97
-rw-r--r--core/Command/Encryption/DecryptAll.php2
-rw-r--r--core/Command/Encryption/EncryptAll.php2
-rw-r--r--core/Command/Maintenance/Mode.php2
-rw-r--r--core/Command/Maintenance/Repair.php2
-rw-r--r--core/Command/Upgrade.php4
-rw-r--r--core/Controller/ClientFlowLoginV2Controller.php299
-rw-r--r--core/Data/LoginFlowV2Credentials.php71
-rw-r--r--core/Data/LoginFlowV2Tokens.php47
-rw-r--r--core/Db/LoginFlowV2.php85
-rw-r--r--core/Db/LoginFlowV2Mapper.php100
-rw-r--r--core/Exception/LoginFlowV2NotFoundException.php29
-rw-r--r--core/Migrations/Version13000Date20170718121200.php2
-rw-r--r--core/Migrations/Version16000Date20190212081545.php101
-rw-r--r--core/Service/LoginFlowV2Service.php260
-rw-r--r--core/css/guest.css16
-rw-r--r--core/css/inputs.scss11
-rw-r--r--core/css/styles.scss26
-rw-r--r--core/js/dist/share_backend.js2
-rw-r--r--core/js/dist/share_backend.js.map2
-rw-r--r--core/js/sharedialogview.js297
-rw-r--r--core/l10n/cs.js1
-rw-r--r--core/l10n/cs.json1
-rw-r--r--core/l10n/de.js1
-rw-r--r--core/l10n/de.json1
-rw-r--r--core/l10n/de_DE.js1
-rw-r--r--core/l10n/de_DE.json1
-rw-r--r--core/l10n/eo.js1
-rw-r--r--core/l10n/eo.json1
-rw-r--r--core/l10n/gl.js1
-rw-r--r--core/l10n/gl.json1
-rw-r--r--core/l10n/it.js1
-rw-r--r--core/l10n/it.json1
-rw-r--r--core/l10n/pl.js31
-rw-r--r--core/l10n/pl.json31
-rw-r--r--core/l10n/pt_BR.js1
-rw-r--r--core/l10n/pt_BR.json1
-rw-r--r--core/l10n/sr.js1
-rw-r--r--core/l10n/sr.json1
-rw-r--r--core/l10n/sv.js6
-rw-r--r--core/l10n/sv.json6
-rw-r--r--core/l10n/zh_CN.js8
-rw-r--r--core/l10n/zh_CN.json8
-rw-r--r--core/register_command.php2
-rw-r--r--core/routes.php8
-rw-r--r--core/templates/installation.php6
-rw-r--r--core/templates/loginflowv2/authpicker.php46
-rw-r--r--core/templates/loginflowv2/done.php39
-rw-r--r--core/templates/loginflowv2/grant.php50
51 files changed, 1703 insertions, 104 deletions
diff --git a/core/BackgroundJobs/CleanupLoginFlowV2.php b/core/BackgroundJobs/CleanupLoginFlowV2.php
new file mode 100644
index 00000000000..79d8c5c043b
--- /dev/null
+++ b/core/BackgroundJobs/CleanupLoginFlowV2.php
@@ -0,0 +1,46 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\BackgroundJobs;
+
+use OC\Core\Db\LoginFlowV2Mapper;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\BackgroundJob\TimedJob;
+
+class CleanupLoginFlowV2 extends TimedJob {
+
+ /** @var LoginFlowV2Mapper */
+ private $loginFlowV2Mapper;
+
+ public function __construct(ITimeFactory $time, LoginFlowV2Mapper $loginFlowV2Mapper) {
+ parent::__construct($time);
+ $this->loginFlowV2Mapper = $loginFlowV2Mapper;
+
+ $this->setInterval(3600);
+ }
+
+ protected function run($argument) {
+ $this->loginFlowV2Mapper->cleanup();
+ }
+}
diff --git a/core/Command/App/Disable.php b/core/Command/App/Disable.php
index b64e309bd97..a79c9c474db 100644
--- a/core/Command/App/Disable.php
+++ b/core/Command/App/Disable.php
@@ -36,39 +36,52 @@ use Symfony\Component\Console\Output\OutputInterface;
class Disable extends Command implements CompletionAwareInterface {
/** @var IAppManager */
- protected $manager;
+ protected $appManager;
+
+ /** @var int */
+ protected $exitCode = 0;
/**
- * @param IAppManager $manager
+ * @param IAppManager $appManager
*/
- public function __construct(IAppManager $manager) {
+ public function __construct(IAppManager $appManager) {
parent::__construct();
- $this->manager = $manager;
+ $this->appManager = $appManager;
}
- protected function configure() {
+ protected function configure(): void {
$this
->setName('app:disable')
->setDescription('disable an app')
->addArgument(
'app-id',
- InputArgument::REQUIRED,
+ InputArgument::REQUIRED | InputArgument::IS_ARRAY,
'disable the specified app'
);
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $appId = $input->getArgument('app-id');
- if ($this->manager->isInstalled($appId)) {
- try {
- $this->manager->disableApp($appId);
- $output->writeln($appId . ' disabled');
- } catch(\Exception $e) {
- $output->writeln($e->getMessage());
- return 2;
- }
- } else {
+ $appIds = $input->getArgument('app-id');
+
+ foreach ($appIds as $appId) {
+ $this->disableApp($appId, $output);
+ }
+
+ return $this->exitCode;
+ }
+
+ private function disableApp(string $appId, OutputInterface $output): void {
+ if ($this->appManager->isInstalled($appId) === false) {
$output->writeln('No such app enabled: ' . $appId);
+ return;
+ }
+
+ try {
+ $this->appManager->disableApp($appId);
+ $output->writeln($appId . ' disabled');
+ } catch (\Exception $e) {
+ $output->writeln($e->getMessage());
+ $this->exitCode = 2;
}
}
@@ -88,7 +101,7 @@ class Disable extends Command implements CompletionAwareInterface {
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'app-id') {
- return array_diff(\OC_App::getEnabledApps(true, true), $this->manager->getAlwaysEnabledApps());
+ return array_diff(\OC_App::getEnabledApps(true, true), $this->appManager->getAlwaysEnabledApps());
}
return [];
}
diff --git a/core/Command/App/Enable.php b/core/Command/App/Enable.php
index 2d8bd76e858..ae763e57a84 100644
--- a/core/Command/App/Enable.php
+++ b/core/Command/App/Enable.php
@@ -26,8 +26,11 @@
namespace OC\Core\Command\App;
+use OC\Installer;
+use OCP\App\AppPathNotFoundException;
use OCP\App\IAppManager;
use OCP\IGroup;
+use OCP\IGroupManager;
use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Command\Command;
@@ -39,23 +42,31 @@ use Symfony\Component\Console\Output\OutputInterface;
class Enable extends Command implements CompletionAwareInterface {
/** @var IAppManager */
- protected $manager;
+ protected $appManager;
+
+ /** @var IGroupManager */
+ protected $groupManager;
+
+ /** @var int */
+ protected $exitCode = 0;
/**
- * @param IAppManager $manager
+ * @param IAppManager $appManager
+ * @param IGroupManager $groupManager
*/
- public function __construct(IAppManager $manager) {
+ public function __construct(IAppManager $appManager, IGroupManager $groupManager) {
parent::__construct();
- $this->manager = $manager;
+ $this->appManager = $appManager;
+ $this->groupManager = $groupManager;
}
- protected function configure() {
+ protected function configure(): void {
$this
->setName('app:enable')
->setDescription('enable an app')
->addArgument(
'app-id',
- InputArgument::REQUIRED,
+ InputArgument::REQUIRED | InputArgument::IS_ARRAY,
'enable the specified app'
)
->addOption(
@@ -63,28 +74,70 @@ class Enable extends Command implements CompletionAwareInterface {
'g',
InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
'enable the app only for a list of groups'
- )
- ;
+ );
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $appId = $input->getArgument('app-id');
+ $appIds = $input->getArgument('app-id');
+ $groups = $this->resolveGroupIds($input->getOption('groups'));
+
+ foreach ($appIds as $appId) {
+ $this->enableApp($appId, $groups, $output);
+ }
- if (!\OC_App::getAppPath($appId)) {
+ return $this->exitCode;
+ }
+
+ /**
+ * @param string $appId
+ * @param array $groupIds
+ * @param OutputInterface $output
+ */
+ private function enableApp(string $appId, array $groupIds, OutputInterface $output): void {
+ $groupNames = array_map(function (IGroup $group) {
+ return $group->getDisplayName();
+ }, $groupIds);
+
+
+ try {
+ /** @var Installer $installer */
+ $installer = \OC::$server->query(Installer::class);
+
+ if (false === $installer->isDownloaded($appId)) {
+ $installer->downloadApp($appId);
+ }
+
+ $installer->installApp($appId);
+
+ if ($groupIds === []) {
+ $this->appManager->enableApp($appId);
+ $output->writeln($appId . ' enabled');
+ } else {
+ $this->appManager->enableAppForGroups($appId, $groupIds);
+ $output->writeln($appId . ' enabled for groups: ' . implode(', ', $groupNames));
+ }
+ } catch (AppPathNotFoundException $e) {
$output->writeln($appId . ' not found');
- return 1;
+ $this->exitCode = 1;
+ } catch (\Exception $e) {
+ $output->writeln($e->getMessage());
+ $this->exitCode = 1;
}
+ }
- $groups = $input->getOption('groups');
- $appClass = new \OC_App();
- if (empty($groups)) {
- $appClass->enable($appId);
- $output->writeln($appId . ' enabled');
- } else {
- $appClass->enable($appId, $groups);
- $output->writeln($appId . ' enabled for groups: ' . implode(', ', $groups));
+ /**
+ * @param array $groupIds
+ * @return array
+ */
+ private function resolveGroupIds(array $groupIds): array {
+ $groups = [];
+ foreach ($groupIds as $groupId) {
+ $group = $this->groupManager->get($groupId);
+ if ($group instanceof IGroup) {
+ $groups[] = $group;
+ }
}
- return 0;
+ return $groups;
}
/**
@@ -94,9 +147,9 @@ class Enable extends Command implements CompletionAwareInterface {
*/
public function completeOptionValues($optionName, CompletionContext $context) {
if ($optionName === 'groups') {
- return array_map(function(IGroup $group) {
+ return array_map(function (IGroup $group) {
return $group->getGID();
- }, \OC::$server->getGroupManager()->search($context->getCurrentWord()));
+ }, $this->groupManager->search($context->getCurrentWord()));
}
return [];
}
diff --git a/core/Command/Encryption/DecryptAll.php b/core/Command/Encryption/DecryptAll.php
index 253223f9529..6ae90196963 100644
--- a/core/Command/Encryption/DecryptAll.php
+++ b/core/Command/Encryption/DecryptAll.php
@@ -89,7 +89,7 @@ class DecryptAll extends Command {
*/
protected function forceMaintenanceAndTrashbin() {
$this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin');
- $this->wasMaintenanceModeEnabled = $this->config->getSystemValue('maintenance', false);
+ $this->wasMaintenanceModeEnabled = $this->config->getSystemValueBool('maintenance');
$this->config->setSystemValue('maintenance', true);
$this->appManager->disableApp('files_trashbin');
}
diff --git a/core/Command/Encryption/EncryptAll.php b/core/Command/Encryption/EncryptAll.php
index b16fa0af2c7..7a257aac201 100644
--- a/core/Command/Encryption/EncryptAll.php
+++ b/core/Command/Encryption/EncryptAll.php
@@ -78,7 +78,7 @@ class EncryptAll extends Command {
*/
protected function forceMaintenanceAndTrashbin() {
$this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin');
- $this->wasMaintenanceModeEnabled = $this->config->getSystemValue('maintenance', false);
+ $this->wasMaintenanceModeEnabled = $this->config->getSystemValueBool('maintenance');
$this->config->setSystemValue('maintenance', true);
$this->appManager->disableApp('files_trashbin');
}
diff --git a/core/Command/Maintenance/Mode.php b/core/Command/Maintenance/Mode.php
index db4c9dc8c0b..1692eb08d87 100644
--- a/core/Command/Maintenance/Mode.php
+++ b/core/Command/Maintenance/Mode.php
@@ -59,7 +59,7 @@ class Mode extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $maintenanceMode = $this->config->getSystemValue('maintenance', false);
+ $maintenanceMode = $this->config->getSystemValueBool('maintenance');
if ($input->getOption('on')) {
if ($maintenanceMode === false) {
$this->config->setSystemValue('maintenance', true);
diff --git a/core/Command/Maintenance/Repair.php b/core/Command/Maintenance/Repair.php
index e9595a22285..460bc6880c1 100644
--- a/core/Command/Maintenance/Repair.php
+++ b/core/Command/Maintenance/Repair.php
@@ -106,7 +106,7 @@ class Repair extends Command {
}
}
- $maintenanceMode = $this->config->getSystemValue('maintenance', false);
+ $maintenanceMode = $this->config->getSystemValueBool('maintenance');
$this->config->setSystemValue('maintenance', true);
$this->progress = new ProgressBar($output);
diff --git a/core/Command/Upgrade.php b/core/Command/Upgrade.php
index 5a2deea0b6c..2d7ec4f688d 100644
--- a/core/Command/Upgrade.php
+++ b/core/Command/Upgrade.php
@@ -180,7 +180,7 @@ class Upgrade extends Command {
$dispatcher->addListener('\OC\Repair::info', $repairListener);
$dispatcher->addListener('\OC\Repair::warning', $repairListener);
$dispatcher->addListener('\OC\Repair::error', $repairListener);
-
+
$updater->listen('\OC\Updater', 'maintenanceEnabled', function () use($output) {
$output->writeln('<info>Turned on maintenance mode</info>');
@@ -264,7 +264,7 @@ class Upgrade extends Command {
}
return self::ERROR_SUCCESS;
- } else if($this->config->getSystemValue('maintenance', false)) {
+ } else if($this->config->getSystemValueBool('maintenance')) {
//Possible scenario: Nextcloud core is updated but an app failed
$output->writeln('<warning>Nextcloud is in maintenance mode</warning>');
$output->write('<comment>Maybe an upgrade is already in process. Please check the '
diff --git a/core/Controller/ClientFlowLoginV2Controller.php b/core/Controller/ClientFlowLoginV2Controller.php
new file mode 100644
index 00000000000..cb73b3241a0
--- /dev/null
+++ b/core/Controller/ClientFlowLoginV2Controller.php
@@ -0,0 +1,299 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Controller;
+
+use OC\Core\Db\LoginFlowV2;
+use OC\Core\Exception\LoginFlowV2NotFoundException;
+use OC\Core\Service\LoginFlowV2Service;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Http\StandaloneTemplateResponse;
+use OCP\Defaults;
+use OCP\IL10N;
+use OCP\IRequest;
+use OCP\ISession;
+use OCP\IURLGenerator;
+use OCP\Security\ISecureRandom;
+
+class ClientFlowLoginV2Controller extends Controller {
+
+ private const tokenName = 'client.flow.v2.login.token';
+ private const stateName = 'client.flow.v2.state.token';
+
+ /** @var LoginFlowV2Service */
+ private $loginFlowV2Service;
+ /** @var IURLGenerator */
+ private $urlGenerator;
+ /** @var ISession */
+ private $session;
+ /** @var ISecureRandom */
+ private $random;
+ /** @var Defaults */
+ private $defaults;
+ /** @var string */
+ private $userId;
+ /** @var IL10N */
+ private $l10n;
+
+ public function __construct(string $appName,
+ IRequest $request,
+ LoginFlowV2Service $loginFlowV2Service,
+ IURLGenerator $urlGenerator,
+ ISession $session,
+ ISecureRandom $random,
+ Defaults $defaults,
+ ?string $userId,
+ IL10N $l10n) {
+ parent::__construct($appName, $request);
+ $this->loginFlowV2Service = $loginFlowV2Service;
+ $this->urlGenerator = $urlGenerator;
+ $this->session = $session;
+ $this->random = $random;
+ $this->defaults = $defaults;
+ $this->userId = $userId;
+ $this->l10n = $l10n;
+ }
+
+ /**
+ * @NoCSRFRequired
+ * @PublicPage
+ */
+ public function poll(string $token): JSONResponse {
+ try {
+ $creds = $this->loginFlowV2Service->poll($token);
+ } catch (LoginFlowV2NotFoundException $e) {
+ return new JSONResponse([], Http::STATUS_NOT_FOUND);
+ }
+
+ return new JSONResponse($creds);
+ }
+
+ /**
+ * @NoCSRFRequired
+ * @PublicPage
+ * @UseSession
+ */
+ public function landing(string $token): Response {
+ if (!$this->loginFlowV2Service->startLoginFlow($token)) {
+ return $this->loginTokenForbiddenResponse();
+ }
+
+ $this->session->set(self::tokenName, $token);
+
+ return new RedirectResponse(
+ $this->urlGenerator->linkToRouteAbsolute('core.ClientFlowLoginV2.showAuthPickerPage')
+ );
+ }
+
+ /**
+ * @NoCSRFRequired
+ * @PublicPage
+ * @UseSession
+ */
+ public function showAuthPickerPage(): StandaloneTemplateResponse {
+ try {
+ $flow = $this->getFlowByLoginToken();
+ } catch (LoginFlowV2NotFoundException $e) {
+ return $this->loginTokenForbiddenResponse();
+ }
+
+ $stateToken = $this->random->generate(
+ 64,
+ ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_UPPER.ISecureRandom::CHAR_DIGITS
+ );
+ $this->session->set(self::stateName, $stateToken);
+
+ return new StandaloneTemplateResponse(
+ $this->appName,
+ 'loginflowv2/authpicker',
+ [
+ 'client' => $flow->getClientName(),
+ 'instanceName' => $this->defaults->getName(),
+ 'urlGenerator' => $this->urlGenerator,
+ 'stateToken' => $stateToken,
+ ],
+ 'guest'
+ );
+ }
+
+ /**
+ * @NoAdminRequired
+ * @UseSession
+ * @NoCSRFRequired
+ * @NoSameSiteCookieRequired
+ */
+ public function grantPage(string $stateToken): StandaloneTemplateResponse {
+ if(!$this->isValidStateToken($stateToken)) {
+ return $this->stateTokenForbiddenResponse();
+ }
+
+ try {
+ $flow = $this->getFlowByLoginToken();
+ } catch (LoginFlowV2NotFoundException $e) {
+ return $this->loginTokenForbiddenResponse();
+ }
+
+ return new StandaloneTemplateResponse(
+ $this->appName,
+ 'loginflowv2/grant',
+ [
+ 'client' => $flow->getClientName(),
+ 'instanceName' => $this->defaults->getName(),
+ 'urlGenerator' => $this->urlGenerator,
+ 'stateToken' => $stateToken,
+ ],
+ 'guest'
+ );
+ }
+
+ /**
+ * @NoAdminRequired
+ * @UseSession
+ */
+ public function generateAppPassword(string $stateToken): Response {
+ if(!$this->isValidStateToken($stateToken)) {
+ return $this->stateTokenForbiddenResponse();
+ }
+
+ try {
+ $this->getFlowByLoginToken();
+ } catch (LoginFlowV2NotFoundException $e) {
+ return $this->loginTokenForbiddenResponse();
+ }
+
+ $loginToken = $this->session->get(self::tokenName);
+
+ // Clear session variables
+ $this->session->remove(self::tokenName);
+ $this->session->remove(self::stateName);
+ $sessionId = $this->session->getId();
+
+ $result = $this->loginFlowV2Service->flowDone($loginToken, $sessionId, $this->getServerPath(), $this->userId);
+
+ if ($result) {
+ return new StandaloneTemplateResponse(
+ $this->appName,
+ 'loginflowv2/done',
+ [],
+ 'guest'
+ );
+ }
+
+ $response = new StandaloneTemplateResponse(
+ $this->appName,
+ '403',
+ [
+ 'message' => $this->l10n->t('Could not complete login'),
+ ],
+ 'guest'
+ );
+ $response->setStatus(Http::STATUS_FORBIDDEN);
+ return $response;
+ }
+
+ /**
+ * @NoCSRFRequired
+ * @PublicPage
+ */
+ public function init(): JSONResponse {
+ // Get client user agent
+ $userAgent = $this->request->getHeader('USER_AGENT');
+
+ $tokens = $this->loginFlowV2Service->createTokens($userAgent);
+
+ $data = [
+ 'poll' => [
+ 'token' => $tokens->getPollToken(),
+ 'endpoint' => $this->urlGenerator->linkToRouteAbsolute('core.ClientFlowLoginV2.poll')
+ ],
+ 'login' => $this->urlGenerator->linkToRouteAbsolute('core.ClientFlowLoginV2.landing', ['token' => $tokens->getLoginToken()]),
+ ];
+
+ return new JSONResponse($data);
+ }
+
+ private function isValidStateToken(string $stateToken): bool {
+ $currentToken = $this->session->get(self::stateName);
+ if(!is_string($stateToken) || !is_string($currentToken)) {
+ return false;
+ }
+ return hash_equals($currentToken, $stateToken);
+ }
+
+ private function stateTokenForbiddenResponse(): StandaloneTemplateResponse {
+ $response = new StandaloneTemplateResponse(
+ $this->appName,
+ '403',
+ [
+ 'message' => $this->l10n->t('State token does not match'),
+ ],
+ 'guest'
+ );
+ $response->setStatus(Http::STATUS_FORBIDDEN);
+ return $response;
+ }
+
+ /**
+ * @return LoginFlowV2
+ * @throws LoginFlowV2NotFoundException
+ */
+ private function getFlowByLoginToken(): LoginFlowV2 {
+ $currentToken = $this->session->get(self::tokenName);
+ if(!is_string($currentToken)) {
+ throw new LoginFlowV2NotFoundException('Login token not set in session');
+ }
+
+ return $this->loginFlowV2Service->getByLoginToken($currentToken);
+ }
+
+ private function loginTokenForbiddenResponse(): StandaloneTemplateResponse {
+ $response = new StandaloneTemplateResponse(
+ $this->appName,
+ '403',
+ [
+ 'message' => $this->l10n->t('Your login token is invalid or has expired'),
+ ],
+ 'guest'
+ );
+ $response->setStatus(Http::STATUS_FORBIDDEN);
+ return $response;
+ }
+
+ private function getServerPath(): string {
+ $serverPostfix = '';
+
+ if (strpos($this->request->getRequestUri(), '/index.php') !== false) {
+ $serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/index.php'));
+ } else if (strpos($this->request->getRequestUri(), '/login/v2') !== false) {
+ $serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/login/v2'));
+ }
+
+ $protocol = $this->request->getServerProtocol();
+ return $protocol . '://' . $this->request->getServerHost() . $serverPostfix;
+ }
+}
diff --git a/core/Data/LoginFlowV2Credentials.php b/core/Data/LoginFlowV2Credentials.php
new file mode 100644
index 00000000000..68dd772f9e0
--- /dev/null
+++ b/core/Data/LoginFlowV2Credentials.php
@@ -0,0 +1,71 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Data;
+
+class LoginFlowV2Credentials implements \JsonSerializable {
+ /** @var string */
+ private $server;
+ /** @var string */
+ private $loginName;
+ /** @var string */
+ private $appPassword;
+
+ public function __construct(string $server, string $loginName, string $appPassword) {
+ $this->server = $server;
+ $this->loginName = $loginName;
+ $this->appPassword = $appPassword;
+ }
+
+ /**
+ * @return string
+ */
+ public function getServer(): string {
+ return $this->server;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLoginName(): string {
+ return $this->loginName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAppPassword(): string {
+ return $this->appPassword;
+ }
+
+ public function jsonSerialize(): array {
+ return [
+ 'server' => $this->server,
+ 'loginName' => $this->loginName,
+ 'appPassword' => $this->appPassword,
+ ];
+ }
+
+
+}
diff --git a/core/Data/LoginFlowV2Tokens.php b/core/Data/LoginFlowV2Tokens.php
new file mode 100644
index 00000000000..e32278d2e7f
--- /dev/null
+++ b/core/Data/LoginFlowV2Tokens.php
@@ -0,0 +1,47 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Data;
+
+class LoginFlowV2Tokens {
+
+ /** @var string */
+ private $loginToken;
+ /** @var string */
+ private $pollToken;
+
+ public function __construct(string $loginToken, string $pollToken) {
+ $this->loginToken = $loginToken;
+ $this->pollToken = $pollToken;
+ }
+
+ public function getPollToken(): string {
+ return $this->pollToken;
+
+ }
+
+ public function getLoginToken(): string {
+ return $this->loginToken;
+ }
+}
diff --git a/core/Db/LoginFlowV2.php b/core/Db/LoginFlowV2.php
new file mode 100644
index 00000000000..07ecb659c44
--- /dev/null
+++ b/core/Db/LoginFlowV2.php
@@ -0,0 +1,85 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Db;
+
+use OCP\AppFramework\Db\Entity;
+
+/**
+ * @method int getTimestamp()
+ * @method void setTimestamp(int $timestamp)
+ * @method int getStarted()
+ * @method void setStarted(int $started)
+ * @method string getPollToken()
+ * @method void setPollToken(string $token)
+ * @method string getLoginToken()
+ * @method void setLoginToken(string $token)
+ * @method string getPublicKey()
+ * @method void setPublicKey(string $key)
+ * @method string getPrivateKey()
+ * @method void setPrivateKey(string $key)
+ * @method string getClientName()
+ * @method void setClientName(string $clientName)
+ * @method string getLoginName()
+ * @method void setLoginName(string $loginName)
+ * @method string getServer()
+ * @method void setServer(string $server)
+ * @method string getAppPassword()
+ * @method void setAppPassword(string $appPassword)
+ */
+class LoginFlowV2 extends Entity {
+ /** @var int */
+ protected $timestamp;
+ /** @var int */
+ protected $started;
+ /** @var string */
+ protected $pollToken;
+ /** @var string */
+ protected $loginToken;
+ /** @var string */
+ protected $publicKey;
+ /** @var string */
+ protected $privateKey;
+ /** @var string */
+ protected $clientName;
+ /** @var string */
+ protected $loginName;
+ /** @var string */
+ protected $server;
+ /** @var string */
+ protected $appPassword;
+
+ public function __construct() {
+ $this->addType('timestamp', 'int');
+ $this->addType('started', 'int');
+ $this->addType('pollToken', 'string');
+ $this->addType('loginToken', 'string');
+ $this->addType('publicKey', 'string');
+ $this->addType('privateKey', 'string');
+ $this->addType('clientName', 'string');
+ $this->addType('loginName', 'string');
+ $this->addType('server', 'string');
+ $this->addType('appPassword', 'string');
+ }
+}
diff --git a/core/Db/LoginFlowV2Mapper.php b/core/Db/LoginFlowV2Mapper.php
new file mode 100644
index 00000000000..a9104557a76
--- /dev/null
+++ b/core/Db/LoginFlowV2Mapper.php
@@ -0,0 +1,100 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Db;
+
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\Db\QBMapper;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IDBConnection;
+
+class LoginFlowV2Mapper extends QBMapper {
+ private const lifetime = 1200;
+
+ /** @var ITimeFactory */
+ private $timeFactory;
+
+ public function __construct(IDBConnection $db, ITimeFactory $timeFactory) {
+ parent::__construct($db, 'login_flow_v2', LoginFlowV2::class);
+ $this->timeFactory = $timeFactory;
+ }
+
+ /**
+ * @param string $pollToken
+ * @return LoginFlowV2
+ * @throws DoesNotExistException
+ */
+ public function getByPollToken(string $pollToken): LoginFlowV2 {
+ $qb = $this->db->getQueryBuilder();
+ $qb->select('*')
+ ->from($this->getTableName())
+ ->where(
+ $qb->expr()->eq('poll_token', $qb->createNamedParameter($pollToken))
+ );
+
+ $entity = $this->findEntity($qb);
+ return $this->validateTimestamp($entity);
+ }
+
+ /**
+ * @param string $loginToken
+ * @return LoginFlowV2
+ * @throws DoesNotExistException
+ */
+ public function getByLoginToken(string $loginToken): LoginFlowV2 {
+ $qb = $this->db->getQueryBuilder();
+ $qb->select('*')
+ ->from($this->getTableName())
+ ->where(
+ $qb->expr()->eq('login_token', $qb->createNamedParameter($loginToken))
+ );
+
+ $entity = $this->findEntity($qb);
+ return $this->validateTimestamp($entity);
+ }
+
+ public function cleanup(): void {
+ $qb = $this->db->getQueryBuilder();
+ $qb->delete($this->getTableName())
+ ->where(
+ $qb->expr()->lt('timestamp', $qb->createNamedParameter($this->timeFactory->getTime() - self::lifetime))
+ );
+
+ $qb->execute();
+ }
+
+ /**
+ * @param LoginFlowV2 $flowV2
+ * @return LoginFlowV2
+ * @throws DoesNotExistException
+ */
+ private function validateTimestamp(LoginFlowV2 $flowV2): LoginFlowV2 {
+ if ($flowV2->getTimestamp() < ($this->timeFactory->getTime() - self::lifetime)) {
+ $this->delete($flowV2);
+ throw new DoesNotExistException('Token expired');
+ }
+
+ return $flowV2;
+ }
+}
diff --git a/core/Exception/LoginFlowV2NotFoundException.php b/core/Exception/LoginFlowV2NotFoundException.php
new file mode 100644
index 00000000000..1e2bbb761ef
--- /dev/null
+++ b/core/Exception/LoginFlowV2NotFoundException.php
@@ -0,0 +1,29 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Exception;
+
+class LoginFlowV2NotFoundException extends \Exception {
+
+}
diff --git a/core/Migrations/Version13000Date20170718121200.php b/core/Migrations/Version13000Date20170718121200.php
index c1989ff606e..4c5fb7b9b02 100644
--- a/core/Migrations/Version13000Date20170718121200.php
+++ b/core/Migrations/Version13000Date20170718121200.php
@@ -523,7 +523,7 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
]);
$table->setPrimaryKey(['id']);
$table->addUniqueIndex(['token'], 'authtoken_token_index');
- $table->addIndex(['last_activity'], 'authtoken_last_activity_index');
+ $table->addIndex(['last_activity'], 'authtoken_last_activity_idx');
}
if (!$schema->hasTable('bruteforce_attempts')) {
diff --git a/core/Migrations/Version16000Date20190212081545.php b/core/Migrations/Version16000Date20190212081545.php
new file mode 100644
index 00000000000..6f6902bf177
--- /dev/null
+++ b/core/Migrations/Version16000Date20190212081545.php
@@ -0,0 +1,101 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2018 Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Migrations;
+
+use Closure;
+use Doctrine\DBAL\Types\Type;
+use OCP\DB\ISchemaWrapper;
+use OCP\Migration\SimpleMigrationStep;
+use OCP\Migration\IOutput;
+
+class Version16000Date20190212081545 extends SimpleMigrationStep {
+ /**
+ * @param IOutput $output
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+ * @param array $options
+ * @return null|ISchemaWrapper
+ */
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ $table = $schema->createTable('login_flow_v2');
+ $table->addColumn('id', Type::BIGINT, [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 20,
+ 'unsigned' => true,
+ ]);
+ $table->addColumn('timestamp', Type::BIGINT, [
+ 'notnull' => true,
+ 'length' => 20,
+ 'unsigned' => true,
+ ]);
+ $table->addColumn('started', Type::SMALLINT, [
+ 'notnull' => true,
+ 'length' => 1,
+ 'unsigned' => true,
+ 'default' => 0,
+ ]);
+ $table->addColumn('poll_token', Type::STRING, [
+ 'notnull' => true,
+ 'length' => 255,
+ ]);
+ $table->addColumn('login_token', Type::STRING, [
+ 'notnull' => true,
+ 'length' => 255,
+ ]);
+ $table->addColumn('public_key', Type::TEXT, [
+ 'notnull' => true,
+ 'length' => 32768,
+ ]);
+ $table->addColumn('private_key', Type::TEXT, [
+ 'notnull' => true,
+ 'length' => 32768,
+ ]);
+ $table->addColumn('client_name', Type::STRING, [
+ 'notnull' => true,
+ 'length' => 255,
+ ]);
+ $table->addColumn('login_name', Type::STRING, [
+ 'notnull' => false,
+ 'length' => 255,
+ ]);
+ $table->addColumn('server', Type::STRING, [
+ 'notnull' => false,
+ 'length' => 255,
+ ]);
+ $table->addColumn('app_password', Type::STRING, [
+ 'notnull' => false,
+ 'length' => 1024,
+ ]);
+ $table->setPrimaryKey(['id']);
+ $table->addUniqueIndex(['poll_token']);
+ $table->addUniqueIndex(['login_token']);
+ $table->addIndex(['timestamp']);
+
+ return $schema;
+ }
+}
diff --git a/core/Service/LoginFlowV2Service.php b/core/Service/LoginFlowV2Service.php
new file mode 100644
index 00000000000..d8912adfa02
--- /dev/null
+++ b/core/Service/LoginFlowV2Service.php
@@ -0,0 +1,260 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Service;
+
+use OC\Authentication\Exceptions\InvalidTokenException;
+use OC\Authentication\Exceptions\PasswordlessTokenException;
+use OC\Authentication\Token\IProvider;
+use OC\Authentication\Token\IToken;
+use OC\Core\Data\LoginFlowV2Credentials;
+use OC\Core\Data\LoginFlowV2Tokens;
+use OC\Core\Db\LoginFlowV2;
+use OC\Core\Db\LoginFlowV2Mapper;
+use OC\Core\Exception\LoginFlowV2NotFoundException;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IConfig;
+use OCP\ILogger;
+use OCP\Security\ICrypto;
+use OCP\Security\ISecureRandom;
+
+class LoginFlowV2Service {
+
+ /** @var LoginFlowV2Mapper */
+ private $mapper;
+ /** @var ISecureRandom */
+ private $random;
+ /** @var ITimeFactory */
+ private $time;
+ /** @var IConfig */
+ private $config;
+ /** @var ICrypto */
+ private $crypto;
+ /** @var ILogger */
+ private $logger;
+ /** @var IProvider */
+ private $tokenProvider;
+
+ public function __construct(LoginFlowV2Mapper $mapper,
+ ISecureRandom $random,
+ ITimeFactory $time,
+ IConfig $config,
+ ICrypto $crypto,
+ ILogger $logger,
+ IProvider $tokenProvider) {
+ $this->mapper = $mapper;
+ $this->random = $random;
+ $this->time = $time;
+ $this->config = $config;
+ $this->crypto = $crypto;
+ $this->logger = $logger;
+ $this->tokenProvider = $tokenProvider;
+ }
+
+ /**
+ * @param string $pollToken
+ * @return LoginFlowV2Credentials
+ * @throws LoginFlowV2NotFoundException
+ */
+ public function poll(string $pollToken): LoginFlowV2Credentials {
+ try {
+ $data = $this->mapper->getByPollToken($this->hashToken($pollToken));
+ } catch (DoesNotExistException $e) {
+ throw new LoginFlowV2NotFoundException('Invalid token');
+ }
+
+ $loginName = $data->getLoginName();
+ $server = $data->getServer();
+ $appPassword = $data->getAppPassword();
+
+ if ($loginName === null || $server === null || $appPassword === null) {
+ throw new LoginFlowV2NotFoundException('Token not yet ready');
+ }
+
+ // Remove the data from the DB
+ $this->mapper->delete($data);
+
+ try {
+ // Decrypt the apptoken
+ $privateKey = $this->crypto->decrypt($data->getPrivateKey(), $pollToken);
+ $appPassword = $this->decryptPassword($data->getAppPassword(), $privateKey);
+ } catch (\Exception $e) {
+ throw new LoginFlowV2NotFoundException('Apptoken could not be decrypted');
+ }
+
+ return new LoginFlowV2Credentials($server, $loginName, $appPassword);
+ }
+
+ /**
+ * @param string $loginToken
+ * @return LoginFlowV2
+ * @throws LoginFlowV2NotFoundException
+ */
+ public function getByLoginToken(string $loginToken): LoginFlowV2 {
+ try {
+ return $this->mapper->getByLoginToken($loginToken);
+ } catch (DoesNotExistException $e) {
+ throw new LoginFlowV2NotFoundException('Login token invalid');
+ }
+ }
+
+ /**
+ * @param string $loginToken
+ * @return bool returns true if the start was successfull. False if not.
+ */
+ public function startLoginFlow(string $loginToken): bool {
+ try {
+ $data = $this->mapper->getByLoginToken($loginToken);
+ } catch (DoesNotExistException $e) {
+ return false;
+ }
+
+ if ($data->getStarted() !== 0) {
+ return false;
+ }
+
+ $data->setStarted(1);
+ $this->mapper->update($data);
+
+ return true;
+ }
+
+ /**
+ * @param string $loginToken
+ * @param string $sessionId
+ * @param string $server
+ * @param string $userId
+ * @return bool true if the flow was successfully completed false otherwise
+ */
+ public function flowDone(string $loginToken, string $sessionId, string $server, string $userId): bool {
+ try {
+ $data = $this->mapper->getByLoginToken($loginToken);
+ } catch (DoesNotExistException $e) {
+ return false;
+ }
+
+ try {
+ $sessionToken = $this->tokenProvider->getToken($sessionId);
+ $loginName = $sessionToken->getLoginName();
+ try {
+ $password = $this->tokenProvider->getPassword($sessionToken, $sessionId);
+ } catch (PasswordlessTokenException $ex) {
+ $password = null;
+ }
+ } catch (InvalidTokenException $ex) {
+ return false;
+ }
+
+ $appPassword = $this->random->generate(72, ISecureRandom::CHAR_UPPER.ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_DIGITS);
+ $this->tokenProvider->generateToken(
+ $appPassword,
+ $userId,
+ $loginName,
+ $password,
+ $data->getClientName(),
+ IToken::PERMANENT_TOKEN,
+ IToken::DO_NOT_REMEMBER
+ );
+
+ $data->setLoginName($loginName);
+ $data->setServer($server);
+
+ // Properly encrypt
+ $data->setAppPassword($this->encryptPassword($appPassword, $data->getPublicKey()));
+
+ $this->mapper->update($data);
+ return true;
+ }
+
+ public function createTokens(string $userAgent): LoginFlowV2Tokens {
+ $flow = new LoginFlowV2();
+ $pollToken = $this->random->generate(128, ISecureRandom::CHAR_DIGITS.ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_UPPER);
+ $loginToken = $this->random->generate(128, ISecureRandom::CHAR_DIGITS.ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_UPPER);
+ $flow->setPollToken($this->hashToken($pollToken));
+ $flow->setLoginToken($loginToken);
+ $flow->setStarted(0);
+ $flow->setTimestamp($this->time->getTime());
+ $flow->setClientName($userAgent);
+
+ [$publicKey, $privateKey] = $this->getKeyPair();
+ $privateKey = $this->crypto->encrypt($privateKey, $pollToken);
+
+ $flow->setPublicKey($publicKey);
+ $flow->setPrivateKey($privateKey);
+
+ $this->mapper->insert($flow);
+
+ return new LoginFlowV2Tokens($loginToken, $pollToken);
+ }
+
+ private function hashToken(string $token): string {
+ $secret = $this->config->getSystemValue('secret');
+ return hash('sha512', $token . $secret);
+ }
+
+ private function getKeyPair(): array {
+ $config = array_merge([
+ 'digest_alg' => 'sha512',
+ 'private_key_bits' => 2048,
+ ], $this->config->getSystemValue('openssl', []));
+
+ // Generate new key
+ $res = openssl_pkey_new($config);
+ if ($res === false) {
+ $this->logOpensslError();
+ throw new \RuntimeException('Could not initialize keys');
+ }
+
+ openssl_pkey_export($res, $privateKey);
+
+ // Extract the public key from $res to $pubKey
+ $publicKey = openssl_pkey_get_details($res);
+ $publicKey = $publicKey['key'];
+
+ return [$publicKey, $privateKey];
+ }
+
+ private function logOpensslError(): void {
+ $errors = [];
+ while ($error = openssl_error_string()) {
+ $errors[] = $error;
+ }
+ $this->logger->critical('Something is wrong with your openssl setup: ' . implode(', ', $errors));
+ }
+
+ private function encryptPassword(string $password, string $publicKey): string {
+ openssl_public_encrypt($password, $encryptedPassword, $publicKey, OPENSSL_PKCS1_OAEP_PADDING);
+ $encryptedPassword = base64_encode($encryptedPassword);
+
+ return $encryptedPassword;
+ }
+
+ private function decryptPassword(string $encryptedPassword, string $privateKey): string {
+ $encryptedPassword = base64_decode($encryptedPassword);
+ openssl_private_decrypt($encryptedPassword, $password, $privateKey, OPENSSL_PKCS1_OAEP_PADDING);
+
+ return $password;
+ }
+}
diff --git a/core/css/guest.css b/core/css/guest.css
index dc9a82bda69..f7d9280f9a7 100644
--- a/core/css/guest.css
+++ b/core/css/guest.css
@@ -331,12 +331,6 @@ input[type='checkbox'].checkbox--white:checked + label:before {
background-image: url('../img/actions/checkbox-mark-white.svg');
}
-
-/* keep the labels for screen readers but hide them since we use placeholders */
-label.infield {
- display: none;
-}
-
/* Password strength meter */
.strengthify-wrapper {
display: inline-block;
@@ -362,9 +356,6 @@ label.infield {
top: .8em;
float: right;
}
-#show, #dbpassword-toggle, #personal-show {
- display: none;
-}
#show + label, #dbpassword-toggle + label {
right: 21px;
top: 15px !important;
@@ -386,6 +377,11 @@ label.infield {
#show + label:before, #dbpassword-toggle + label:before, #personal-show + label:before {
display: none;
}
+/* Feedback for keyboard focus and mouse hover */
+#show:focus + label, #dbpassword-toggle:focus + label, #personal-show:focus + label,
+#show + label:hover, #dbpassword-toggle + label:hover, #personal-show + label:hover {
+ opacity: 1;
+}
#pass2, input[name='personal-password-clone'] {
padding: .6em 2.5em .4em .4em;
width: 8em;
@@ -836,6 +832,8 @@ footer .info .entity-name {
display: none;
}
+/* keep the labels for screen readers but hide them since we use placeholders */
+label.infield,
.hidden-visually {
position: absolute;
left:-10000px;
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
index 37914365a77..e9bee2c62be 100644
--- a/core/css/inputs.scss
+++ b/core/css/inputs.scss
@@ -917,3 +917,14 @@ progress {
animation-duration: .7s;
animation-timing-function: ease-out;
}
+
+// Keep the labels for screen readers but hide them since we use placeholders
+// Same as .hidden-visually
+label.infield {
+ position: absolute;
+ left:-10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
diff --git a/core/css/styles.scss b/core/css/styles.scss
index 11c737af52f..a066c607522 100644
--- a/core/css/styles.scss
+++ b/core/css/styles.scss
@@ -256,12 +256,6 @@ body {
user-select: none;
}
-/* keep the labels for screen readers but hide them since we use placeholders */
-
-label.infield {
- display: none;
-}
-
/* Show password toggle */
#show, #dbpassword {
@@ -271,10 +265,6 @@ label.infield {
float: right;
}
-#show, #dbpassword, #personal-show {
- display: none;
-}
-
#show + label, #dbpassword + label {
right: 21px;
top: 15px !important;
@@ -296,6 +286,18 @@ label.infield {
opacity: .3;
}
+/* Feedback for keyboard focus and mouse hover */
+#show,
+#dbpassword,
+#personal-show {
+ &:focus + label {
+ opacity: 1;
+ }
+ + label:hover {
+ opacity: 1;
+ }
+}
+
#show + label:before, #dbpassword + label:before, #personal-show + label:before {
display: none;
}
@@ -312,8 +314,8 @@ label.infield {
#personal-show + label {
display: block;
right: 0;
- margin-top: -41px;
- margin-right: -6px;
+ margin-top: -43px;
+ margin-right: -4px;
padding: 22px;
}
diff --git a/core/js/dist/share_backend.js b/core/js/dist/share_backend.js
index d1692ca0078..c4b462464f6 100644
--- a/core/js/dist/share_backend.js
+++ b/core/js/dist/share_backend.js
@@ -20,5 +20,5 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-!function(){OC.Share||(OC.Share={}),OC.Share.Social={};var e=OC.Backbone.Model.extend({defaults:{key:null,url:null,name:null,iconClass:null,newWindow:!0}});OC.Share.Social.Model=e;var a=OC.Backbone.Collection.extend({model:OC.Share.Social.Model,comparator:"key"});OC.Share.Social.Collection=new a}()},function(e,a){!function(){OC.Share||(OC.Share={});var e=OC.Backbone.View.extend({id:"shareDialogResharerInfo",tagName:"div",className:"reshare",configModel:void 0,_template:void 0,initialize:function(e){var a=this;if(this.model.on("change:reshare",function(){a.render()}),_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel},render:function(){if(!this.model.hasReshare()||this.model.getReshareOwner()===OC.currentUser)return this.$el.empty(),this;var e=this.template(),a=this.model.getReshareOwnerDisplayname(),n=this.model.getReshareNote(),s="";return s=this.model.getReshareType()===OC.Share.SHARE_TYPE_GROUP?t("core","Shared with you and the group {group} by {owner}",{group:this.model.getReshareWithDisplayName(),owner:a},void 0,{escape:!1}):this.model.getReshareType()===OC.Share.SHARE_TYPE_CIRCLE?t("core","Shared with you and {circle} by {owner}",{circle:this.model.getReshareWithDisplayName(),owner:a},void 0,{escape:!1}):this.model.getReshareType()===OC.Share.SHARE_TYPE_ROOM?this.model.get("reshare").share_with_displayname?t("core","Shared with you and the conversation {conversation} by {owner}",{conversation:this.model.getReshareWithDisplayName(),owner:a},void 0,{escape:!1}):t("core","Shared with you in a conversation by {owner}",{owner:a},void 0,{escape:!1}):t("core","Shared with you by {owner}",{owner:a},void 0,{escape:!1}),this.$el.html(e({reshareOwner:this.model.getReshareOwner(),sharedByText:s,shareNote:n,hasShareNote:""!==n})),this.$el.find(".avatar").each(function(){var e=$(this);e.avatar(e.data("username"),32)}),this.$el.find(".reshare").contactsMenu(this.model.getReshareOwner(),OC.Share.SHARE_TYPE_USER,this.$el),this},template:function(){return OC.Share.Templates.sharedialogresharerinfoview}});OC.Share.ShareDialogResharerInfoView=e}()},function(e,a){!function(){OC.Share||(OC.Share={});var e=t("core","Choose a password for the public link"),a=t("core",'Choose a password for the public link or press the "Enter" key'),n=OC.Backbone.View.extend({id:"shareDialogLinkShare",configModel:void 0,showLink:!0,showPending:!1,password:"",newShareId:"new-share",events:{"click .share-menu .icon-more":"onToggleMenu","change .hideDownloadCheckbox":"onHideDownloadChange","click input.share-pass-submit":"onPasswordEntered","keyup input.linkPassText":"onPasswordKeyUp","change .showPasswordCheckbox":"onShowPasswordClick","change .passwordByTalkCheckbox":"onPasswordByTalkChange","change .publicEditingCheckbox":"onAllowPublicEditingChange","click .linkText":"onLinkTextClick","click .pop-up":"onPopUpClick","change .publicUploadRadio":"onPublicUploadChange","click .expireDate":"onExpireDateChange","change .datepicker":"onChangeExpirationDate","click .datepicker":"showDatePicker","click .share-add":"showNoteForm","click .share-note-delete":"deleteNote","click .share-note-submit":"updateNote","click .unshare":"onUnshare","click .new-share":"newShare","submit .enforcedPassForm":"enforcedPasswordSet"},initialize:function(e){var a=this;if(this.model.on("change:permissions",function(){a.render()}),this.model.on("change:itemType",function(){a.render()}),this.model.on("change:allowPublicUploadStatus",function(){a.render()}),this.model.on("change:hideFileListStatus",function(){a.render()}),this.model.on("change:linkShares",function(e,t){var n,s=e.previous("linkShares");if(s.length===t.length)for(n=0;n<t.length;n++){if(t[n].id!==s[n].id)return;if(t[n].password!==s[n].password)return void a.render()}}),_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel;var n=new Clipboard(".clipboard-button");n.on("success",function(e){var a=$(e.trigger);a.tooltip("hide").attr("data-original-title",t("core","Copied!")).tooltip("fixTitle").tooltip({placement:"bottom",trigger:"manual"}).tooltip("show"),_.delay(function(){a.tooltip("hide").attr("data-original-title",t("core","Copy link")).tooltip("fixTitle")},3e3)}),n.on("error",function(e){var a=$(e.trigger),n=a.next(".share-menu").find(".popovermenu"),s=n.find("li.linkTextMenu"),i=s.find(".linkText");a.closest("li[data-share-id]").data("share-id");OC.showMenu(null,n);var l="";l=/iPhone|iPad/i.test(navigator.userAgent)?t("core","Not supported!"):/Mac/i.test(navigator.userAgent)?t("core","Press ⌘-C to copy."):t("core","Press Ctrl-C to copy."),s.removeClass("hidden"),i.select(),i.tooltip("hide").attr("data-original-title",l).tooltip("fixTitle").tooltip({placement:"bottom",trigger:"manual"}).tooltip("show"),_.delay(function(){i.tooltip("hide"),i.attr("data-original-title",t("core","Copy")).tooltip("fixTitle")},3e3)})},newShare:function(e){var a=this,n=$(e.target).closest("li[data-share-id]"),s=n.data("share-id"),i=n.find(".share-menu > .icon-loading-small");if(!i.hasClass("hidden")&&""===this.password)return!1;n.find(".icon").addClass("hidden"),i.removeClass("hidden"),OC.hideMenus();var l={},r=this.configModel.get("enforcePasswordForPublicLink");if(this.configModel.get("isDefaultExpireDateEnforced")){var o=this.configModel.get("defaultExpireDate"),d=moment().add(o,"day").format("DD-MM-YYYY");l.expireDate=d}r&&""!==this.password&&(l.password=this.password);var h=!1;r&&!this.showPending&&""===this.password?(this.showPending=s,(a=this.render()).$el.find(".pending #enforcedPassText").focus()):$.when(this.model.saveLinkShare(l,{success:function(){if(i.addClass("hidden"),n.find(".icon").removeClass("hidden"),a.render(),h){var e=a.$el.find("li[data-share-id]"),t=a.$el.find('li[data-share-id="'+h+'"]');if(t&&1===e.length){var s=t.find(".popovermenu");OC.showMenu(null,s)}}},error:function(){}})).fail(function(e){if(a.password="",r&&e&&e.responseJSON&&e.responseJSON.ocs.meta&&e.responseJSON.ocs.meta.message){var s=a.$el.find(".pending #enforcedPassText");s.tooltip("destroy"),s.attr("title",e.responseJSON.ocs.meta.message),s.tooltip({placement:"bottom",trigger:"manual"}),s.tooltip("show")}else OC.Notification.showTemporary(t("core","Unable to create a link share")),i.addClass("hidden"),n.find(".icon").removeClass("hidden")}).then(function(e){h=e.ocs.data.id})},enforcedPasswordSet:function(e){e.preventDefault();var a=$(e.target).find("input.enforcedPassText");this.password=a.val(),this.showPending=!1,this.newShare(e)},onLinkTextClick:function(e){var a=$(e.target).closest("li[data-share-id]").find(".linkText");a.focus(),a.select()},onHideDownloadChange:function(e){var a=$(e.target).closest("li[data-share-id]"),n=a.data("share-id"),s=a.find(".hideDownloadCheckbox");s.siblings(".icon-loading-small").removeClass("hidden").addClass("inlineblock");var i=!1;s.is(":checked")&&(i=!0),this.model.saveLinkShare({hideDownload:i,cid:n},{success:function(){s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")},error:function(e,a){OC.Notification.showTemporary(t("core","Unable to toggle this option")),s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")}})},onShowPasswordClick:function(e){var a=$(e.target).closest("li[data-share-id]"),t=a.data("share-id");a.find(".linkPass").slideToggle(OC.menuSpeed),a.find(".linkPassMenu").toggleClass("hidden"),a.find(".showPasswordCheckbox").is(":checked")?OC.Util.isIE()||a.find(".linkPassText").focus():this.model.saveLinkShare({password:"",cid:t})},onPasswordKeyUp:function(e){13===e.keyCode&&this.onPasswordEntered(e)},onPasswordEntered:function(t){var n=$(t.target).closest("li[data-share-id]"),s=n.data("share-id"),i=n.find(".linkPassMenu .icon-loading-small");if(i.hasClass("hidden")){var l=n.find(".linkPassText");l.removeClass("error");var r=l.val();if(n.find(".linkPassText").attr("placeholder")===a)r===a&&(r="");else if(""===r||"**********"===r||r===e)return;i.removeClass("hidden").addClass("inlineblock"),this.model.saveLinkShare({password:r,cid:s},{complete:function(e){i.removeClass("inlineblock").addClass("hidden")},error:function(e,a){var t=l.parent();t.tooltip("destroy"),l.addClass("error"),t.attr("title",a),t.tooltip({placement:"bottom",trigger:"manual"}),t.tooltip("show")}})}},onPasswordByTalkChange:function(e){var a=$(e.target).closest("li[data-share-id]"),n=a.data("share-id"),s=a.find(".passwordByTalkCheckbox");s.siblings(".icon-loading-small").removeClass("hidden").addClass("inlineblock");var i=!1;s.is(":checked")&&(i=!0),this.model.saveLinkShare({sendPasswordByTalk:i,cid:n},{success:function(){s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")},error:function(e,a){OC.Notification.showTemporary(t("core","Unable to toggle this option")),s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")}})},onAllowPublicEditingChange:function(e){var a=$(e.target).closest("li[data-share-id]"),n=a.data("share-id"),s=a.find(".publicEditingCheckbox");s.siblings(".icon-loading-small").removeClass("hidden").addClass("inlineblock");var i=OC.PERMISSION_READ;s.is(":checked")&&(i=OC.PERMISSION_UPDATE|OC.PERMISSION_READ),this.model.saveLinkShare({permissions:i,cid:n},{success:function(){s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")},error:function(e,a){OC.Notification.showTemporary(t("core","Unable to toggle this option")),s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")}})},onPublicUploadChange:function(e){var a=$(e.target).closest("li[data-share-id]").data("share-id"),t=e.currentTarget.value;this.model.saveLinkShare({permissions:t,cid:a})},showNoteForm:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=(a.closest("li[data-share-id]"),a.closest("li")),n=t.next("li.share-note-form");t.find(".share-note-delete").toggleClass("hidden"),n.toggleClass("hidden"),n.find("textarea").focus()},deleteNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li"),s=n.next("li.share-note-form");s.find(".share-note").val(""),s.addClass("hidden"),n.find(".share-note-delete").addClass("hidden"),this.sendNote("",t,n)},updateNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li.share-note-form"),s=n.prev("li"),i=n.find(".share-note").val().trim();i.length<1||this.sendNote(i,t,s)},sendNote:function(e,a,t){var n=t.next("li.share-note-form"),s=n.find("input.share-note-submit"),i=n.find("input.share-note-error");s.prop("disabled",!0),t.find(".icon-loading-small").removeClass("hidden"),t.find(".icon-edit").hide();$.ajax({method:"PUT",url:OC.linkToOCS("apps/files_sharing/api/v1/shares",2)+a+"?"+OC.buildQueryString({format:"json"}),data:{note:e},complete:function(){s.prop("disabled",!1),t.find(".icon-loading-small").addClass("hidden"),t.find(".icon-edit").show()},error:function(){i.show(),setTimeout(function(){i.hide()},3e3)}})},render:function(){this.$el.find(".has-tooltip").tooltip(),this.password="";var n=this.template(),s=this.model.sharePermissionPossible();if(!s||!this.showLink||!this.configModel.isShareWithLinkAllowed()){var i={shareAllowed:!1};return s||(i.noSharingPlaceholder=t("core","Resharing is not allowed")),this.$el.html(n(i)),this}var l=this.model.isFolder()&&this.model.createPermissionPossible()&&this.configModel.isPublicUploadEnabled(),r="";this.model.isPublicEditingAllowed()&&(r='checked="checked"');var o=this.configModel.get("enforcePasswordForPublicLink"),d=(this.configModel.get("enableLinkPasswordByDefault"),this.configModel.get("enforcePasswordForPublicLink")?e:a),h=!this.model.isFolder()&&this.model.updatePermissionPossible(),c=this.configModel.get("isDefaultExpireDateEnforced"),u=new Date;u.setDate(u.getDate()+1),$.datepicker.setDefaults({minDate:u}),this.$el.find(".datepicker").datepicker({dateFormat:"dd-mm-yy"});var p=4;oc_capabilities.password_policy&&oc_capabilities.password_policy.minLength&&(p=oc_capabilities.password_policy.minLength);var m={urlLabel:t("core","Link"),hideDownloadLabel:t("core","Hide download"),enablePasswordLabel:o?t("core","Password protection enforced"):t("core","Password protect"),passwordLabel:t("core","Password"),passwordPlaceholderInitial:d,publicUpload:l,publicEditing:h,publicEditingChecked:r,publicEditingLabel:t("core","Allow editing"),mailPrivatePlaceholder:t("core","Email link to person"),mailButtonText:t("core","Send"),publicUploadRWLabel:t("core","Allow upload and editing"),publicUploadRLabel:t("core","Read only"),publicUploadWLabel:t("core","File drop (upload only)"),publicUploadRWValue:OC.PERMISSION_UPDATE|OC.PERMISSION_CREATE|OC.PERMISSION_READ|OC.PERMISSION_DELETE,publicUploadRValue:OC.PERMISSION_READ,publicUploadWValue:OC.PERMISSION_CREATE,expireDateLabel:c?t("core","Expiration date enforced"):t("core","Set expiration date"),expirationLabel:t("core","Expiration"),expirationDatePlaceholder:t("core","Expiration date"),isExpirationEnforced:c,isPasswordEnforced:o,defaultExpireDate:moment().add(1,"day").format("DD-MM-YYYY"),addNoteLabel:t("core","Note to recipient"),unshareLabel:t("core","Unshare"),unshareLinkLabel:t("core","Delete share link"),newShareLabel:t("core","Add another link")},f={isPasswordEnforced:o,enforcedPasswordLabel:t("core","Password protection for links is mandatory"),passwordPlaceholder:d,minPasswordLength:p},g=this.pendingPopoverMenuTemplate(_.extend({},f)),v=this.getShareeList();if(_.isArray(v))for(var S=0;S<v.length;S++){var C=[];OC.Share.Social.Collection.each(function(e){var a=e.get("url");a=a.replace("{{reference}}",v[S].shareLinkURL),C.push({url:a,label:t("core","Share to {name}",{name:e.get("name")}),name:e.get("name"),iconClass:e.get("iconClass"),newWindow:e.get("newWindow")})});var w=this.getPopoverObject(v[S]);v[S].popoverMenu=this.popoverMenuTemplate(_.extend({},m,w,{social:C})),v[S].pendingPopoverMenu=g}return this.$el.html(n({linkShares:v,shareAllowed:!0,nolinkShares:0===v.length,newShareLabel:t("core","Share link"),newShareTitle:t("core","New share link"),pendingPopoverMenu:g,showPending:this.showPending===this.newShareId,newShareId:this.newShareId})),this.delegateEvents(),autosize(this.$el.find(".share-note-form .share-note")),this},onToggleMenu:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target).closest("li[data-share-id]"),t=a.find(".sharingOptionsGroup .popovermenu");a.data("share-id");OC.showMenu(null,t);var n=!0===this.configModel.get("enableLinkPasswordByDefault");!(""!==t.find(".linkPassText").val())&&n&&t.find(".linkPassText").focus()},template:function(){return OC.Share.Templates.sharedialoglinkshareview},popoverMenuTemplate:function(e){return OC.Share.Templates.sharedialoglinkshareview_popover_menu(e)},pendingPopoverMenuTemplate:function(e){return OC.Share.Templates.sharedialoglinkshareview_popover_menu_pending(e)},onPopUpClick:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.currentTarget).data("url"),t=$(e.currentTarget).data("window");if($(e.currentTarget).tooltip("hide"),a)if(!0===t){var n=screen.width/2-300,s=screen.height/2-200;window.open(a,"name","width=600, height=400, top="+s+", left="+n)}else window.location.href=a},onExpireDateChange:function(e){var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=$("#expirationDateContainer-"+t),s=a.prop("checked");n.toggleClass("hidden",!s),s?(a.closest("li").next("li").removeClass("hidden"),this.showDatePicker(e)):(a.closest("li").next("li").addClass("hidden"),this.setExpirationDate("",t))},showDatePicker:function(e){var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.data("max-date"),s="#expirationDatePicker-"+t,i=this;$(s).datepicker({dateFormat:"dd-mm-yy",onSelect:function(e){i.setExpirationDate(e,t)},maxDate:n}),$(s).datepicker("show"),$(s).focus()},setExpirationDate:function(e,a){this.model.saveLinkShare({expireDate:e,cid:a})},getShareeList:function(){var e=this.model.get("linkShares");if(!this.model.hasLinkShares())return[];for(var a=[],t=0;t<e.length;t++){var n=this.getShareeObject(t);a.push(_.extend({},n))}return a},getShareeObject:function(e){var a=this.model.get("linkShares")[e];return _.extend({},a,{cid:a.id,shareAllowed:!0,linkShareLabel:a.label?a.label:t("core","Share link"),popoverMenu:{},shareLinkURL:a.url,newShareTitle:t("core","New share link"),copyLabel:t("core","Copy link"),showPending:this.showPending===a.id,linkShareCreationDate:t("core","Created on {time}",{time:moment(1e3*a.stime).format("LLLL")})})},getPopoverObject:function(a){var n="",s="",i="";switch(this.model.linkSharePermissions(a.id)){case OC.PERMISSION_READ:s="checked";break;case OC.PERMISSION_CREATE:i="checked";break;case OC.PERMISSION_UPDATE|OC.PERMISSION_CREATE|OC.PERMISSION_READ|OC.PERMISSION_DELETE:n="checked"}var l,r=!!a.password,o=!0===this.configModel.get("enableLinkPasswordByDefault"),d=this.configModel.get("enforcePasswordForPublicLink"),h=this.configModel.get("isDefaultExpireDateEnforced"),c=this.configModel.get("defaultExpireDate"),u=!!a.expiration||h;u&&(l=moment(a.expiration,"YYYY-MM-DD").format("DD-MM-YYYY"));var p=void 0!==oc_appswebroots.spreed,m=a.sendPasswordByTalk,f=a.hideDownload,g=null;if(u&&h){var v=a.stime;_.isNumber(v)&&(v=new Date(1e3*v)),v||(v=new Date),v=OC.Util.stripTime(v).getTime(),g=new Date(v+24*c*3600*1e3)}return{cid:a.id,shareLinkURL:a.url,passwordPlaceholder:r?"**********":e,isPasswordSet:r||o||d,showPasswordByTalkCheckBox:p&&r,passwordByTalkLabel:t("core","Password protect by Talk"),isPasswordByTalkSet:m,publicUploadRWChecked:n,publicUploadRChecked:s,publicUploadWChecked:i,hasExpireDate:u,expireDate:l,shareNote:a.note,hasNote:""!==a.note,maxDate:g,hideDownload:f,isExpirationEnforced:h}},onUnshare:function(e){e.preventDefault(),e.stopPropagation();var a=this,n=$(e.target);n.is("a")||(n=n.closest("a"));var s=n.find(".icon-loading-small").eq(0);if(!s.hasClass("hidden"))return!1;s.removeClass("hidden");var i=n.closest("li[data-share-id]"),l=i.data("share-id");return a.model.removeShare(l,{success:function(){i.remove(),a.render()},error:function(){s.addClass("hidden"),OC.Notification.showTemporary(t("core","Could not unshare"))}}),!1}});OC.Share.ShareDialogLinkShareView=n}()},function(e,a){!function(){var e=t("core","Choose a password for the mail share");OC.Share||(OC.Share={});var a=OC.Backbone.View.extend({id:"shareDialogLinkShare",configModel:void 0,_menuOpen:!1,_renderPermissionChange:!1,events:{"click .unshare":"onUnshare","click .share-add":"showNoteForm","click .share-note-delete":"deleteNote","click .share-note-submit":"updateNote","click .share-menu .icon-more":"onToggleMenu","click .permissions":"onPermissionChange","click .expireDate":"onExpireDateChange","click .password":"onMailSharePasswordProtectChange","click .passwordByTalk":"onMailSharePasswordProtectByTalkChange","click .secureDrop":"onSecureDropChange","keyup input.passwordField":"onMailSharePasswordKeyUp","focusout input.passwordField":"onMailSharePasswordEntered","change .datepicker":"onChangeExpirationDate","click .datepicker":"showDatePicker"},initialize:function(e){if(_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel;var a=this;this.model.on("change:shares",function(){a.render()})},getShareeObject:function(a){var n=this.model.getShareWith(a),s=this.model.getShareWithDisplayName(a),i=this.model.getShareWithAvatar(a),l="",r=this.model.getShareType(a),o=this.model.getSharedBy(a),d=this.model.getSharedByDisplayName(a),h=this.model.getFileOwnerUid(a);if(r===OC.Share.SHARE_TYPE_GROUP?s=s+" ("+t("core","group")+")":r===OC.Share.SHARE_TYPE_REMOTE?s=s+" ("+t("core","remote")+")":r===OC.Share.SHARE_TYPE_REMOTE_GROUP?s=s+" ("+t("core","remote group")+")":r===OC.Share.SHARE_TYPE_EMAIL?s=s+" ("+t("core","email")+")":r===OC.Share.SHARE_TYPE_CIRCLE||r===OC.Share.SHARE_TYPE_ROOM&&(s=s+" ("+t("core","conversation")+")"),r===OC.Share.SHARE_TYPE_GROUP?l=n+" ("+t("core","group")+")":r===OC.Share.SHARE_TYPE_REMOTE?l=n+" ("+t("core","remote")+")":r===OC.Share.SHARE_TYPE_REMOTE_GROUP?l=n+" ("+t("core","remote group")+")":r===OC.Share.SHARE_TYPE_EMAIL?l=n+" ("+t("core","email")+")":r===OC.Share.SHARE_TYPE_CIRCLE&&(l=n,n="circle-"+a),o!==oc_current_user){var c=""===l;c||(l+=" ("),l+=t("core","shared by {sharer}",{sharer:d}),c||(l+=")")}var u=this.model.get("shares")[a],p=u.password,m=null!==p&&""!==p,f=u.send_password_by_talk,g=this.model.getNote(a);return _.extend({},{cid:this.cid,hasSharePermission:this.model.hasSharePermission(a),editPermissionState:this.model.editPermissionState(a),hasCreatePermission:this.model.hasCreatePermission(a),hasUpdatePermission:this.model.hasUpdatePermission(a),hasDeletePermission:this.model.hasDeletePermission(a),sharedBy:o,sharedByDisplayName:d,shareWith:n,shareWithDisplayName:s,shareWithAvatar:i,shareWithTitle:l,shareType:r,shareId:this.model.get("shares")[a].id,modSeed:i||r!==OC.Share.SHARE_TYPE_USER&&r!==OC.Share.SHARE_TYPE_CIRCLE&&r!==OC.Share.SHARE_TYPE_ROOM,owner:h,isShareWithCurrentUser:r===OC.Share.SHARE_TYPE_USER&&n===oc_current_user,canUpdateShareSettings:o===oc_current_user||h===oc_current_user,isRemoteShare:r===OC.Share.SHARE_TYPE_REMOTE,isRemoteGroupShare:r===OC.Share.SHARE_TYPE_REMOTE_GROUP,isNoteAvailable:r!==OC.Share.SHARE_TYPE_REMOTE&&r!==OC.Share.SHARE_TYPE_REMOTE_GROUP,isMailShare:r===OC.Share.SHARE_TYPE_EMAIL,isCircleShare:r===OC.Share.SHARE_TYPE_CIRCLE,isFileSharedByMail:r===OC.Share.SHARE_TYPE_EMAIL&&!this.model.isFolder(),isPasswordSet:m&&!f,isPasswordByTalkSet:m&&f,isTalkEnabled:void 0!==oc_appswebroots.spreed,secureDropMode:!this.model.hasReadPermission(a),hasExpireDate:null!==this.model.getExpireDate(a),shareNote:g,hasNote:""!==g,expireDate:moment(this.model.getExpireDate(a),"YYYY-MM-DD").format("DD-MM-YYYY"),passwordPlaceholder:m?"**********":e,passwordByTalkPlaceholder:m&&f?"**********":e})},getShareProperties:function(){return{unshareLabel:t("core","Unshare"),addNoteLabel:t("core","Note to recipient"),canShareLabel:t("core","Can reshare"),canEditLabel:t("core","Can edit"),createPermissionLabel:t("core","Can create"),updatePermissionLabel:t("core","Can change"),deletePermissionLabel:t("core","Can delete"),secureDropLabel:t("core","File drop (upload only)"),expireDateLabel:t("core","Set expiration date"),passwordLabel:t("core","Password protect"),passwordByTalkLabel:t("core","Password protect by Talk"),crudsLabel:t("core","Access control"),expirationDatePlaceholder:t("core","Expiration date"),defaultExpireDate:moment().add(1,"day").format("DD-MM-YYYY"),triangleSImage:OC.imagePath("core","actions/triangle-s"),isResharingAllowed:this.configModel.get("isResharingAllowed"),isPasswordForMailSharesRequired:this.configModel.get("isPasswordForMailSharesRequired"),sharePermissionPossible:this.model.sharePermissionPossible(),editPermissionPossible:this.model.editPermissionPossible(),createPermissionPossible:this.model.createPermissionPossible(),updatePermissionPossible:this.model.updatePermissionPossible(),deletePermissionPossible:this.model.deletePermissionPossible(),sharePermission:OC.PERMISSION_SHARE,createPermission:OC.PERMISSION_CREATE,updatePermission:OC.PERMISSION_UPDATE,deletePermission:OC.PERMISSION_DELETE,readPermission:OC.PERMISSION_READ,isFolder:this.model.isFolder()}},getShareeList:function(){var e=this.getShareProperties();if(!this.model.hasUserShares())return[];for(var a=this.model.get("shares"),t=[],n=0;n<a.length;n++){var s=this.getShareeObject(n);s.shareType!==OC.Share.SHARE_TYPE_LINK&&t.push(_.extend({},e,s))}return t},getLinkReshares:function(){var e={unshareLabel:t("core","Unshare")};if(!this.model.hasUserShares())return[];for(var a=this.model.get("shares"),n=[],s=0;s<a.length;s++){var i=this.getShareeObject(s);i.shareType===OC.Share.SHARE_TYPE_LINK&&n.push(_.extend({},e,i,{shareInitiator:a[s].uid_owner,shareInitiatorText:t("core","{shareInitiatorDisplayName} shared via link",{shareInitiatorDisplayName:a[s].displayname_owner})}))}return n},render:function(){if(this._renderPermissionChange){var e=parseInt(this._renderPermissionChange,10),a=this.model.findShareWithIndex(e),t=this.getShareeObject(a);$.extend(t,this.getShareProperties()),this.$("li[data-share-id="+e+"]").find(".sharingOptionsGroup .popovermenu").replaceWith(this.popoverMenuTemplate(t))}else this.$el.html(this.template({cid:this.cid,sharees:this.getShareeList(),linkReshares:this.getLinkReshares()})),this.$(".avatar").each(function(){var e=$(this);e.hasClass("imageplaceholderseed")?(e.css({width:32,height:32}),e.data("avatar")?(e.css("border-radius","0%"),e.css("background","url("+e.data("avatar")+") no-repeat"),e.css("background-size","31px")):e.imageplaceholder(e.data("seed"))):e.avatar(e.data("username"),32,void 0,void 0,void 0,e.data("displayname"))}),this.$(".has-tooltip").tooltip({placement:"bottom"}),this.$("ul.shareWithList > li").each(function(){var e=$(this),a=e.data("share-with"),t=e.data("share-type");e.find("div.avatar, span.username").contactsMenu(a,t,e)});var n=this;if(this.getShareeList().forEach(function(e){var a=n.$("#canEdit-"+n.cid+"-"+e.shareId);1===a.length&&(a.prop("checked","checked"===e.editPermissionState),e.isFolder&&a.prop("indeterminate","indeterminate"===e.editPermissionState))}),this.$(".popovermenu").on("afterHide",function(){n._menuOpen=!1}),this.$(".popovermenu").on("beforeHide",function(){var e=parseInt(n._menuOpen,10);if(!_.isNaN(e)){var a=".expirationDateContainer-"+n.cid+"-"+e,t="#expirationDatePicker-"+n.cid+"-"+e,s="#expireDate-"+n.cid+"-"+e;$(s).prop("checked")&&($(t).removeClass("hidden-visually"),$(a).removeClass("hasDatepicker"),$(a+" .ui-datepicker").hide())}}),!1!==this._menuOpen){var s=parseInt(this._menuOpen,10);if(!_.isNaN(s)){var i="li[data-share-id="+s+"]";OC.showMenu(null,this.$(i+" .sharingOptionsGroup .popovermenu"))}}return this._renderPermissionChange=!1,autosize(this.$el.find(".share-note-form .share-note")),this.delegateEvents(),this},template:function(e){var a=e.sharees;if(_.isArray(a))for(var t=0;t<a.length;t++)e.sharees[t].popoverMenu=this.popoverMenuTemplate(a[t]);return OC.Share.Templates.sharedialogshareelistview(e)},popoverMenuTemplate:function(e){return OC.Share.Templates.sharedialogshareelistview_popover_menu(e)},showNoteForm:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target).closest("li"),t=a.next("li.share-note-form");a.find(".share-note-delete").toggleClass("hidden"),t.toggleClass("hidden"),t.find("textarea").focus()},deleteNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li"),s=n.next("li.share-note-form");console.log(s.find(".share-note")),s.find(".share-note").val(""),s.addClass("hidden"),n.find(".share-note-delete").addClass("hidden"),this.sendNote("",t,n)},updateNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li.share-note-form"),s=n.prev("li"),i=n.find(".share-note").val().trim();i.length<1||this.sendNote(i,t,s)},sendNote:function(e,a,t){var n=t.next("li.share-note-form"),s=n.find("input.share-note-submit"),i=n.find("input.share-note-error");s.prop("disabled",!0),t.find(".icon-loading-small").removeClass("hidden"),t.find(".icon-edit").hide();$.ajax({method:"PUT",url:OC.linkToOCS("apps/files_sharing/api/v1/shares",2)+a+"?"+OC.buildQueryString({format:"json"}),data:{note:e},complete:function(){s.prop("disabled",!1),t.find(".icon-loading-small").addClass("hidden"),t.find(".icon-edit").show()},error:function(){i.show(),setTimeout(function(){i.hide()},3e3)}})},onUnshare:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target);a.is("a")||(a=a.closest("a"));var n=a.find(".icon-loading-small").eq(0);if(!n.hasClass("hidden"))return!1;n.removeClass("hidden");var s=a.closest("li[data-share-id]"),i=s.data("share-id");return this.model.removeShare(i).done(function(){s.remove()}).fail(function(){n.addClass("hidden"),OC.Notification.showTemporary(t("core","Could not unshare"))}),!1},onToggleMenu:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target).closest("li[data-share-id]"),t=a.find(".sharingOptionsGroup .popovermenu");OC.showMenu(null,t),this._menuOpen=a.data("share-id")},onExpireDateChange:function(e){var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=".expirationDateContainer-"+this.cid+"-"+t,s=$(n),i=a.prop("checked");s.toggleClass("hidden",!i),i?(a.closest("li").next("li").removeClass("hidden"),this.showDatePicker(e)):(a.closest("li").next("li").addClass("hidden"),this.setExpirationDate(t,""))},showDatePicker:function(e){var a=$(e.target).closest("li[data-share-id]").data("share-id"),t="#expirationDatePicker-"+this.cid+"-"+a,n=this;$(t).datepicker({dateFormat:"dd-mm-yy",onSelect:function(e){n.setExpirationDate(a,e)}}),$(t).focus()},setExpirationDate:function(e,a){this.model.updateShare(e,{expireDate:a},{})},onMailSharePasswordProtectChange:function(a){var t=$(a.target),n=t.closest("li[data-share-id]").data("share-id"),s=".passwordMenu-"+this.cid+"-"+n,i=$(s),l=this.$el.find(s+" .icon-loading-small"),r="#passwordField-"+this.cid+"-"+n,o=$(r),d=t.prop("checked"),h=$("#passwordByTalk-"+this.cid+"-"+n),c=h.prop("checked");if(d||c){if(d){if(c){this.model.updateShare(n,{sendPasswordByTalk:!1});var u=".passwordByTalkMenu-"+this.cid+"-"+n;$(u).addClass("hidden"),h.prop("checked",!1)}i.toggleClass("hidden",!d),o="#passwordField-"+this.cid+"-"+n,this.$(o).focus()}}else this.model.updateShare(n,{password:"",sendPasswordByTalk:!1}),o.attr("value",""),o.removeClass("error"),o.tooltip("hide"),l.addClass("hidden"),o.attr("placeholder",e),i.toggleClass("hidden",!d)},onMailSharePasswordProtectByTalkChange:function(a){var t=$(a.target),n=t.closest("li[data-share-id]").data("share-id"),s=".passwordByTalkMenu-"+this.cid+"-"+n,i=$(s),l=this.$el.find(s+" .icon-loading-small"),r="#passwordByTalkField-"+this.cid+"-"+n,o=$(r),d=t.prop("checked"),h=$("#password-"+this.cid+"-"+n),c=h.prop("checked");if(d){if(d){if(c){var u=".passwordMenu-"+this.cid+"-"+n;$(u).addClass("hidden"),h.prop("checked",!1)}i.toggleClass("hidden",!d),o="#passwordByTalkField-"+this.cid+"-"+n,this.$(o).focus()}}else this.model.updateShare(n,{password:"",sendPasswordByTalk:!1}),o.attr("value",""),o.removeClass("error"),o.tooltip("hide"),l.addClass("hidden"),o.attr("placeholder",e),i.toggleClass("hidden",!d)},onMailSharePasswordKeyUp:function(e){13===e.keyCode&&this.onMailSharePasswordEntered(e)},onMailSharePasswordEntered:function(a){var t,n=$(a.target),s=n.closest("li[data-share-id]").data("share-id"),i=".passwordMenu-"+this.cid+"-"+s,l=".passwordByTalkMenu-"+this.cid+"-"+s,r=n.attr("id").startsWith("passwordByTalk");if((t=r?this.$el.find(l+" .icon-loading-small"):this.$el.find(i+" .icon-loading-small")).hasClass("hidden")){n.removeClass("error");var o=n.val();""!==o&&"**********"!==o&&o!==e&&(t.removeClass("hidden").addClass("inlineblock"),this.model.updateShare(s,{password:o,sendPasswordByTalk:r},{error:function(e,a){n.tooltip("destroy"),t.removeClass("inlineblock").addClass("hidden"),n.addClass("error"),n.attr("title",a),n.tooltip({placement:"bottom",trigger:"manual"}),n.tooltip("show")},success:function(e,a){n.blur(),n.attr("value",""),n.attr("placeholder","**********"),t.removeClass("inlineblock").addClass("hidden")}}))}},onPermissionChange:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),n=a.closest("li[data-share-id]"),s=n.data("share-id"),i=OC.PERMISSION_READ;if(this.model.isFolder()){var l,r=$(".permissions",n).not('input[name="edit"]').not('input[name="share"]');if("edit"===a.attr("name"))l=a.is(":checked"),$(r).prop("checked",l),l&&(i|=OC.PERMISSION_CREATE|OC.PERMISSION_UPDATE|OC.PERMISSION_DELETE);else{var o=r.filter(":checked").length;l=o===r.length;var d=$('input[name="edit"]',n);d.prop("checked",l),d.prop("indeterminate",!l&&o>0)}}else"edit"===a.attr("name")&&a.is(":checked")&&(i|=OC.PERMISSION_UPDATE);$(".permissions",n).not('input[name="edit"]').filter(":checked").each(function(e,a){i|=$(a).data("permissions")}),n.find("input[type=checkbox]").prop("disabled",!0);var h=function(){n.find("input[type=checkbox]").prop("disabled",!1)};this.model.updateShare(s,{permissions:i},{error:function(e,a){OC.dialogs.alert(a,t("core","Error while sharing")),h()},success:h}),this._renderPermissionChange=s},onSecureDropChange:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),n=a.closest("li[data-share-id]"),s=n.data("share-id"),i=OC.PERMISSION_CREATE|OC.PERMISSION_UPDATE|OC.PERMISSION_DELETE|OC.PERMISSION_READ;a.is(":checked")&&(i=OC.PERMISSION_CREATE|OC.PERMISSION_UPDATE|OC.PERMISSION_DELETE),n.find("input[type=checkbox]").prop("disabled",!0);var l=function(){n.find("input[type=checkbox]").prop("disabled",!1)};this.model.updateShare(s,{permissions:i},{error:function(e,a){OC.dialogs.alert(a,t("core","Error while sharing")),l()},success:l}),this._renderPermissionChange=s}});OC.Share.ShareDialogShareeListView=a}()},function(e,a){!function(){OC.Share||(OC.Share={});var e=OC.Backbone.View.extend({_templates:{},_showLink:!0,tagName:"div",configModel:void 0,resharerInfoView:void 0,linkShareView:void 0,shareeListView:void 0,_lastSuggestions:void 0,_pendingOperationsCount:0,events:{"focus .shareWithField":"onShareWithFieldFocus","input .shareWithField":"onShareWithFieldChanged","click .shareWithConfirm":"_confirmShare"},initialize:function(e){var a=this;if(this.model.on("fetchError",function(){OC.Notification.showTemporary(t("core","Share details could not be loaded for this item."))}),_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel,this.configModel.on("change:isRemoteShareAllowed",function(){a.render()}),this.configModel.on("change:isRemoteGroupShareAllowed",function(){a.render()}),this.model.on("change:permissions",function(){a.render()}),this.model.on("request",this._onRequest,this),this.model.on("sync",this._onEndRequest,this);var n={model:this.model,configModel:this.configModel},s={resharerInfoView:"ShareDialogResharerInfoView",linkShareView:"ShareDialogLinkShareView",shareeListView:"ShareDialogShareeListView"};for(var i in s){var l=s[i];this[i]=_.isUndefined(e[i])?new OC.Share[l](n):e[i]}_.bindAll(this,"autocompleteHandler","_onSelectRecipient","onShareWithFieldChanged","onShareWithFieldFocus"),OC.Plugins.attach("OC.Share.ShareDialogView",this)},onShareWithFieldChanged:function(){var e=this.$el.find(".shareWithField");e.val().length<2&&e.removeClass("error").tooltip("hide")},onShareWithFieldFocus:function(){this.$el.find(".shareWithField").autocomplete("search")},_getSuggestions:function(e,a,t){if(this._lastSuggestions&&this._lastSuggestions.searchTerm===e&&this._lastSuggestions.perPage===a&&this._lastSuggestions.model===t)return this._lastSuggestions.promise;var n=$.Deferred();return $.get(OC.linkToOCS("apps/files_sharing/api/v1")+"sharees",{format:"json",search:e,perPage:a,itemType:t.get("itemType")},function(s){if(100===s.ocs.meta.statuscode){var i=function(e,a,n,s,i,l,r){var o,d,h,c,u,p,m,f,g;for(void 0===i&&(i=[]),void 0===l&&(l=[]),void 0===r&&(r=[]),o=e.length,f=0;f<o;f++)if(e[f].value.shareWith===OC.currentUser){e.splice(f,1);break}if(t.hasReshare())for(o=e.length,f=0;f<o;f++)if(e[f].value.shareWith===t.getReshareOwner()){e.splice(f,1);break}var v=t.get("shares"),S=v.length;for(f=0;f<S;f++){var C=v[f];if(C.share_type===OC.Share.SHARE_TYPE_USER){for(o=e.length,g=0;g<o;g++)if(e[g].value.shareWith===C.share_with){e.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_GROUP){for(d=a.length,g=0;g<d;g++)if(a[g].value.shareWith===C.share_with){a.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_REMOTE){for(h=n.length,g=0;g<h;g++)if(n[g].value.shareWith===C.share_with){n.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_REMOTE_GROUP){for(c=s.length,g=0;g<c;g++)if(s[g].value.shareWith===C.share_with){s.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_EMAIL){for(u=i.length,g=0;g<u;g++)if(i[g].value.shareWith===C.share_with){i.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_CIRCLE){for(p=l.length,g=0;g<p;g++)if(l[g].value.shareWith===C.share_with){l.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_ROOM)for(m=r.length,g=0;g<m;g++)if(r[g].value.shareWith===C.share_with){r.splice(g,1);break}}};i(s.ocs.data.exact.users,s.ocs.data.exact.groups,s.ocs.data.exact.remotes,s.ocs.data.exact.remote_groups,s.ocs.data.exact.emails,s.ocs.data.exact.circles,s.ocs.data.exact.rooms);var l=s.ocs.data.exact.users,r=s.ocs.data.exact.groups,o=s.ocs.data.exact.remotes,d=s.ocs.data.exact.remote_groups,h=[];void 0!==s.ocs.data.emails&&(h=s.ocs.data.exact.emails);var c=[];void 0!==s.ocs.data.circles&&(c=s.ocs.data.exact.circles);var u=[];void 0!==s.ocs.data.rooms&&(u=s.ocs.data.exact.rooms);var p=l.concat(r).concat(o).concat(d).concat(h).concat(c).concat(u);i(s.ocs.data.users,s.ocs.data.groups,s.ocs.data.remotes,s.ocs.data.remote_groups,s.ocs.data.emails,s.ocs.data.circles,s.ocs.data.rooms);var m=s.ocs.data.users,f=s.ocs.data.groups,g=s.ocs.data.remotes,v=s.ocs.data.remote_groups,S=s.ocs.data.lookup,C=[];void 0!==s.ocs.data.emails&&(C=s.ocs.data.emails);var w=[];void 0!==s.ocs.data.circles&&(w=s.ocs.data.circles);var b=[];void 0!==s.ocs.data.rooms&&(b=s.ocs.data.rooms);for(var P=p.concat(m).concat(f).concat(g).concat(v).concat(C).concat(w).concat(b).concat(S).sort((x="uuid",function(e,a){var t="",n="";return void 0!==e[x]&&(t=e[x]),void 0!==a[x]&&(n=a[x]),t<n?-1:t>n?1:0})),E=null,_=P.length,k=(s=[],0);k<_;k++)void 0!==P[k].uuid&&P[k].uuid===E&&(P[k].merged=!0),e!==P[k].name&&void 0!==P[k].merged||s.push(P[k]),E=P[k].uuid;var O=oc_config["sharing.maxAutocompleteResults"]>0&&Math.min(a,oc_config["sharing.maxAutocompleteResults"])<=Math.max(m.length+l.length,f.length+r.length,v.length+d.length,g.length+o.length,C.length+h.length,w.length+c.length,b.length+u.length,S.length);n.resolve(s,p,O)}else n.reject(s.ocs.meta.message);var x}).fail(function(){n.reject()}),this._lastSuggestions={searchTerm:e,perPage:a,model:t,promise:n.promise()},this._lastSuggestions.promise},autocompleteHandler:function(e,a){var s=$(".shareWithField"),i=this,l=this.$el.find(".shareWithLoading"),r=this.$el.find(".shareWithConfirm"),o=oc_config["sharing.minSearchStringLength"];if(e.term.trim().length<o){var d=n("core","At least {count} character is needed for autocompletion","At least {count} characters are needed for autocompletion",o,{count:o});return s.addClass("error").attr("data-original-title",d).tooltip("hide").tooltip({placement:"bottom",trigger:"manual"}).tooltip("fixTitle").tooltip("show"),void a()}l.removeClass("hidden"),l.addClass("inlineblock"),r.addClass("hidden"),this._pendingOperationsCount++,s.removeClass("error").tooltip("hide");var h=parseInt(oc_config["sharing.maxAutocompleteResults"],10)||200;this._getSuggestions(e.term.trim(),h,i.model).done(function(e,n,o){if(i._pendingOperationsCount--,0===i._pendingOperationsCount&&(l.addClass("hidden"),l.removeClass("inlineblock"),r.removeClass("hidden")),e.length>0){if(s.autocomplete("option","autoFocus",!0),a(e),o){var d=t("core","This list is maybe truncated - please refine your search term to see more results.");$(".ui-autocomplete").append('<li class="autocomplete-note">'+d+"</li>")}}else{var h=t("core","No users or groups found for {search}",{search:s.val()});i.configModel.get("allowGroupSharing")||(h=t("core","No users found for {search}",{search:$(".shareWithField").val()})),s.addClass("error").attr("data-original-title",h).tooltip("hide").tooltip({placement:"bottom",trigger:"manual"}).tooltip("fixTitle").tooltip("show"),a()}}).fail(function(e){i._pendingOperationsCount--,0===i._pendingOperationsCount&&(l.addClass("hidden"),l.removeClass("inlineblock"),r.removeClass("hidden")),e?OC.Notification.showTemporary(t("core",'An error occurred ("{message}"). Please try again',{message:e})):OC.Notification.showTemporary(t("core","An error occurred. Please try again"))})},autocompleteRenderItem:function(e,a){var n="icon-user",s=escapeHTML(a.label),i="",l="";void 0!==a.type&&null!==a.type&&(l=function(e){switch(e){case"HOME":return t("core","Home");case"WORK":return t("core","Work");case"OTHER":return t("core","Other");default:return""+e}}(a.type)+" "),void 0!==a.name&&(s=escapeHTML(a.name)),a.value.shareType===OC.Share.SHARE_TYPE_GROUP?n="icon-contacts-dark":a.value.shareType===OC.Share.SHARE_TYPE_REMOTE?(n="icon-shared",i+=a.value.shareWith):a.value.shareType===OC.Share.SHARE_TYPE_REMOTE_GROUP?(s=t("core","{sharee} (remote group)",{sharee:s},void 0,{escape:!1}),n="icon-shared",i+=a.value.shareWith):a.value.shareType===OC.Share.SHARE_TYPE_EMAIL?(n="icon-mail",i+=a.value.shareWith):a.value.shareType===OC.Share.SHARE_TYPE_CIRCLE?(s=t("core","{sharee} ({type}, {owner})",{sharee:s,type:a.value.circleInfo,owner:a.value.circleOwner},void 0,{escape:!1}),n="icon-circle"):a.value.shareType===OC.Share.SHARE_TYPE_ROOM&&(n="icon-talk");var r=$("<div class='share-autocomplete-item'/>");if(a.merged)r.addClass("merged"),s=a.value.shareWith,i=l;else{var o=$("<div class='avatardiv'></div>").appendTo(r);a.value.shareType===OC.Share.SHARE_TYPE_USER||a.value.shareType===OC.Share.SHARE_TYPE_CIRCLE?o.avatar(a.value.shareWith,32,void 0,void 0,void 0,a.label):(void 0===a.uuid&&(a.uuid=s),o.imageplaceholder(a.uuid,s,32)),i=l+i}return""!==i&&r.addClass("with-description"),$("<div class='autocomplete-item-text'></div>").html(s.replace(new RegExp(this.term,"gi"),"<span class='ui-state-highlight'>$&</span>")+'<span class="autocomplete-item-details">'+i+"</span>").appendTo(r),r.attr("title",a.value.shareWith),r.append('<span class="icon '+n+'" title="'+s+'"></span>'),r=$("<a>").append(r),$("<li>").addClass(a.value.shareType===OC.Share.SHARE_TYPE_GROUP?"group":"user").append(r).appendTo(e)},_onSelectRecipient:function(e,a){var t=this;if(9==e.keyCode)return e.preventDefault(),void 0!==a.item.name?e.target.value=a.item.name:e.target.value=a.item.label,setTimeout(function(){$(e.target).attr("disabled",!1).autocomplete("search",$(e.target).val())},0),!1;e.preventDefault(),e.stopImmediatePropagation(),$(e.target).attr("disabled",!0).val(a.item.label);var n=this.$el.find(".shareWithLoading"),s=this.$el.find(".shareWithConfirm");n.removeClass("hidden"),n.addClass("inlineblock"),s.addClass("hidden"),this._pendingOperationsCount++,this.model.addShare(a.item.value,{success:function(){t._lastSuggestions=void 0,$(e.target).val("").attr("disabled",!1),t._pendingOperationsCount--,0===t._pendingOperationsCount&&(n.addClass("hidden"),n.removeClass("inlineblock"),s.removeClass("hidden"))},error:function(a,i){OC.Notification.showTemporary(i),$(e.target).attr("disabled",!1).autocomplete("search",$(e.target).val()),t._pendingOperationsCount--,0===t._pendingOperationsCount&&(n.addClass("hidden"),n.removeClass("inlineblock"),s.removeClass("hidden"))}})},_confirmShare:function(){var e=this,a=$(".shareWithField"),t=this.$el.find(".shareWithLoading"),n=this.$el.find(".shareWithConfirm");t.removeClass("hidden"),t.addClass("inlineblock"),n.addClass("hidden"),this._pendingOperationsCount++,a.prop("disabled",!0),a.autocomplete("close"),a.autocomplete("disable");var s=function(){e._pendingOperationsCount--,0===e._pendingOperationsCount&&(t.addClass("hidden"),t.removeClass("inlineblock"),n.removeClass("hidden")),a.prop("disabled",!1),a.focus()},i=parseInt(oc_config["sharing.maxAutocompleteResults"],10)||200;this._getSuggestions(a.val(),i,this.model,!0).done(function(t,n){if(0===t.length)return s(),void a.autocomplete("enable");if(1!==n.length)return s(),void a.autocomplete("enable");e.model.addShare(n[0].value,{success:function(){e._lastSuggestions=void 0,a.val(""),s(),a.autocomplete("enable")},error:function(e,t){s(),a.autocomplete("enable"),OC.Notification.showTemporary(t)}})}).fail(function(e){s(),a.autocomplete("enable")})},_toggleLoading:function(e){this._loading=e,this.$el.find(".subView").toggleClass("hidden",e),this.$el.find(".loading").toggleClass("hidden",!e)},_onRequest:function(){this._loadingOnce||this._toggleLoading(!0)},_onEndRequest:function(){var e=this;this._toggleLoading(!1),this._loadingOnce||(this._loadingOnce=!0,OC.Util.isIE()||_.defer(function(){e.$(".shareWithField").focus()}))},render:function(){var e=this,a=OC.Share.Templates.sharedialogview;this.$el.html(a({cid:this.cid,shareLabel:t("core","Share"),sharePlaceholder:this._renderSharePlaceholderPart(),isSharingAllowed:this.model.sharePermissionPossible()}));var n=this.$el.find(".shareWithField");if(n.length){n.autocomplete({minLength:1,delay:750,focus:function(e){e.preventDefault()},source:this.autocompleteHandler,select:this._onSelectRecipient,open:function(){var e=$(this).autocomplete("widget"),a=e.find("li").size();e.removeClass("item-count-1"),e.removeClass("item-count-2"),a<=2&&e.addClass("item-count-"+a)}}).data("ui-autocomplete")._renderItem=this.autocompleteRenderItem,n.on("keydown",null,function(a){return 13!==a.keyCode||(e._confirmShare(),!1)})}return this.resharerInfoView.$el=this.$el.find(".resharerInfoView"),this.resharerInfoView.render(),this.linkShareView.$el=this.$el.find(".linkShareView"),this.linkShareView.render(),this.shareeListView.$el=this.$el.find(".shareeListView"),this.shareeListView.render(),this.$el.find(".hasTooltip").tooltip(),this},setShowLink:function(e){this._showLink="boolean"!=typeof e||e,this.linkShareView.showLink=this._showLink},_renderSharePlaceholderPart:function(){var e=this.configModel.get("isRemoteShareAllowed"),a=this.configModel.get("isMailShareAllowed");return!e&&a?t("core","Name or email address..."):e&&!a?t("core","Name or federated cloud ID..."):e&&a?t("core","Name, federated cloud ID or email address..."):t("core","Name...")}});OC.Share.ShareDialogView=e}()},function(e,a){OC.Share=_.extend(OC.Share||{},{SHARE_TYPE_USER:0,SHARE_TYPE_GROUP:1,SHARE_TYPE_LINK:3,SHARE_TYPE_EMAIL:4,SHARE_TYPE_REMOTE:6,SHARE_TYPE_CIRCLE:7,SHARE_TYPE_GUEST:8,SHARE_TYPE_REMOTE_GROUP:9,SHARE_TYPE_ROOM:10,_REMOTE_OWNER_REGEXP:new RegExp("^([^@]*)@(([^@]*)@)?([^/]*)([/](.*)?)?$"),itemShares:[],statuses:{},currentShares:{},droppedDown:!1,loadIcons:function(e,a,t){var n=a.dirInfo.path;"/"===n&&(n=""),n+="/"+a.dirInfo.name,$.get(OC.linkToOCS("apps/files_sharing/api/v1",2)+"shares",{subfiles:"true",path:n,format:"json"},function(n){n&&200===n.ocs.meta.statuscode&&(OC.Share.statuses={},$.each(n.ocs.data,function(e,a){a.item_source in OC.Share.statuses||(OC.Share.statuses[a.item_source]={link:!1}),a.share_type===OC.Share.SHARE_TYPE_LINK&&(OC.Share.statuses[a.item_source]={link:!0})}),_.isFunction(t)?t(OC.Share.statuses):OC.Share.updateIcons(e,a))})},updateIcons:function(e,a){var n,s,i;for(n in!a&&OCA.Files&&(a=OCA.Files.App.fileList),a&&(s=a.$fileList,i=a.getCurrentDirectory()),OC.Share.statuses){var l="icon-shared",r=OC.Share.statuses[n],o=r.link;if(o&&(l="icon-public"),"file"!==e&&"folder"!==e)$('a.share[data-item="'+n+'"] .icon').removeClass("icon-shared icon-public").addClass(l);else{var d,h=s.find('tr[data-id="'+n+'"]'),c=OC.imagePath("core","filetypes/folder-shared");if(h.length>0)this.markFileAsShared(h,!0,o);else{var u=i;if(u.length>1)for(var p="",m=u;m!=p;){if(m===r.path&&!r.link){var f,g=s.find('.fileactions .action[data-action="Share"]'),v=s.find(".filename");for(f=0;f<g.length;f++)(d=$(g[f]).find("img")).attr("src")!==OC.imagePath("core","actions/public")&&(d.attr("src",image),$(g[f]).addClass("permanent"),$(g[f]).html("<span> "+t("core","Shared")+"</span>").prepend(d));for(f=0;f<v.length;f++)"dir"===$(v[f]).closest("tr").data("type")&&$(v[f]).find(".thumbnail").css("background-image","url("+c+")")}p=m,m=OC.Share.dirname(m)}}}}},updateIcon:function(e,a){var t=!1,n=!1,s="";if($.each(OC.Share.itemShares,function(e){if(OC.Share.itemShares[e])if(e==OC.Share.SHARE_TYPE_LINK){if(1==OC.Share.itemShares[e])return t=!0,s="icon-public",void(n=!0)}else OC.Share.itemShares[e].length>0&&(t=!0,s="icon-shared")}),"file"!=e&&"folder"!=e)$('a.share[data-item="'+a+'"] .icon').removeClass("icon-shared icon-public").addClass(s);else{var i=$("tr").filterAttr("data-id",String(a));i.length>0&&i.each(function(){OC.Share.markFileAsShared($(this),t,n)})}t?(OC.Share.statuses[a]=OC.Share.statuses[a]||{},OC.Share.statuses[a].link=n):delete OC.Share.statuses[a]},_formatRemoteShare:function(e,a,t){var n=this._REMOTE_OWNER_REGEXP.exec(e);if(!n)return'<span class="avatar" data-username="'+escapeHTML(e)+'" title="'+t+" "+escapeHTML(a)+'"></span>'+('<span class="hidden-visually">'+t+" "+escapeHTML(a)+"</span> ");var s=n[1],i=n[3],l=n[4],r=t+" "+s;i&&(r+="@"+i),l&&(i||(i="…"),r+="@"+l);var o='<span class="remoteAddress" title="'+escapeHTML(r)+'">';return o+='<span class="username">'+escapeHTML(s)+"</span>",i&&(o+='<span class="userDomain">@'+escapeHTML(i)+"</span>"),o+="</span> "},_formatShareList:function(e){var a=this;return(e=_.toArray(e)).sort(function(e,a){return e.shareWithDisplayName.localeCompare(a.shareWithDisplayName)}),$.map(e,function(e){return a._formatRemoteShare(e.shareWith,e.shareWithDisplayName,t("core","Shared with"))})},markFileAsShared:function(e,a,n){var s,i,l,r,o=e.find('.fileactions .action[data-action="Share"]'),d=e.data("type"),h=o.find(".icon"),c=e.attr("data-share-owner-id"),u=e.attr("data-share-owner"),p="icon-shared";if(o.removeClass("shared-style"),"dir"===d&&(a||n||c))r=n?OC.MimeType.getIconUrl("dir-public"):OC.MimeType.getIconUrl("dir-shared"),e.find(".filename .thumbnail").css("background-image","url("+r+")"),e.attr("data-icon",r);else if("dir"===d){var m=e.attr("data-e2eencrypted"),f=e.attr("data-mounttype");"true"===m?(r=OC.MimeType.getIconUrl("dir-encrypted"),e.attr("data-icon",r)):f&&0===f.indexOf("external")?(r=OC.MimeType.getIconUrl("dir-external"),e.attr("data-icon",r)):(r=OC.MimeType.getIconUrl("dir"),e.removeAttr("data-icon")),e.find(".filename .thumbnail").css("background-image","url("+r+")")}a||c?(i=e.data("share-recipient-data"),o.addClass("shared-style"),l="<span>"+t("core","Shared")+"</span>",c?(s=t("core","Shared by"),l=this._formatRemoteShare(c,u,s)):i&&(l=this._formatShareList(i)),o.html(l).prepend(h),(c||i)&&(o.find(".avatar").each(function(){$(this).avatar($(this).data("username"),32)}),o.find("span[title]").tooltip({placement:"top"}))):o.html('<span class="hidden-visually">'+t("core","Shared")+"</span>").prepend(h);n&&(p="icon-public"),h.removeClass("icon-shared icon-public").addClass(p)},showDropDown:function(e,a,t,n,s,i){var l=new OC.Share.ShareConfigModel,r={itemType:e,itemSource:a,possiblePermissions:s},o=new OC.Share.ShareItemModel(r,{configModel:l}),d=new OC.Share.ShareDialogView({id:"dropdown",model:o,configModel:l,className:"drop shareDropDown",attributes:{"data-item-source-name":i,"data-item-type":e,"data-item-source":a}});d.setShowLink(n);var h=d.render().$el;h.appendTo(t),h.slideDown(OC.menuSpeed,function(){OC.Share.droppedDown=!0}),o.fetch()},hideDropDown:function(e){OC.Share.currentShares=null,$("#dropdown").slideUp(OC.menuSpeed,function(){OC.Share.droppedDown=!1,$("#dropdown").remove(),"undefined"!=typeof FileActions&&$("tr").removeClass("mouseOver"),e&&e.call()})},dirname:function(e){return e.replace(/\\/g,"/").replace(/\/[^\/]*$/,"")}}),$(document).ready(function(){if("undefined"!=typeof monthNames){var e=new Date;e.setDate(e.getDate()+1),$.datepicker.setDefaults({monthNames:monthNames,monthNamesShort:monthNamesShort,dayNames:dayNames,dayNamesMin:dayNamesMin,dayNamesShort:dayNamesShort,firstDay:firstDay,minDate:e})}$(this).click(function(e){var a=$(e.target),t=!a.is(".drop, .ui-datepicker-next, .ui-datepicker-prev, .ui-icon")&&!a.closest("#ui-datepicker-div").length&&!a.closest(".ui-autocomplete").length;OC.Share&&OC.Share.droppedDown&&t&&0===$("#dropdown").has(e.target).length&&OC.Share.hideDropDown()})})}]);
+!function(){OC.Share||(OC.Share={}),OC.Share.Social={};var e=OC.Backbone.Model.extend({defaults:{key:null,url:null,name:null,iconClass:null,newWindow:!0}});OC.Share.Social.Model=e;var a=OC.Backbone.Collection.extend({model:OC.Share.Social.Model,comparator:"key"});OC.Share.Social.Collection=new a}()},function(e,a){!function(){OC.Share||(OC.Share={});var e=OC.Backbone.View.extend({id:"shareDialogResharerInfo",tagName:"div",className:"reshare",configModel:void 0,_template:void 0,initialize:function(e){var a=this;if(this.model.on("change:reshare",function(){a.render()}),_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel},render:function(){if(!this.model.hasReshare()||this.model.getReshareOwner()===OC.currentUser)return this.$el.empty(),this;var e=this.template(),a=this.model.getReshareOwnerDisplayname(),n=this.model.getReshareNote(),s="";return s=this.model.getReshareType()===OC.Share.SHARE_TYPE_GROUP?t("core","Shared with you and the group {group} by {owner}",{group:this.model.getReshareWithDisplayName(),owner:a},void 0,{escape:!1}):this.model.getReshareType()===OC.Share.SHARE_TYPE_CIRCLE?t("core","Shared with you and {circle} by {owner}",{circle:this.model.getReshareWithDisplayName(),owner:a},void 0,{escape:!1}):this.model.getReshareType()===OC.Share.SHARE_TYPE_ROOM?this.model.get("reshare").share_with_displayname?t("core","Shared with you and the conversation {conversation} by {owner}",{conversation:this.model.getReshareWithDisplayName(),owner:a},void 0,{escape:!1}):t("core","Shared with you in a conversation by {owner}",{owner:a},void 0,{escape:!1}):t("core","Shared with you by {owner}",{owner:a},void 0,{escape:!1}),this.$el.html(e({reshareOwner:this.model.getReshareOwner(),sharedByText:s,shareNote:n,hasShareNote:""!==n})),this.$el.find(".avatar").each(function(){var e=$(this);e.avatar(e.data("username"),32)}),this.$el.find(".reshare").contactsMenu(this.model.getReshareOwner(),OC.Share.SHARE_TYPE_USER,this.$el),this},template:function(){return OC.Share.Templates.sharedialogresharerinfoview}});OC.Share.ShareDialogResharerInfoView=e}()},function(e,a){!function(){OC.Share||(OC.Share={});var e=t("core","Choose a password for the public link"),a=t("core",'Choose a password for the public link or press the "Enter" key'),n=OC.Backbone.View.extend({id:"shareDialogLinkShare",configModel:void 0,showLink:!0,showPending:!1,password:"",newShareId:"new-share",events:{"click .share-menu .icon-more":"onToggleMenu","change .hideDownloadCheckbox":"onHideDownloadChange","click input.share-pass-submit":"onPasswordEntered","keyup input.linkPassText":"onPasswordKeyUp","change .showPasswordCheckbox":"onShowPasswordClick","change .passwordByTalkCheckbox":"onPasswordByTalkChange","change .publicEditingCheckbox":"onAllowPublicEditingChange","click .linkText":"onLinkTextClick","click .pop-up":"onPopUpClick","change .publicUploadRadio":"onPublicUploadChange","click .expireDate":"onExpireDateChange","change .datepicker":"onChangeExpirationDate","click .datepicker":"showDatePicker","click .share-add":"showNoteForm","click .share-note-delete":"deleteNote","click .share-note-submit":"updateNote","click .unshare":"onUnshare","click .new-share":"newShare","submit .enforcedPassForm":"enforcedPasswordSet"},initialize:function(e){var a=this;if(this.model.on("change:permissions",function(){a.render()}),this.model.on("change:itemType",function(){a.render()}),this.model.on("change:allowPublicUploadStatus",function(){a.render()}),this.model.on("change:hideFileListStatus",function(){a.render()}),this.model.on("change:linkShares",function(e,t){var n,s=e.previous("linkShares");if(s.length===t.length)for(n=0;n<t.length;n++){if(t[n].id!==s[n].id)return;if(t[n].password!==s[n].password)return void a.render()}}),_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel;var n=new Clipboard(".clipboard-button");n.on("success",function(e){var a=$(e.trigger);a.tooltip("hide").attr("data-original-title",t("core","Copied!")).tooltip("fixTitle").tooltip({placement:"bottom",trigger:"manual"}).tooltip("show"),_.delay(function(){a.tooltip("hide").attr("data-original-title",t("core","Copy link")).tooltip("fixTitle")},3e3)}),n.on("error",function(e){var a=$(e.trigger),n=a.next(".share-menu").find(".popovermenu"),s=n.find("li.linkTextMenu"),i=s.find(".linkText");a.closest("li[data-share-id]").data("share-id");OC.showMenu(null,n);var l="";l=/iPhone|iPad/i.test(navigator.userAgent)?t("core","Not supported!"):/Mac/i.test(navigator.userAgent)?t("core","Press ⌘-C to copy."):t("core","Press Ctrl-C to copy."),s.removeClass("hidden"),i.select(),i.tooltip("hide").attr("data-original-title",l).tooltip("fixTitle").tooltip({placement:"bottom",trigger:"manual"}).tooltip("show"),_.delay(function(){i.tooltip("hide"),i.attr("data-original-title",t("core","Copy")).tooltip("fixTitle")},3e3)})},newShare:function(e){var a=this,n=$(e.target).closest("li[data-share-id]"),s=n.data("share-id"),i=n.find(".share-menu > .icon-loading-small");if(!i.hasClass("hidden")&&""===this.password)return!1;n.find(".icon").addClass("hidden"),i.removeClass("hidden"),OC.hideMenus();var l={},r=this.configModel.get("enforcePasswordForPublicLink");if(this.configModel.get("isDefaultExpireDateEnforced")){var o=this.configModel.get("defaultExpireDate"),d=moment().add(o,"day").format("DD-MM-YYYY");l.expireDate=d}r&&""!==this.password&&(l.password=this.password);var h=!1;r&&!this.showPending&&""===this.password?(this.showPending=s,(a=this.render()).$el.find(".pending #enforcedPassText").focus()):$.when(this.model.saveLinkShare(l,{success:function(){if(i.addClass("hidden"),n.find(".icon").removeClass("hidden"),a.render(),h){var e=a.$el.find("li[data-share-id]"),t=a.$el.find('li[data-share-id="'+h+'"]');if(t&&1===e.length){var s=t.find(".popovermenu");OC.showMenu(null,s)}}},error:function(){}})).fail(function(e){if(a.password="",r&&e&&e.responseJSON&&e.responseJSON.ocs.meta&&e.responseJSON.ocs.meta.message){var s=a.$el.find(".pending #enforcedPassText");s.tooltip("destroy"),s.attr("title",e.responseJSON.ocs.meta.message),s.tooltip({placement:"bottom",trigger:"manual"}),s.tooltip("show")}else OC.Notification.showTemporary(t("core","Unable to create a link share")),i.addClass("hidden"),n.find(".icon").removeClass("hidden")}).then(function(e){h=e.ocs.data.id})},enforcedPasswordSet:function(e){e.preventDefault();var a=$(e.target).find("input.enforcedPassText");this.password=a.val(),this.showPending=!1,this.newShare(e)},onLinkTextClick:function(e){var a=$(e.target).closest("li[data-share-id]").find(".linkText");a.focus(),a.select()},onHideDownloadChange:function(e){var a=$(e.target).closest("li[data-share-id]"),n=a.data("share-id"),s=a.find(".hideDownloadCheckbox");s.siblings(".icon-loading-small").removeClass("hidden").addClass("inlineblock");var i=!1;s.is(":checked")&&(i=!0),this.model.saveLinkShare({hideDownload:i,cid:n},{success:function(){s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")},error:function(e,a){OC.Notification.showTemporary(t("core","Unable to toggle this option")),s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")}})},onShowPasswordClick:function(e){var a=$(e.target).closest("li[data-share-id]"),t=a.data("share-id");a.find(".linkPass").slideToggle(OC.menuSpeed),a.find(".linkPassMenu").toggleClass("hidden"),a.find(".showPasswordCheckbox").is(":checked")?OC.Util.isIE()||a.find(".linkPassText").focus():this.model.saveLinkShare({password:"",cid:t})},onPasswordKeyUp:function(e){13===e.keyCode&&this.onPasswordEntered(e)},onPasswordEntered:function(t){var n=$(t.target).closest("li[data-share-id]"),s=n.data("share-id"),i=n.find(".linkPassMenu .icon-loading-small");if(i.hasClass("hidden")){var l=n.find(".linkPassText");l.removeClass("error");var r=l.val();if(n.find(".linkPassText").attr("placeholder")===a)r===a&&(r="");else if(""===r||"**********"===r||r===e)return;i.removeClass("hidden").addClass("inlineblock"),this.model.saveLinkShare({password:r,cid:s},{complete:function(e){i.removeClass("inlineblock").addClass("hidden")},error:function(e,a){var t=l.parent();t.tooltip("destroy"),l.addClass("error"),t.attr("title",a),t.tooltip({placement:"bottom",trigger:"manual"}),t.tooltip("show")}})}},onPasswordByTalkChange:function(e){var a=$(e.target).closest("li[data-share-id]"),n=a.data("share-id"),s=a.find(".passwordByTalkCheckbox");s.siblings(".icon-loading-small").removeClass("hidden").addClass("inlineblock");var i=!1;s.is(":checked")&&(i=!0),this.model.saveLinkShare({sendPasswordByTalk:i,cid:n},{success:function(){s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")},error:function(e,a){OC.Notification.showTemporary(t("core","Unable to toggle this option")),s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")}})},onAllowPublicEditingChange:function(e){var a=$(e.target).closest("li[data-share-id]"),n=a.data("share-id"),s=a.find(".publicEditingCheckbox");s.siblings(".icon-loading-small").removeClass("hidden").addClass("inlineblock");var i=OC.PERMISSION_READ;s.is(":checked")&&(i=OC.PERMISSION_UPDATE|OC.PERMISSION_READ),this.model.saveLinkShare({permissions:i,cid:n},{success:function(){s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")},error:function(e,a){OC.Notification.showTemporary(t("core","Unable to toggle this option")),s.siblings(".icon-loading-small").addClass("hidden").removeClass("inlineblock")}})},onPublicUploadChange:function(e){var a=$(e.target).closest("li[data-share-id]").data("share-id"),t=e.currentTarget.value;this.model.saveLinkShare({permissions:t,cid:a})},showNoteForm:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=(a.closest("li[data-share-id]"),a.closest("li")),n=t.next("li.share-note-form");t.find(".share-note-delete").toggleClass("hidden"),n.toggleClass("hidden"),n.find("textarea").focus()},deleteNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li"),s=n.next("li.share-note-form");s.find(".share-note").val(""),s.addClass("hidden"),n.find(".share-note-delete").addClass("hidden"),this.sendNote("",t,n)},updateNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li.share-note-form"),s=n.prev("li"),i=n.find(".share-note").val().trim();i.length<1||this.sendNote(i,t,s)},sendNote:function(e,a,t){var n=t.next("li.share-note-form"),s=n.find("input.share-note-submit"),i=n.find("input.share-note-error");s.prop("disabled",!0),t.find(".icon-loading-small").removeClass("hidden"),t.find(".icon-edit").hide();$.ajax({method:"PUT",url:OC.linkToOCS("apps/files_sharing/api/v1/shares",2)+a+"?"+OC.buildQueryString({format:"json"}),data:{note:e},complete:function(){s.prop("disabled",!1),t.find(".icon-loading-small").addClass("hidden"),t.find(".icon-edit").show()},error:function(){i.show(),setTimeout(function(){i.hide()},3e3)}})},render:function(){this.$el.find(".has-tooltip").tooltip(),this.password="";var n=this.template(),s=this.model.sharePermissionPossible();if(!s||!this.showLink||!this.configModel.isShareWithLinkAllowed()){var i={shareAllowed:!1};return s||(i.noSharingPlaceholder=t("core","Resharing is not allowed")),this.$el.html(n(i)),this}var l=this.model.isFolder()&&this.model.createPermissionPossible()&&this.configModel.isPublicUploadEnabled(),r="";this.model.isPublicEditingAllowed()&&(r='checked="checked"');var o=this.configModel.get("enforcePasswordForPublicLink"),d=(this.configModel.get("enableLinkPasswordByDefault"),this.configModel.get("enforcePasswordForPublicLink")?e:a),h=!this.model.isFolder()&&this.model.updatePermissionPossible(),c=this.configModel.get("isDefaultExpireDateEnforced"),u=new Date;u.setDate(u.getDate()+1),$.datepicker.setDefaults({minDate:u}),this.$el.find(".datepicker").datepicker({dateFormat:"dd-mm-yy"});var p=4;oc_capabilities.password_policy&&oc_capabilities.password_policy.minLength&&(p=oc_capabilities.password_policy.minLength);var m={urlLabel:t("core","Link"),hideDownloadLabel:t("core","Hide download"),enablePasswordLabel:o?t("core","Password protection enforced"):t("core","Password protect"),passwordLabel:t("core","Password"),passwordPlaceholderInitial:d,publicUpload:l,publicEditing:h,publicEditingChecked:r,publicEditingLabel:t("core","Allow editing"),mailPrivatePlaceholder:t("core","Email link to person"),mailButtonText:t("core","Send"),publicUploadRWLabel:t("core","Allow upload and editing"),publicUploadRLabel:t("core","Read only"),publicUploadWLabel:t("core","File drop (upload only)"),publicUploadRWValue:OC.PERMISSION_UPDATE|OC.PERMISSION_CREATE|OC.PERMISSION_READ|OC.PERMISSION_DELETE,publicUploadRValue:OC.PERMISSION_READ,publicUploadWValue:OC.PERMISSION_CREATE,expireDateLabel:c?t("core","Expiration date enforced"):t("core","Set expiration date"),expirationLabel:t("core","Expiration"),expirationDatePlaceholder:t("core","Expiration date"),isExpirationEnforced:c,isPasswordEnforced:o,defaultExpireDate:moment().add(1,"day").format("DD-MM-YYYY"),addNoteLabel:t("core","Note to recipient"),unshareLabel:t("core","Unshare"),unshareLinkLabel:t("core","Delete share link"),newShareLabel:t("core","Add another link")},f={isPasswordEnforced:o,enforcedPasswordLabel:t("core","Password protection for links is mandatory"),passwordPlaceholder:d,minPasswordLength:p},g=this.pendingPopoverMenuTemplate(_.extend({},f)),v=this.getShareeList();if(_.isArray(v))for(var S=0;S<v.length;S++){var C=[];OC.Share.Social.Collection.each(function(e){var a=e.get("url");a=a.replace("{{reference}}",v[S].shareLinkURL),C.push({url:a,label:t("core","Share to {name}",{name:e.get("name")}),name:e.get("name"),iconClass:e.get("iconClass"),newWindow:e.get("newWindow")})});var w=this.getPopoverObject(v[S]);v[S].popoverMenu=this.popoverMenuTemplate(_.extend({},m,w,{social:C})),v[S].pendingPopoverMenu=g}return this.$el.html(n({linkShares:v,shareAllowed:!0,nolinkShares:0===v.length,newShareLabel:t("core","Share link"),newShareTitle:t("core","New share link"),pendingPopoverMenu:g,showPending:this.showPending===this.newShareId,newShareId:this.newShareId})),this.delegateEvents(),autosize(this.$el.find(".share-note-form .share-note")),this},onToggleMenu:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target).closest("li[data-share-id]"),t=a.find(".sharingOptionsGroup .popovermenu");a.data("share-id");OC.showMenu(null,t);var n=!0===this.configModel.get("enableLinkPasswordByDefault");!(""!==t.find(".linkPassText").val())&&n&&t.find(".linkPassText").focus()},template:function(){return OC.Share.Templates.sharedialoglinkshareview},popoverMenuTemplate:function(e){return OC.Share.Templates.sharedialoglinkshareview_popover_menu(e)},pendingPopoverMenuTemplate:function(e){return OC.Share.Templates.sharedialoglinkshareview_popover_menu_pending(e)},onPopUpClick:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.currentTarget).data("url"),t=$(e.currentTarget).data("window");if($(e.currentTarget).tooltip("hide"),a)if(!0===t){var n=screen.width/2-300,s=screen.height/2-200;window.open(a,"name","width=600, height=400, top="+s+", left="+n)}else window.location.href=a},onExpireDateChange:function(e){var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=$("#expirationDateContainer-"+t),s=a.prop("checked");n.toggleClass("hidden",!s),s?(a.closest("li").next("li").removeClass("hidden"),this.showDatePicker(e)):(a.closest("li").next("li").addClass("hidden"),this.setExpirationDate("",t))},showDatePicker:function(e){var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.data("max-date"),s="#expirationDatePicker-"+t,i=this;$(s).datepicker({dateFormat:"dd-mm-yy",onSelect:function(e){i.setExpirationDate(e,t)},maxDate:n}),$(s).datepicker("show"),$(s).focus()},setExpirationDate:function(e,a){this.model.saveLinkShare({expireDate:e,cid:a})},getShareeList:function(){var e=this.model.get("linkShares");if(!this.model.hasLinkShares())return[];for(var a=[],t=0;t<e.length;t++){var n=this.getShareeObject(t);a.push(_.extend({},n))}return a},getShareeObject:function(e){var a=this.model.get("linkShares")[e];return _.extend({},a,{cid:a.id,shareAllowed:!0,linkShareLabel:a.label?a.label:t("core","Share link"),popoverMenu:{},shareLinkURL:a.url,newShareTitle:t("core","New share link"),copyLabel:t("core","Copy link"),showPending:this.showPending===a.id,linkShareCreationDate:t("core","Created on {time}",{time:moment(1e3*a.stime).format("LLLL")})})},getPopoverObject:function(a){var n="",s="",i="";switch(this.model.linkSharePermissions(a.id)){case OC.PERMISSION_READ:s="checked";break;case OC.PERMISSION_CREATE:i="checked";break;case OC.PERMISSION_UPDATE|OC.PERMISSION_CREATE|OC.PERMISSION_READ|OC.PERMISSION_DELETE:n="checked"}var l,r=!!a.password,o=!0===this.configModel.get("enableLinkPasswordByDefault"),d=this.configModel.get("enforcePasswordForPublicLink"),h=this.configModel.get("isDefaultExpireDateEnforced"),c=this.configModel.get("defaultExpireDate"),u=!!a.expiration||h;u&&(l=moment(a.expiration,"YYYY-MM-DD").format("DD-MM-YYYY"));var p=void 0!==oc_appswebroots.spreed,m=a.sendPasswordByTalk,f=a.hideDownload,g=null;if(u&&h){var v=a.stime;_.isNumber(v)&&(v=new Date(1e3*v)),v||(v=new Date),v=OC.Util.stripTime(v).getTime(),g=new Date(v+24*c*3600*1e3)}return{cid:a.id,shareLinkURL:a.url,passwordPlaceholder:r?"**********":e,isPasswordSet:r||o||d,showPasswordByTalkCheckBox:p&&r,passwordByTalkLabel:t("core","Password protect by Talk"),isPasswordByTalkSet:m,publicUploadRWChecked:n,publicUploadRChecked:s,publicUploadWChecked:i,hasExpireDate:u,expireDate:l,shareNote:a.note,hasNote:""!==a.note,maxDate:g,hideDownload:f,isExpirationEnforced:h}},onUnshare:function(e){e.preventDefault(),e.stopPropagation();var a=this,n=$(e.target);n.is("a")||(n=n.closest("a"));var s=n.find(".icon-loading-small").eq(0);if(!s.hasClass("hidden"))return!1;s.removeClass("hidden");var i=n.closest("li[data-share-id]"),l=i.data("share-id");return a.model.removeShare(l,{success:function(){i.remove(),a.render()},error:function(){s.addClass("hidden"),OC.Notification.showTemporary(t("core","Could not unshare"))}}),!1}});OC.Share.ShareDialogLinkShareView=n}()},function(e,a){!function(){var e=t("core","Choose a password for the mail share");OC.Share||(OC.Share={});var a=OC.Backbone.View.extend({id:"shareDialogLinkShare",configModel:void 0,_menuOpen:!1,_renderPermissionChange:!1,events:{"click .unshare":"onUnshare","click .share-add":"showNoteForm","click .share-note-delete":"deleteNote","click .share-note-submit":"updateNote","click .share-menu .icon-more":"onToggleMenu","click .permissions":"onPermissionChange","click .expireDate":"onExpireDateChange","click .password":"onMailSharePasswordProtectChange","click .passwordByTalk":"onMailSharePasswordProtectByTalkChange","click .secureDrop":"onSecureDropChange","keyup input.passwordField":"onMailSharePasswordKeyUp","focusout input.passwordField":"onMailSharePasswordEntered","change .datepicker":"onChangeExpirationDate","click .datepicker":"showDatePicker"},initialize:function(e){if(_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel;var a=this;this.model.on("change:shares",function(){a.render()})},getShareeObject:function(a){var n=this.model.getShareWith(a),s=this.model.getShareWithDisplayName(a),i=this.model.getShareWithAvatar(a),l="",r=this.model.getShareType(a),o=this.model.getSharedBy(a),d=this.model.getSharedByDisplayName(a),h=this.model.getFileOwnerUid(a);if(r===OC.Share.SHARE_TYPE_GROUP?s=s+" ("+t("core","group")+")":r===OC.Share.SHARE_TYPE_REMOTE?s=s+" ("+t("core","remote")+")":r===OC.Share.SHARE_TYPE_REMOTE_GROUP?s=s+" ("+t("core","remote group")+")":r===OC.Share.SHARE_TYPE_EMAIL?s=s+" ("+t("core","email")+")":r===OC.Share.SHARE_TYPE_CIRCLE||r===OC.Share.SHARE_TYPE_ROOM&&(s=s+" ("+t("core","conversation")+")"),r===OC.Share.SHARE_TYPE_GROUP?l=n+" ("+t("core","group")+")":r===OC.Share.SHARE_TYPE_REMOTE?l=n+" ("+t("core","remote")+")":r===OC.Share.SHARE_TYPE_REMOTE_GROUP?l=n+" ("+t("core","remote group")+")":r===OC.Share.SHARE_TYPE_EMAIL?l=n+" ("+t("core","email")+")":r===OC.Share.SHARE_TYPE_CIRCLE&&(l=n,n="circle-"+a),o!==oc_current_user){var c=""===l;c||(l+=" ("),l+=t("core","shared by {sharer}",{sharer:d}),c||(l+=")")}var u=this.model.get("shares")[a],p=u.password,m=null!==p&&""!==p,f=u.send_password_by_talk,g=this.model.getNote(a);return _.extend({},{cid:this.cid,hasSharePermission:this.model.hasSharePermission(a),editPermissionState:this.model.editPermissionState(a),hasCreatePermission:this.model.hasCreatePermission(a),hasUpdatePermission:this.model.hasUpdatePermission(a),hasDeletePermission:this.model.hasDeletePermission(a),sharedBy:o,sharedByDisplayName:d,shareWith:n,shareWithDisplayName:s,shareWithAvatar:i,shareWithTitle:l,shareType:r,shareId:this.model.get("shares")[a].id,modSeed:i||r!==OC.Share.SHARE_TYPE_USER&&r!==OC.Share.SHARE_TYPE_CIRCLE&&r!==OC.Share.SHARE_TYPE_ROOM,owner:h,isShareWithCurrentUser:r===OC.Share.SHARE_TYPE_USER&&n===oc_current_user,canUpdateShareSettings:o===oc_current_user||h===oc_current_user,isRemoteShare:r===OC.Share.SHARE_TYPE_REMOTE,isRemoteGroupShare:r===OC.Share.SHARE_TYPE_REMOTE_GROUP,isNoteAvailable:r!==OC.Share.SHARE_TYPE_REMOTE&&r!==OC.Share.SHARE_TYPE_REMOTE_GROUP,isMailShare:r===OC.Share.SHARE_TYPE_EMAIL,isCircleShare:r===OC.Share.SHARE_TYPE_CIRCLE,isFileSharedByMail:r===OC.Share.SHARE_TYPE_EMAIL&&!this.model.isFolder(),isPasswordSet:m&&!f,isPasswordByTalkSet:m&&f,isTalkEnabled:void 0!==oc_appswebroots.spreed,secureDropMode:!this.model.hasReadPermission(a),hasExpireDate:null!==this.model.getExpireDate(a),shareNote:g,hasNote:""!==g,expireDate:moment(this.model.getExpireDate(a),"YYYY-MM-DD").format("DD-MM-YYYY"),passwordPlaceholder:m?"**********":e,passwordByTalkPlaceholder:m&&f?"**********":e})},getShareProperties:function(){return{unshareLabel:t("core","Unshare"),addNoteLabel:t("core","Note to recipient"),canShareLabel:t("core","Can reshare"),canEditLabel:t("core","Can edit"),createPermissionLabel:t("core","Can create"),updatePermissionLabel:t("core","Can change"),deletePermissionLabel:t("core","Can delete"),secureDropLabel:t("core","File drop (upload only)"),expireDateLabel:t("core","Set expiration date"),passwordLabel:t("core","Password protect"),passwordByTalkLabel:t("core","Password protect by Talk"),crudsLabel:t("core","Access control"),expirationDatePlaceholder:t("core","Expiration date"),defaultExpireDate:moment().add(1,"day").format("DD-MM-YYYY"),triangleSImage:OC.imagePath("core","actions/triangle-s"),isResharingAllowed:this.configModel.get("isResharingAllowed"),isPasswordForMailSharesRequired:this.configModel.get("isPasswordForMailSharesRequired"),sharePermissionPossible:this.model.sharePermissionPossible(),editPermissionPossible:this.model.editPermissionPossible(),createPermissionPossible:this.model.createPermissionPossible(),updatePermissionPossible:this.model.updatePermissionPossible(),deletePermissionPossible:this.model.deletePermissionPossible(),sharePermission:OC.PERMISSION_SHARE,createPermission:OC.PERMISSION_CREATE,updatePermission:OC.PERMISSION_UPDATE,deletePermission:OC.PERMISSION_DELETE,readPermission:OC.PERMISSION_READ,isFolder:this.model.isFolder()}},getShareeList:function(){var e=this.getShareProperties();if(!this.model.hasUserShares())return[];for(var a=this.model.get("shares"),t=[],n=0;n<a.length;n++){var s=this.getShareeObject(n);s.shareType!==OC.Share.SHARE_TYPE_LINK&&t.push(_.extend({},e,s))}return t},getLinkReshares:function(){var e={unshareLabel:t("core","Unshare")};if(!this.model.hasUserShares())return[];for(var a=this.model.get("shares"),n=[],s=0;s<a.length;s++){var i=this.getShareeObject(s);i.shareType===OC.Share.SHARE_TYPE_LINK&&n.push(_.extend({},e,i,{shareInitiator:a[s].uid_owner,shareInitiatorText:t("core","{shareInitiatorDisplayName} shared via link",{shareInitiatorDisplayName:a[s].displayname_owner})}))}return n},render:function(){if(this._renderPermissionChange){var e=parseInt(this._renderPermissionChange,10),a=this.model.findShareWithIndex(e),t=this.getShareeObject(a);$.extend(t,this.getShareProperties()),this.$("li[data-share-id="+e+"]").find(".sharingOptionsGroup .popovermenu").replaceWith(this.popoverMenuTemplate(t))}else this.$el.html(this.template({cid:this.cid,sharees:this.getShareeList(),linkReshares:this.getLinkReshares()})),this.$(".avatar").each(function(){var e=$(this);e.hasClass("imageplaceholderseed")?(e.css({width:32,height:32}),e.data("avatar")?(e.css("border-radius","0%"),e.css("background","url("+e.data("avatar")+") no-repeat"),e.css("background-size","31px")):e.imageplaceholder(e.data("seed"))):e.avatar(e.data("username"),32,void 0,void 0,void 0,e.data("displayname"))}),this.$(".has-tooltip").tooltip({placement:"bottom"}),this.$("ul.shareWithList > li").each(function(){var e=$(this),a=e.data("share-with"),t=e.data("share-type");e.find("div.avatar, span.username").contactsMenu(a,t,e)});var n=this;if(this.getShareeList().forEach(function(e){var a=n.$("#canEdit-"+n.cid+"-"+e.shareId);1===a.length&&(a.prop("checked","checked"===e.editPermissionState),e.isFolder&&a.prop("indeterminate","indeterminate"===e.editPermissionState))}),this.$(".popovermenu").on("afterHide",function(){n._menuOpen=!1}),this.$(".popovermenu").on("beforeHide",function(){var e=parseInt(n._menuOpen,10);if(!_.isNaN(e)){var a=".expirationDateContainer-"+n.cid+"-"+e,t="#expirationDatePicker-"+n.cid+"-"+e,s="#expireDate-"+n.cid+"-"+e;$(s).prop("checked")&&($(t).removeClass("hidden-visually"),$(a).removeClass("hasDatepicker"),$(a+" .ui-datepicker").hide())}}),!1!==this._menuOpen){var s=parseInt(this._menuOpen,10);if(!_.isNaN(s)){var i="li[data-share-id="+s+"]";OC.showMenu(null,this.$(i+" .sharingOptionsGroup .popovermenu"))}}return this._renderPermissionChange=!1,autosize(this.$el.find(".share-note-form .share-note")),this.delegateEvents(),this},template:function(e){var a=e.sharees;if(_.isArray(a))for(var t=0;t<a.length;t++)e.sharees[t].popoverMenu=this.popoverMenuTemplate(a[t]);return OC.Share.Templates.sharedialogshareelistview(e)},popoverMenuTemplate:function(e){return OC.Share.Templates.sharedialogshareelistview_popover_menu(e)},showNoteForm:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target).closest("li"),t=a.next("li.share-note-form");a.find(".share-note-delete").toggleClass("hidden"),t.toggleClass("hidden"),t.find("textarea").focus()},deleteNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li"),s=n.next("li.share-note-form");console.log(s.find(".share-note")),s.find(".share-note").val(""),s.addClass("hidden"),n.find(".share-note-delete").addClass("hidden"),this.sendNote("",t,n)},updateNote:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=a.closest("li.share-note-form"),s=n.prev("li"),i=n.find(".share-note").val().trim();i.length<1||this.sendNote(i,t,s)},sendNote:function(e,a,t){var n=t.next("li.share-note-form"),s=n.find("input.share-note-submit"),i=n.find("input.share-note-error");s.prop("disabled",!0),t.find(".icon-loading-small").removeClass("hidden"),t.find(".icon-edit").hide();$.ajax({method:"PUT",url:OC.linkToOCS("apps/files_sharing/api/v1/shares",2)+a+"?"+OC.buildQueryString({format:"json"}),data:{note:e},complete:function(){s.prop("disabled",!1),t.find(".icon-loading-small").addClass("hidden"),t.find(".icon-edit").show()},error:function(){i.show(),setTimeout(function(){i.hide()},3e3)}})},onUnshare:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target);a.is("a")||(a=a.closest("a"));var n=a.find(".icon-loading-small").eq(0);if(!n.hasClass("hidden"))return!1;n.removeClass("hidden");var s=a.closest("li[data-share-id]"),i=s.data("share-id");return this.model.removeShare(i).done(function(){s.remove()}).fail(function(){n.addClass("hidden"),OC.Notification.showTemporary(t("core","Could not unshare"))}),!1},onToggleMenu:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target).closest("li[data-share-id]"),t=a.find(".sharingOptionsGroup .popovermenu");OC.showMenu(null,t),this._menuOpen=a.data("share-id")},onExpireDateChange:function(e){var a=$(e.target),t=a.closest("li[data-share-id]").data("share-id"),n=".expirationDateContainer-"+this.cid+"-"+t,s=$(n),i=a.prop("checked");s.toggleClass("hidden",!i),i?(a.closest("li").next("li").removeClass("hidden"),this.showDatePicker(e)):(a.closest("li").next("li").addClass("hidden"),this.setExpirationDate(t,""))},showDatePicker:function(e){var a=$(e.target).closest("li[data-share-id]").data("share-id"),t="#expirationDatePicker-"+this.cid+"-"+a,n=this;$(t).datepicker({dateFormat:"dd-mm-yy",onSelect:function(e){n.setExpirationDate(a,e)}}),$(t).focus()},setExpirationDate:function(e,a){this.model.updateShare(e,{expireDate:a},{})},onMailSharePasswordProtectChange:function(a){var t=$(a.target),n=t.closest("li[data-share-id]").data("share-id"),s=".passwordMenu-"+this.cid+"-"+n,i=$(s),l=this.$el.find(s+" .icon-loading-small"),r="#passwordField-"+this.cid+"-"+n,o=$(r),d=t.prop("checked"),h=$("#passwordByTalk-"+this.cid+"-"+n),c=h.prop("checked");if(d||c){if(d){if(c){this.model.updateShare(n,{sendPasswordByTalk:!1});var u=".passwordByTalkMenu-"+this.cid+"-"+n;$(u).addClass("hidden"),h.prop("checked",!1)}i.toggleClass("hidden",!d),o="#passwordField-"+this.cid+"-"+n,this.$(o).focus()}}else this.model.updateShare(n,{password:"",sendPasswordByTalk:!1}),o.attr("value",""),o.removeClass("error"),o.tooltip("hide"),l.addClass("hidden"),o.attr("placeholder",e),i.toggleClass("hidden",!d)},onMailSharePasswordProtectByTalkChange:function(a){var t=$(a.target),n=t.closest("li[data-share-id]").data("share-id"),s=".passwordByTalkMenu-"+this.cid+"-"+n,i=$(s),l=this.$el.find(s+" .icon-loading-small"),r="#passwordByTalkField-"+this.cid+"-"+n,o=$(r),d=t.prop("checked"),h=$("#password-"+this.cid+"-"+n),c=h.prop("checked");if(d){if(d){if(c){var u=".passwordMenu-"+this.cid+"-"+n;$(u).addClass("hidden"),h.prop("checked",!1)}i.toggleClass("hidden",!d),o="#passwordByTalkField-"+this.cid+"-"+n,this.$(o).focus()}}else this.model.updateShare(n,{password:"",sendPasswordByTalk:!1}),o.attr("value",""),o.removeClass("error"),o.tooltip("hide"),l.addClass("hidden"),o.attr("placeholder",e),i.toggleClass("hidden",!d)},onMailSharePasswordKeyUp:function(e){13===e.keyCode&&this.onMailSharePasswordEntered(e)},onMailSharePasswordEntered:function(a){var t,n=$(a.target),s=n.closest("li[data-share-id]").data("share-id"),i=".passwordMenu-"+this.cid+"-"+s,l=".passwordByTalkMenu-"+this.cid+"-"+s,r=n.attr("id").startsWith("passwordByTalk");if((t=r?this.$el.find(l+" .icon-loading-small"):this.$el.find(i+" .icon-loading-small")).hasClass("hidden")){n.removeClass("error");var o=n.val();""!==o&&"**********"!==o&&o!==e&&(t.removeClass("hidden").addClass("inlineblock"),this.model.updateShare(s,{password:o,sendPasswordByTalk:r},{error:function(e,a){n.tooltip("destroy"),t.removeClass("inlineblock").addClass("hidden"),n.addClass("error"),n.attr("title",a),n.tooltip({placement:"bottom",trigger:"manual"}),n.tooltip("show")},success:function(e,a){n.blur(),n.attr("value",""),n.attr("placeholder","**********"),t.removeClass("inlineblock").addClass("hidden")}}))}},onPermissionChange:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),n=a.closest("li[data-share-id]"),s=n.data("share-id"),i=OC.PERMISSION_READ;if(this.model.isFolder()){var l,r=$(".permissions",n).not('input[name="edit"]').not('input[name="share"]');if("edit"===a.attr("name"))l=a.is(":checked"),$(r).prop("checked",l),l&&(i|=OC.PERMISSION_CREATE|OC.PERMISSION_UPDATE|OC.PERMISSION_DELETE);else{var o=r.filter(":checked").length;l=o===r.length;var d=$('input[name="edit"]',n);d.prop("checked",l),d.prop("indeterminate",!l&&o>0)}}else"edit"===a.attr("name")&&a.is(":checked")&&(i|=OC.PERMISSION_UPDATE);$(".permissions",n).not('input[name="edit"]').filter(":checked").each(function(e,a){i|=$(a).data("permissions")}),n.find("input[type=checkbox]").prop("disabled",!0);var h=function(){n.find("input[type=checkbox]").prop("disabled",!1)};this.model.updateShare(s,{permissions:i},{error:function(e,a){OC.dialogs.alert(a,t("core","Error while sharing")),h()},success:h}),this._renderPermissionChange=s},onSecureDropChange:function(e){e.preventDefault(),e.stopPropagation();var a=$(e.target),n=a.closest("li[data-share-id]"),s=n.data("share-id"),i=OC.PERMISSION_CREATE|OC.PERMISSION_UPDATE|OC.PERMISSION_DELETE|OC.PERMISSION_READ;a.is(":checked")&&(i=OC.PERMISSION_CREATE|OC.PERMISSION_UPDATE|OC.PERMISSION_DELETE),n.find("input[type=checkbox]").prop("disabled",!0);var l=function(){n.find("input[type=checkbox]").prop("disabled",!1)};this.model.updateShare(s,{permissions:i},{error:function(e,a){OC.dialogs.alert(a,t("core","Error while sharing")),l()},success:l}),this._renderPermissionChange=s}});OC.Share.ShareDialogShareeListView=a}()},function(e,a){!function(){OC.Share||(OC.Share={});var e=OC.Backbone.View.extend({_templates:{},_showLink:!0,tagName:"div",configModel:void 0,resharerInfoView:void 0,linkShareView:void 0,shareeListView:void 0,_lastSuggestions:void 0,_lastRecommendations:void 0,_pendingOperationsCount:0,events:{"focus .shareWithField":"onShareWithFieldFocus","input .shareWithField":"onShareWithFieldChanged","click .shareWithConfirm":"_confirmShare"},initialize:function(e){var a=this;if(this.model.on("fetchError",function(){OC.Notification.showTemporary(t("core","Share details could not be loaded for this item."))}),_.isUndefined(e.configModel))throw"missing OC.Share.ShareConfigModel";this.configModel=e.configModel,this.configModel.on("change:isRemoteShareAllowed",function(){a.render()}),this.configModel.on("change:isRemoteGroupShareAllowed",function(){a.render()}),this.model.on("change:permissions",function(){a.render()}),this.model.on("request",this._onRequest,this),this.model.on("sync",this._onEndRequest,this);var n={model:this.model,configModel:this.configModel},s={resharerInfoView:"ShareDialogResharerInfoView",linkShareView:"ShareDialogLinkShareView",shareeListView:"ShareDialogShareeListView"};for(var i in s){var l=s[i];this[i]=_.isUndefined(e[i])?new OC.Share[l](n):e[i]}_.bindAll(this,"autocompleteHandler","_onSelectRecipient","onShareWithFieldChanged","onShareWithFieldFocus"),OC.Plugins.attach("OC.Share.ShareDialogView",this)},onShareWithFieldChanged:function(){var e=this.$el.find(".shareWithField");e.val().length<2&&e.removeClass("error").tooltip("hide")},onShareWithFieldFocus:function(){this.$el.find(".shareWithField").autocomplete("search")},_getSuggestions:function(e,a,t){if(this._lastSuggestions&&this._lastSuggestions.searchTerm===e&&this._lastSuggestions.perPage===a&&this._lastSuggestions.model===t)return this._lastSuggestions.promise;var n=$.Deferred();return $.get(OC.linkToOCS("apps/files_sharing/api/v1")+"sharees",{format:"json",search:e,perPage:a,itemType:t.get("itemType")},function(s){if(100===s.ocs.meta.statuscode){var i=function(e,a,n,s,i,l,r){var o,d,h,c,u,p,m,f,g;for(void 0===i&&(i=[]),void 0===l&&(l=[]),void 0===r&&(r=[]),o=e.length,f=0;f<o;f++)if(e[f].value.shareWith===OC.currentUser){e.splice(f,1);break}if(t.hasReshare())for(o=e.length,f=0;f<o;f++)if(e[f].value.shareWith===t.getReshareOwner()){e.splice(f,1);break}var v=t.get("shares"),S=v.length;for(f=0;f<S;f++){var C=v[f];if(C.share_type===OC.Share.SHARE_TYPE_USER){for(o=e.length,g=0;g<o;g++)if(e[g].value.shareWith===C.share_with){e.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_GROUP){for(d=a.length,g=0;g<d;g++)if(a[g].value.shareWith===C.share_with){a.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_REMOTE){for(h=n.length,g=0;g<h;g++)if(n[g].value.shareWith===C.share_with){n.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_REMOTE_GROUP){for(c=s.length,g=0;g<c;g++)if(s[g].value.shareWith===C.share_with){s.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_EMAIL){for(u=i.length,g=0;g<u;g++)if(i[g].value.shareWith===C.share_with){i.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_CIRCLE){for(p=l.length,g=0;g<p;g++)if(l[g].value.shareWith===C.share_with){l.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_ROOM)for(m=r.length,g=0;g<m;g++)if(r[g].value.shareWith===C.share_with){r.splice(g,1);break}}};i(s.ocs.data.exact.users,s.ocs.data.exact.groups,s.ocs.data.exact.remotes,s.ocs.data.exact.remote_groups,s.ocs.data.exact.emails,s.ocs.data.exact.circles,s.ocs.data.exact.rooms);var l=s.ocs.data.exact.users,r=s.ocs.data.exact.groups,o=s.ocs.data.exact.remotes,d=s.ocs.data.exact.remote_groups,h=[];void 0!==s.ocs.data.emails&&(h=s.ocs.data.exact.emails);var c=[];void 0!==s.ocs.data.circles&&(c=s.ocs.data.exact.circles);var u=[];void 0!==s.ocs.data.rooms&&(u=s.ocs.data.exact.rooms);var p=l.concat(r).concat(o).concat(d).concat(h).concat(c).concat(u);i(s.ocs.data.users,s.ocs.data.groups,s.ocs.data.remotes,s.ocs.data.remote_groups,s.ocs.data.emails,s.ocs.data.circles,s.ocs.data.rooms);var m=s.ocs.data.users,f=s.ocs.data.groups,g=s.ocs.data.remotes,v=s.ocs.data.remote_groups,S=s.ocs.data.lookup,C=[];void 0!==s.ocs.data.emails&&(C=s.ocs.data.emails);var w=[];void 0!==s.ocs.data.circles&&(w=s.ocs.data.circles);var b=[];void 0!==s.ocs.data.rooms&&(b=s.ocs.data.rooms);for(var P=p.concat(m).concat(f).concat(g).concat(v).concat(C).concat(w).concat(b).concat(S).sort((x="uuid",function(e,a){var t="",n="";return void 0!==e[x]&&(t=e[x]),void 0!==a[x]&&(n=a[x]),t<n?-1:t>n?1:0})),_=null,E=P.length,O=(s=[],0);O<E;O++)void 0!==P[O].uuid&&P[O].uuid===_&&(P[O].merged=!0),e!==P[O].name&&void 0!==P[O].merged||s.push(P[O]),_=P[O].uuid;var k=oc_config["sharing.maxAutocompleteResults"]>0&&Math.min(a,oc_config["sharing.maxAutocompleteResults"])<=Math.max(m.length+l.length,f.length+r.length,v.length+d.length,g.length+o.length,C.length+h.length,w.length+c.length,b.length+u.length,S.length);n.resolve(s,p,k)}else n.reject(s.ocs.meta.message);var x}).fail(function(){n.reject()}),this._lastSuggestions={searchTerm:e,perPage:a,model:t,promise:n.promise()},this._lastSuggestions.promise},_getRecommendations:function(e){if(this._lastRecommendations&&this._lastRecommendations.model===e)return this._lastRecommendations.promise;var a=$.Deferred();return $.get(OC.linkToOCS("apps/files_sharing/api/v1")+"sharees_recommended",{format:"json",itemType:e.get("itemType")},function(t){if(100===t.ocs.meta.statuscode){var n=function(a,t,n,s,i,l,r){var o,d,h,c,u,p,m,f,g;for(void 0===i&&(i=[]),void 0===l&&(l=[]),void 0===r&&(r=[]),o=a.length,f=0;f<o;f++)if(a[f].value.shareWith===OC.currentUser){a.splice(f,1);break}if(e.hasReshare())for(o=a.length,f=0;f<o;f++)if(a[f].value.shareWith===e.getReshareOwner()){a.splice(f,1);break}var v=e.get("shares"),S=v.length;for(f=0;f<S;f++){var C=v[f];if(C.share_type===OC.Share.SHARE_TYPE_USER){for(o=a.length,g=0;g<o;g++)if(a[g].value.shareWith===C.share_with){a.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_GROUP){for(d=t.length,g=0;g<d;g++)if(t[g].value.shareWith===C.share_with){t.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_REMOTE){for(h=n.length,g=0;g<h;g++)if(n[g].value.shareWith===C.share_with){n.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_REMOTE_GROUP){for(c=s.length,g=0;g<c;g++)if(s[g].value.shareWith===C.share_with){s.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_EMAIL){for(u=i.length,g=0;g<u;g++)if(i[g].value.shareWith===C.share_with){i.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_CIRCLE){for(p=l.length,g=0;g<p;g++)if(l[g].value.shareWith===C.share_with){l.splice(g,1);break}}else if(C.share_type===OC.Share.SHARE_TYPE_ROOM)for(m=r.length,g=0;g<m;g++)if(r[g].value.shareWith===C.share_with){r.splice(g,1);break}}};n(t.ocs.data.exact.users,t.ocs.data.exact.groups,t.ocs.data.exact.remotes,t.ocs.data.exact.remote_groups,t.ocs.data.exact.emails,t.ocs.data.exact.circles,t.ocs.data.exact.rooms);var s=t.ocs.data.exact.users,i=t.ocs.data.exact.groups,l=t.ocs.data.exact.remotes||[],r=t.ocs.data.exact.remote_groups||[],o=[];void 0!==t.ocs.data.emails&&(o=t.ocs.data.exact.emails);var d=[];void 0!==t.ocs.data.circles&&(d=t.ocs.data.exact.circles);var h=[];void 0!==t.ocs.data.rooms&&(h=t.ocs.data.exact.rooms);var c=s.concat(i).concat(l).concat(r).concat(o).concat(d).concat(h);n(t.ocs.data.users,t.ocs.data.groups,t.ocs.data.remotes,t.ocs.data.remote_groups,t.ocs.data.emails,t.ocs.data.circles,t.ocs.data.rooms);var u=t.ocs.data.users,p=t.ocs.data.groups,m=t.ocs.data.remotes||[],f=t.ocs.data.remote_groups||[],g=t.ocs.data.lookup||[],v=[];void 0!==t.ocs.data.emails&&(v=t.ocs.data.emails);var S=[];void 0!==t.ocs.data.circles&&(S=t.ocs.data.circles);var C=[];void 0!==t.ocs.data.rooms&&(C=t.ocs.data.rooms);for(var w=c.concat(u).concat(p).concat(m).concat(f).concat(v).concat(S).concat(C).concat(g).sort((O="uuid",function(e,a){var t="",n="";return void 0!==e[O]&&(t=e[O]),void 0!==a[O]&&(n=a[O]),t<n?-1:t>n?1:0})),b=null,P=w.length,_=(t=[],0);_<P;_++)void 0!==w[_].uuid&&w[_].uuid===b&&(w[_].merged=!0),void 0===w[_].merged&&t.push(w[_]),b=w[_].uuid;var E=oc_config["sharing.maxAutocompleteResults"]>0&&Math.min(perPage,oc_config["sharing.maxAutocompleteResults"])<=Math.max(u.length+s.length,p.length+i.length,f.length+r.length,m.length+l.length,v.length+o.length,S.length+d.length,C.length+h.length,g.length);a.resolve(t,c,E)}else a.reject(t.ocs.meta.message);var O}).fail(function(){a.reject()}),this._lastRecommendations={model:e,promise:a.promise()},this._lastRecommendations.promise},recommendationHandler:function(e){var a=this,t=$(".shareWithField");this._getRecommendations(a.model).done(function(n,s){a._pendingOperationsCount--,0===a._pendingOperationsCount&&($loading.addClass("hidden"),$loading.removeClass("inlineblock"),$confirm.removeClass("hidden")),n.length>0?(t.autocomplete("option","autoFocus",!0),e(n)):(console.info("no sharing recommendations found"),e())}).fail(function(e){a._pendingOperationsCount--,0===a._pendingOperationsCount&&($loading.addClass("hidden"),$loading.removeClass("inlineblock"),$confirm.removeClass("hidden")),console.error("could not load recommendations",e)})},autocompleteHandler:function(e,a){if(0!==e.term.length){var s=$(".shareWithField"),i=this,l=this.$el.find(".shareWithLoading"),r=this.$el.find(".shareWithConfirm"),o=oc_config["sharing.minSearchStringLength"];if(e.term.trim().length<o){var d=n("core","At least {count} character is needed for autocompletion","At least {count} characters are needed for autocompletion",o,{count:o});return s.addClass("error").attr("data-original-title",d).tooltip("hide").tooltip({placement:"bottom",trigger:"manual"}).tooltip("fixTitle").tooltip("show"),void a()}l.removeClass("hidden"),l.addClass("inlineblock"),r.addClass("hidden"),this._pendingOperationsCount++,s.removeClass("error").tooltip("hide");var h=parseInt(oc_config["sharing.maxAutocompleteResults"],10)||200;this._getSuggestions(e.term.trim(),h,i.model).done(function(e,n,o){if(i._pendingOperationsCount--,0===i._pendingOperationsCount&&(l.addClass("hidden"),l.removeClass("inlineblock"),r.removeClass("hidden")),e.length>0){if(s.autocomplete("option","autoFocus",!0),a(e),o){var d=t("core","This list is maybe truncated - please refine your search term to see more results.");$(".ui-autocomplete").append('<li class="autocomplete-note">'+d+"</li>")}}else{var h=t("core","No users or groups found for {search}",{search:s.val()});i.configModel.get("allowGroupSharing")||(h=t("core","No users found for {search}",{search:$(".shareWithField").val()})),s.addClass("error").attr("data-original-title",h).tooltip("hide").tooltip({placement:"bottom",trigger:"manual"}).tooltip("fixTitle").tooltip("show"),a()}}).fail(function(e){i._pendingOperationsCount--,0===i._pendingOperationsCount&&(l.addClass("hidden"),l.removeClass("inlineblock"),r.removeClass("hidden")),e?OC.Notification.showTemporary(t("core",'An error occurred ("{message}"). Please try again',{message:e})):OC.Notification.showTemporary(t("core","An error occurred. Please try again"))})}else this.recommendationHandler(a)},autocompleteRenderItem:function(e,a){var n="icon-user",s=escapeHTML(a.label),i="",l="";void 0!==a.type&&null!==a.type&&(l=function(e){switch(e){case"HOME":return t("core","Home");case"WORK":return t("core","Work");case"OTHER":return t("core","Other");default:return""+e}}(a.type)+" "),void 0!==a.name&&(s=escapeHTML(a.name)),a.value.shareType===OC.Share.SHARE_TYPE_GROUP?n="icon-contacts-dark":a.value.shareType===OC.Share.SHARE_TYPE_REMOTE?(n="icon-shared",i+=a.value.shareWith):a.value.shareType===OC.Share.SHARE_TYPE_REMOTE_GROUP?(s=t("core","{sharee} (remote group)",{sharee:s},void 0,{escape:!1}),n="icon-shared",i+=a.value.shareWith):a.value.shareType===OC.Share.SHARE_TYPE_EMAIL?(n="icon-mail",i+=a.value.shareWith):a.value.shareType===OC.Share.SHARE_TYPE_CIRCLE?(s=t("core","{sharee} ({type}, {owner})",{sharee:s,type:a.value.circleInfo,owner:a.value.circleOwner},void 0,{escape:!1}),n="icon-circle"):a.value.shareType===OC.Share.SHARE_TYPE_ROOM&&(n="icon-talk");var r=$("<div class='share-autocomplete-item'/>");if(a.merged)r.addClass("merged"),s=a.value.shareWith,i=l;else{var o=$("<div class='avatardiv'></div>").appendTo(r);a.value.shareType===OC.Share.SHARE_TYPE_USER||a.value.shareType===OC.Share.SHARE_TYPE_CIRCLE?o.avatar(a.value.shareWith,32,void 0,void 0,void 0,a.label):(void 0===a.uuid&&(a.uuid=s),o.imageplaceholder(a.uuid,s,32)),i=l+i}return""!==i&&r.addClass("with-description"),$("<div class='autocomplete-item-text'></div>").html(s.replace(new RegExp(this.term,"gi"),"<span class='ui-state-highlight'>$&</span>")+'<span class="autocomplete-item-details">'+i+"</span>").appendTo(r),r.attr("title",a.value.shareWith),r.append('<span class="icon '+n+'" title="'+s+'"></span>'),r=$("<a>").append(r),$("<li>").addClass(a.value.shareType===OC.Share.SHARE_TYPE_GROUP?"group":"user").append(r).appendTo(e)},_onSelectRecipient:function(e,a){var t=this;if(9==e.keyCode)return e.preventDefault(),void 0!==a.item.name?e.target.value=a.item.name:e.target.value=a.item.label,setTimeout(function(){$(e.target).attr("disabled",!1).autocomplete("search",$(e.target).val())},0),!1;e.preventDefault(),e.stopImmediatePropagation(),$(e.target).attr("disabled",!0).val(a.item.label);var n=this.$el.find(".shareWithLoading"),s=this.$el.find(".shareWithConfirm");n.removeClass("hidden"),n.addClass("inlineblock"),s.addClass("hidden"),this._pendingOperationsCount++,this.model.addShare(a.item.value,{success:function(){t._lastSuggestions=void 0,$(e.target).val("").attr("disabled",!1),t._pendingOperationsCount--,0===t._pendingOperationsCount&&(n.addClass("hidden"),n.removeClass("inlineblock"),s.removeClass("hidden"))},error:function(a,i){OC.Notification.showTemporary(i),$(e.target).attr("disabled",!1).autocomplete("search",$(e.target).val()),t._pendingOperationsCount--,0===t._pendingOperationsCount&&(n.addClass("hidden"),n.removeClass("inlineblock"),s.removeClass("hidden"))}})},_confirmShare:function(){var e=this,a=$(".shareWithField"),t=this.$el.find(".shareWithLoading"),n=this.$el.find(".shareWithConfirm");t.removeClass("hidden"),t.addClass("inlineblock"),n.addClass("hidden"),this._pendingOperationsCount++,a.prop("disabled",!0),a.autocomplete("close"),a.autocomplete("disable");var s=function(){e._pendingOperationsCount--,0===e._pendingOperationsCount&&(t.addClass("hidden"),t.removeClass("inlineblock"),n.removeClass("hidden")),a.prop("disabled",!1),a.focus()},i=parseInt(oc_config["sharing.maxAutocompleteResults"],10)||200;this._getSuggestions(a.val(),i,this.model,!0).done(function(t,n){if(0===t.length)return s(),void a.autocomplete("enable");if(1!==n.length)return s(),void a.autocomplete("enable");e.model.addShare(n[0].value,{success:function(){e._lastSuggestions=void 0,a.val(""),s(),a.autocomplete("enable")},error:function(e,t){s(),a.autocomplete("enable"),OC.Notification.showTemporary(t)}})}).fail(function(e){s(),a.autocomplete("enable")})},_toggleLoading:function(e){this._loading=e,this.$el.find(".subView").toggleClass("hidden",e),this.$el.find(".loading").toggleClass("hidden",!e)},_onRequest:function(){this._loadingOnce||this._toggleLoading(!0)},_onEndRequest:function(){var e=this;this._toggleLoading(!1),this._loadingOnce||(this._loadingOnce=!0,OC.Util.isIE()||_.defer(function(){e.$(".shareWithField").focus()}))},render:function(){var e=this,a=OC.Share.Templates.sharedialogview;this.$el.html(a({cid:this.cid,shareLabel:t("core","Share"),sharePlaceholder:this._renderSharePlaceholderPart(),isSharingAllowed:this.model.sharePermissionPossible()}));var n=this.$el.find(".shareWithField");if(n.length){n.autocomplete({minLength:0,delay:750,focus:function(e){e.preventDefault()},source:this.autocompleteHandler,select:this._onSelectRecipient,open:function(){var e=$(this).autocomplete("widget"),a=e.find("li").size();e.removeClass("item-count-1"),e.removeClass("item-count-2"),a<=2&&e.addClass("item-count-"+a)}}).data("ui-autocomplete")._renderItem=this.autocompleteRenderItem,n.on("keydown",null,function(a){return 13!==a.keyCode||(e._confirmShare(),!1)})}return this.resharerInfoView.$el=this.$el.find(".resharerInfoView"),this.resharerInfoView.render(),this.linkShareView.$el=this.$el.find(".linkShareView"),this.linkShareView.render(),this.shareeListView.$el=this.$el.find(".shareeListView"),this.shareeListView.render(),this.$el.find(".hasTooltip").tooltip(),this},setShowLink:function(e){this._showLink="boolean"!=typeof e||e,this.linkShareView.showLink=this._showLink},_renderSharePlaceholderPart:function(){var e=this.configModel.get("isRemoteShareAllowed"),a=this.configModel.get("isMailShareAllowed");return!e&&a?t("core","Name or email address..."):e&&!a?t("core","Name or federated cloud ID..."):e&&a?t("core","Name, federated cloud ID or email address..."):t("core","Name...")}});OC.Share.ShareDialogView=e}()},function(e,a){OC.Share=_.extend(OC.Share||{},{SHARE_TYPE_USER:0,SHARE_TYPE_GROUP:1,SHARE_TYPE_LINK:3,SHARE_TYPE_EMAIL:4,SHARE_TYPE_REMOTE:6,SHARE_TYPE_CIRCLE:7,SHARE_TYPE_GUEST:8,SHARE_TYPE_REMOTE_GROUP:9,SHARE_TYPE_ROOM:10,_REMOTE_OWNER_REGEXP:new RegExp("^([^@]*)@(([^@]*)@)?([^/]*)([/](.*)?)?$"),itemShares:[],statuses:{},currentShares:{},droppedDown:!1,loadIcons:function(e,a,t){var n=a.dirInfo.path;"/"===n&&(n=""),n+="/"+a.dirInfo.name,$.get(OC.linkToOCS("apps/files_sharing/api/v1",2)+"shares",{subfiles:"true",path:n,format:"json"},function(n){n&&200===n.ocs.meta.statuscode&&(OC.Share.statuses={},$.each(n.ocs.data,function(e,a){a.item_source in OC.Share.statuses||(OC.Share.statuses[a.item_source]={link:!1}),a.share_type===OC.Share.SHARE_TYPE_LINK&&(OC.Share.statuses[a.item_source]={link:!0})}),_.isFunction(t)?t(OC.Share.statuses):OC.Share.updateIcons(e,a))})},updateIcons:function(e,a){var n,s,i;for(n in!a&&OCA.Files&&(a=OCA.Files.App.fileList),a&&(s=a.$fileList,i=a.getCurrentDirectory()),OC.Share.statuses){var l="icon-shared",r=OC.Share.statuses[n],o=r.link;if(o&&(l="icon-public"),"file"!==e&&"folder"!==e)$('a.share[data-item="'+n+'"] .icon').removeClass("icon-shared icon-public").addClass(l);else{var d,h=s.find('tr[data-id="'+n+'"]'),c=OC.imagePath("core","filetypes/folder-shared");if(h.length>0)this.markFileAsShared(h,!0,o);else{var u=i;if(u.length>1)for(var p="",m=u;m!=p;){if(m===r.path&&!r.link){var f,g=s.find('.fileactions .action[data-action="Share"]'),v=s.find(".filename");for(f=0;f<g.length;f++)(d=$(g[f]).find("img")).attr("src")!==OC.imagePath("core","actions/public")&&(d.attr("src",image),$(g[f]).addClass("permanent"),$(g[f]).html("<span> "+t("core","Shared")+"</span>").prepend(d));for(f=0;f<v.length;f++)"dir"===$(v[f]).closest("tr").data("type")&&$(v[f]).find(".thumbnail").css("background-image","url("+c+")")}p=m,m=OC.Share.dirname(m)}}}}},updateIcon:function(e,a){var t=!1,n=!1,s="";if($.each(OC.Share.itemShares,function(e){if(OC.Share.itemShares[e])if(e==OC.Share.SHARE_TYPE_LINK){if(1==OC.Share.itemShares[e])return t=!0,s="icon-public",void(n=!0)}else OC.Share.itemShares[e].length>0&&(t=!0,s="icon-shared")}),"file"!=e&&"folder"!=e)$('a.share[data-item="'+a+'"] .icon').removeClass("icon-shared icon-public").addClass(s);else{var i=$("tr").filterAttr("data-id",String(a));i.length>0&&i.each(function(){OC.Share.markFileAsShared($(this),t,n)})}t?(OC.Share.statuses[a]=OC.Share.statuses[a]||{},OC.Share.statuses[a].link=n):delete OC.Share.statuses[a]},_formatRemoteShare:function(e,a,t){var n=this._REMOTE_OWNER_REGEXP.exec(e);if(!n)return'<span class="avatar" data-username="'+escapeHTML(e)+'" title="'+t+" "+escapeHTML(a)+'"></span>'+('<span class="hidden-visually">'+t+" "+escapeHTML(a)+"</span> ");var s=n[1],i=n[3],l=n[4],r=t+" "+s;i&&(r+="@"+i),l&&(i||(i="…"),r+="@"+l);var o='<span class="remoteAddress" title="'+escapeHTML(r)+'">';return o+='<span class="username">'+escapeHTML(s)+"</span>",i&&(o+='<span class="userDomain">@'+escapeHTML(i)+"</span>"),o+="</span> "},_formatShareList:function(e){var a=this;return(e=_.toArray(e)).sort(function(e,a){return e.shareWithDisplayName.localeCompare(a.shareWithDisplayName)}),$.map(e,function(e){return a._formatRemoteShare(e.shareWith,e.shareWithDisplayName,t("core","Shared with"))})},markFileAsShared:function(e,a,n){var s,i,l,r,o=e.find('.fileactions .action[data-action="Share"]'),d=e.data("type"),h=o.find(".icon"),c=e.attr("data-share-owner-id"),u=e.attr("data-share-owner"),p="icon-shared";if(o.removeClass("shared-style"),"dir"===d&&(a||n||c))r=n?OC.MimeType.getIconUrl("dir-public"):OC.MimeType.getIconUrl("dir-shared"),e.find(".filename .thumbnail").css("background-image","url("+r+")"),e.attr("data-icon",r);else if("dir"===d){var m=e.attr("data-e2eencrypted"),f=e.attr("data-mounttype");"true"===m?(r=OC.MimeType.getIconUrl("dir-encrypted"),e.attr("data-icon",r)):f&&0===f.indexOf("external")?(r=OC.MimeType.getIconUrl("dir-external"),e.attr("data-icon",r)):(r=OC.MimeType.getIconUrl("dir"),e.removeAttr("data-icon")),e.find(".filename .thumbnail").css("background-image","url("+r+")")}a||c?(i=e.data("share-recipient-data"),o.addClass("shared-style"),l="<span>"+t("core","Shared")+"</span>",c?(s=t("core","Shared by"),l=this._formatRemoteShare(c,u,s)):i&&(l=this._formatShareList(i)),o.html(l).prepend(h),(c||i)&&(o.find(".avatar").each(function(){$(this).avatar($(this).data("username"),32)}),o.find("span[title]").tooltip({placement:"top"}))):o.html('<span class="hidden-visually">'+t("core","Shared")+"</span>").prepend(h);n&&(p="icon-public"),h.removeClass("icon-shared icon-public").addClass(p)},showDropDown:function(e,a,t,n,s,i){var l=new OC.Share.ShareConfigModel,r={itemType:e,itemSource:a,possiblePermissions:s},o=new OC.Share.ShareItemModel(r,{configModel:l}),d=new OC.Share.ShareDialogView({id:"dropdown",model:o,configModel:l,className:"drop shareDropDown",attributes:{"data-item-source-name":i,"data-item-type":e,"data-item-source":a}});d.setShowLink(n);var h=d.render().$el;h.appendTo(t),h.slideDown(OC.menuSpeed,function(){OC.Share.droppedDown=!0}),o.fetch()},hideDropDown:function(e){OC.Share.currentShares=null,$("#dropdown").slideUp(OC.menuSpeed,function(){OC.Share.droppedDown=!1,$("#dropdown").remove(),"undefined"!=typeof FileActions&&$("tr").removeClass("mouseOver"),e&&e.call()})},dirname:function(e){return e.replace(/\\/g,"/").replace(/\/[^\/]*$/,"")}}),$(document).ready(function(){if("undefined"!=typeof monthNames){var e=new Date;e.setDate(e.getDate()+1),$.datepicker.setDefaults({monthNames:monthNames,monthNamesShort:monthNamesShort,dayNames:dayNames,dayNamesMin:dayNamesMin,dayNamesShort:dayNamesShort,firstDay:firstDay,minDate:e})}$(this).click(function(e){var a=$(e.target),t=!a.is(".drop, .ui-datepicker-next, .ui-datepicker-prev, .ui-icon")&&!a.closest("#ui-datepicker-div").length&&!a.closest(".ui-autocomplete").length;OC.Share&&OC.Share.droppedDown&&t&&0===$("#dropdown").has(e.target).length&&OC.Share.hideDropDown()})})}]);
//# sourceMappingURL=share_backend.js.map \ No newline at end of file
diff --git a/core/js/dist/share_backend.js.map b/core/js/dist/share_backend.js.map
index a2baa6f8c10..85de6f4da00 100644
--- a/core/js/dist/share_backend.js.map
+++ b/core/js/dist/share_backend.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./core/js/merged-share-backend.js","webpack:///./core/js/shareconfigmodel.js","webpack:///./core/js/sharetemplates.js","webpack:///./core/js/shareitemmodel.js","webpack:///./core/js/sharesocialmanager.js","webpack:///./core/js/sharedialogresharerinfoview.js","webpack:///./core/js/sharedialoglinkshareview.js","webpack:///./core/js/sharedialogshareelistview.js","webpack:///./core/js/sharedialogview.js","webpack:///./core/js/share.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","OC","Share","Types","ShareConfigModel","Backbone","Model","extend","defaults","publicUploadEnabled","enforcePasswordForPublicLink","oc_appconfig","core","enableLinkPasswordByDefault","isDefaultExpireDateEnforced","defaultExpireDateEnforced","isDefaultExpireDateEnabled","defaultExpireDateEnabled","isRemoteShareAllowed","remoteShareAllowed","isMailShareAllowed","undefined","shareByMailEnabled","defaultExpireDate","isResharingAllowed","resharingAllowed","isPasswordForMailSharesRequired","shareByMail","enforcePasswordProtection","allowGroupSharing","isPublicUploadEnabled","$","data","isShareWithLinkAllowed","val","getFederatedShareDocLink","federatedCloudShareDoc","getDefaultExpirationDateString","expireDateString","this","date","moment","utc","expireAfterDays","add","format","template","templates","Handlebars","Templates","1","container","depth0","helpers","partials","stack1","alias1","nullContext","nolinkShares","hash","fn","program","inverse","noop","each","linkShares","2","helper","alias2","helperMissing","alias4","escapeExpression","_typeof","newShareId","newShareLabel","showPending","newShareTitle","unless","3","5","pendingPopoverMenu","7","alias3","cid","linkShareCreationDate","linkShareLabel","shareLinkURL","copyLabel","8","popoverMenu","10","noSharingPlaceholder","11","compiler","main","shareAllowed","useData","publicUploadRValue","publicUploadRChecked","publicUploadRLabel","publicUploadRWValue","publicUploadRWChecked","publicUploadRWLabel","publicUploadWValue","publicUploadWChecked","publicUploadWLabel","publicEditingChecked","publicEditingLabel","9","isPasswordByTalkSet","passwordByTalkLabel","13","15","expireDate","17","19","21","url","newWindow","iconClass","label","publicUpload","publicEditing","hideDownload","hideDownloadLabel","isPasswordSet","isPasswordEnforced","enablePasswordLabel","passwordPlaceholder","showPasswordByTalkCheckBox","hasExpireDate","isExpirationEnforced","expireDateLabel","expirationDate","expirationLabel","expirationDatePlaceholder","maxDate","addNoteLabel","hasNote","shareNote","shareId","social","unshareLinkLabel","enforcedPasswordLabel","minPasswordLength","reshareOwner","sharedByText","hasShareNote","isShareWithCurrentUser","shareType","shareWith","modSeed","shareWithAvatar","shareWithDisplayName","shareWithTitle","canUpdateShareSettings","editPermissionPossible","canEditLabel","shareInitiator","shareInitiatorText","unshareLabel","sharees","linkReshares","sharePermissionPossible","isMailShare","hasSharePermission","sharePermission","canShareLabel","4","6","createPermissionPossible","updatePermissionPossible","deletePermissionPossible","hasCreatePermission","createPermission","createPermissionLabel","hasUpdatePermission","updatePermission","updatePermissionLabel","14","hasDeletePermission","deletePermission","deletePermissionLabel","16","passwordLabel","password","passwordValue","isTalkEnabled","secureDropMode","readPermission","secureDropLabel","20","22","24","passwordByTalkPlaceholder","26","28","30","isFolder","isNoteAvailable","shareLabel","sharePlaceholder","isSharingAllowed","SHARE_RESPONSE_INT_PROPS","ShareItemModel","_linkShareId","initialize","attributes","options","_","isUndefined","configModel","fileInfoModel","bindAll","allowPublicUploadStatus","permissions","saveLinkShare","expiration","shareIndex","findIndex","share","id","length","updateShare","passwordChanged","sendPasswordByTalk","PERMISSION_READ","SHARE_TYPE_LINK","addShare","defaultPermissions","getCapabilities","PERMISSION_ALL","possiblePermissions","PERMISSION_UPDATE","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_SHARE","path","getFullPath","_addOrUpdateShare","type","_getUrl","dataType","attrs","encodeURIComponent","ajaxSettings","self","ajax","always","isFunction","complete","done","fetch","success","fail","xhr","msg","result","responseJSON","ocs","meta","message","error","dialogs","alert","removeShare","isPublicUploadAllowed","isPublicEditingAllowed","isHideFileListSet","isFile","hasReshare","reshare","isObject","uid_owner","hasUserShares","getSharesWithCurrentItem","hasLinkShares","getReshareOwner","getReshareOwnerDisplayname","displayname_owner","getReshareNote","note","getReshareWith","share_with","getReshareWithDisplayName","share_with_displayname","getReshareType","share_type","getExpireDate","_shareExpireDate","getNote","_shareNote","shares","fileId","filter","item_source","getShareWith","getShareWithDisplayName","getShareWithAvatar","share_with_avatar","getSharedBy","getSharedByDisplayName","getFileOwnerUid","uid_file_owner","findShareWithIndex","isArray","getShareType","_shareHasPermission","permission","getPermissions","hasReadPermission","editPermissionState","hcp","hup","hdp","linkSharePermissions","base","params","linkToOCS","buildQueryString","_fetchShares","reshares","_fetchReshare","_reshareFetched","Deferred","resolve","shared_with_me","_groupReshares","superShare","shift","combinedPermissions","SHARE_TYPE_USER","SHARE_TYPE_GROUP","model","trigger","deferred","when","data1","data2","sharesMap","shareItem","set","parse","_legacyFillCurrentShares","statuses","currentShares","itemShares","currentShareStatus","link","push","console","warn","currentUser","allowPublicEditingStatus","hideFileListStatus","map","prop","parseInt","reject","file_source","window","location","protocol","host","token","generateUrl","fullPath","isDirectory","linkTo","hide_download","send_password_by_talk","_parseTime","time","isString","isNaN","getShareTypes","pluck","uniq","Social","SocialModel","SocialCollection","Collection","comparator","ShareDialogResharerInfoView","View","tagName","className","_template","view","on","render","$el","empty","reshareTemplate","ownerDisplayName","group","owner","escape","SHARE_TYPE_CIRCLE","circle","SHARE_TYPE_ROOM","conversation","html","find","$this","avatar","contactsMenu","PASSWORD_PLACEHOLDER_MESSAGE","PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL","ShareDialogLinkShareView","showLink","events","click .share-menu .icon-more","change .hideDownloadCheckbox","click input.share-pass-submit","keyup input.linkPassText","change .showPasswordCheckbox","change .passwordByTalkCheckbox","change .publicEditingCheckbox","click .linkText","click .pop-up","change .publicUploadRadio","click .expireDate","change .datepicker","click .datepicker","click .share-add","click .share-note-delete","click .share-note-submit","click .unshare","click .new-share","submit .enforcedPassForm","previousLinkShares","previous","clipboard","Clipboard","e","$trigger","tooltip","attr","placement","delay","$menu","next","$linkTextMenu","$input","closest","showMenu","actionMsg","test","navigator","userAgent","removeClass","select","newShare","event","$li","target","$loading","hasClass","addClass","hideMenus","shareData","defaultExpireDays","focus","$newShare","response","Notification","showTemporary","then","enforcedPasswordSet","preventDefault","onLinkTextClick","onHideDownloadChange","$checkbox","siblings","is","obj","onShowPasswordClick","slideToggle","menuSpeed","toggleClass","Util","isIE","onPasswordKeyUp","keyCode","onPasswordEntered","$container","parent","onPasswordByTalkChange","onAllowPublicEditingChange","onPublicUploadChange","currentTarget","showNoteForm","stopPropagation","$element","$form","deleteNote","sendNote","updateNote","prev","trim","$submit","$error","hide","method","show","setTimeout","linkShareTemplate","templateData","passwordPlaceholderInitial","publicEditable","minDate","Date","setDate","getDate","datepicker","setDefaults","dateFormat","oc_capabilities","password_policy","minLength","popoverBase","urlLabel","mailPrivatePlaceholder","mailButtonText","pendingPopover","pendingPopoverMenuTemplate","getShareeList","replace","popover","getPopoverObject","popoverMenuTemplate","delegateEvents","autosize","onToggleMenu","isPasswordEnabledByDefault","onPopUpClick","left","screen","width","top","height","open","href","onExpireDateChange","datePicker","state","showDatePicker","setExpirationDate","expirationDatePicker","onSelect","list","index","getShareeObject","stime","oc_appswebroots","shareTime","isNumber","stripTime","getTime","onUnshare","eq","remove","ShareDialogShareeListView","_menuOpen","_renderPermissionChange","click .permissions","click .password","click .passwordByTalk","click .secureDrop","keyup input.passwordField","focusout input.passwordField","sharedBy","sharedByDisplayName","fileOwnerUid","SHARE_TYPE_REMOTE","SHARE_TYPE_REMOTE_GROUP","SHARE_TYPE_EMAIL","oc_current_user","sharer","hasPassword","isRemoteShare","isRemoteGroupShare","isCircleShare","isFileSharedByMail","getShareProperties","crudsLabel","triangleSImage","imagePath","universal","getLinkReshares","shareInitiatorDisplayName","permissionChangeShareId","shareWithIndex","sharee","replaceWith","css","imageplaceholder","_this","forEach","$edit","datePickerClass","datePickerInput","expireDateCheckbox","liSelector","log","onMailSharePasswordProtectChange","element","passwordContainerClass","passwordContainer","loading","inputClass","passwordField","passwordByTalkElement","passwordByTalkState","passwordByTalkContainerClass","onMailSharePasswordProtectByTalkChange","passwordByTalkContainer","passwordByTalkField","passwordElement","passwordState","onMailSharePasswordKeyUp","onMailSharePasswordEntered","startsWith","blur","onPermissionChange","checked","$checkboxes","not","numberChecked","$editCb","checkbox","enableCb","elem","onSecureDropChange","ShareDialogView","_templates","_showLink","resharerInfoView","linkShareView","shareeListView","_lastSuggestions","_pendingOperationsCount","focus .shareWithField","input .shareWithField","click .shareWithConfirm","_onRequest","_onEndRequest","subViewOptions","subViews","Plugins","attach","onShareWithFieldChanged","onShareWithFieldFocus","autocomplete","_getSuggestions","searchTerm","perPage","promise","search","itemType","statuscode","users","groups","remotes","remote_groups","emails","circles","rooms","usersLength","groupsLength","remotesLength","remoteGroupsLength","emailsLength","circlesLength","roomsLength","j","splice","sharesLength","exact","exactUsers","exactGroups","exactRemotes","exactRemoteGroups","exactEmails","exactCircles","exactRooms","exactMatches","concat","remoteGroups","lookup","grouped","sort","a","b","aProperty","bProperty","previousUuid","groupedLength","uuid","merged","moreResultsAvailable","oc_config","Math","min","max","autocompleteHandler","$shareWithField","$confirm","count","term","title","suggestions","append","autocompleteRenderItem","ul","item","icon","text","escapeHTML","description","getTranslatedType","circleInfo","circleOwner","insert","appendTo","RegExp","_onSelectRecipient","stopImmediatePropagation","_confirmShare","restoreUI","_toggleLoading","_loading","_loadingOnce","defer","baseTemplate","_renderSharePlaceholderPart","$shareField","source","numberOfItems","size","_renderItem","setShowLink","allowRemoteSharing","allowMailSharing","SHARE_TYPE_GUEST","_REMOTE_OWNER_REGEXP","droppedDown","loadIcons","fileList","callback","dirInfo","subfiles","it","updateIcons","$fileList","currentDir","OCA","Files","App","getCurrentDirectory","hasLink","img","file","shareFolder","markFileAsShared","dir","last","actions","files","image","prepend","dirname","updateIcon","itemSource","$tr","filterAttr","String","_formatRemoteShare","parts","exec","userName","userDomain","server","_formatShareList","recipients","_parent","toArray","localeCompare","recipient","hasShares","avatars","shareFolderIcon","action","ownerId","MimeType","getIconUrl","isEncrypted","mountType","indexOf","removeAttr","showDropDown","filename","itemModel","dialogView","data-item-source-name","data-item-type","data-item-source","$dialog","slideDown","hideDropDown","slideUp","FileActions","document","ready","monthNames","monthNamesShort","dayNames","dayNamesMin","dayNamesShort","firstDay","click","isMatched","has"],"mappings":"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","file":"share_backend.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import './shareconfigmodel.js';\nimport './sharetemplates.js';\nimport './shareitemmodel.js';\nimport './sharesocialmanager.js';\nimport './sharedialogresharerinfoview.js';\nimport './sharedialoglinkshareview.js';\nimport './sharedialogshareelistview.js';\nimport './sharedialogview.js';\nimport './share.js';\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* global moment, oc_appconfig, oc_config */\n\n(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t\tOC.Share.Types = {};\n\t}\n\n\t// FIXME: the config model should populate its own model attributes based on\n\t// the old DOM-based config\n\tvar ShareConfigModel = OC.Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tpublicUploadEnabled: false,\n\t\t\tenforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink,\n\t\t\tenableLinkPasswordByDefault: oc_appconfig.core.enableLinkPasswordByDefault,\n\t\t\tisDefaultExpireDateEnforced: oc_appconfig.core.defaultExpireDateEnforced === true,\n\t\t\tisDefaultExpireDateEnabled: oc_appconfig.core.defaultExpireDateEnabled === true,\n\t\t\tisRemoteShareAllowed: oc_appconfig.core.remoteShareAllowed,\n\t\t\tisMailShareAllowed: oc_appconfig.shareByMailEnabled !== undefined,\n\t\t\tdefaultExpireDate: oc_appconfig.core.defaultExpireDate,\n\t\t\tisResharingAllowed: oc_appconfig.core.resharingAllowed,\n\t\t\tisPasswordForMailSharesRequired: (oc_appconfig.shareByMail === undefined) ? false : oc_appconfig.shareByMail.enforcePasswordProtection,\n\t\t\tallowGroupSharing: oc_appconfig.core.allowGroupSharing\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisPublicUploadEnabled: function() {\n\t\t\tvar publicUploadEnabled = $('#filestable').data('allow-public-upload');\n\t\t\treturn publicUploadEnabled === 'yes';\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisShareWithLinkAllowed: function() {\n\t\t\treturn $('#allowShareWithLink').val() === 'yes';\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetFederatedShareDocLink: function() {\n\t\t\treturn oc_appconfig.core.federatedCloudShareDoc;\n\t\t},\n\n\t\tgetDefaultExpirationDateString: function () {\n\t\t\tvar expireDateString = '';\n\t\t\tif (this.get('isDefaultExpireDateEnabled')) {\n\t\t\t\tvar date = moment.utc();\n\t\t\t\tvar expireAfterDays = this.get('defaultExpireDate');\n\t\t\t\tdate.add(expireAfterDays, 'days');\n\t\t\t\texpireDateString = date.format('YYYY-MM-DD 00:00:00');\n\t\t\t}\n\t\t\treturn expireDateString;\n\t\t}\n\t});\n\n\n\tOC.Share.ShareConfigModel = ShareConfigModel;\n})();\n","(function() {\n var template = Handlebars.template, templates = OC.Share.Templates = OC.Share.Templates || {};\ntemplates['sharedialoglinkshareview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<ul class=\\\"shareWithList\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.nolinkShares : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.linkShares : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</ul>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.newShareId || (depth0 != null ? depth0.newShareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar icon-public-white\\\"></div>\\n\t\t\t<span class=\\\"username\\\">\"\n + alias4(((helper = (helper = helpers.newShareLabel || (depth0 != null ? depth0.newShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\t\t\t\t<div class=\\\"share-menu\\\">\\n\t\t\t\t\t<a href=\\\"#\\\" class=\\\"icon icon-add new-share has-tooltip \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.newShareTitle || (depth0 != null ? depth0.newShareTitle : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareTitle\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></a>\\n\t\t\t\t\t<span class=\\\"icon icon-loading-small \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"></span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t\t</div>\\n\t\t\t</span>\\n\t\t</li>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"hidden\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, helper;\n\n return \"\t\t\t\t\t\t\"\n + ((stack1 = ((helper = (helper = helpers.pendingPopoverMenu || (depth0 != null ? depth0.pendingPopoverMenu : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"pendingPopoverMenu\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar icon-public-white\\\"></div>\\n\t\t\t<span class=\\\"username\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.linkShareCreationDate || (depth0 != null ? depth0.linkShareCreationDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"linkShareCreationDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.linkShareLabel || (depth0 != null ? depth0.linkShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"linkShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\\n\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"clipboard-button icon icon-clippy has-tooltip\\\" data-clipboard-text=\\\"\"\n + alias4(((helper = (helper = helpers.shareLinkURL || (depth0 != null ? depth0.shareLinkURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareLinkURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.copyLabel || (depth0 != null ? depth0.copyLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"copyLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></a>\\n\t\t\t\t<div class=\\\"share-menu\\\">\\n\t\t\t\t\t<a href=\\\"#\\\" class=\\\"icon icon-more \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"></a>\\n\t\t\t\t\t<span class=\\\"icon icon-loading-small \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"></span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.program(8, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t\t</div>\\n\t\t\t</span>\\n\t\t</li>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, helper;\n\n return \"\t\t\t\t\t\t\"\n + ((stack1 = ((helper = (helper = helpers.popoverMenu || (depth0 != null ? depth0.popoverMenu : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"popoverMenu\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.noSharingPlaceholder : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<input id=\\\"shareWith-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"shareWithField\\\" type=\\\"text\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.noSharingPlaceholder || (depth0 != null ? depth0.noSharingPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"noSharingPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" disabled=\\\"disabled\\\" />\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.shareAllowed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(10, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\ntemplates['sharedialoglinkshareview_popover_menu'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"radio\\\" name=\\\"publicUpload\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.publicUploadRValue || (depth0 != null ? depth0.publicUploadRValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" id=\\\"sharingDialogAllowPublicUpload-r-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"radio publicUploadRadio\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicUploadRChecked || (depth0 != null ? depth0.publicUploadRChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicUpload-r-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicUploadRLabel || (depth0 != null ? depth0.publicUploadRLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"radio\\\" name=\\\"publicUpload\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.publicUploadRWValue || (depth0 != null ? depth0.publicUploadRWValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRWValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" id=\\\"sharingDialogAllowPublicUpload-rw-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"radio publicUploadRadio\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicUploadRWChecked || (depth0 != null ? depth0.publicUploadRWChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRWChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicUpload-rw-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicUploadRWLabel || (depth0 != null ? depth0.publicUploadRWLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRWLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"radio\\\" name=\\\"publicUpload\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.publicUploadWValue || (depth0 != null ? depth0.publicUploadWValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadWValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" id=\\\"sharingDialogAllowPublicUpload-w-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"radio publicUploadRadio\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicUploadWChecked || (depth0 != null ? depth0.publicUploadWChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadWChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicUpload-w-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicUploadWLabel || (depth0 != null ? depth0.publicUploadWLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadWLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li id=\\\"allowPublicEditingWrapper\\\">\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"allowPublicEditing\\\" id=\\\"sharingDialogAllowPublicEditing-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox publicEditingCheckbox\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicEditingChecked || (depth0 != null ? depth0.publicEditingChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicEditingChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicEditing-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicEditingLabel || (depth0 != null ? depth0.publicEditingLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicEditingLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"checked=\\\"checked\\\"\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \"disabled=\\\"disabled\\\"\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"hidden\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"shareOption menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"passwordByTalk\\\" id=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox passwordByTalkCheckbox\\\"\\n\t\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordByTalkSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordByTalkLabel || (depth0 != null ? depth0.passwordByTalkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n return \"datepicker\";\n},\"15\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.expireDate || (depth0 != null ? depth0.expireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"expireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"17\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.defaultExpireDate || (depth0 != null ? depth0.defaultExpireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"defaultExpireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"19\":function(container,depth0,helpers,partials,data) {\n return \"readonly\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"menuitem pop-up\\\" data-url=\\\"\"\n + alias4(((helper = (helper = helpers.url || (depth0 != null ? depth0.url : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"url\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-window=\\\"\"\n + alias4(((helper = (helper = helpers.newWindow || (depth0 != null ? depth0.newWindow : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newWindow\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<span class=\\\"icon \"\n + alias4(((helper = (helper = helpers.iconClass || (depth0 != null ? depth0.iconClass : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"iconClass\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></span>\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.label || (depth0 != null ? depth0.label : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"label\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"popovermenu menu\\\">\\n\t<ul>\\n\t\t<li class=\\\"hidden linkTextMenu\\\">\\n\t\t\t<span class=\\\"menuitem icon-link-text\\\">\\n\t\t\t\t<input id=\\\"linkText-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"linkText\\\" type=\\\"text\\\" readonly=\\\"readonly\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.shareLinkURL || (depth0 != null ? depth0.shareLinkURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareLinkURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t</span>\\n\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.publicUpload : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.publicEditing : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"hideDownload\\\" id=\\\"sharingDialogHideDownload-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox hideDownloadCheckbox\\\"\\n\t\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hideDownload : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogHideDownload-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.hideDownloadLabel || (depth0 != null ? depth0.hideDownloadLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hideDownloadLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"showPassword\\\" id=\\\"showPassword-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox showPasswordCheckbox\\\"\\n\t\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" value=\\\"1\\\" />\\n\t\t\t\t\t<label for=\\\"showPassword-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.enablePasswordLabel || (depth0 != null ? depth0.enablePasswordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"enablePasswordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" linkPassMenu\\\">\\n\t\t\t\t<span class=\\\"menuitem icon-share-pass\\\">\\n\t\t\t\t\t<input id=\\\"linkPassText-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"linkPassText\\\" type=\\\"password\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordPlaceholder || (depth0 != null ? depth0.passwordPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"new-password\\\" />\\n\t\t\t\t\t<input type=\\\"submit\\\" class=\\\"icon-confirm share-pass-submit\\\" value=\\\"\\\" />\\n\t\t\t\t\t<span class=\\\"icon icon-loading-small hidden\\\"></span>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPasswordByTalkCheckBox : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t<input id=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"expirationDate\\\" class=\\\"expireDate checkbox\\\"\\n\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isExpirationEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t<label for=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expireDateLabel || (depth0 != null ? depth0.expireDateLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expireDateLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t</span>\\n\t\t</li>\\n\t\t<li class=\\\"\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<span class=\\\"menuitem icon-expiredate expirationDateContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t<label for=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDate || (depth0 != null ? depth0.expirationDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expirationLabel || (depth0 != null ? depth0.expirationLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t<!-- do not use the datepicker if enforced -->\\n\t\t\t\t<input id=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isExpirationEnforced : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" type=\\\"text\\\"\\n\t\t\t\t\tplaceholder=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDatePlaceholder || (depth0 != null ? depth0.expirationDatePlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDatePlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.program(17, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"\\n\t\t\t\t\tdata-max-date=\\\"\"\n + alias4(((helper = (helper = helpers.maxDate || (depth0 != null ? depth0.maxDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"maxDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isExpirationEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t</span>\\n\t\t\t</li>\\n\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"share-add\\\">\\n\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t<span class=\\\"icon icon-edit\\\"></span>\\n\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.addNoteLabel || (depth0 != null ? depth0.addNoteLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"addNoteLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t<input type=\\\"button\\\" class=\\\"share-note-delete icon-delete \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t</a>\\n\t\t</li>\\n\t\t<li class=\\\"share-note-form share-note-link \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<span class=\\\"menuitem icon-note\\\">\\n\t\t\t\t<textarea class=\\\"share-note\\\">\"\n + alias4(((helper = (helper = helpers.shareNote || (depth0 != null ? depth0.shareNote : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareNote\",\"hash\":{},\"data\":data}) : helper)))\n + \"</textarea>\\n\t\t\t\t<input type=\\\"submit\\\" class=\\\"icon-confirm share-note-submit\\\" value=\\\"\\\" id=\\\"add-note-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t</span>\\n\t\t</li>\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.social : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(21, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"unshare\\\"><span class=\\\"icon-loading-small hidden\\\"></span><span class=\\\"icon icon-delete\\\"></span><span>\"\n + alias4(((helper = (helper = helpers.unshareLinkLabel || (depth0 != null ? depth0.unshareLinkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"unshareLinkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span></a>\\n\t\t</li>\\n\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"new-share\\\">\\n\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t<span class=\\\"icon icon-add\\\"></span>\\n\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.newShareLabel || (depth0 != null ? depth0.newShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t</a>\\n\t\t</li>\\n\t</ul>\\n</div>\\n\";\n},\"useData\":true});\ntemplates['sharedialoglinkshareview_popover_menu_pending'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem icon-info\\\">\\n\t\t\t\t\t<p>\"\n + alias4(((helper = (helper = helpers.enforcedPasswordLabel || (depth0 != null ? depth0.enforcedPasswordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"enforcedPasswordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</p>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"linkPassMenu\\\">\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<form autocomplete=\\\"off\\\" class=\\\"enforcedPassForm\\\">\\n\t\t\t\t\t\t<input id=\\\"enforcedPassText\\\" required class=\\\"enforcedPassText\\\" type=\\\"password\\\"\\n\t\t\t\t\t\t\tplaceholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordPlaceholder || (depth0 != null ? depth0.passwordPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"enforcedPassText\\\" minlength=\\\"\"\n + alias4(((helper = (helper = helpers.minPasswordLength || (depth0 != null ? depth0.minPasswordLength : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"minPasswordLength\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t\t\t\t<input type=\\\"submit\\\" value=\\\" \\\" class=\\\"primary icon-checkmark-white\\\">\\n\t\t\t\t\t</form>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"popovermenu open menu pending\\\">\\n\t<ul>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isPasswordEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</ul>\\n</div>\\n\";\n},\"useData\":true});\ntemplates['sharedialogresharerinfoview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"share-note\\\">\"\n + container.escapeExpression(((helper = (helper = helpers.shareNote || (depth0 != null ? depth0.shareNote : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"shareNote\",\"hash\":{},\"data\":data}) : helper)))\n + \"</div>\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<span class=\\\"reshare\\\">\\n\t<div class=\\\"avatar\\\" data-userName=\\\"\"\n + alias4(((helper = (helper = helpers.reshareOwner || (depth0 != null ? depth0.reshareOwner : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"reshareOwner\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></div>\\n\t\"\n + alias4(((helper = (helper = helpers.sharedByText || (depth0 != null ? depth0.sharedByText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"sharedByText\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n</span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasShareNote : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"useData\":true});\ntemplates['sharedialogshareelistview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isShareWithCurrentUser : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-share-type=\\\"\"\n + alias4(((helper = (helper = helpers.shareType || (depth0 != null ? depth0.shareType : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareType\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-share-with=\\\"\"\n + alias4(((helper = (helper = helpers.shareWith || (depth0 != null ? depth0.shareWith : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWith\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.modSeed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" data-username=\\\"\"\n + alias4(((helper = (helper = helpers.shareWith || (depth0 != null ? depth0.shareWith : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWith\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-avatar=\\\"\"\n + alias4(((helper = (helper = helpers.shareWithAvatar || (depth0 != null ? depth0.shareWithAvatar : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithAvatar\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-displayname=\\\"\"\n + alias4(((helper = (helper = helpers.shareWithDisplayName || (depth0 != null ? depth0.shareWithDisplayName : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithDisplayName\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.modSeed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"></div>\\n\t\t\t<span class=\\\"username\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.shareWithTitle || (depth0 != null ? depth0.shareWithTitle : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithTitle\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.shareWithDisplayName || (depth0 != null ? depth0.shareWithDisplayName : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithDisplayName\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.canUpdateShareSettings : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t</li>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"imageplaceholderseed\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"data-seed=\\\"\"\n + alias4(((helper = (helper = helpers.shareWith || (depth0 != null ? depth0.shareWith : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWith\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + alias4(((helper = (helper = helpers.shareType || (depth0 != null ? depth0.shareType : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareType\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.editPermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t\t<div tabindex=\\\"0\\\" class=\\\"share-menu\\\"><span class=\\\"icon icon-more\\\"></span>\\n\t\t\t\t\t\"\n + ((stack1 = ((helper = (helper = helpers.popoverMenu || (depth0 != null ? depth0.popoverMenu : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"popoverMenu\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"\\n\t\t\t\t</div>\\n\t\t\t</span>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t\t<span>\\n\t\t\t\t\t\t<input id=\\\"canEdit-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"edit\\\" class=\\\"permissions checkbox\\\" />\\n\t\t\t\t\t\t<label for=\\\"canEdit-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.canEditLabel || (depth0 != null ? depth0.canEditLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"canEditLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-share-type=\\\"\"\n + alias4(((helper = (helper = helpers.shareType || (depth0 != null ? depth0.shareType : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareType\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar\\\" data-username=\\\"\"\n + alias4(((helper = (helper = helpers.shareInitiator || (depth0 != null ? depth0.shareInitiator : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareInitiator\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></div>\\n\t\t\t<span class=\\\"has-tooltip username\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.shareInitiator || (depth0 != null ? depth0.shareInitiator : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareInitiator\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.shareInitiatorText || (depth0 != null ? depth0.shareInitiatorText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareInitiatorText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"unshare\\\"><span class=\\\"icon-loading-small hidden\\\"></span><span class=\\\"icon icon-delete\\\"></span><span class=\\\"hidden-visually\\\">\"\n + alias4(((helper = (helper = helpers.unshareLabel || (depth0 != null ? depth0.unshareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"unshareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span></a>\\n\t\t\t</span>\\n\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<ul id=\\\"shareWithList\\\" class=\\\"shareWithList\\\">\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.sharees : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.linkReshares : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</ul>\\n\";\n},\"useData\":true});\ntemplates['sharedialogshareelistview_popover_menu'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" \"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.sharePermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \";\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" \"\n + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<input id=\\\"canShare-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"share\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasSharePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.sharePermission || (depth0 != null ? depth0.sharePermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"sharePermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t\t\t<label for=\\\"canShare-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.canShareLabel || (depth0 != null ? depth0.canShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"canShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"checked=\\\"checked\\\"\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.createPermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.updatePermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.deletePermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"canCreate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"create\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasCreatePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.createPermission || (depth0 != null ? depth0.createPermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"createPermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"canCreate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.createPermissionLabel || (depth0 != null ? depth0.createPermissionLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"createPermissionLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"canUpdate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"update\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasUpdatePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.updatePermission || (depth0 != null ? depth0.updatePermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"updatePermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"canUpdate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.updatePermissionLabel || (depth0 != null ? depth0.updatePermissionLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"updatePermissionLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\t\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"canDelete-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"delete\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasDeletePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.deletePermission || (depth0 != null ? depth0.deletePermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"deletePermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"canDelete-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.deletePermissionLabel || (depth0 != null ? depth0.deletePermissionLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"deletePermissionLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\t\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasCreatePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<input id=\\\"password-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"password\\\" class=\\\"password checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" />\\n\t\t\t\t\t<label for=\\\"password-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordLabel || (depth0 != null ? depth0.passwordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"passwordMenu-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t<span class=\\\"passwordContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" icon-passwordmail menuitem\\\">\\n\t\t\t\t\t<label for=\\\"passwordField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.password || (depth0 != null ? depth0.password : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"password\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordLabel || (depth0 != null ? depth0.passwordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t<input id=\\\"passwordField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"passwordField\\\" type=\\\"password\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordPlaceholder || (depth0 != null ? depth0.passwordPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.passwordValue || (depth0 != null ? depth0.passwordValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"new-password\\\" />\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isTalkEnabled : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"17\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"secureDrop-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"secureDrop\\\" class=\\\"checkbox secureDrop\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.secureDropMode : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.readPermission || (depth0 != null ? depth0.readPermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"readPermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"secureDrop-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.secureDropLabel || (depth0 != null ? depth0.secureDropLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"secureDropLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isPasswordForMailSharesRequired : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n return \"disabled=\\\"\\\"\";\n},\"22\":function(container,depth0,helpers,partials,data) {\n return \"hidden\";\n},\"24\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"passwordByTalk\\\" class=\\\"passwordByTalk checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordByTalkSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t\t<label for=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordByTalkLabel || (depth0 != null ? depth0.passwordByTalkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\t<li class=\\\"passwordByTalkMenu-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isPasswordByTalkSet : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t\t<span class=\\\"passwordByTalkContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" icon-passwordtalk menuitem\\\">\\n\t\t\t\t\t\t<label for=\\\"passwordByTalkField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.password || (depth0 != null ? depth0.password : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"password\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordByTalkLabel || (depth0 != null ? depth0.passwordByTalkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t\t<input id=\\\"passwordByTalkField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"passwordField\\\" type=\\\"password\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordByTalkPlaceholder || (depth0 != null ? depth0.passwordByTalkPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.passwordValue || (depth0 != null ? depth0.passwordValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"new-password\\\" />\\n\t\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.expireDate || (depth0 != null ? depth0.expireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"expireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"28\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.defaultExpireDate || (depth0 != null ? depth0.defaultExpireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"defaultExpireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"30\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"share-add\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<span class=\\\"icon icon-edit\\\"></span>\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.addNoteLabel || (depth0 != null ? depth0.addNoteLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"addNoteLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t\t<input type=\\\"button\\\" class=\\\"share-note-delete icon-delete \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"share-note-form \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t<span class=\\\"menuitem icon-note\\\">\\n\t\t\t\t\t<textarea class=\\\"share-note\\\">\"\n + alias4(((helper = (helper = helpers.shareNote || (depth0 != null ? depth0.shareNote : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareNote\",\"hash\":{},\"data\":data}) : helper)))\n + \"</textarea>\\n\t\t\t\t\t<input type=\\\"submit\\\" class=\\\"icon-confirm share-note-submit\\\" value=\\\"\\\" id=\\\"add-note-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"popovermenu bubble hidden menu\\\">\\n\t<ul>\\n\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isResharingAllowed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isFolder : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t<input id=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"expirationDate\\\" class=\\\"expireDate checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" />\\n\t\t\t\t<label for=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expireDateLabel || (depth0 != null ? depth0.expireDateLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expireDateLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t</span>\\n\t\t</li>\\n\t\t<li class=\\\"expirationDateMenu-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<span class=\\\"expirationDateContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" icon-expiredate menuitem\\\">\\n\t\t\t\t<label for=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDate || (depth0 != null ? depth0.expirationDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expirationLabel || (depth0 != null ? depth0.expirationLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t<input id=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"datepicker\\\" type=\\\"text\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDatePlaceholder || (depth0 != null ? depth0.expirationDatePlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDatePlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.program(28, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" />\\n\t\t\t</span>\\n\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isNoteAvailable : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"unshare\\\"><span class=\\\"icon-loading-small hidden\\\"></span><span class=\\\"icon icon-delete\\\"></span><span>\"\n + alias4(((helper = (helper = helpers.unshareLabel || (depth0 != null ? depth0.unshareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"unshareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span></a>\\n\t\t</li>\\n\t</ul>\\n</div>\\n\";\n},\"useData\":true});\ntemplates['sharedialogview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t<label for=\\\"shareWith-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\">\"\n + alias4(((helper = (helper = helpers.shareLabel || (depth0 != null ? depth0.shareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t<div class=\\\"oneline\\\">\\n\t\t<input id=\\\"shareWith-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"shareWithField\\\" type=\\\"text\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.sharePlaceholder || (depth0 != null ? depth0.sharePlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"sharePlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t<span class=\\\"shareWithLoading icon-loading-small hidden\\\"></span>\\n\t\t<span class=\\\"shareWithConfirm icon icon-confirm\\\"></span>\\n\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"resharerInfoView subView\\\"></div>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isSharingAllowed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"<div class=\\\"linkShareView subView\\\"></div>\\n<div class=\\\"shareeListView subView\\\"></div>\\n<div class=\\\"loading hidden\\\" style=\\\"height: 50px\\\"></div>\\n\";\n},\"useData\":true});\n})();","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n(function() {\n\tif(!OC.Share) {\n\t\tOC.Share = {};\n\t\tOC.Share.Types = {};\n\t}\n\n\t/**\n\t * @typedef {object} OC.Share.Types.LinkShareInfo\n\t * @property {string} token\n\t * @property {bool} hideDownload\n\t * @property {string|null} password\n\t * @property {bool} sendPasswordByTalk\n\t * @property {number} permissions\n\t * @property {Date} expiration\n\t * @property {number} stime share time\n\t */\n\n\t/**\n\t * @typedef {object} OC.Share.Types.Reshare\n\t * @property {string} uid_owner\n\t * @property {number} share_type\n\t * @property {string} share_with\n\t * @property {string} displayname_owner\n\t * @property {number} permissions\n\t */\n\n\t/**\n\t * @typedef {object} OC.Share.Types.ShareInfo\n\t * @property {number} share_type\n\t * @property {number} permissions\n\t * @property {number} file_source optional\n\t * @property {number} item_source\n\t * @property {string} token\n\t * @property {string} share_with\n\t * @property {string} share_with_displayname\n\t * @property {string} share_with_avatar\n\t * @property {string} mail_send\n\t * @property {Date} expiration optional?\n\t * @property {number} stime optional?\n\t * @property {string} uid_owner\n\t * @property {string} displayname_owner\n\t */\n\n\t/**\n\t * @typedef {object} OC.Share.Types.ShareItemInfo\n\t * @property {OC.Share.Types.Reshare} reshare\n\t * @property {OC.Share.Types.ShareInfo[]} shares\n\t * @property {OC.Share.Types.LinkShareInfo|undefined} linkShare\n\t */\n\n\t/**\n\t * These properties are sometimes returned by the server as strings instead\n\t * of integers, so we need to convert them accordingly...\n\t */\n\tvar SHARE_RESPONSE_INT_PROPS = [\n\t\t'id', 'file_parent', 'mail_send', 'file_source', 'item_source', 'permissions',\n\t\t'storage', 'share_type', 'parent', 'stime'\n\t];\n\n\t/**\n\t * @class OCA.Share.ShareItemModel\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t * // FIXME: use OC Share API once #17143 is done\n\t *\n\t * // TODO: this really should be a collection of share item models instead,\n\t * where the link share is one of them\n\t */\n\tvar ShareItemModel = OC.Backbone.Model.extend({\n\t\t/**\n\t\t * share id of the link share, if applicable\n\t\t */\n\t\t_linkShareId: null,\n\n\t\tinitialize: function(attributes, options) {\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t}\n\t\t\tif(!_.isUndefined(options.fileInfoModel)) {\n\t\t\t\t/** @type {OC.Files.FileInfo} **/\n\t\t\t\tthis.fileInfoModel = options.fileInfoModel;\n\t\t\t}\n\n\t\t\t_.bindAll(this, 'addShare');\n\t\t},\n\n\t\tdefaults: {\n\t\t\tallowPublicUploadStatus: false,\n\t\t\tpermissions: 0,\n\t\t\tlinkShares: []\n\t\t},\n\n\t\t/**\n\t\t * Saves the current link share information.\n\t\t *\n\t\t * This will trigger an ajax call and, if successful, refetch the model\n\t\t * afterwards. Callbacks \"success\", \"error\" and \"complete\" can be given\n\t\t * in the options object; \"success\" is called after a successful save\n\t\t * once the model is refetch, \"error\" is called after a failed save, and\n\t\t * \"complete\" is called both after a successful save and after a failed\n\t\t * save. Note that \"complete\" is called before \"success\" and \"error\" are\n\t\t * called (unlike in jQuery, in which it is called after them); this\n\t\t * ensures that \"complete\" is called even if refetching the model fails.\n\t\t *\n\t\t * TODO: this should be a separate model\n\t\t */\n\t\tsaveLinkShare: function(attributes, options) {\n\t\t\toptions = options || {};\n\t\t\tattributes = _.extend({}, attributes);\n\n\t\t\tvar shareId = null;\n\t\t\tvar call;\n\n\t\t\t// oh yeah...\n\t\t\tif (attributes.expiration) {\n\t\t\t\tattributes.expireDate = attributes.expiration;\n\t\t\t\tdelete attributes.expiration;\n\t\t\t}\n\n\t\t\tvar linkShares = this.get('linkShares');\n\t\t\tvar shareIndex = _.findIndex(linkShares, function(share) {return share.id === attributes.cid})\n\n\t\t\tif (linkShares.length > 0 && shareIndex !== -1) {\n\t\t\t\tshareId = linkShares[shareIndex].id;\n\n\t\t\t\t// note: update can only update a single value at a time\n\t\t\t\tcall = this.updateShare(shareId, attributes, options);\n\t\t\t} else {\n\t\t\t\tattributes = _.defaults(attributes, {\n\t\t\t\t\thideDownload: false,\n\t\t\t\t\tpassword: '',\n\t\t\t\t\tpasswordChanged: false,\n\t\t\t\t\tsendPasswordByTalk: false,\n\t\t\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\t\t\texpireDate: this.configModel.getDefaultExpirationDateString(),\n\t\t\t\t\tshareType: OC.Share.SHARE_TYPE_LINK\n\t\t\t\t});\n\n\t\t\t\tcall = this.addShare(attributes, options);\n\t\t\t}\n\n\t\t\treturn call;\n\t\t},\n\n\t\taddShare: function(attributes, options) {\n\t\t\tvar shareType = attributes.shareType;\n\t\t\tattributes = _.extend({}, attributes);\n\n\t\t\t// get default permissions\n\t\t\tvar defaultPermissions = OC.getCapabilities()['files_sharing']['default_permissions'] || OC.PERMISSION_ALL;\n\t\t\tvar possiblePermissions = OC.PERMISSION_READ;\n\n\t\t\tif (this.updatePermissionPossible()) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_UPDATE;\n\t\t\t}\n\t\t\tif (this.createPermissionPossible()) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_CREATE;\n\t\t\t}\n\t\t\tif (this.deletePermissionPossible()) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_DELETE;\n\t\t\t}\n\t\t\tif (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_SHARE;\n\t\t\t}\n\n\t\t\tattributes.permissions = defaultPermissions & possiblePermissions;\n\t\t\tif (_.isUndefined(attributes.path)) {\n\t\t\t\tattributes.path = this.fileInfoModel.getFullPath();\n\t\t\t}\n\n\t\t\treturn this._addOrUpdateShare({\n\t\t\t\ttype: 'POST',\n\t\t\t\turl: this._getUrl('shares'),\n\t\t\t\tdata: attributes,\n\t\t\t\tdataType: 'json'\n\t\t\t}, options);\n\t\t},\n\n\t\tupdateShare: function(shareId, attrs, options) {\n\t\t\treturn this._addOrUpdateShare({\n\t\t\t\ttype: 'PUT',\n\t\t\t\turl: this._getUrl('shares/' + encodeURIComponent(shareId)),\n\t\t\t\tdata: attrs,\n\t\t\t\tdataType: 'json'\n\t\t\t}, options);\n\t\t},\n\n\t\t_addOrUpdateShare: function(ajaxSettings, options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\n\t\t\treturn $.ajax(\n\t\t\t\tajaxSettings\n\t\t\t).always(function() {\n\t\t\t\tif (_.isFunction(options.complete)) {\n\t\t\t\t\toptions.complete(self);\n\t\t\t\t}\n\t\t\t}).done(function() {\n\t\t\t\tself.fetch().done(function() {\n\t\t\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t\t\toptions.success(self);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).fail(function(xhr) {\n\t\t\t\tvar msg = t('core', 'Error');\n\t\t\t\tvar result = xhr.responseJSON;\n\t\t\t\tif (result && result.ocs && result.ocs.meta) {\n\t\t\t\t\tmsg = result.ocs.meta.message;\n\t\t\t\t}\n\n\t\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\t\toptions.error(self, msg);\n\t\t\t\t} else {\n\t\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error while sharing'));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Deletes the share with the given id\n\t\t *\n\t\t * @param {int} shareId share id\n\t\t * @return {jQuery}\n\t\t */\n\t\tremoveShare: function(shareId, options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\t\t\treturn $.ajax({\n\t\t\t\ttype: 'DELETE',\n\t\t\t\turl: this._getUrl('shares/' + encodeURIComponent(shareId)),\n\t\t\t}).done(function() {\n\t\t\t\tself.fetch({\n\t\t\t\t\tsuccess: function() {\n\t\t\t\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t\t\t\toptions.success(self);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).fail(function(xhr) {\n\t\t\t\tvar msg = t('core', 'Error');\n\t\t\t\tvar result = xhr.responseJSON;\n\t\t\t\tif (result.ocs && result.ocs.meta) {\n\t\t\t\t\tmsg = result.ocs.meta.message;\n\t\t\t\t}\n\n\t\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\t\toptions.error(self, msg);\n\t\t\t\t} else {\n\t\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error removing share'));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisPublicUploadAllowed: function() {\n\t\t\treturn this.get('allowPublicUploadStatus');\n\t\t},\n\n\t\tisPublicEditingAllowed: function() {\n\t\t\treturn this.get('allowPublicEditingStatus');\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisHideFileListSet: function() {\n\t\t\treturn this.get('hideFileListStatus');\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFolder: function() {\n\t\t\treturn this.get('itemType') === 'folder';\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFile: function() {\n\t\t\treturn this.get('itemType') === 'file';\n\t\t},\n\n\t\t/**\n\t\t * whether this item has reshare information\n\t\t * @returns {boolean}\n\t\t */\n\t\thasReshare: function() {\n\t\t\tvar reshare = this.get('reshare');\n\t\t\treturn _.isObject(reshare) && !_.isUndefined(reshare.uid_owner);\n\t\t},\n\n\t\t/**\n\t\t * whether this item has user share information\n\t\t * @returns {boolean}\n\t\t */\n\t\thasUserShares: function() {\n\t\t\treturn this.getSharesWithCurrentItem().length > 0;\n\t\t},\n\n\t\t/**\n\t\t * Returns whether this item has link shares\n\t\t *\n\t\t * @return {bool} true if a link share exists, false otherwise\n\t\t */\n\t\thasLinkShares: function() {\n\t\t\tvar linkShares = this.get('linkShares');\n\t\t\tif (linkShares && linkShares.length > 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareOwner: function() {\n\t\t\treturn this.get('reshare').uid_owner;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareOwnerDisplayname: function() {\n\t\t\treturn this.get('reshare').displayname_owner;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareNote: function() {\n\t\t\treturn this.get('reshare').note;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareWith: function() {\n\t\t\treturn this.get('reshare').share_with;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareWithDisplayName: function() {\n\t\t\tvar reshare = this.get('reshare');\n\t\t\treturn reshare.share_with_displayname || reshare.share_with;\n\t\t},\n\n\t\t/**\n\t\t * @returns {number}\n\t\t */\n\t\tgetReshareType: function() {\n\t\t\treturn this.get('reshare').share_type;\n\t\t},\n\n\t\tgetExpireDate: function(shareIndex) {\n\t\t\treturn this._shareExpireDate(shareIndex);\n\t\t},\n\n\t\tgetNote: function(shareIndex) {\n\t\t\treturn this._shareNote(shareIndex);\n\t\t},\n\n\t\t/**\n\t\t * Returns all share entries that only apply to the current item\n\t\t * (file/folder)\n\t\t *\n\t\t * @return {Array.<OC.Share.Types.ShareInfo>}\n\t\t */\n\t\tgetSharesWithCurrentItem: function() {\n\t\t\tvar shares = this.get('shares') || [];\n\t\t\tvar fileId = this.fileInfoModel.get('id');\n\t\t\treturn _.filter(shares, function(share) {\n\t\t\t\treturn share.item_source === fileId;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetShareWith: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_with;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetShareWithDisplayName: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_with_displayname;\n\t\t},\n\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetShareWithAvatar: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_with_avatar;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetSharedBy: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.uid_owner;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetSharedByDisplayName: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.displayname_owner;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetFileOwnerUid: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.uid_file_owner;\n\t\t},\n\n\t\t/**\n\t\t * returns the array index of a sharee for a provided shareId\n\t\t *\n\t\t * @param shareId\n\t\t * @returns {number}\n\t\t */\n\t\tfindShareWithIndex: function(shareId) {\n\t\t\tvar shares = this.get('shares');\n\t\t\tif(!_.isArray(shares)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\tfor(var i = 0; i < shares.length; i++) {\n\t\t\t\tvar shareWith = shares[i];\n\t\t\t\tif(shareWith.id === shareId) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow \"Unknown Sharee\";\n\t\t},\n\n\t\tgetShareType: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_type;\n\t\t},\n\n\t\t/**\n\t\t * whether a share from shares has the requested permission\n\t\t *\n\t\t * @param {number} shareIndex\n\t\t * @param {number} permission\n\t\t * @returns {boolean}\n\t\t * @private\n\t\t */\n\t\t_shareHasPermission: function(shareIndex, permission) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn (share.permissions & permission) === permission;\n\t\t},\n\n\n\t\t_shareExpireDate: function(shareIndex) {\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\tvar date2 = share.expiration;\n\t\t\treturn date2;\n\t\t},\n\n\n\t\t_shareNote: function(shareIndex) {\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.note;\n\t\t},\n\n\t\t/**\n\t\t * @return {int}\n\t\t */\n\t\tgetPermissions: function() {\n\t\t\treturn this.get('permissions');\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tsharePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_SHARE) === OC.PERMISSION_SHARE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasSharePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_SHARE);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tcreatePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_CREATE) === OC.PERMISSION_CREATE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasCreatePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_CREATE);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tupdatePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_UPDATE) === OC.PERMISSION_UPDATE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasUpdatePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_UPDATE);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tdeletePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_DELETE) === OC.PERMISSION_DELETE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasDeletePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_DELETE);\n\t\t},\n\n\t\thasReadPermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_READ);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\teditPermissionPossible: function() {\n\t\t\treturn this.createPermissionPossible()\n\t\t\t\t || this.updatePermissionPossible()\n\t\t\t\t || this.deletePermissionPossible();\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t * The state that the 'can edit' permission checkbox should have.\n\t\t * Possible values:\n\t\t * - empty string: no permission\n\t\t * - 'checked': all applicable permissions\n\t\t * - 'indeterminate': some but not all permissions\n\t\t */\n\t\teditPermissionState: function(shareIndex) {\n\t\t\tvar hcp = this.hasCreatePermission(shareIndex);\n\t\t\tvar hup = this.hasUpdatePermission(shareIndex);\n\t\t\tvar hdp = this.hasDeletePermission(shareIndex);\n\t\t\tif (this.isFile()) {\n\t\t\t\tif (hcp || hup || hdp) {\n\t\t\t\t\treturn 'checked';\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tif (!hcp && !hup && !hdp) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tif ( (this.createPermissionPossible() && !hcp)\n\t\t\t\t|| (this.updatePermissionPossible() && !hup)\n\t\t\t\t|| (this.deletePermissionPossible() && !hdp) ) {\n\t\t\t\treturn 'indeterminate';\n\t\t\t}\n\t\t\treturn 'checked';\n\t\t},\n\n\t\t/**\n\t\t * @returns {int}\n\t\t */\n\t\tlinkSharePermissions: function(shareId) {\n\t\t\tvar linkShares = this.get('linkShares');\n\t\t\tvar shareIndex = _.findIndex(linkShares, function(share) {return share.id === shareId})\n\n\t\t\tif (!this.hasLinkShares()) {\n\t\t\t\treturn -1;\n\t\t\t} else if (linkShares.length > 0 && shareIndex !== -1) {\n\t\t\t\treturn linkShares[shareIndex].permissions;\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\n\t\t_getUrl: function(base, params) {\n\t\t\tparams = _.extend({format: 'json'}, params || {});\n\t\t\treturn OC.linkToOCS('apps/files_sharing/api/v1', 2) + base + '?' + OC.buildQueryString(params);\n\t\t},\n\n\t\t_fetchShares: function() {\n\t\t\tvar path = this.fileInfoModel.getFullPath();\n\t\t\treturn $.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: this._getUrl('shares', {path: path, reshares: true})\n\t\t\t});\n\t\t},\n\n\t\t_fetchReshare: function() {\n\t\t\t// only fetch original share once\n\t\t\tif (!this._reshareFetched) {\n\t\t\t\tvar path = this.fileInfoModel.getFullPath();\n\t\t\t\tthis._reshareFetched = true;\n\t\t\t\treturn $.ajax({\n\t\t\t\t\ttype: 'GET',\n\t\t\t\t\turl: this._getUrl('shares', {path: path, shared_with_me: true})\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn $.Deferred().resolve([{\n\t\t\t\t\tocs: {\n\t\t\t\t\t\tdata: [this.get('reshare')]\n\t\t\t\t\t}\n\t\t\t\t}]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Group reshares into a single super share element.\n\t\t * Does this by finding the most precise share and\n\t\t * combines the permissions to be the most permissive.\n\t\t *\n\t\t * @param {Array} reshares\n\t\t * @return {Object} reshare\n\t\t */\n\t\t_groupReshares: function(reshares) {\n\t\t\tif (!reshares || !reshares.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar superShare = reshares.shift();\n\t\t\tvar combinedPermissions = superShare.permissions;\n\t\t\t_.each(reshares, function(reshare) {\n\t\t\t\t// use share have higher priority than group share\n\t\t\t\tif (reshare.share_type === OC.Share.SHARE_TYPE_USER && superShare.share_type === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\tsuperShare = reshare;\n\t\t\t\t}\n\t\t\t\tcombinedPermissions |= reshare.permissions;\n\t\t\t});\n\n\t\t\tsuperShare.permissions = combinedPermissions;\n\t\t\treturn superShare;\n\t\t},\n\n\t\tfetch: function(options) {\n\t\t\tvar model = this;\n\t\t\tthis.trigger('request', this);\n\n\t\t\tvar deferred = $.when(\n\t\t\t\tthis._fetchShares(),\n\t\t\t\tthis._fetchReshare()\n\t\t\t);\n\t\t\tdeferred.done(function(data1, data2) {\n\t\t\t\tmodel.trigger('sync', 'GET', this);\n\t\t\t\tvar sharesMap = {};\n\t\t\t\t_.each(data1[0].ocs.data, function(shareItem) {\n\t\t\t\t\tsharesMap[shareItem.id] = shareItem;\n\t\t\t\t});\n\n\t\t\t\tvar reshare = false;\n\t\t\t\tif (data2[0].ocs.data.length) {\n\t\t\t\t\treshare = model._groupReshares(data2[0].ocs.data);\n\t\t\t\t}\n\n\t\t\t\tmodel.set(model.parse({\n\t\t\t\t\tshares: sharesMap,\n\t\t\t\t\treshare: reshare\n\t\t\t\t}));\n\n\t\t\t\tif(!_.isUndefined(options) && _.isFunction(options.success)) {\n\t\t\t\t\toptions.success();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn deferred;\n\t\t},\n\n\t\t/**\n\t\t * Updates OC.Share.itemShares and OC.Share.statuses.\n\t\t *\n\t\t * This is required in case the user navigates away and comes back,\n\t\t * the share statuses from the old arrays are still used to fill in the icons\n\t\t * in the file list.\n\t\t */\n\t\t_legacyFillCurrentShares: function(shares) {\n\t\t\tvar fileId = this.fileInfoModel.get('id');\n\t\t\tif (!shares || !shares.length) {\n\t\t\t\tdelete OC.Share.statuses[fileId];\n\t\t\t\tOC.Share.currentShares = {};\n\t\t\t\tOC.Share.itemShares = [];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar currentShareStatus = OC.Share.statuses[fileId];\n\t\t\tif (!currentShareStatus) {\n\t\t\t\tcurrentShareStatus = {link: false};\n\t\t\t\tOC.Share.statuses[fileId] = currentShareStatus;\n\t\t\t}\n\t\t\tcurrentShareStatus.link = false;\n\n\t\t\tOC.Share.currentShares = {};\n\t\t\tOC.Share.itemShares = [];\n\t\t\t_.each(shares,\n\t\t\t\t/**\n\t\t\t\t * @param {OC.Share.Types.ShareInfo} share\n\t\t\t\t */\n\t\t\t\tfunction(share) {\n\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\tOC.Share.itemShares[share.share_type] = true;\n\t\t\t\t\t\tcurrentShareStatus.link = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!OC.Share.itemShares[share.share_type]) {\n\t\t\t\t\t\t\tOC.Share.itemShares[share.share_type] = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tOC.Share.itemShares[share.share_type].push(share.share_with);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\tparse: function(data) {\n\t\t\tif(data === false) {\n\t\t\t\tconsole.warn('no data was returned');\n\t\t\t\tthis.trigger('fetchError');\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tvar permissions = this.fileInfoModel.get('permissions');\n\t\t\tif(!_.isUndefined(data.reshare) && !_.isUndefined(data.reshare.permissions) && data.reshare.uid_owner !== OC.currentUser) {\n\t\t\t\tpermissions = permissions & data.reshare.permissions;\n\t\t\t}\n\n\t\t\tvar allowPublicUploadStatus = false;\n\t\t\tif(!_.isUndefined(data.shares)) {\n\t\t\t\t$.each(data.shares, function (key, value) {\n\t\t\t\t\tif (value.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\tallowPublicUploadStatus = (value.permissions & OC.PERMISSION_CREATE) ? true : false;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar allowPublicEditingStatus = true;\n\t\t\tif(!_.isUndefined(data.shares)) {\n\t\t\t\t$.each(data.shares, function (key, value) {\n\t\t\t\t\tif (value.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\tallowPublicEditingStatus = (value.permissions & OC.PERMISSION_UPDATE) ? true : false;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tvar hideFileListStatus = false;\n\t\t\tif(!_.isUndefined(data.shares)) {\n\t\t\t\t$.each(data.shares, function (key, value) {\n\t\t\t\t\tif (value.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\thideFileListStatus = (value.permissions & OC.PERMISSION_READ) ? false : true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/** @type {OC.Share.Types.ShareInfo[]} **/\n\t\t\tvar shares = _.map(data.shares, function(share) {\n\t\t\t\t// properly parse some values because sometimes the server\n\t\t\t\t// returns integers as string...\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < SHARE_RESPONSE_INT_PROPS.length; i++) {\n\t\t\t\t\tvar prop = SHARE_RESPONSE_INT_PROPS[i];\n\t\t\t\t\tif (!_.isUndefined(share[prop])) {\n\t\t\t\t\t\tshare[prop] = parseInt(share[prop], 10);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn share;\n\t\t\t});\n\n\t\t\tthis._legacyFillCurrentShares(shares);\n\n\t\t\tvar linkShares = [];\n\t\t\t// filter out the share by link\n\t\t\tshares = _.reject(shares,\n\t\t\t\t/**\n\t\t\t\t * @param {OC.Share.Types.ShareInfo} share\n\t\t\t\t */\n\t\t\t\tfunction(share) {\n\t\t\t\t\tvar isShareLink =\n\t\t\t\t\t\tshare.share_type === OC.Share.SHARE_TYPE_LINK\n\t\t\t\t\t\t&& ( share.file_source === this.get('itemSource')\n\t\t\t\t\t\t|| share.item_source === this.get('itemSource'));\n\n\t\t\t\t\tif (isShareLink) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Ignore reshared link shares for now\n\t\t\t\t\t\t * FIXME: Find a way to display properly\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (share.uid_owner !== OC.currentUser) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar link = window.location.protocol + '//' + window.location.host;\n\t\t\t\t\t\tif (!share.token) {\n\t\t\t\t\t\t\t// pre-token link\n\t\t\t\t\t\t\tvar fullPath = this.fileInfoModel.get('path') + '/' +\n\t\t\t\t\t\t\t\tthis.fileInfoModel.get('name');\n\t\t\t\t\t\t\tvar location = '/' + OC.currentUser + '/files' + fullPath;\n\t\t\t\t\t\t\tvar type = this.fileInfoModel.isDirectory() ? 'folder' : 'file';\n\t\t\t\t\t\t\tlink += OC.linkTo('', 'public.php') + '?service=files&' +\n\t\t\t\t\t\t\t\ttype + '=' + encodeURIComponent(location);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlink += OC.generateUrl('/s/') + share.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlinkShares.push(_.extend({}, share, {\n\t\t\t\t\t\t\t// hide_download is returned as an int, so force it\n\t\t\t\t\t\t\t// to a boolean\n\t\t\t\t\t\t\thideDownload: !!share.hide_download,\n\t\t\t\t\t\t\tpassword: share.share_with,\n\t\t\t\t\t\t\tsendPasswordByTalk: share.send_password_by_talk\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\treturn share;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tthis\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\treshare: data.reshare,\n\t\t\t\tshares: shares,\n\t\t\t\tlinkShares: linkShares,\n\t\t\t\tpermissions: permissions,\n\t\t\t\tallowPublicUploadStatus: allowPublicUploadStatus,\n\t\t\t\tallowPublicEditingStatus: allowPublicEditingStatus,\n\t\t\t\thideFileListStatus: hideFileListStatus\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Parses a string to an valid integer (unix timestamp)\n\t\t * @param time\n\t\t * @returns {*}\n\t\t * @internal Only used to work around a bug in the backend\n\t\t */\n\t\t_parseTime: function(time) {\n\t\t\tif (_.isString(time)) {\n\t\t\t\t// skip empty strings and hex values\n\t\t\t\tif (time === '' || (time.length > 1 && time[0] === '0' && time[1] === 'x')) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\ttime = parseInt(time, 10);\n\t\t\t\tif(isNaN(time)) {\n\t\t\t\t\ttime = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn time;\n\t\t},\n\n\t\t/**\n\t\t * Returns a list of share types from the existing shares.\n\t\t *\n\t\t * @return {Array.<int>} array of share types\n\t\t */\n\t\tgetShareTypes: function() {\n\t\t\tvar result;\n\t\t\tresult = _.pluck(this.getSharesWithCurrentItem(), 'share_type');\n\t\t\tif (this.hasLinkShares()) {\n\t\t\t\tresult.push(OC.Share.SHARE_TYPE_LINK);\n\t\t\t}\n\t\t\treturn _.uniq(result);\n\t\t}\n\t});\n\n\tOC.Share.ShareItemModel = ShareItemModel;\n})();\n","/**\n * @copyright 2017, Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\tOC.Share.Social = {};\n\n\tvar SocialModel = OC.Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\t/** used for sorting social buttons */\n\t\t\tkey: null,\n\t\t\t/** url to open, {{reference}} will be replaced with the link */\n\t\t\turl: null,\n\t\t\t/** Name to show in the tooltip */\n\t\t\tname: null,\n\t\t\t/** Icon class to display */\n\t\t\ticonClass: null,\n\t\t\t/** Open in new windows */\n\t\t\tnewWindow: true\n\t\t}\n\t});\n\n\tOC.Share.Social.Model = SocialModel;\n\n\tvar SocialCollection = OC.Backbone.Collection.extend({\n\t\tmodel: OC.Share.Social.Model,\n\n\t\tcomparator: 'key'\n\t});\n\n\n\tOC.Share.Social.Collection = new SocialCollection;\n})();\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Handlebars */\n\n(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\t/**\n\t * @class OCA.Share.ShareDialogView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogResharerInfoView = OC.Backbone.View.extend({\n\t\t/** @type {string} **/\n\t\tid: 'shareDialogResharerInfo',\n\n\t\t/** @type {string} **/\n\t\ttagName: 'div',\n\n\t\t/** @type {string} **/\n\t\tclassName: 'reshare',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t/** @type {Function} **/\n\t\t_template: undefined,\n\n\t\tinitialize: function(options) {\n\t\t\tvar view = this;\n\n\t\t\tthis.model.on('change:reshare', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\t\t},\n\n\t\trender: function() {\n\t\t\tif (!this.model.hasReshare()\n\t\t\t\t|| this.model.getReshareOwner() === OC.currentUser)\n\t\t\t{\n\t\t\t\tthis.$el.empty();\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar reshareTemplate = this.template();\n\t\t\tvar ownerDisplayName = this.model.getReshareOwnerDisplayname();\n\t\t\tvar shareNote = this.model.getReshareNote();\n\t\t\t\n\t\t\tvar sharedByText = '';\n\n\t\t\tif (this.model.getReshareType() === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\tsharedByText = t(\n\t\t\t\t\t'core',\n\t\t\t\t\t'Shared with you and the group {group} by {owner}',\n\t\t\t\t\t{\n\t\t\t\t\t\tgroup: this.model.getReshareWithDisplayName(),\n\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t{escape: false}\n\t\t\t\t);\n\t\t\t} else if (this.model.getReshareType() === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\tsharedByText = t(\n\t\t\t\t\t'core',\n\t\t\t\t\t'Shared with you and {circle} by {owner}',\n\t\t\t\t\t{\n\t\t\t\t\t\tcircle: this.model.getReshareWithDisplayName(),\n\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t{escape: false}\n\t\t\t\t);\n\t\t\t} else if (this.model.getReshareType() === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\tif (this.model.get('reshare').share_with_displayname) {\n\t\t\t\t\tsharedByText = t(\n\t\t\t\t\t\t'core',\n\t\t\t\t\t\t'Shared with you and the conversation {conversation} by {owner}',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconversation: this.model.getReshareWithDisplayName(),\n\t\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t{escape: false}\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tsharedByText = t(\n\t\t\t\t\t\t'core',\n\t\t\t\t\t\t'Shared with you in a conversation by {owner}',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t{escape: false}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsharedByText = t(\n\t\t\t\t\t'core',\n\t\t\t\t\t'Shared with you by {owner}',\n\t\t\t\t\t{ owner: ownerDisplayName },\n\t\t\t\t\tundefined,\n\t\t\t\t\t{escape: false}\n\t\t\t\t);\n\t\t\t}\n\n\n\n\t\t\tthis.$el.html(reshareTemplate({\n\t\t\t\treshareOwner: this.model.getReshareOwner(),\n\t\t\t\tsharedByText: sharedByText,\n\t\t\t\tshareNote: shareNote,\n\t\t\t\thasShareNote: shareNote !== ''\n\t\t\t}));\n\n\t\t\tthis.$el.find('.avatar').each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\t$this.avatar($this.data('username'), 32);\n\t\t\t});\n\n\t\t\tthis.$el.find('.reshare').contactsMenu(\n\t\t\t\tthis.model.getReshareOwner(),\n\t\t\t\tOC.Share.SHARE_TYPE_USER,\n\t\t\t\tthis.$el);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * @returns {Function} from Handlebars\n\t\t * @private\n\t\t */\n\t\ttemplate: function () {\n\t\t\treturn OC.Share.Templates['sharedialogresharerinfoview'];\n\t\t}\n\n\t});\n\n\tOC.Share.ShareDialogResharerInfoView = ShareDialogResharerInfoView;\n\n})();\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Clipboard, Handlebars */\n\n(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\tvar PASSWORD_PLACEHOLDER = '**********';\n\tvar PASSWORD_PLACEHOLDER_MESSAGE = t('core', 'Choose a password for the public link');\n\tvar PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL = t('core', 'Choose a password for the public link or press the \"Enter\" key');\n\n\t/**\n\t * @class OCA.Share.ShareDialogLinkShareView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogLinkShareView = OC.Backbone.View.extend({\n\t\t/** @type {string} **/\n\t\tid: 'shareDialogLinkShare',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t/** @type {boolean} **/\n\t\tshowLink: true,\n\n\t\t/** @type {boolean} **/\n\t\tshowPending: false,\n\n\t\t/** @type {string} **/\n\t\tpassword: '',\n\n\t\t/** @type {string} **/\n\t\tnewShareId: 'new-share',\n\n\t\tevents: {\n\t\t\t// open menu\n\t\t\t'click .share-menu .icon-more': 'onToggleMenu',\n\t\t\t// hide download\n\t\t\t'change .hideDownloadCheckbox': 'onHideDownloadChange',\n\t\t\t// password\n\t\t\t'click input.share-pass-submit': 'onPasswordEntered', \n\t\t\t'keyup input.linkPassText': 'onPasswordKeyUp', // check for the enter key\n\t\t\t'change .showPasswordCheckbox': 'onShowPasswordClick',\n\t\t\t'change .passwordByTalkCheckbox': 'onPasswordByTalkChange',\n\t\t\t'change .publicEditingCheckbox': 'onAllowPublicEditingChange',\n\t\t\t// copy link url\n\t\t\t'click .linkText': 'onLinkTextClick',\n\t\t\t// social\n\t\t\t'click .pop-up': 'onPopUpClick',\n\t\t\t// permission change\n\t\t\t'change .publicUploadRadio': 'onPublicUploadChange',\n\t\t\t// expire date\n\t\t\t'click .expireDate' : 'onExpireDateChange',\n\t\t\t'change .datepicker': 'onChangeExpirationDate',\n\t\t\t'click .datepicker' : 'showDatePicker',\n\t\t\t// note\n\t\t\t'click .share-add': 'showNoteForm',\n\t\t\t'click .share-note-delete': 'deleteNote',\n\t\t\t'click .share-note-submit': 'updateNote',\n\t\t\t// remove\n\t\t\t'click .unshare': 'onUnshare',\n\t\t\t// new share\n\t\t\t'click .new-share': 'newShare',\n\t\t\t// enforced pass set\n\t\t\t'submit .enforcedPassForm': 'enforcedPasswordSet',\n\t\t},\n\n\t\tinitialize: function(options) {\n\t\t\tvar view = this;\n\n\t\t\tthis.model.on('change:permissions', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:itemType', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:allowPublicUploadStatus', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:hideFileListStatus', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:linkShares', function(model, linkShares) {\n\t\t\t\t// The \"Password protect by Talk\" item is shown only when there\n\t\t\t\t// is a password. Unfortunately there is no fine grained\n\t\t\t\t// rendering of items in the link shares, so the whole view\n\t\t\t\t// needs to be rendered again when the password of a share\n\t\t\t\t// changes.\n\t\t\t\t// Note that this event handler is concerned only about password\n\t\t\t\t// changes; other changes in the link shares does not trigger\n\t\t\t\t// a rendering, so the view must be rendered again as needed in\n\t\t\t\t// those cases (for example, when a link share is removed).\n\t\t\t\t\n\t\t\t\tvar previousLinkShares = model.previous('linkShares');\n\t\t\t\tif (previousLinkShares.length !== linkShares.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < linkShares.length; i++) {\n\t\t\t\t\tif (linkShares[i].id !== previousLinkShares[i].id) {\n\t\t\t\t\t\t// A resorting should never happen, but just in case.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (linkShares[i].password !== previousLinkShares[i].password) {\n\t\t\t\t\t\tview.render();\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\n\t\t\tvar clipboard = new Clipboard('.clipboard-button');\n\t\t\tclipboard.on('success', function(e) {\n\t\t\t\tvar $trigger = $(e.trigger);\n\n\t\t\t\t$trigger.tooltip('hide')\n\t\t\t\t\t.attr('data-original-title', t('core', 'Copied!'))\n\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t.tooltip({placement: 'bottom', trigger: 'manual'})\n\t\t\t\t\t.tooltip('show');\n\t\t\t\t_.delay(function() {\n\t\t\t\t\t$trigger.tooltip('hide')\n\t\t\t\t\t\t.attr('data-original-title', t('core', 'Copy link'))\n\t\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t}, 3000);\n\t\t\t});\n\t\t\tclipboard.on('error', function (e) {\n\t\t\t\tvar $trigger = $(e.trigger);\n\t\t\t\tvar $menu = $trigger.next('.share-menu').find('.popovermenu');\n\t\t\t\tvar $linkTextMenu = $menu.find('li.linkTextMenu');\n\t\t\t\tvar $input = $linkTextMenu.find('.linkText');\n\n\t\t\t\tvar $li = $trigger.closest('li[data-share-id]');\n\t\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\t\t// show menu\n\t\t\t\tOC.showMenu(null, $menu);\n\n\t\t\t\tvar actionMsg = '';\n\t\t\t\tif (/iPhone|iPad/i.test(navigator.userAgent)) {\n\t\t\t\t\tactionMsg = t('core', 'Not supported!');\n\t\t\t\t} else if (/Mac/i.test(navigator.userAgent)) {\n\t\t\t\t\tactionMsg = t('core', 'Press ⌘-C to copy.');\n\t\t\t\t} else {\n\t\t\t\t\tactionMsg = t('core', 'Press Ctrl-C to copy.');\n\t\t\t\t}\n\n\t\t\t\t$linkTextMenu.removeClass('hidden');\n\t\t\t\t$input.select();\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t\t.attr('data-original-title', actionMsg)\n\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t.tooltip({placement: 'bottom', trigger: 'manual'})\n\t\t\t\t\t.tooltip('show');\n\t\t\t\t_.delay(function () {\n\t\t\t\t\t$input.tooltip('hide');\n\t\t\t\t\t$input.attr('data-original-title', t('core', 'Copy'))\n\t\t\t\t\t\t .tooltip('fixTitle');\n\t\t\t\t}, 3000);\n\t\t\t});\n\t\t},\n\n\t\tnewShare: function(event) {\n\t\t\tvar self = this;\n\t\t\tvar $target = $(event.target);\n\t\t\tvar $li = $target.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $loading = $li.find('.share-menu > .icon-loading-small');\n\n\t\t\tif(!$loading.hasClass('hidden') && this.password === '') {\n\t\t\t\t// in process\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// hide all icons and show loading\n\t\t\t$li.find('.icon').addClass('hidden');\n\t\t\t$loading.removeClass('hidden');\n\n\t\t\t// hide menu\n\t\t\tOC.hideMenus();\n\n\t\t\tvar shareData = {}\n\n\t\t\tvar isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink');\n\t\t\tvar isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');\n\n\t\t\t// set default expire date\n\t\t\tif (isExpirationEnforced) {\n\t\t\t\tvar defaultExpireDays = this.configModel.get('defaultExpireDate');\n\t\t\t\tvar expireDate = moment().add(defaultExpireDays, 'day').format('DD-MM-YYYY')\n\t\t\t\tshareData.expireDate = expireDate;\n\t\t\t}\n\n\t\t\t// if password is set, add to data\n\t\t\tif (isPasswordEnforced && this.password !== '') {\n\t\t\t\tshareData.password = this.password\n\t\t\t}\n\n\t\t\tvar newShareId = false;\n\n\t\t\t// We need a password before the share creation\n\t\t\tif (isPasswordEnforced && !this.showPending && this.password === '') {\n\t\t\t\tthis.showPending = shareId;\n\t\t\t\tvar self = this.render();\n\t\t\t\tself.$el.find('.pending #enforcedPassText').focus();\n\t\t\t} else {\n\t\t\t\t// else, we have a password or it is not enforced\n\t\t\t\t$.when(this.model.saveLinkShare(shareData, {\n\t\t\t\t\tsuccess: function() {\n\t\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t\t$li.find('.icon').removeClass('hidden');\n\t\t\t\t\t\tself.render();\n\t\t\t\t\t\t// open the menu by default\n\t\t\t\t\t\t// we can only do that after the render\n\t\t\t\t\t\tif (newShareId) {\n\t\t\t\t\t\t\tvar shares = self.$el.find('li[data-share-id]');\n\t\t\t\t\t\t\tvar $newShare = self.$el.find('li[data-share-id=\"'+newShareId+'\"]');\n\t\t\t\t\t\t\t// only open the menu by default if this is the first share\n\t\t\t\t\t\t\tif ($newShare && shares.length === 1) {\n\t\t\t\t\t\t\t\tvar $menu = $newShare.find('.popovermenu');\n\t\t\t\t\t\t\t\tOC.showMenu(null, $menu);\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\terror: function() {\n\t\t\t\t\t\t// empty function to override the default Dialog warning\n\t\t\t\t\t}\n\t\t\t\t})).fail(function(response) {\n\t\t\t\t\t// password failure? Show error\n\t\t\t\t\tself.password = ''\n\t\t\t\t\tif (isPasswordEnforced && response && response.responseJSON && response.responseJSON.ocs.meta && response.responseJSON.ocs.meta.message) {\n\t\t\t\t\t\tvar $input = self.$el.find('.pending #enforcedPassText')\n\t\t\t\t\t\t$input.tooltip('destroy');\n\t\t\t\t\t\t$input.attr('title', response.responseJSON.ocs.meta.message);\n\t\t\t\t\t\t$input.tooltip({placement: 'bottom', trigger: 'manual'});\n\t\t\t\t\t\t$input.tooltip('show');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to create a link share'));\n\t\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t\t$li.find('.icon').removeClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t}).then(function(response) {\n\t\t\t\t\t// resolve before success\n\t\t\t\t\tnewShareId = response.ocs.data.id\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tenforcedPasswordSet: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tvar $form = $(event.target);\n\t\t\tvar $input = $form.find('input.enforcedPassText');\n\t\t\tthis.password = $input.val();\n\t\t\tthis.showPending = false;\n\t\t\tthis.newShare(event);\n\t\t},\n\n\t\tonLinkTextClick: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $el = $li.find('.linkText');\n\t\t\t$el.focus();\n\t\t\t$el.select();\n\t\t},\n\n\t\tonHideDownloadChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $checkbox = $li.find('.hideDownloadCheckbox');\n\t\t\t$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');\n\n\t\t\tvar hideDownload = false;\n\t\t\tif($checkbox.is(':checked')) {\n\t\t\t\thideDownload = true;\n\t\t\t}\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\thideDownload: hideDownload,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t},\n\t\t\t\terror: function(obj, msg) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to toggle this option'));\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonShowPasswordClick: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\t$li.find('.linkPass').slideToggle(OC.menuSpeed);\n\t\t\t$li.find('.linkPassMenu').toggleClass('hidden');\n\t\t\tif(!$li.find('.showPasswordCheckbox').is(':checked')) {\n\t\t\t\tthis.model.saveLinkShare({\n\t\t\t\t\tpassword: '',\n\t\t\t\t\tcid: shareId\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (!OC.Util.isIE()) {\n\t\t\t\t\t$li.find('.linkPassText').focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tonPasswordKeyUp: function(event) {\n\t\t\tif(event.keyCode === 13) {\n\t\t\t\tthis.onPasswordEntered(event);\n\t\t\t}\n\t\t},\n\n\t\tonPasswordEntered: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $loading = $li.find('.linkPassMenu .icon-loading-small');\n\t\t\tif (!$loading.hasClass('hidden')) {\n\t\t\t\t// still in process\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar $input = $li.find('.linkPassText');\n\t\t\t$input.removeClass('error');\n\t\t\tvar password = $input.val();\n\n\t\t\tif ($li.find('.linkPassText').attr('placeholder') === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) {\n\n\t\t\t\t// in IE9 the password might be the placeholder due to bugs in the placeholders polyfill\n\t\t\t\tif(password === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) {\n\t\t\t\t\tpassword = '';\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// in IE9 the password might be the placeholder due to bugs in the placeholders polyfill\n\t\t\t\tif(password === '' || password === PASSWORD_PLACEHOLDER || password === PASSWORD_PLACEHOLDER_MESSAGE) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$loading\n\t\t\t\t.removeClass('hidden')\n\t\t\t\t.addClass('inlineblock');\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tpassword: password,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tcomplete: function(model) {\n\t\t\t\t\t$loading.removeClass('inlineblock').addClass('hidden');\n\t\t\t\t},\n\t\t\t\terror: function(model, msg) {\n\t\t\t\t\t// destroy old tooltips\n\t\t\t\t\tvar $container = $input.parent();\n\t\t\t\t\t$container.tooltip('destroy');\n\t\t\t\t\t$input.addClass('error');\n\t\t\t\t\t$container.attr('title', msg);\n\t\t\t\t\t$container.tooltip({placement: 'bottom', trigger: 'manual'});\n\t\t\t\t\t$container.tooltip('show');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonPasswordByTalkChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $checkbox = $li.find('.passwordByTalkCheckbox');\n\t\t\t$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');\n\n\t\t\tvar sendPasswordByTalk = false;\n\t\t\tif($checkbox.is(':checked')) {\n\t\t\t\tsendPasswordByTalk = true;\n\t\t\t}\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tsendPasswordByTalk: sendPasswordByTalk,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t},\n\t\t\t\terror: function(obj, msg) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to toggle this option'));\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonAllowPublicEditingChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $checkbox = $li.find('.publicEditingCheckbox');\n\t\t\t$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');\n\n\t\t\tvar permissions = OC.PERMISSION_READ;\n\t\t\tif($checkbox.is(':checked')) {\n\t\t\t\tpermissions = OC.PERMISSION_UPDATE | OC.PERMISSION_READ;\n\t\t\t}\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tpermissions: permissions,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t},\n\t\t\t\terror: function(obj, msg) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to toggle this option'));\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\tonPublicUploadChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar permissions = event.currentTarget.value;\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tpermissions: permissions,\n\t\t\t\tcid: shareId\n\t\t\t});\n\t\t},\n\n\t\tshowNoteForm: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\t// show elements\n\t\t\t$menu.find('.share-note-delete').toggleClass('hidden');\n\t\t\t$form.toggleClass('hidden');\n\t\t\t$form.find('textarea').focus();\n\t\t},\n\n\t\tdeleteNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\t$form.find('.share-note').val('');\n\n\t\t\t$form.addClass('hidden');\n\t\t\t$menu.find('.share-note-delete').addClass('hidden');\n\n\t\t\tself.sendNote('', shareId, $menu);\n\t\t},\n\n\t\tupdateNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $form = $element.closest('li.share-note-form');\n\t\t\tvar $menu = $form.prev('li');\n\t\t\tvar message = $form.find('.share-note').val().trim();\n\n\t\t\tif (message.length < 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.sendNote(message, shareId, $menu);\n\t\t},\n\n\t\tsendNote: function(note, shareId, $menu) {\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\t\t\tvar $submit = $form.find('input.share-note-submit');\n\t\t\tvar $error = $form.find('input.share-note-error');\n\n\t\t\t$submit.prop('disabled', true);\n\t\t\t$menu.find('.icon-loading-small').removeClass('hidden');\n\t\t\t$menu.find('.icon-edit').hide();\n\n\t\t\tvar complete = function() {\n\t\t\t\t$submit.prop('disabled', false);\n\t\t\t\t$menu.find('.icon-loading-small').addClass('hidden');\n\t\t\t\t$menu.find('.icon-edit').show();\n\t\t\t};\n\t\t\tvar error = function() {\n\t\t\t\t$error.show();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$error.hide();\n\t\t\t\t}, 3000);\n\t\t\t};\n\n\t\t\t// send data\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'PUT',\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1/shares',2) + shareId + '?' + OC.buildQueryString({format: 'json'}),\n\t\t\t\tdata: { note: note },\n\t\t\t\tcomplete : complete,\n\t\t\t\terror: error\n\t\t\t});\n\t\t},\n\n\t\trender: function() {\n\t\t\tthis.$el.find('.has-tooltip').tooltip();\n\n\t\t\t// reset previously set passwords\n\t\t\tthis.password = '';\n\n\t\t\tvar linkShareTemplate = this.template();\n\t\t\tvar resharingAllowed = this.model.sharePermissionPossible();\n\n\t\t\tif(!resharingAllowed\n\t\t\t\t|| !this.showLink\n\t\t\t\t|| !this.configModel.isShareWithLinkAllowed())\n\t\t\t{\n\t\t\t\tvar templateData = {shareAllowed: false};\n\t\t\t\tif (!resharingAllowed) {\n\t\t\t\t\t// add message\n\t\t\t\t\ttemplateData.noSharingPlaceholder = t('core', 'Resharing is not allowed');\n\t\t\t\t}\n\t\t\t\tthis.$el.html(linkShareTemplate(templateData));\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar publicUpload =\n\t\t\t\tthis.model.isFolder()\n\t\t\t\t&& this.model.createPermissionPossible()\n\t\t\t\t&& this.configModel.isPublicUploadEnabled();\n\n\n\t\t\tvar publicEditingChecked = '';\n\t\t\tif(this.model.isPublicEditingAllowed()) {\n\t\t\t\tpublicEditingChecked = 'checked=\"checked\"';\n\t\t\t}\n\n\t\t\tvar isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink');\n\t\t\tvar isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true;\n\t\t\tvar passwordPlaceholderInitial = this.configModel.get('enforcePasswordForPublicLink')\n\t\t\t\t? PASSWORD_PLACEHOLDER_MESSAGE : PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL;\n\n\t\t\tvar publicEditable =\n\t\t\t\t!this.model.isFolder()\n\t\t\t\t&& this.model.updatePermissionPossible();\n\n\t\t\tvar isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');\n\n\t\t\t// what if there is another date picker on that page?\n\t\t\tvar minDate = new Date();\n\t\t\t// min date should always be the next day\n\t\t\tminDate.setDate(minDate.getDate()+1);\n\n\t\t\t$.datepicker.setDefaults({\n\t\t\t\tminDate: minDate\n\t\t\t});\n\n\t\t\tthis.$el.find('.datepicker').datepicker({dateFormat : 'dd-mm-yy'});\n\n\t\t\tvar minPasswordLength = 4\n\t\t\t// password policy?\n\t\t\tif(oc_capabilities.password_policy && oc_capabilities.password_policy.minLength) {\n\t\t\t\tminPasswordLength = oc_capabilities.password_policy.minLength;\n\t\t\t}\n\n\t\t\tvar popoverBase = {\n\t\t\t\turlLabel: t('core', 'Link'),\n\t\t\t\thideDownloadLabel: t('core', 'Hide download'),\n\t\t\t\tenablePasswordLabel: isPasswordEnforced ? t('core', 'Password protection enforced') : t('core', 'Password protect'),\n\t\t\t\tpasswordLabel: t('core', 'Password'),\n\t\t\t\tpasswordPlaceholderInitial: passwordPlaceholderInitial,\n\t\t\t\tpublicUpload: publicUpload,\n\t\t\t\tpublicEditing: publicEditable,\n\t\t\t\tpublicEditingChecked: publicEditingChecked,\n\t\t\t\tpublicEditingLabel: t('core', 'Allow editing'),\n\t\t\t\tmailPrivatePlaceholder: t('core', 'Email link to person'),\n\t\t\t\tmailButtonText: t('core', 'Send'),\n\t\t\t\tpublicUploadRWLabel: t('core', 'Allow upload and editing'),\n\t\t\t\tpublicUploadRLabel: t('core', 'Read only'),\n\t\t\t\tpublicUploadWLabel: t('core', 'File drop (upload only)'),\n\t\t\t\tpublicUploadRWValue: OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE,\n\t\t\t\tpublicUploadRValue: OC.PERMISSION_READ,\n\t\t\t\tpublicUploadWValue: OC.PERMISSION_CREATE,\n\t\t\t\texpireDateLabel: isExpirationEnforced ? t('core', 'Expiration date enforced') : t('core', 'Set expiration date'),\n\t\t\t\texpirationLabel: t('core', 'Expiration'),\n\t\t\t\texpirationDatePlaceholder: t('core', 'Expiration date'),\n\t\t\t\tisExpirationEnforced: isExpirationEnforced,\n\t\t\t\tisPasswordEnforced: isPasswordEnforced,\n\t\t\t\tdefaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today\n\t\t\t\taddNoteLabel: t('core', 'Note to recipient'),\n\t\t\t\tunshareLabel: t('core', 'Unshare'),\n\t\t\t\tunshareLinkLabel: t('core', 'Delete share link'),\n\t\t\t\tnewShareLabel: t('core', 'Add another link'),\n\t\t\t};\n\n\t\t\tvar pendingPopover = {\n\t\t\t\tisPasswordEnforced: isPasswordEnforced,\n\t\t\t\tenforcedPasswordLabel: t('core', 'Password protection for links is mandatory'),\n\t\t\t\tpasswordPlaceholder: passwordPlaceholderInitial,\n\t\t\t\tminPasswordLength: minPasswordLength,\n\t\t\t};\n\t\t\tvar pendingPopoverMenu = this.pendingPopoverMenuTemplate(_.extend({}, pendingPopover))\n\n\t\t\tvar linkShares = this.getShareeList();\n\t\t\tif(_.isArray(linkShares)) {\n\t\t\t\tfor (var i = 0; i < linkShares.length; i++) {\n\t\t\t\t\tvar social = [];\n\t\t\t\t\tOC.Share.Social.Collection.each(function (model) {\n\t\t\t\t\t\tvar url = model.get('url');\n\t\t\t\t\t\turl = url.replace('{{reference}}', linkShares[i].shareLinkURL);\n\t\t\t\t\t\tsocial.push({\n\t\t\t\t\t\t\turl: url,\n\t\t\t\t\t\t\tlabel: t('core', 'Share to {name}', {name: model.get('name')}),\n\t\t\t\t\t\t\tname: model.get('name'),\n\t\t\t\t\t\t\ticonClass: model.get('iconClass'),\n\t\t\t\t\t\t\tnewWindow: model.get('newWindow')\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tvar popover = this.getPopoverObject(linkShares[i])\n\t\t\t\t\tlinkShares[i].popoverMenu = this.popoverMenuTemplate(_.extend({}, popoverBase, popover, {social: social}));\n\t\t\t\t\tlinkShares[i].pendingPopoverMenu = pendingPopoverMenu\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$el.html(linkShareTemplate({\n\t\t\t\tlinkShares: linkShares,\n\t\t\t\tshareAllowed: true,\n\t\t\t\tnolinkShares: linkShares.length === 0,\n\t\t\t\tnewShareLabel: t('core', 'Share link'),\n\t\t\t\tnewShareTitle: t('core', 'New share link'),\n\t\t\t\tpendingPopoverMenu: pendingPopoverMenu,\n\t\t\t\tshowPending: this.showPending === this.newShareId,\n\t\t\t\tnewShareId: this.newShareId,\n\t\t\t}));\n\n\t\t\tthis.delegateEvents();\n\n\t\t\t// new note autosize\n\t\t\tautosize(this.$el.find('.share-note-form .share-note'));\n\n\t\t\treturn this;\n\t\t},\n\n\t\tonToggleMenu: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $menu = $li.find('.sharingOptionsGroup .popovermenu');\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tOC.showMenu(null, $menu);\n\n\t\t\t// focus the password if not set and enforced\n\t\t\tvar isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true;\n\t\t\tvar haspassword = $menu.find('.linkPassText').val() !== '';\n\n\t\t\tif (!haspassword && isPasswordEnabledByDefault) {\n\t\t\t\t$menu.find('.linkPassText').focus();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @returns {Function} from Handlebars\n\t\t * @private\n\t\t */\n\t\ttemplate: function () {\n\t\t\treturn OC.Share.Templates['sharedialoglinkshareview'];\n\t\t},\n\n\t\t/**\n\t\t * renders the popover template and returns the resulting HTML\n\t\t *\n\t\t * @param {Object} data\n\t\t * @returns {string}\n\t\t */\n\t\tpopoverMenuTemplate: function(data) {\n\t\t\treturn OC.Share.Templates['sharedialoglinkshareview_popover_menu'](data);\n\t\t},\n\n\t\t/**\n\t\t * renders the pending popover template and returns the resulting HTML\n\t\t *\n\t\t * @param {Object} data\n\t\t * @returns {string}\n\t\t */\n\t\tpendingPopoverMenuTemplate: function(data) {\n\t\t\treturn OC.Share.Templates['sharedialoglinkshareview_popover_menu_pending'](data);\n\t\t},\n\n\t\tonPopUpClick: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar url = $(event.currentTarget).data('url');\n\t\t\tvar newWindow = $(event.currentTarget).data('window');\n\t\t\t$(event.currentTarget).tooltip('hide');\n\t\t\tif (url) {\n\t\t\t\tif (newWindow === true) {\n\t\t\t\t\tvar width = 600;\n\t\t\t\t\tvar height = 400;\n\t\t\t\t\tvar left = (screen.width / 2) - (width / 2);\n\t\t\t\t\tvar top = (screen.height / 2) - (height / 2);\n\n\t\t\t\t\twindow.open(url, 'name', 'width=' + width + ', height=' + height + ', top=' + top + ', left=' + left);\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tonExpireDateChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar expirationDatePicker = '#expirationDateContainer-' + shareId;\n\t\t\tvar datePicker = $(expirationDatePicker);\n\t\t\tvar state = $element.prop('checked');\n\t\t\tdatePicker.toggleClass('hidden', !state);\n\n\t\t\tif (!state) {\n\t\t\t\t// disabled, let's hide the input and\n\t\t\t\t// set the expireDate to nothing\n\t\t\t\t$element.closest('li').next('li').addClass('hidden');\n\t\t\t\tthis.setExpirationDate('', shareId);\n\t\t\t} else {\n\t\t\t\t// enabled, show the input and the datepicker\n\t\t\t\t$element.closest('li').next('li').removeClass('hidden');\n\t\t\t\tthis.showDatePicker(event);\n\n\t\t\t}\n\t\t},\n\n\t\tshowDatePicker: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar maxDate = $element.data('max-date');\n\t\t\tvar expirationDatePicker = '#expirationDatePicker-' + shareId;\n\t\t\tvar self = this;\n\n\t\t\t$(expirationDatePicker).datepicker({\n\t\t\t\tdateFormat : 'dd-mm-yy',\n\t\t\t\tonSelect: function (expireDate) {\n\t\t\t\t\tself.setExpirationDate(expireDate, shareId);\n\t\t\t\t},\n\t\t\t\tmaxDate: maxDate\n\t\t\t});\n\t\t\t$(expirationDatePicker).datepicker('show');\n\t\t\t$(expirationDatePicker).focus();\n\n\t\t},\n\n\t\tsetExpirationDate: function(expireDate, shareId) {\n\t\t\tthis.model.saveLinkShare({expireDate: expireDate, cid: shareId});\n\t\t},\n\n\t\t/**\n\t\t * get an array of sharees' share properties\n\t\t *\n\t\t * @returns {Array}\n\t\t */\n\t\tgetShareeList: function() {\n\t\t\tvar shares = this.model.get('linkShares');\n\n\t\t\tif(!this.model.hasLinkShares()) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tvar list = [];\n\t\t\tfor(var index = 0; index < shares.length; index++) {\n\t\t\t\tvar share = this.getShareeObject(index);\n\t\t\t\t// first empty {} is necessary, otherwise we get in trouble\n\t\t\t\t// with references\n\t\t\t\tlist.push(_.extend({}, share));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {OC.Share.Types.ShareInfo} shareInfo\n\t\t * @returns {object}\n\t\t */\n\t\tgetShareeObject: function(shareIndex) {\n\t\t\tvar share = this.model.get('linkShares')[shareIndex];\n\n\t\t\treturn _.extend({}, share, {\n\t\t\t\tcid: share.id,\n\t\t\t\tshareAllowed: true,\n\t\t\t\tlinkShareLabel: share.label ? share.label : t('core', 'Share link'),\n\t\t\t\tpopoverMenu: {},\n\t\t\t\tshareLinkURL: share.url,\n\t\t\t\tnewShareTitle: t('core', 'New share link'),\n\t\t\t\tcopyLabel: t('core', 'Copy link'),\n\t\t\t\tshowPending: this.showPending === share.id,\n\t\t\t\tlinkShareCreationDate: t('core', 'Created on {time}', { time: moment(share.stime * 1000).format('LLLL') })\n\t\t\t})\n\t\t},\n\n\t\tgetPopoverObject: function(share) {\n\t\t\tvar publicUploadRWChecked = '';\n\t\t\tvar publicUploadRChecked = '';\n\t\t\tvar publicUploadWChecked = '';\n\n\t\t\tswitch (this.model.linkSharePermissions(share.id)) {\n\t\t\t\tcase OC.PERMISSION_READ:\n\t\t\t\t\tpublicUploadRChecked = 'checked';\n\t\t\t\t\tbreak;\n\t\t\t\tcase OC.PERMISSION_CREATE:\n\t\t\t\t\tpublicUploadWChecked = 'checked';\n\t\t\t\t\tbreak;\n\t\t\t\tcase OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE:\n\t\t\t\t\tpublicUploadRWChecked = 'checked';\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar isPasswordSet = !!share.password;\n\t\t\tvar isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true;\n\t\t\tvar isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink');\n\t\t\tvar isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');\n\t\t\tvar defaultExpireDays = this.configModel.get('defaultExpireDate');\n\t\t\tvar hasExpireDate = !!share.expiration || isExpirationEnforced;\n\n\t\t\tvar expireDate;\n\t\t\tif (hasExpireDate) {\n\t\t\t\texpireDate = moment(share.expiration, 'YYYY-MM-DD').format('DD-MM-YYYY');\n\t\t\t}\n\n\t\t\tvar isTalkEnabled = oc_appswebroots['spreed'] !== undefined;\n\t\t\tvar sendPasswordByTalk = share.sendPasswordByTalk;\n\n\t\t\tvar hideDownload = share.hideDownload;\n\n\t\t\tvar maxDate = null;\n\n\t\t\tif(hasExpireDate) {\n\t\t\t\tif(isExpirationEnforced) {\n\t\t\t\t\t// TODO: hack: backend returns string instead of integer\n\t\t\t\t\tvar shareTime = share.stime;\n\t\t\t\t\tif (_.isNumber(shareTime)) {\n\t\t\t\t\t\tshareTime = new Date(shareTime * 1000);\n\t\t\t\t\t}\n\t\t\t\t\tif (!shareTime) {\n\t\t\t\t\t\tshareTime = new Date(); // now\n\t\t\t\t\t}\n\t\t\t\t\tshareTime = OC.Util.stripTime(shareTime).getTime();\n\t\t\t\t\tmaxDate = new Date(shareTime + defaultExpireDays * 24 * 3600 * 1000);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcid: share.id,\n\t\t\t\tshareLinkURL: share.url,\n\t\t\t\tpasswordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,\n\t\t\t\tisPasswordSet: isPasswordSet || isPasswordEnabledByDefault || isPasswordEnforced,\n\t\t\t\tshowPasswordByTalkCheckBox: isTalkEnabled && isPasswordSet,\n\t\t\t\tpasswordByTalkLabel: t('core', 'Password protect by Talk'),\n\t\t\t\tisPasswordByTalkSet: sendPasswordByTalk,\n\t\t\t\tpublicUploadRWChecked: publicUploadRWChecked,\n\t\t\t\tpublicUploadRChecked: publicUploadRChecked,\n\t\t\t\tpublicUploadWChecked: publicUploadWChecked,\n\t\t\t\thasExpireDate: hasExpireDate,\n\t\t\t\texpireDate: expireDate,\n\t\t\t\tshareNote: share.note,\n\t\t\t\thasNote: share.note !== '',\n\t\t\t\tmaxDate: maxDate,\n\t\t\t\thideDownload: hideDownload,\n\t\t\t\tisExpirationEnforced: isExpirationEnforced,\n\t\t\t}\n\t\t},\n\n\t\tonUnshare: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tif (!$element.is('a')) {\n\t\t\t\t$element = $element.closest('a');\n\t\t\t}\n\n\t\t\tvar $loading = $element.find('.icon-loading-small').eq(0);\n\t\t\tif(!$loading.hasClass('hidden')) {\n\t\t\t\t// in process\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$loading.removeClass('hidden');\n\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tself.model.removeShare(shareId, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$li.remove();\n\t\t\t\t\tself.render()\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Could not unshare'));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn false;\n\t\t},\n\n\n\t});\n\n\tOC.Share.ShareDialogLinkShareView = ShareDialogLinkShareView;\n\n})();\n","/* global OC, Handlebars */\n\n/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Handlebars */\n\n(function() {\n\n\tvar PASSWORD_PLACEHOLDER = '**********';\n\tvar PASSWORD_PLACEHOLDER_MESSAGE = t('core', 'Choose a password for the mail share');\n\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\t/**\n\t * @class OCA.Share.ShareDialogShareeListView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the sharee list part in the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogShareeListView = OC.Backbone.View.extend({\n\t\t/** @type {string} **/\n\t\tid: 'shareDialogLinkShare',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t_menuOpen: false,\n\n\t\t/** @type {boolean|number} **/\n\t\t_renderPermissionChange: false,\n\n\t\tevents: {\n\t\t\t'click .unshare': 'onUnshare',\n\t\t\t'click .share-add': 'showNoteForm',\n\t\t\t'click .share-note-delete': 'deleteNote',\n\t\t\t'click .share-note-submit': 'updateNote',\n\t\t\t'click .share-menu .icon-more': 'onToggleMenu',\n\t\t\t'click .permissions': 'onPermissionChange',\n\t\t\t'click .expireDate' : 'onExpireDateChange',\n\t\t\t'click .password' : 'onMailSharePasswordProtectChange',\n\t\t\t'click .passwordByTalk' : 'onMailSharePasswordProtectByTalkChange',\n\t\t\t'click .secureDrop' : 'onSecureDropChange',\n\t\t\t'keyup input.passwordField': 'onMailSharePasswordKeyUp',\n\t\t\t'focusout input.passwordField': 'onMailSharePasswordEntered',\n\t\t\t'change .datepicker': 'onChangeExpirationDate',\n\t\t\t'click .datepicker' : 'showDatePicker'\n\t\t},\n\n\t\tinitialize: function(options) {\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\n\t\t\tvar view = this;\n\t\t\tthis.model.on('change:shares', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {OC.Share.Types.ShareInfo} shareInfo\n\t\t * @returns {object}\n\t\t */\n\t\tgetShareeObject: function(shareIndex) {\n\t\t\tvar shareWith = this.model.getShareWith(shareIndex);\n\t\t\tvar shareWithDisplayName = this.model.getShareWithDisplayName(shareIndex);\n\t\t\tvar shareWithAvatar = this.model.getShareWithAvatar(shareIndex);\n\t\t\tvar shareWithTitle = '';\n\t\t\tvar shareType = this.model.getShareType(shareIndex);\n\t\t\tvar sharedBy = this.model.getSharedBy(shareIndex);\n\t\t\tvar sharedByDisplayName = this.model.getSharedByDisplayName(shareIndex);\n\t\t\tvar fileOwnerUid = this.model.getFileOwnerUid(shareIndex);\n\n\t\t\tvar hasPermissionOverride = {};\n\t\t\tif (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'group') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'remote') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'remote group') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'email') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'conversation') + ')';\n\t\t\t}\n\n\t\t\tif (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'group') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'remote') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'remote group') + ')';\n\t\t\t}\n\t\t\telse if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'email') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\tshareWithTitle = shareWith;\n\t\t\t\t// Force \"shareWith\" in the template to a safe value, as the\n\t\t\t\t// original \"shareWith\" returned by the model may contain\n\t\t\t\t// problematic characters like \"'\".\n\t\t\t\tshareWith = 'circle-' + shareIndex;\n\t\t\t}\n\n\t\t\tif (sharedBy !== oc_current_user) {\n\t\t\t\tvar empty = shareWithTitle === '';\n\t\t\t\tif (!empty) {\n\t\t\t\t\tshareWithTitle += ' (';\n\t\t\t\t}\n\t\t\t\tshareWithTitle += t('core', 'shared by {sharer}', {sharer: sharedByDisplayName});\n\t\t\t\tif (!empty) {\n\t\t\t\t\tshareWithTitle += ')';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar share = this.model.get('shares')[shareIndex];\n\t\t\tvar password = share.password;\n\t\t\tvar hasPassword = password !== null && password !== '';\n\t\t\tvar sendPasswordByTalk = share.send_password_by_talk;\n\n\t\t\tvar shareNote = this.model.getNote(shareIndex);\n\n\t\t\treturn _.extend(hasPermissionOverride, {\n\t\t\t\tcid: this.cid,\n\t\t\t\thasSharePermission: this.model.hasSharePermission(shareIndex),\n\t\t\t\teditPermissionState: this.model.editPermissionState(shareIndex),\n\t\t\t\thasCreatePermission: this.model.hasCreatePermission(shareIndex),\n\t\t\t\thasUpdatePermission: this.model.hasUpdatePermission(shareIndex),\n\t\t\t\thasDeletePermission: this.model.hasDeletePermission(shareIndex),\n\t\t\t\tsharedBy: sharedBy,\n\t\t\t\tsharedByDisplayName: sharedByDisplayName,\n\t\t\t\tshareWith: shareWith,\n\t\t\t\tshareWithDisplayName: shareWithDisplayName,\n\t\t\t\tshareWithAvatar: shareWithAvatar,\n\t\t\t\tshareWithTitle: shareWithTitle,\n\t\t\t\tshareType: shareType,\n\t\t\t\tshareId: this.model.get('shares')[shareIndex].id,\n\t\t\t\tmodSeed: shareWithAvatar || (shareType !== OC.Share.SHARE_TYPE_USER && shareType !== OC.Share.SHARE_TYPE_CIRCLE && shareType !== OC.Share.SHARE_TYPE_ROOM),\n\t\t\t\towner: fileOwnerUid,\n\t\t\t\tisShareWithCurrentUser: (shareType === OC.Share.SHARE_TYPE_USER && shareWith === oc_current_user),\n\t\t\t\tcanUpdateShareSettings: (sharedBy === oc_current_user || fileOwnerUid === oc_current_user),\n\t\t\t\tisRemoteShare: shareType === OC.Share.SHARE_TYPE_REMOTE,\n\t\t\t\tisRemoteGroupShare: shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tisNoteAvailable: shareType !== OC.Share.SHARE_TYPE_REMOTE && shareType !== OC.Share.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tisMailShare: shareType === OC.Share.SHARE_TYPE_EMAIL,\n\t\t\t\tisCircleShare: shareType === OC.Share.SHARE_TYPE_CIRCLE,\n\t\t\t\tisFileSharedByMail: shareType === OC.Share.SHARE_TYPE_EMAIL && !this.model.isFolder(),\n\t\t\t\tisPasswordSet: hasPassword && !sendPasswordByTalk,\n\t\t\t\tisPasswordByTalkSet: hasPassword && sendPasswordByTalk,\n\t\t\t\tisTalkEnabled: oc_appswebroots['spreed'] !== undefined,\n\t\t\t\tsecureDropMode: !this.model.hasReadPermission(shareIndex),\n\t\t\t\thasExpireDate: this.model.getExpireDate(shareIndex) !== null,\n\t\t\t\tshareNote: shareNote,\n\t\t\t\thasNote: shareNote !== '',\n\t\t\t\texpireDate: moment(this.model.getExpireDate(shareIndex), 'YYYY-MM-DD').format('DD-MM-YYYY'),\n\t\t\t\t// The password placeholder does not take into account if\n\t\t\t\t// sending the password by Talk is enabled or not; when\n\t\t\t\t// switching from sending the password by Talk to sending the\n\t\t\t\t// password by email the password is reused and the share\n\t\t\t\t// updated, so the placeholder already shows the password in the\n\t\t\t\t// brief time between disabling sending the password by email\n\t\t\t\t// and receiving the updated share.\n\t\t\t\tpasswordPlaceholder: hasPassword ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,\n\t\t\t\tpasswordByTalkPlaceholder: (hasPassword && sendPasswordByTalk)? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,\n\t\t\t});\n\t\t},\n\n\t\tgetShareProperties: function() {\n\t\t\treturn {\n\t\t\t\tunshareLabel: t('core', 'Unshare'),\n\t\t\t\taddNoteLabel: t('core', 'Note to recipient'),\n\t\t\t\tcanShareLabel: t('core', 'Can reshare'),\n\t\t\t\tcanEditLabel: t('core', 'Can edit'),\n\t\t\t\tcreatePermissionLabel: t('core', 'Can create'),\n\t\t\t\tupdatePermissionLabel: t('core', 'Can change'),\n\t\t\t\tdeletePermissionLabel: t('core', 'Can delete'),\n\t\t\t\tsecureDropLabel: t('core', 'File drop (upload only)'),\n\t\t\t\texpireDateLabel: t('core', 'Set expiration date'),\n\t\t\t\tpasswordLabel: t('core', 'Password protect'),\n\t\t\t\tpasswordByTalkLabel: t('core', 'Password protect by Talk'),\n\t\t\t\tcrudsLabel: t('core', 'Access control'),\n\t\t\t\texpirationDatePlaceholder: t('core', 'Expiration date'),\n\t\t\t\tdefaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today\n\t\t\t\ttriangleSImage: OC.imagePath('core', 'actions/triangle-s'),\n\t\t\t\tisResharingAllowed: this.configModel.get('isResharingAllowed'),\n\t\t\t\tisPasswordForMailSharesRequired: this.configModel.get('isPasswordForMailSharesRequired'),\n\t\t\t\tsharePermissionPossible: this.model.sharePermissionPossible(),\n\t\t\t\teditPermissionPossible: this.model.editPermissionPossible(),\n\t\t\t\tcreatePermissionPossible: this.model.createPermissionPossible(),\n\t\t\t\tupdatePermissionPossible: this.model.updatePermissionPossible(),\n\t\t\t\tdeletePermissionPossible: this.model.deletePermissionPossible(),\n\t\t\t\tsharePermission: OC.PERMISSION_SHARE,\n\t\t\t\tcreatePermission: OC.PERMISSION_CREATE,\n\t\t\t\tupdatePermission: OC.PERMISSION_UPDATE,\n\t\t\t\tdeletePermission: OC.PERMISSION_DELETE,\n\t\t\t\treadPermission: OC.PERMISSION_READ,\n\t\t\t\tisFolder: this.model.isFolder()\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * get an array of sharees' share properties\n\t\t *\n\t\t * @returns {Array}\n\t\t */\n\t\tgetShareeList: function() {\n\t\t\tvar universal = this.getShareProperties();\n\n\t\t\tif(!this.model.hasUserShares()) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tvar shares = this.model.get('shares');\n\t\t\tvar list = [];\n\t\t\tfor(var index = 0; index < shares.length; index++) {\n\t\t\t\tvar share = this.getShareeObject(index);\n\n\t\t\t\tif (share.shareType === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// first empty {} is necessary, otherwise we get in trouble\n\t\t\t\t// with references\n\t\t\t\tlist.push(_.extend({}, universal, share));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t},\n\n\t\tgetLinkReshares: function() {\n\t\t\tvar universal = {\n\t\t\t\tunshareLabel: t('core', 'Unshare'),\n\t\t\t};\n\n\t\t\tif(!this.model.hasUserShares()) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tvar shares = this.model.get('shares');\n\t\t\tvar list = [];\n\t\t\tfor(var index = 0; index < shares.length; index++) {\n\t\t\t\tvar share = this.getShareeObject(index);\n\n\t\t\t\tif (share.shareType !== OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// first empty {} is necessary, otherwise we get in trouble\n\t\t\t\t// with references\n\t\t\t\tlist.push(_.extend({}, universal, share, {\n\t\t\t\t\tshareInitiator: shares[index].uid_owner,\n\t\t\t\t\tshareInitiatorText: t('core', '{shareInitiatorDisplayName} shared via link', {shareInitiatorDisplayName: shares[index].displayname_owner})\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t},\n\n\t\trender: function() {\n\t\t\tif(!this._renderPermissionChange) {\n\t\t\t\tthis.$el.html(this.template({\n\t\t\t\t\tcid: this.cid,\n\t\t\t\t\tsharees: this.getShareeList(),\n\t\t\t\t\tlinkReshares: this.getLinkReshares()\n\t\t\t\t}));\n\n\t\t\t\tthis.$('.avatar').each(function () {\n\t\t\t\t\tvar $this = $(this);\n\n\t\t\t\t\tif ($this.hasClass('imageplaceholderseed')) {\n\t\t\t\t\t\t$this.css({width: 32, height: 32});\n\t\t\t\t\t\tif ($this.data('avatar')) {\n\t\t\t\t\t\t\t$this.css('border-radius', '0%');\n\t\t\t\t\t\t\t$this.css('background', 'url(' + $this.data('avatar') + ') no-repeat');\n\t\t\t\t\t\t\t$this.css('background-size', '31px');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$this.imageplaceholder($this.data('seed'));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// user, size, ie8fix, hidedefault, callback, displayname\n\t\t\t\t\t\t$this.avatar($this.data('username'), 32, undefined, undefined, undefined, $this.data('displayname'));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.$('.has-tooltip').tooltip({\n\t\t\t\t\tplacement: 'bottom'\n\t\t\t\t});\n\n\t\t\t\tthis.$('ul.shareWithList > li').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\n\t\t\t\t\tvar shareWith = $this.data('share-with');\n\t\t\t\t\tvar shareType = $this.data('share-type');\n\n\t\t\t\t\t$this.find('div.avatar, span.username').contactsMenu(shareWith, shareType, $this);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar permissionChangeShareId = parseInt(this._renderPermissionChange, 10);\n\t\t\t\tvar shareWithIndex = this.model.findShareWithIndex(permissionChangeShareId);\n\t\t\t\tvar sharee = this.getShareeObject(shareWithIndex);\n\t\t\t\t$.extend(sharee, this.getShareProperties());\n\t\t\t\tvar $li = this.$('li[data-share-id=' + permissionChangeShareId + ']');\n\t\t\t\t$li.find('.sharingOptionsGroup .popovermenu').replaceWith(this.popoverMenuTemplate(sharee));\n\t\t\t}\n\n\t\t\tvar _this = this;\n\t\t\tthis.getShareeList().forEach(function(sharee) {\n\t\t\t\tvar $edit = _this.$('#canEdit-' + _this.cid + '-' + sharee.shareId);\n\t\t\t\tif($edit.length === 1) {\n\t\t\t\t\t$edit.prop('checked', sharee.editPermissionState === 'checked');\n\t\t\t\t\tif (sharee.isFolder) {\n\t\t\t\t\t\t$edit.prop('indeterminate', sharee.editPermissionState === 'indeterminate');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.$('.popovermenu').on('afterHide', function() {\n\t\t\t\t_this._menuOpen = false;\n\t\t\t});\n\t\t\tthis.$('.popovermenu').on('beforeHide', function() {\n\t\t\t\tvar shareId = parseInt(_this._menuOpen, 10);\n\t\t\t\tif(!_.isNaN(shareId)) {\n\t\t\t\t\tvar datePickerClass = '.expirationDateContainer-' + _this.cid + '-' + shareId;\n\t\t\t\t\tvar datePickerInput = '#expirationDatePicker-' + _this.cid + '-' + shareId;\n\t\t\t\t\tvar expireDateCheckbox = '#expireDate-' + _this.cid + '-' + shareId;\n\t\t\t\t\tif ($(expireDateCheckbox).prop('checked')) {\n\t\t\t\t\t\t$(datePickerInput).removeClass('hidden-visually');\n\t\t\t\t\t\t$(datePickerClass).removeClass('hasDatepicker');\n\t\t\t\t\t\t$(datePickerClass + ' .ui-datepicker').hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (this._menuOpen !== false) {\n\t\t\t\t// Open menu again if it was opened before\n\t\t\t\tvar shareId = parseInt(this._menuOpen, 10);\n\t\t\t\tif(!_.isNaN(shareId)) {\n\t\t\t\t\tvar liSelector = 'li[data-share-id=' + shareId + ']';\n\t\t\t\t\tOC.showMenu(null, this.$(liSelector + ' .sharingOptionsGroup .popovermenu'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._renderPermissionChange = false;\n\n\t\t\t// new note autosize\n\t\t\tautosize(this.$el.find('.share-note-form .share-note'));\n\n\t\t\tthis.delegateEvents();\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * @returns {Function} from Handlebars\n\t\t * @private\n\t\t */\n\t\ttemplate: function (data) {\n\t\t\tvar sharees = data.sharees;\n\t\t\tif(_.isArray(sharees)) {\n\t\t\t\tfor (var i = 0; i < sharees.length; i++) {\n\t\t\t\t\tdata.sharees[i].popoverMenu = this.popoverMenuTemplate(sharees[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn OC.Share.Templates['sharedialogshareelistview'](data);\n\t\t},\n\n\t\t/**\n\t\t * renders the popover template and returns the resulting HTML\n\t\t *\n\t\t * @param {Object} data\n\t\t * @returns {string}\n\t\t */\n\t\tpopoverMenuTemplate: function(data) {\n\t\t\treturn OC.Share.Templates['sharedialogshareelistview_popover_menu'](data);\n\t\t},\n\n\t\tshowNoteForm: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\t// show elements\n\t\t\t$menu.find('.share-note-delete').toggleClass('hidden');\n\t\t\t$form.toggleClass('hidden');\n\t\t\t$form.find('textarea').focus();\n\t\t},\n\n\t\tdeleteNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\tconsole.log($form.find('.share-note'));\n\t\t\t$form.find('.share-note').val('');\n\t\t\t\n\t\t\t$form.addClass('hidden');\n\t\t\t$menu.find('.share-note-delete').addClass('hidden');\n\n\t\t\tself.sendNote('', shareId, $menu);\n\t\t},\n\n\t\tupdateNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $form = $element.closest('li.share-note-form');\n\t\t\tvar $menu = $form.prev('li');\n\t\t\tvar message = $form.find('.share-note').val().trim();\n\n\t\t\tif (message.length < 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.sendNote(message, shareId, $menu);\n\n\t\t},\n\n\t\tsendNote: function(note, shareId, $menu) {\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\t\t\tvar $submit = $form.find('input.share-note-submit');\n\t\t\tvar $error = $form.find('input.share-note-error');\n\n\t\t\t$submit.prop('disabled', true);\n\t\t\t$menu.find('.icon-loading-small').removeClass('hidden');\n\t\t\t$menu.find('.icon-edit').hide();\n\n\t\t\tvar complete = function() {\n\t\t\t\t$submit.prop('disabled', false);\n\t\t\t\t$menu.find('.icon-loading-small').addClass('hidden');\n\t\t\t\t$menu.find('.icon-edit').show();\n\t\t\t};\n\t\t\tvar error = function() {\n\t\t\t\t$error.show();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$error.hide();\n\t\t\t\t}, 3000);\n\t\t\t};\n\n\t\t\t// send data\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'PUT',\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1/shares',2) + shareId + '?' + OC.buildQueryString({format: 'json'}),\n\t\t\t\tdata: { note: note },\n\t\t\t\tcomplete : complete,\n\t\t\t\terror: error\n\t\t\t});\n\t\t},\n\n\t\tonUnshare: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tif (!$element.is('a')) {\n\t\t\t\t$element = $element.closest('a');\n\t\t\t}\n\n\t\t\tvar $loading = $element.find('.icon-loading-small').eq(0);\n\t\t\tif(!$loading.hasClass('hidden')) {\n\t\t\t\t// in process\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$loading.removeClass('hidden');\n\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tself.model.removeShare(shareId)\n\t\t\t\t.done(function() {\n\t\t\t\t\t$li.remove();\n\t\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Could not unshare'));\n\t\t\t\t});\n\t\t\treturn false;\n\t\t},\n\n\t\tonToggleMenu: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $menu = $li.find('.sharingOptionsGroup .popovermenu');\n\n\t\t\tOC.showMenu(null, $menu);\n\t\t\tthis._menuOpen = $li.data('share-id');\n\t\t},\n\n\t\tonExpireDateChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar datePickerClass = '.expirationDateContainer-' + this.cid + '-' + shareId;\n\t\t\tvar datePicker = $(datePickerClass);\n\t\t\tvar state = $element.prop('checked');\n\t\t\tdatePicker.toggleClass('hidden', !state);\n\t\t\tif (!state) {\n\t\t\t\t// disabled, let's hide the input and\n\t\t\t\t// set the expireDate to nothing\n\t\t\t\t$element.closest('li').next('li').addClass('hidden');\n\t\t\t\tthis.setExpirationDate(shareId, '');\n\t\t\t} else {\n\t\t\t\t// enabled, show the input and the datepicker\n\t\t\t\t$element.closest('li').next('li').removeClass('hidden');\n\t\t\t\tthis.showDatePicker(event);\n\n\t\t\t}\n\t\t},\n\n\t\tshowDatePicker: function(event) {\n\t\t\tvar element = $(event.target);\n\t\t\tvar li = element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar expirationDatePicker = '#expirationDatePicker-' + this.cid + '-' + shareId;\n\t\t\tvar view = this;\n\t\t\t$(expirationDatePicker).datepicker({\n\t\t\t\tdateFormat : 'dd-mm-yy',\n\t\t\t\tonSelect: function (expireDate) {\n\t\t\t\t\tview.setExpirationDate(shareId, expireDate);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$(expirationDatePicker).focus();\n\n\t\t},\n\n\t\tsetExpirationDate: function(shareId, expireDate) {\n\t\t\tthis.model.updateShare(shareId, {expireDate: expireDate}, {});\n\t\t},\n\n\t\tonMailSharePasswordProtectChange: function(event) {\n\t\t\tvar element = $(event.target);\n\t\t\tvar li = element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId;\n\t\t\tvar passwordContainer = $(passwordContainerClass);\n\t\t\tvar loading = this.$el.find(passwordContainerClass + ' .icon-loading-small');\n\t\t\tvar inputClass = '#passwordField-' + this.cid + '-' + shareId;\n\t\t\tvar passwordField = $(inputClass);\n\t\t\tvar state = element.prop('checked');\n\t\t\tvar passwordByTalkElement = $('#passwordByTalk-' + this.cid + '-' + shareId);\n\t\t\tvar passwordByTalkState = passwordByTalkElement.prop('checked');\n\t\t\tif (!state && !passwordByTalkState) {\n\t\t\t\tthis.model.updateShare(shareId, {password: '', sendPasswordByTalk: false});\n\t\t\t\tpasswordField.attr('value', '');\n\t\t\t\tpasswordField.removeClass('error');\n\t\t\t\tpasswordField.tooltip('hide');\n\t\t\t\tloading.addClass('hidden');\n\t\t\t\tpasswordField.attr('placeholder', PASSWORD_PLACEHOLDER_MESSAGE);\n\t\t\t\t// We first need to reset the password field before we hide it\n\t\t\t\tpasswordContainer.toggleClass('hidden', !state);\n\t\t\t} else if (state) {\n\t\t\t\tif (passwordByTalkState) {\n\t\t\t\t\t// Switching from sending the password by Talk to sending\n\t\t\t\t\t// the password by mail can be done keeping the previous\n\t\t\t\t\t// password sent by Talk.\n\t\t\t\t\tthis.model.updateShare(shareId, {sendPasswordByTalk: false});\n\n\t\t\t\t\tvar passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId;\n\t\t\t\t\tvar passwordByTalkContainer = $(passwordByTalkContainerClass);\n\t\t\t\t\tpasswordByTalkContainer.addClass('hidden');\n\t\t\t\t\tpasswordByTalkElement.prop('checked', false);\n\t\t\t\t}\n\n\t\t\t\tpasswordContainer.toggleClass('hidden', !state);\n\t\t\t\tpasswordField = '#passwordField-' + this.cid + '-' + shareId;\n\t\t\t\tthis.$(passwordField).focus();\n\t\t\t}\n\t\t},\n\n\t\tonMailSharePasswordProtectByTalkChange: function(event) {\n\t\t\tvar element = $(event.target);\n\t\t\tvar li = element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId;\n\t\t\tvar passwordByTalkContainer = $(passwordByTalkContainerClass);\n\t\t\tvar loading = this.$el.find(passwordByTalkContainerClass + ' .icon-loading-small');\n\t\t\tvar inputClass = '#passwordByTalkField-' + this.cid + '-' + shareId;\n\t\t\tvar passwordByTalkField = $(inputClass);\n\t\t\tvar state = element.prop('checked');\n\t\t\tvar passwordElement = $('#password-' + this.cid + '-' + shareId);\n\t\t\tvar passwordState = passwordElement.prop('checked');\n\t\t\tif (!state) {\n\t\t\t\tthis.model.updateShare(shareId, {password: '', sendPasswordByTalk: false});\n\t\t\t\tpasswordByTalkField.attr('value', '');\n\t\t\t\tpasswordByTalkField.removeClass('error');\n\t\t\t\tpasswordByTalkField.tooltip('hide');\n\t\t\t\tloading.addClass('hidden');\n\t\t\t\tpasswordByTalkField.attr('placeholder', PASSWORD_PLACEHOLDER_MESSAGE);\n\t\t\t\t// We first need to reset the password field before we hide it\n\t\t\t\tpasswordByTalkContainer.toggleClass('hidden', !state);\n\t\t\t} else if (state) {\n\t\t\t\tif (passwordState) {\n\t\t\t\t\t// Enabling sending the password by Talk requires a new\n\t\t\t\t\t// password to be given (the one sent by mail is not reused,\n\t\t\t\t\t// as it would defeat the purpose of checking the identity\n\t\t\t\t\t// of the sharee by Talk if it was already sent by mail), so\n\t\t\t\t\t// the share is not updated until the user explicitly gives\n\t\t\t\t\t// the new password.\n\n\t\t\t\t\tvar passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId;\n\t\t\t\t\tvar passwordContainer = $(passwordContainerClass);\n\t\t\t\t\tpasswordContainer.addClass('hidden');\n\t\t\t\t\tpasswordElement.prop('checked', false);\n\t\t\t\t}\n\n\t\t\t\tpasswordByTalkContainer.toggleClass('hidden', !state);\n\t\t\t\tpasswordByTalkField = '#passwordByTalkField-' + this.cid + '-' + shareId;\n\t\t\t\tthis.$(passwordByTalkField).focus();\n\t\t\t}\n\t\t},\n\n\t\tonMailSharePasswordKeyUp: function(event) {\n\t\t\tif(event.keyCode === 13) {\n\t\t\t\tthis.onMailSharePasswordEntered(event);\n\t\t\t}\n\t\t},\n\n\t\tonMailSharePasswordEntered: function(event) {\n\t\t\tvar passwordField = $(event.target);\n\t\t\tvar li = passwordField.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId;\n\t\t\tvar passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId;\n\t\t\tvar sendPasswordByTalk = passwordField.attr('id').startsWith('passwordByTalk');\n\t\t\tvar loading;\n\t\t\tif (sendPasswordByTalk) {\n\t\t\t\tloading = this.$el.find(passwordByTalkContainerClass + ' .icon-loading-small');\n\t\t\t} else {\n\t\t\t\tloading = this.$el.find(passwordContainerClass + ' .icon-loading-small');\n\t\t\t}\n\t\t\tif (!loading.hasClass('hidden')) {\n\t\t\t\t// still in process\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpasswordField.removeClass('error');\n\t\t\tvar password = passwordField.val();\n\t\t\t// in IE9 the password might be the placeholder due to bugs in the placeholders polyfill\n\t\t\tif(password === '' || password === PASSWORD_PLACEHOLDER || password === PASSWORD_PLACEHOLDER_MESSAGE) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tloading\n\t\t\t\t.removeClass('hidden')\n\t\t\t\t.addClass('inlineblock');\n\n\n\t\t\tthis.model.updateShare(shareId, {\n\t\t\t\tpassword: password,\n\t\t\t\tsendPasswordByTalk: sendPasswordByTalk\n\t\t\t}, {\n\t\t\t\terror: function(model, msg) {\n\t\t\t\t\t// destroy old tooltips\n\t\t\t\t\tpasswordField.tooltip('destroy');\n\t\t\t\t\tloading.removeClass('inlineblock').addClass('hidden');\n\t\t\t\t\tpasswordField.addClass('error');\n\t\t\t\t\tpasswordField.attr('title', msg);\n\t\t\t\t\tpasswordField.tooltip({placement: 'bottom', trigger: 'manual'});\n\t\t\t\t\tpasswordField.tooltip('show');\n\t\t\t\t},\n\t\t\t\tsuccess: function(model, msg) {\n\t\t\t\t\tpasswordField.blur();\n\t\t\t\t\tpasswordField.attr('value', '');\n\t\t\t\t\tpasswordField.attr('placeholder', PASSWORD_PLACEHOLDER);\n\t\t\t\t\tloading.removeClass('inlineblock').addClass('hidden');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonPermissionChange: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tvar permissions = OC.PERMISSION_READ;\n\n\t\t\tif (this.model.isFolder()) {\n\t\t\t\t// adjust checkbox states\n\t\t\t\tvar $checkboxes = $('.permissions', $li).not('input[name=\"edit\"]').not('input[name=\"share\"]');\n\t\t\t\tvar checked;\n\t\t\t\tif ($element.attr('name') === 'edit') {\n\t\t\t\t\tchecked = $element.is(':checked');\n\t\t\t\t\t// Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck\n\t\t\t\t\t$($checkboxes).prop('checked', checked);\n\t\t\t\t\tif (checked) {\n\t\t\t\t\t\tpermissions |= OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar numberChecked = $checkboxes.filter(':checked').length;\n\t\t\t\t\tchecked = numberChecked === $checkboxes.length;\n\t\t\t\t\tvar $editCb = $('input[name=\"edit\"]', $li);\n\t\t\t\t\t$editCb.prop('checked', checked);\n\t\t\t\t\t$editCb.prop('indeterminate', !checked && numberChecked > 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($element.attr('name') === 'edit' && $element.is(':checked')) {\n\t\t\t\t\tpermissions |= OC.PERMISSION_UPDATE;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$('.permissions', $li).not('input[name=\"edit\"]').filter(':checked').each(function(index, checkbox) {\n\t\t\t\tpermissions |= $(checkbox).data('permissions');\n\t\t\t});\n\n\n\t\t\t/** disable checkboxes during save operation to avoid race conditions **/\n\t\t\t$li.find('input[type=checkbox]').prop('disabled', true);\n\t\t\tvar enableCb = function() {\n\t\t\t\t$li.find('input[type=checkbox]').prop('disabled', false);\n\t\t\t};\n\t\t\tvar errorCb = function(elem, msg) {\n\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error while sharing'));\n\t\t\t\tenableCb();\n\t\t\t};\n\n\t\t\tthis.model.updateShare(shareId, {permissions: permissions}, {error: errorCb, success: enableCb});\n\n\t\t\tthis._renderPermissionChange = shareId;\n\t\t},\n\n\t\tonSecureDropChange: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tvar permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE | OC.PERMISSION_READ;\n\t\t\tif ($element.is(':checked')) {\n\t\t\t\tpermissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE;\n\t\t\t}\n\n\t\t\t/** disable checkboxes during save operation to avoid race conditions **/\n\t\t\t$li.find('input[type=checkbox]').prop('disabled', true);\n\t\t\tvar enableCb = function() {\n\t\t\t\t$li.find('input[type=checkbox]').prop('disabled', false);\n\t\t\t};\n\t\t\tvar errorCb = function(elem, msg) {\n\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error while sharing'));\n\t\t\t\tenableCb();\n\t\t\t};\n\n\t\t\tthis.model.updateShare(shareId, {permissions: permissions}, {error: errorCb, success: enableCb});\n\n\t\t\tthis._renderPermissionChange = shareId;\n\t\t}\n\n\t});\n\n\tOC.Share.ShareDialogShareeListView = ShareDialogShareeListView;\n\n})();\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Handlebars */\n\n(function() {\n\tif(!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\t/**\n\t * @class OCA.Share.ShareDialogView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogView = OC.Backbone.View.extend({\n\t\t/** @type {Object} **/\n\t\t_templates: {},\n\n\t\t/** @type {boolean} **/\n\t\t_showLink: true,\n\n\t\t/** @type {string} **/\n\t\ttagName: 'div',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t/** @type {object} **/\n\t\tresharerInfoView: undefined,\n\n\t\t/** @type {object} **/\n\t\tlinkShareView: undefined,\n\n\t\t/** @type {object} **/\n\t\tshareeListView: undefined,\n\n\t\t/** @type {object} **/\n\t\t_lastSuggestions: undefined,\n\n\t\t/** @type {int} **/\n\t\t_pendingOperationsCount: 0,\n\n\t\tevents: {\n\t\t\t'focus .shareWithField': 'onShareWithFieldFocus',\n\t\t\t'input .shareWithField': 'onShareWithFieldChanged',\n\t\t\t'click .shareWithConfirm': '_confirmShare'\n\t\t},\n\n\t\tinitialize: function(options) {\n\t\t\tvar view = this;\n\n\t\t\tthis.model.on('fetchError', function() {\n\t\t\t\tOC.Notification.showTemporary(t('core', 'Share details could not be loaded for this item.'));\n\t\t\t});\n\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\n\t\t\tthis.configModel.on('change:isRemoteShareAllowed', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\t\t\tthis.configModel.on('change:isRemoteGroupShareAllowed', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\t\t\tthis.model.on('change:permissions', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('request', this._onRequest, this);\n\t\t\tthis.model.on('sync', this._onEndRequest, this);\n\n\t\t\tvar subViewOptions = {\n\t\t\t\tmodel: this.model,\n\t\t\t\tconfigModel: this.configModel\n\t\t\t};\n\n\t\t\tvar subViews = {\n\t\t\t\tresharerInfoView: 'ShareDialogResharerInfoView',\n\t\t\t\tlinkShareView: 'ShareDialogLinkShareView',\n\t\t\t\tshareeListView: 'ShareDialogShareeListView'\n\t\t\t};\n\n\t\t\tfor(var name in subViews) {\n\t\t\t\tvar className = subViews[name];\n\t\t\t\tthis[name] = _.isUndefined(options[name])\n\t\t\t\t\t? new OC.Share[className](subViewOptions)\n\t\t\t\t\t: options[name];\n\t\t\t}\n\n\t\t\t_.bindAll(this,\n\t\t\t\t'autocompleteHandler',\n\t\t\t\t'_onSelectRecipient',\n\t\t\t\t'onShareWithFieldChanged',\n\t\t\t\t'onShareWithFieldFocus'\n\t\t\t);\n\n\t\t\tOC.Plugins.attach('OC.Share.ShareDialogView', this);\n\t\t},\n\n\t\tonShareWithFieldChanged: function() {\n\t\t\tvar $el = this.$el.find('.shareWithField');\n\t\t\tif ($el.val().length < 2) {\n\t\t\t\t$el.removeClass('error').tooltip('hide');\n\t\t\t}\n\t\t},\n\n\t\t/* trigger search after the field was re-selected */\n\t\tonShareWithFieldFocus: function() {\n\t\t\tthis.$el.find('.shareWithField').autocomplete(\"search\");\n\t\t},\n\n\t\t_getSuggestions: function(searchTerm, perPage, model) {\n\t\t\tif (this._lastSuggestions &&\n\t\t\t\tthis._lastSuggestions.searchTerm === searchTerm &&\n\t\t\t\tthis._lastSuggestions.perPage === perPage &&\n\t\t\t\tthis._lastSuggestions.model === model) {\n\t\t\t\treturn this._lastSuggestions.promise;\n\t\t\t}\n\n\t\t\tvar deferred = $.Deferred();\n\n\t\t\t$.get(\n\t\t\t\tOC.linkToOCS('apps/files_sharing/api/v1') + 'sharees',\n\t\t\t\t{\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tsearch: searchTerm,\n\t\t\t\t\tperPage: perPage,\n\t\t\t\t\titemType: model.get('itemType')\n\t\t\t\t},\n\t\t\t\tfunction (result) {\n\t\t\t\t\tif (result.ocs.meta.statuscode === 100) {\n\t\t\t\t\t\tvar filter = function(users, groups, remotes, remote_groups, emails, circles, rooms) {\n\t\t\t\t\t\t\tif (typeof(emails) === 'undefined') {\n\t\t\t\t\t\t\t\temails = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof(circles) === 'undefined') {\n\t\t\t\t\t\t\t\tcircles = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof(rooms) === 'undefined') {\n\t\t\t\t\t\t\t\trooms = [];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar usersLength;\n\t\t\t\t\t\t\tvar groupsLength;\n\t\t\t\t\t\t\tvar remotesLength;\n\t\t\t\t\t\t\tvar remoteGroupsLength;\n\t\t\t\t\t\t\tvar emailsLength;\n\t\t\t\t\t\t\tvar circlesLength;\n\t\t\t\t\t\t\tvar roomsLength;\n\n\t\t\t\t\t\t\tvar i, j;\n\n\t\t\t\t\t\t\t//Filter out the current user\n\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\tfor (i = 0; i < usersLength; i++) {\n\t\t\t\t\t\t\t\tif (users[i].value.shareWith === OC.currentUser) {\n\t\t\t\t\t\t\t\t\tusers.splice(i, 1);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Filter out the owner of the share\n\t\t\t\t\t\t\tif (model.hasReshare()) {\n\t\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\t\tfor (i = 0 ; i < usersLength; i++) {\n\t\t\t\t\t\t\t\t\tif (users[i].value.shareWith === model.getReshareOwner()) {\n\t\t\t\t\t\t\t\t\t\tusers.splice(i, 1);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar shares = model.get('shares');\n\t\t\t\t\t\t\tvar sharesLength = shares.length;\n\n\t\t\t\t\t\t\t// Now filter out all sharees that are already shared with\n\t\t\t\t\t\t\tfor (i = 0; i < sharesLength; i++) {\n\t\t\t\t\t\t\t\tvar share = shares[i];\n\n\t\t\t\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_USER) {\n\t\t\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < usersLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (users[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tusers.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\t\t\t\t\tgroupsLength = groups.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < groupsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (groups[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tgroups.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\t\t\t\t\t\tremotesLength = remotes.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < remotesLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (remotes[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tremotes.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\t\t\t\t\t\tremoteGroupsLength = remote_groups.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < remoteGroupsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (remote_groups[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tremote_groups.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\t\t\t\temailsLength = emails.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < emailsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (emails[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\temails.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\t\t\t\t\t\tcirclesLength = circles.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < circlesLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (circles[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tcircles.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\t\t\t\t\t\troomsLength = rooms.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < roomsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (rooms[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\trooms.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tfilter(\n\t\t\t\t\t\t\tresult.ocs.data.exact.users,\n\t\t\t\t\t\t\tresult.ocs.data.exact.groups,\n\t\t\t\t\t\t\tresult.ocs.data.exact.remotes,\n\t\t\t\t\t\t\tresult.ocs.data.exact.remote_groups,\n\t\t\t\t\t\t\tresult.ocs.data.exact.emails,\n\t\t\t\t\t\t\tresult.ocs.data.exact.circles,\n\t\t\t\t\t\t\tresult.ocs.data.exact.rooms\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar exactUsers = result.ocs.data.exact.users;\n\t\t\t\t\t\tvar exactGroups = result.ocs.data.exact.groups;\n\t\t\t\t\t\tvar exactRemotes = result.ocs.data.exact.remotes;\n\t\t\t\t\t\tvar exactRemoteGroups = result.ocs.data.exact.remote_groups;\n\t\t\t\t\t\tvar exactEmails = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.emails) !== 'undefined') {\n\t\t\t\t\t\t\texactEmails = result.ocs.data.exact.emails;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar exactCircles = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.circles) !== 'undefined') {\n\t\t\t\t\t\t\texactCircles = result.ocs.data.exact.circles;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar exactRooms = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.rooms) !== 'undefined') {\n\t\t\t\t\t\t\texactRooms = result.ocs.data.exact.rooms;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar exactMatches = exactUsers.concat(exactGroups).concat(exactRemotes).concat(exactRemoteGroups).concat(exactEmails).concat(exactCircles).concat(exactRooms);\n\n\t\t\t\t\t\tfilter(\n\t\t\t\t\t\t\tresult.ocs.data.users,\n\t\t\t\t\t\t\tresult.ocs.data.groups,\n\t\t\t\t\t\t\tresult.ocs.data.remotes,\n\t\t\t\t\t\t\tresult.ocs.data.remote_groups,\n\t\t\t\t\t\t\tresult.ocs.data.emails,\n\t\t\t\t\t\t\tresult.ocs.data.circles,\n\t\t\t\t\t\t\tresult.ocs.data.rooms\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar users = result.ocs.data.users;\n\t\t\t\t\t\tvar groups = result.ocs.data.groups;\n\t\t\t\t\t\tvar remotes = result.ocs.data.remotes;\n\t\t\t\t\t\tvar remoteGroups = result.ocs.data.remote_groups;\n\t\t\t\t\t\tvar lookup = result.ocs.data.lookup;\n\t\t\t\t\t\tvar emails = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.emails) !== 'undefined') {\n\t\t\t\t\t\t\temails = result.ocs.data.emails;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar circles = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.circles) !== 'undefined') {\n\t\t\t\t\t\t\tcircles = result.ocs.data.circles;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar rooms = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.rooms) !== 'undefined') {\n\t\t\t\t\t\t\trooms = result.ocs.data.rooms;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar suggestions = exactMatches.concat(users).concat(groups).concat(remotes).concat(remoteGroups).concat(emails).concat(circles).concat(rooms).concat(lookup);\n\n\t\t\t\t\t\tfunction dynamicSort(property) {\n\t\t\t\t\t\t\treturn function (a,b) {\n\t\t\t\t\t\t\t\tvar aProperty = '';\n\t\t\t\t\t\t\t\tvar bProperty = '';\n\t\t\t\t\t\t\t\tif (typeof a[property] !== 'undefined') {\n\t\t\t\t\t\t\t\t\taProperty = a[property];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (typeof b[property] !== 'undefined') {\n\t\t\t\t\t\t\t\t\tbProperty = b[property];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (aProperty < bProperty) ? -1 : (aProperty > bProperty) ? 1 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Sort share entries by uuid to properly group them\n\t\t\t\t\t\t */\n\t\t\t\t\t\tvar grouped = suggestions.sort(dynamicSort('uuid'));\n\n\t\t\t\t\t\tvar previousUuid = null;\n\t\t\t\t\t\tvar groupedLength = grouped.length;\n\t\t\t\t\t\tvar result = [];\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * build the result array that only contains all contact entries from\n\t\t\t\t\t\t * merged contacts, if the search term matches its contact name\n\t\t\t\t\t\t */\n\t\t\t\t\t\tfor (var i = 0; i < groupedLength; i++) {\n\t\t\t\t\t\t\tif (typeof grouped[i].uuid !== 'undefined' && grouped[i].uuid === previousUuid) {\n\t\t\t\t\t\t\t\tgrouped[i].merged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (searchTerm === grouped[i].name || typeof grouped[i].merged === 'undefined') {\n\t\t\t\t\t\t\t\tresult.push(grouped[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpreviousUuid = grouped[i].uuid;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar moreResultsAvailable =\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\toc_config['sharing.maxAutocompleteResults'] > 0\n\t\t\t\t\t\t\t\t&& Math.min(perPage, oc_config['sharing.maxAutocompleteResults'])\n\t\t\t\t\t\t\t\t\t<= Math.max(\n\t\t\t\t\t\t\t\t\t\tusers.length + exactUsers.length,\n\t\t\t\t\t\t\t\t\t\tgroups.length + exactGroups.length,\n\t\t\t\t\t\t\t\t\t\tremoteGroups.length + exactRemoteGroups.length,\n\t\t\t\t\t\t\t\t\t\tremotes.length + exactRemotes.length,\n\t\t\t\t\t\t\t\t\t\temails.length + exactEmails.length,\n\t\t\t\t\t\t\t\t\t\tcircles.length + exactCircles.length,\n\t\t\t\t\t\t\t\t\t\trooms.length + exactRooms.length,\n\t\t\t\t\t\t\t\t\t\tlookup.length\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tdeferred.resolve(result, exactMatches, moreResultsAvailable);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.reject(result.ocs.meta.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t).fail(function() {\n\t\t\t\tdeferred.reject();\n\t\t\t});\n\n\t\t\tthis._lastSuggestions = {\n\t\t\t\tsearchTerm: searchTerm,\n\t\t\t\tperPage: perPage,\n\t\t\t\tmodel: model,\n\t\t\t\tpromise: deferred.promise()\n\t\t\t};\n\n\t\t\treturn this._lastSuggestions.promise;\n\t\t},\n\n\t\tautocompleteHandler: function (search, response) {\n\t\t\tvar $shareWithField = $('.shareWithField'),\n\t\t\t\tview = this,\n\t\t\t\t$loading = this.$el.find('.shareWithLoading'),\n\t\t\t\t$confirm = this.$el.find('.shareWithConfirm');\n\n\t\t\tvar count = oc_config['sharing.minSearchStringLength'];\n\t\t\tif (search.term.trim().length < count) {\n\t\t\t\tvar title = n('core',\n\t\t\t\t\t'At least {count} character is needed for autocompletion',\n\t\t\t\t\t'At least {count} characters are needed for autocompletion',\n\t\t\t\t\tcount,\n\t\t\t\t\t{ count: count }\n\t\t\t\t);\n\t\t\t\t$shareWithField.addClass('error')\n\t\t\t\t\t.attr('data-original-title', title)\n\t\t\t\t\t.tooltip('hide')\n\t\t\t\t\t.tooltip({\n\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t\t})\n\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t.tooltip('show');\n\t\t\t\tresponse();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$loading.removeClass('hidden');\n\t\t\t$loading.addClass('inlineblock');\n\t\t\t$confirm.addClass('hidden');\n\t\t\tthis._pendingOperationsCount++;\n\n\t\t\t$shareWithField.removeClass('error')\n\t\t\t\t.tooltip('hide');\n\n\t\t\tvar perPage = parseInt(oc_config['sharing.maxAutocompleteResults'], 10) || 200;\n\t\t\tthis._getSuggestions(\n\t\t\t\tsearch.term.trim(),\n\t\t\t\tperPage,\n\t\t\t\tview.model\n\t\t\t).done(function(suggestions, exactMatches, moreResultsAvailable) {\n\t\t\t\tview._pendingOperationsCount--;\n\t\t\t\tif (view._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\tif (suggestions.length > 0) {\n\t\t\t\t\t$shareWithField\n\t\t\t\t\t\t.autocomplete(\"option\", \"autoFocus\", true);\n\n\t\t\t\t\tresponse(suggestions);\n\n\t\t\t\t\t// show a notice that the list is truncated\n\t\t\t\t\t// this is the case if one of the search results is at least as long as the max result config option\n\t\t\t\t\tif(moreResultsAvailable) {\n\t\t\t\t\t\tvar message = t('core', 'This list is maybe truncated - please refine your search term to see more results.');\n\t\t\t\t\t\t$('.ui-autocomplete').append('<li class=\"autocomplete-note\">' + message + '</li>');\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tvar title = t('core', 'No users or groups found for {search}', {search: $shareWithField.val()});\n\t\t\t\t\tif (!view.configModel.get('allowGroupSharing')) {\n\t\t\t\t\t\ttitle = t('core', 'No users found for {search}', {search: $('.shareWithField').val()});\n\t\t\t\t\t}\n\t\t\t\t\t$shareWithField.addClass('error')\n\t\t\t\t\t\t.attr('data-original-title', title)\n\t\t\t\t\t\t.tooltip('hide')\n\t\t\t\t\t\t.tooltip({\n\t\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t\t.tooltip('show');\n\t\t\t\t\tresponse();\n\t\t\t\t}\n\t\t\t}).fail(function(message) {\n\t\t\t\tview._pendingOperationsCount--;\n\t\t\t\tif (view._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\tif (message) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'An error occurred (\"{message}\"). Please try again', { message: message }));\n\t\t\t\t} else {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'An error occurred. Please try again'));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tautocompleteRenderItem: function(ul, item) {\n\t\t\tvar icon = 'icon-user';\n\t\t\tvar text = escapeHTML(item.label);\n\t\t\tvar description = '';\n\t\t\tvar type = '';\n\t\t\tvar getTranslatedType = function(type) {\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'HOME':\n\t\t\t\t\t\treturn t('core', 'Home');\n\t\t\t\t\tcase 'WORK':\n\t\t\t\t\t\treturn t('core', 'Work');\n\t\t\t\t\tcase 'OTHER':\n\t\t\t\t\t\treturn t('core', 'Other');\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn '' + type;\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (typeof item.type !== 'undefined' && item.type !== null) {\n\t\t\t\ttype = getTranslatedType(item.type) + ' ';\n\t\t\t}\n\n\t\t\tif (typeof item.name !== 'undefined') {\n\t\t\t\ttext = escapeHTML(item.name);\n\t\t\t}\n\t\t\tif (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\ticon = 'icon-contacts-dark';\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\ticon = 'icon-shared';\n\t\t\t\tdescription += item.value.shareWith;\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\ttext = t('core', '{sharee} (remote group)', { sharee: text }, undefined, { escape: false });\n\t\t\t\ticon = 'icon-shared';\n\t\t\t\tdescription += item.value.shareWith;\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\ticon = 'icon-mail';\n\t\t\t\tdescription += item.value.shareWith;\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\ttext = t('core', '{sharee} ({type}, {owner})', {sharee: text, type: item.value.circleInfo, owner: item.value.circleOwner}, undefined, {escape: false});\n\t\t\t\ticon = 'icon-circle';\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\ticon = 'icon-talk';\n\t\t\t}\n\n\t\t\tvar insert = $(\"<div class='share-autocomplete-item'/>\");\n\t\t\tif (item.merged) {\n\t\t\t\tinsert.addClass('merged');\n\t\t\t\ttext = item.value.shareWith;\n\t\t\t\tdescription = type;\n\t\t\t} else {\n\t\t\t\tvar avatar = $(\"<div class='avatardiv'></div>\").appendTo(insert);\n\t\t\t\tif (item.value.shareType === OC.Share.SHARE_TYPE_USER || item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\t\tavatar.avatar(item.value.shareWith, 32, undefined, undefined, undefined, item.label);\n\t\t\t\t} else {\n\t\t\t\t\tif (typeof item.uuid === 'undefined') {\n\t\t\t\t\t\titem.uuid = text;\n\t\t\t\t\t}\n\t\t\t\t\tavatar.imageplaceholder(item.uuid, text, 32);\n\t\t\t\t}\n\t\t\t\tdescription = type + description;\n\t\t\t}\n\t\t\tif (description !== '') {\n\t\t\t\tinsert.addClass('with-description');\n\t\t\t}\n\n\t\t\t$(\"<div class='autocomplete-item-text'></div>\")\n\t\t\t\t.html(\n\t\t\t\t\ttext.replace(\n\t\t\t\t\tnew RegExp(this.term, \"gi\"),\n\t\t\t\t\t\"<span class='ui-state-highlight'>$&</span>\")\n\t\t\t\t\t+ '<span class=\"autocomplete-item-details\">' + description + '</span>'\n\t\t\t\t)\n\t\t\t\t.appendTo(insert);\n\t\t\tinsert.attr('title', item.value.shareWith);\n\t\t\tinsert.append('<span class=\"icon '+icon+'\" title=\"' + text + '\"></span>');\n\t\t\tinsert = $(\"<a>\")\n\t\t\t\t.append(insert);\n\t\t\treturn $(\"<li>\")\n\t\t\t\t.addClass((item.value.shareType === OC.Share.SHARE_TYPE_GROUP) ? 'group' : 'user')\n\t\t\t\t.append(insert)\n\t\t\t\t.appendTo(ul);\n\t\t},\n\n\t\t_onSelectRecipient: function(e, s) {\n\t\t\tvar self = this;\n\n\t\t\tif (e.keyCode == 9) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (typeof s.item.name !== 'undefined') {\n\t\t\t\t\te.target.value = s.item.name;\n\t\t\t\t} else {\n\t\t\t\t\te.target.value = s.item.label;\n\t\t\t\t}\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$(e.target).attr('disabled', false)\n\t\t\t\t\t\t.autocomplete('search', $(e.target).val());\n\t\t\t\t}, 0);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\t// Ensure that the keydown handler for the input field is not\n\t\t\t// called; otherwise it would try to add the recipient again, which\n\t\t\t// would fail.\n\t\t\te.stopImmediatePropagation();\n\t\t\t$(e.target).attr('disabled', true)\n\t\t\t\t.val(s.item.label);\n\n\t\t\tvar $loading = this.$el.find('.shareWithLoading');\n\t\t\tvar $confirm = this.$el.find('.shareWithConfirm');\n\n\t\t\t$loading.removeClass('hidden');\n\t\t\t$loading.addClass('inlineblock');\n\t\t\t$confirm.addClass('hidden');\n\t\t\tthis._pendingOperationsCount++;\n\n\t\t\tthis.model.addShare(s.item.value, {success: function() {\n\t\t\t\t// Adding a share changes the suggestions.\n\t\t\t\tself._lastSuggestions = undefined;\n\n\t\t\t\t$(e.target).val('')\n\t\t\t\t\t.attr('disabled', false);\n\n\t\t\t\tself._pendingOperationsCount--;\n\t\t\t\tif (self._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\t\t\t}, error: function(obj, msg) {\n\t\t\t\tOC.Notification.showTemporary(msg);\n\t\t\t\t$(e.target).attr('disabled', false)\n\t\t\t\t\t.autocomplete('search', $(e.target).val());\n\n\t\t\t\tself._pendingOperationsCount--;\n\t\t\t\tif (self._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\t\t\t}});\n\t\t},\n\n\t\t_confirmShare: function() {\n\t\t\tvar self = this;\n\t\t\tvar $shareWithField = $('.shareWithField');\n\t\t\tvar $loading = this.$el.find('.shareWithLoading');\n\t\t\tvar $confirm = this.$el.find('.shareWithConfirm');\n\n\t\t\t$loading.removeClass('hidden');\n\t\t\t$loading.addClass('inlineblock');\n\t\t\t$confirm.addClass('hidden');\n\t\t\tthis._pendingOperationsCount++;\n\n\t\t\t$shareWithField.prop('disabled', true);\n\n\t\t\t// Disabling the autocompletion does not clear its search timeout;\n\t\t\t// removing the focus from the input field does, but only if the\n\t\t\t// autocompletion is not disabled when the field loses the focus.\n\t\t\t// Thus, the field has to be disabled before disabling the\n\t\t\t// autocompletion to prevent an old pending search result from\n\t\t\t// appearing once the field is enabled again.\n\t\t\t$shareWithField.autocomplete('close');\n\t\t\t$shareWithField.autocomplete('disable');\n\n\t\t\tvar restoreUI = function() {\n\t\t\t\tself._pendingOperationsCount--;\n\t\t\t\tif (self._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\t$shareWithField.prop('disabled', false);\n\t\t\t\t$shareWithField.focus();\n\t\t\t};\n\n\t\t\tvar perPage = parseInt(oc_config['sharing.maxAutocompleteResults'], 10) || 200;\n\t\t\tvar onlyExactMatches = true;\n\t\t\tthis._getSuggestions(\n\t\t\t\t$shareWithField.val(),\n\t\t\t\tperPage,\n\t\t\t\tthis.model,\n\t\t\t\tonlyExactMatches\n\t\t\t).done(function(suggestions, exactMatches) {\n\t\t\t\tif (suggestions.length === 0) {\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t\t// There is no need to show an error message here; it will\n\t\t\t\t\t// be automatically shown when the autocomplete is activated\n\t\t\t\t\t// again (due to the focus on the field) and it finds no\n\t\t\t\t\t// matches.\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (exactMatches.length !== 1) {\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actionSuccess = function() {\n\t\t\t\t\t// Adding a share changes the suggestions.\n\t\t\t\t\tself._lastSuggestions = undefined;\n\n\t\t\t\t\t$shareWithField.val('');\n\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\t\t\t\t};\n\n\t\t\t\tvar actionError = function(obj, msg) {\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t\tOC.Notification.showTemporary(msg);\n\t\t\t\t};\n\n\t\t\t\tself.model.addShare(exactMatches[0].value, {\n\t\t\t\t\tsuccess: actionSuccess,\n\t\t\t\t\terror: actionError\n\t\t\t\t});\n\t\t\t}).fail(function(message) {\n\t\t\t\trestoreUI();\n\n\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t// There is no need to show an error message here; it will be\n\t\t\t\t// automatically shown when the autocomplete is activated again\n\t\t\t\t// (due to the focus on the field) and getting the suggestions\n\t\t\t\t// fail.\n\t\t\t});\n\t\t},\n\n\t\t_toggleLoading: function(state) {\n\t\t\tthis._loading = state;\n\t\t\tthis.$el.find('.subView').toggleClass('hidden', state);\n\t\t\tthis.$el.find('.loading').toggleClass('hidden', !state);\n\t\t},\n\n\t\t_onRequest: function() {\n\t\t\t// only show the loading spinner for the first request (for now)\n\t\t\tif (!this._loadingOnce) {\n\t\t\t\tthis._toggleLoading(true);\n\t\t\t}\n\t\t},\n\n\t\t_onEndRequest: function() {\n\t\t\tvar self = this;\n\t\t\tthis._toggleLoading(false);\n\t\t\tif (!this._loadingOnce) {\n\t\t\t\tthis._loadingOnce = true;\n\t\t\t\t// the first time, focus on the share field after the spinner disappeared\n\t\t\t\tif (!OC.Util.isIE()) {\n\t\t\t\t\t_.defer(function () {\n\t\t\t\t\t\tself.$('.shareWithField').focus();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trender: function() {\n\t\t\tvar self = this;\n\t\t\tvar baseTemplate = OC.Share.Templates['sharedialogview'];\n\n\t\t\tthis.$el.html(baseTemplate({\n\t\t\t\tcid: this.cid,\n\t\t\t\tshareLabel: t('core', 'Share'),\n\t\t\t\tsharePlaceholder: this._renderSharePlaceholderPart(),\n\t\t\t\tisSharingAllowed: this.model.sharePermissionPossible()\n\t\t\t}));\n\n\t\t\tvar $shareField = this.$el.find('.shareWithField');\n\t\t\tif ($shareField.length) {\n\t\t\t\tvar shareFieldKeydownHandler = function(event) {\n\t\t\t\t\tif (event.keyCode !== 13) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tself._confirmShare();\n\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\n\t\t\t\t$shareField.autocomplete({\n\t\t\t\t\tminLength: 1,\n\t\t\t\t\tdelay: 750,\n\t\t\t\t\tfocus: function(event) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t},\n\t\t\t\t\tsource: this.autocompleteHandler,\n\t\t\t\t\tselect: this._onSelectRecipient,\n\t\t\t\t\topen: function() {\n\t\t\t\t\t\tvar autocomplete = $(this).autocomplete('widget');\n\t\t\t\t\t\tvar numberOfItems = autocomplete.find('li').size();\n\t\t\t\t\t\tautocomplete.removeClass('item-count-1');\n\t\t\t\t\t\tautocomplete.removeClass('item-count-2');\n\t\t\t\t\t\tif (numberOfItems <= 2) {\n\t\t\t\t\t\t\tautocomplete.addClass('item-count-' + numberOfItems);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}).data('ui-autocomplete')._renderItem = this.autocompleteRenderItem;\n\n\t\t\t\t$shareField.on('keydown', null, shareFieldKeydownHandler);\n\t\t\t}\n\n\t\t\tthis.resharerInfoView.$el = this.$el.find('.resharerInfoView');\n\t\t\tthis.resharerInfoView.render();\n\n\t\t\tthis.linkShareView.$el = this.$el.find('.linkShareView');\n\t\t\tthis.linkShareView.render();\n\n\t\t\tthis.shareeListView.$el = this.$el.find('.shareeListView');\n\t\t\tthis.shareeListView.render();\n\n\t\t\tthis.$el.find('.hasTooltip').tooltip();\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * sets whether share by link should be displayed or not. Default is\n\t\t * true.\n\t\t *\n\t\t * @param {bool} showLink\n\t\t */\n\t\tsetShowLink: function(showLink) {\n\t\t\tthis._showLink = (typeof showLink === 'boolean') ? showLink : true;\n\t\t\tthis.linkShareView.showLink = this._showLink;\n\t\t},\n\n\t\t_renderSharePlaceholderPart: function () {\n\t\t\tvar allowRemoteSharing = this.configModel.get('isRemoteShareAllowed');\n\t\t\tvar allowMailSharing = this.configModel.get('isMailShareAllowed');\n\n\t\t\tif (!allowRemoteSharing && allowMailSharing) {\n\t\t\t\treturn t('core', 'Name or email address...');\n\t\t\t}\n\t\t\tif (allowRemoteSharing && !allowMailSharing) {\n\t\t\t\treturn t('core', 'Name or federated cloud ID...');\n\t\t\t}\n\t\t\tif (allowRemoteSharing && allowMailSharing) {\n\t\t\t\treturn t('core', 'Name, federated cloud ID or email address...');\n\t\t\t}\n\n\t\t\treturn \tt('core', 'Name...');\n\t\t},\n\n\t});\n\n\tOC.Share.ShareDialogView = ShareDialogView;\n\n})();\n","/* global escapeHTML */\n\n/**\n * @namespace\n */\nOC.Share = _.extend(OC.Share || {}, {\n\tSHARE_TYPE_USER:0,\n\tSHARE_TYPE_GROUP:1,\n\tSHARE_TYPE_LINK:3,\n\tSHARE_TYPE_EMAIL:4,\n\tSHARE_TYPE_REMOTE:6,\n\tSHARE_TYPE_CIRCLE:7,\n\tSHARE_TYPE_GUEST:8,\n\tSHARE_TYPE_REMOTE_GROUP:9,\n\tSHARE_TYPE_ROOM:10,\n\n\t/**\n\t * Regular expression for splitting parts of remote share owners:\n\t * \"user@example.com/path/to/owncloud\"\n\t * \"user@anotherexample.com@example.com/path/to/owncloud\n\t */\n\t_REMOTE_OWNER_REGEXP: new RegExp(\"^([^@]*)@(([^@]*)@)?([^/]*)([/](.*)?)?$\"),\n\n\t/**\n\t * @deprecated use OC.Share.currentShares instead\n\t */\n\titemShares:[],\n\t/**\n\t * Full list of all share statuses\n\t */\n\tstatuses:{},\n\t/**\n\t * Shares for the currently selected file.\n\t * (for which the dropdown is open)\n\t *\n\t * Key is item type and value is an array or\n\t * shares of the given item type.\n\t */\n\tcurrentShares: {},\n\t/**\n\t * Whether the share dropdown is opened.\n\t */\n\tdroppedDown:false,\n\t/**\n\t * Loads ALL share statuses from server, stores them in\n\t * OC.Share.statuses then calls OC.Share.updateIcons() to update the\n\t * files \"Share\" icon to \"Shared\" according to their share status and\n\t * share type.\n\t *\n\t * If a callback is specified, the update step is skipped.\n\t *\n\t * @param itemType item type\n\t * @param fileList file list instance, defaults to OCA.Files.App.fileList\n\t * @param callback function to call after the shares were loaded\n\t */\n\tloadIcons:function(itemType, fileList, callback) {\n\t\tvar path = fileList.dirInfo.path;\n\t\tif (path === '/') {\n\t\t\tpath = '';\n\t\t}\n\t\tpath += '/' + fileList.dirInfo.name;\n\n\t\t// Load all share icons\n\t\t$.get(\n\t\t\tOC.linkToOCS('apps/files_sharing/api/v1', 2) + 'shares',\n\t\t\t{\n\t\t\t\tsubfiles: 'true',\n\t\t\t\tpath: path,\n\t\t\t\tformat: 'json'\n\t\t\t}, function(result) {\n\t\t\t\tif (result && result.ocs.meta.statuscode === 200) {\n\t\t\t\t\tOC.Share.statuses = {};\n\t\t\t\t\t$.each(result.ocs.data, function(it, share) {\n\t\t\t\t\t\tif (!(share.item_source in OC.Share.statuses)) {\n\t\t\t\t\t\t\tOC.Share.statuses[share.item_source] = {link: false};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\t\tOC.Share.statuses[share.item_source] = {link: true};\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (_.isFunction(callback)) {\n\t\t\t\t\t\tcallback(OC.Share.statuses);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tOC.Share.updateIcons(itemType, fileList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\t/**\n\t * Updates the files' \"Share\" icons according to the known\n\t * sharing states stored in OC.Share.statuses.\n\t * (not reloaded from server)\n\t *\n\t * @param itemType item type\n\t * @param fileList file list instance\n\t * defaults to OCA.Files.App.fileList\n\t */\n\tupdateIcons:function(itemType, fileList){\n\t\tvar item;\n\t\tvar $fileList;\n\t\tvar currentDir;\n\t\tif (!fileList && OCA.Files) {\n\t\t\tfileList = OCA.Files.App.fileList;\n\t\t}\n\t\t// fileList is usually only defined in the files app\n\t\tif (fileList) {\n\t\t\t$fileList = fileList.$fileList;\n\t\t\tcurrentDir = fileList.getCurrentDirectory();\n\t\t}\n\t\t// TODO: iterating over the files might be more efficient\n\t\tfor (item in OC.Share.statuses){\n\t\t\tvar iconClass = 'icon-shared';\n\t\t\tvar data = OC.Share.statuses[item];\n\t\t\tvar hasLink = data.link;\n\t\t\t// Links override shared in terms of icon display\n\t\t\tif (hasLink) {\n\t\t\t\ticonClass = 'icon-public';\n\t\t\t}\n\t\t\tif (itemType !== 'file' && itemType !== 'folder') {\n\t\t\t\t$('a.share[data-item=\"'+item+'\"] .icon').removeClass('icon-shared icon-public').addClass(iconClass);\n\t\t\t} else {\n\t\t\t\t// TODO: ultimately this part should be moved to files_sharing app\n\t\t\t\tvar file = $fileList.find('tr[data-id=\"'+item+'\"]');\n\t\t\t\tvar shareFolder = OC.imagePath('core', 'filetypes/folder-shared');\n\t\t\t\tvar img;\n\t\t\t\tif (file.length > 0) {\n\t\t\t\t\tthis.markFileAsShared(file, true, hasLink);\n\t\t\t\t} else {\n\t\t\t\t\tvar dir = currentDir;\n\t\t\t\t\tif (dir.length > 1) {\n\t\t\t\t\t\tvar last = '';\n\t\t\t\t\t\tvar path = dir;\n\t\t\t\t\t\t// Search for possible parent folders that are shared\n\t\t\t\t\t\twhile (path != last) {\n\t\t\t\t\t\t\tif (path === data.path && !data.link) {\n\t\t\t\t\t\t\t\tvar actions = $fileList.find('.fileactions .action[data-action=\"Share\"]');\n\t\t\t\t\t\t\t\tvar files = $fileList.find('.filename');\n\t\t\t\t\t\t\t\tvar i;\n\t\t\t\t\t\t\t\tfor (i = 0; i < actions.length; i++) {\n\t\t\t\t\t\t\t\t\t// TODO: use this.markFileAsShared()\n\t\t\t\t\t\t\t\t\timg = $(actions[i]).find('img');\n\t\t\t\t\t\t\t\t\tif (img.attr('src') !== OC.imagePath('core', 'actions/public')) {\n\t\t\t\t\t\t\t\t\t\timg.attr('src', image);\n\t\t\t\t\t\t\t\t\t\t$(actions[i]).addClass('permanent');\n\t\t\t\t\t\t\t\t\t\t$(actions[i]).html('<span> '+t('core', 'Shared')+'</span>').prepend(img);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor(i = 0; i < files.length; i++) {\n\t\t\t\t\t\t\t\t\tif ($(files[i]).closest('tr').data('type') === 'dir') {\n\t\t\t\t\t\t\t\t\t\t$(files[i]).find('.thumbnail').css('background-image', 'url('+shareFolder+')');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlast = path;\n\t\t\t\t\t\t\tpath = OC.Share.dirname(path);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tupdateIcon:function(itemType, itemSource) {\n\t\tvar shares = false;\n\t\tvar link = false;\n\t\tvar iconClass = '';\n\t\t$.each(OC.Share.itemShares, function(index) {\n\t\t\tif (OC.Share.itemShares[index]) {\n\t\t\t\tif (index == OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\tif (OC.Share.itemShares[index] == true) {\n\t\t\t\t\t\tshares = true;\n\t\t\t\t\t\ticonClass = 'icon-public';\n\t\t\t\t\t\tlink = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else if (OC.Share.itemShares[index].length > 0) {\n\t\t\t\t\tshares = true;\n\t\t\t\t\ticonClass = 'icon-shared';\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif (itemType != 'file' && itemType != 'folder') {\n\t\t\t$('a.share[data-item=\"'+itemSource+'\"] .icon').removeClass('icon-shared icon-public').addClass(iconClass);\n\t\t} else {\n\t\t\tvar $tr = $('tr').filterAttr('data-id', String(itemSource));\n\t\t\tif ($tr.length > 0) {\n\t\t\t\t// it might happen that multiple lists exist in the DOM\n\t\t\t\t// with the same id\n\t\t\t\t$tr.each(function() {\n\t\t\t\t\tOC.Share.markFileAsShared($(this), shares, link);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (shares) {\n\t\t\tOC.Share.statuses[itemSource] = OC.Share.statuses[itemSource] || {};\n\t\t\tOC.Share.statuses[itemSource].link = link;\n\t\t} else {\n\t\t\tdelete OC.Share.statuses[itemSource];\n\t\t}\n\t},\n\t/**\n\t * Format a remote address\n\t *\n\t * @param {String} shareWith userid, full remote share, or whatever\n\t * @param {String} shareWithDisplayName\n\t * @param {String} message\n\t * @return {String} HTML code to display\n\t */\n\t_formatRemoteShare: function(shareWith, shareWithDisplayName, message) {\n\t\tvar parts = this._REMOTE_OWNER_REGEXP.exec(shareWith);\n\t\tif (!parts) {\n\t\t\t// display avatar of the user\n\t\t\tvar avatar = '<span class=\"avatar\" data-username=\"' + escapeHTML(shareWith) + '\" title=\"' + message + \" \" + escapeHTML(shareWithDisplayName) + '\"></span>';\n\t\t\tvar hidden = '<span class=\"hidden-visually\">' + message + ' ' + escapeHTML(shareWithDisplayName) + '</span> ';\n\t\t\treturn avatar + hidden;\n\t\t}\n\n\t\tvar userName = parts[1];\n\t\tvar userDomain = parts[3];\n\t\tvar server = parts[4];\n\t\tvar tooltip = message + ' ' + userName;\n\t\tif (userDomain) {\n\t\t\ttooltip += '@' + userDomain;\n\t\t}\n\t\tif (server) {\n\t\t\tif (!userDomain) {\n\t\t\t\tuserDomain = '…';\n\t\t\t}\n\t\t\ttooltip += '@' + server;\n\t\t}\n\n\t\tvar html = '<span class=\"remoteAddress\" title=\"' + escapeHTML(tooltip) + '\">';\n\t\thtml += '<span class=\"username\">' + escapeHTML(userName) + '</span>';\n\t\tif (userDomain) {\n\t\t\thtml += '<span class=\"userDomain\">@' + escapeHTML(userDomain) + '</span>';\n\t\t}\n\t\thtml += '</span> ';\n\t\treturn html;\n\t},\n\t/**\n\t * Loop over all recipients in the list and format them using\n\t * all kind of fancy magic.\n\t *\n\t * @param {Object} recipients array of all the recipients\n\t * @return {String[]} modified list of recipients\n\t */\n\t_formatShareList: function(recipients) {\n\t\tvar _parent = this;\n\t\trecipients = _.toArray(recipients);\n\t\trecipients.sort(function(a, b) {\n\t\t\treturn a.shareWithDisplayName.localeCompare(b.shareWithDisplayName);\n\t\t});\n\t\treturn $.map(recipients, function(recipient) {\n\t\t\treturn _parent._formatRemoteShare(recipient.shareWith, recipient.shareWithDisplayName, t('core', 'Shared with'));\n\t\t});\n\t},\n\t/**\n\t * Marks/unmarks a given file as shared by changing its action icon\n\t * and folder icon.\n\t *\n\t * @param $tr file element to mark as shared\n\t * @param hasShares whether shares are available\n\t * @param hasLink whether link share is available\n\t */\n\tmarkFileAsShared: function($tr, hasShares, hasLink) {\n\t\tvar action = $tr.find('.fileactions .action[data-action=\"Share\"]');\n\t\tvar type = $tr.data('type');\n\t\tvar icon = action.find('.icon');\n\t\tvar message, recipients, avatars;\n\t\tvar ownerId = $tr.attr('data-share-owner-id');\n\t\tvar owner = $tr.attr('data-share-owner');\n\t\tvar shareFolderIcon;\n\t\tvar iconClass = 'icon-shared';\n\t\taction.removeClass('shared-style');\n\t\t// update folder icon\n\t\tif (type === 'dir' && (hasShares || hasLink || ownerId)) {\n\t\t\tif (hasLink) {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-public');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-shared');\n\t\t\t}\n\t\t\t$tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n\t\t\t$tr.attr('data-icon', shareFolderIcon);\n\t\t} else if (type === 'dir') {\n\t\t\tvar isEncrypted = $tr.attr('data-e2eencrypted');\n\t\t\tvar mountType = $tr.attr('data-mounttype');\n\t\t\t// FIXME: duplicate of FileList._createRow logic for external folder,\n\t\t\t// need to refactor the icon logic into a single code path eventually\n\t\t\tif (isEncrypted === 'true') {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-encrypted');\n\t\t\t\t$tr.attr('data-icon', shareFolderIcon);\n\t\t\t} else if (mountType && mountType.indexOf('external') === 0) {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-external');\n\t\t\t\t$tr.attr('data-icon', shareFolderIcon);\n\t\t\t} else {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir');\n\t\t\t\t// back to default\n\t\t\t\t$tr.removeAttr('data-icon');\n\t\t\t}\n\t\t\t$tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n\t\t}\n\t\t// update share action text / icon\n\t\tif (hasShares || ownerId) {\n\t\t\trecipients = $tr.data('share-recipient-data');\n\t\t\taction.addClass('shared-style');\n\n\t\t\tavatars = '<span>' + t('core', 'Shared') + '</span>';\n\t\t\t// even if reshared, only show \"Shared by\"\n\t\t\tif (ownerId) {\n\t\t\t\tmessage = t('core', 'Shared by');\n\t\t\t\tavatars = this._formatRemoteShare(ownerId, owner, message);\n\t\t\t} else if (recipients) {\n\t\t\t\tavatars = this._formatShareList(recipients);\n\t\t\t}\n\t\t\taction.html(avatars).prepend(icon);\n\n\t\t\tif (ownerId || recipients) {\n\t\t\t\tvar avatarElement = action.find('.avatar');\n\t\t\t\tavatarElement.each(function () {\n\t\t\t\t\t$(this).avatar($(this).data('username'), 32);\n\t\t\t\t});\n\t\t\t\taction.find('span[title]').tooltip({placement: 'top'});\n\t\t\t}\n\t\t} else {\n\t\t\taction.html('<span class=\"hidden-visually\">' + t('core', 'Shared') + '</span>').prepend(icon);\n\t\t}\n\t\tif (hasLink) {\n\t\t\ticonClass = 'icon-public';\n\t\t}\n\t\ticon.removeClass('icon-shared icon-public').addClass(iconClass);\n\t},\n\tshowDropDown:function(itemType, itemSource, appendTo, link, possiblePermissions, filename) {\n\t\tvar configModel = new OC.Share.ShareConfigModel();\n\t\tvar attributes = {itemType: itemType, itemSource: itemSource, possiblePermissions: possiblePermissions};\n\t\tvar itemModel = new OC.Share.ShareItemModel(attributes, {configModel: configModel});\n\t\tvar dialogView = new OC.Share.ShareDialogView({\n\t\t\tid: 'dropdown',\n\t\t\tmodel: itemModel,\n\t\t\tconfigModel: configModel,\n\t\t\tclassName: 'drop shareDropDown',\n\t\t\tattributes: {\n\t\t\t\t'data-item-source-name': filename,\n\t\t\t\t'data-item-type': itemType,\n\t\t\t\t'data-item-source': itemSource\n\t\t\t}\n\t\t});\n\t\tdialogView.setShowLink(link);\n\t\tvar $dialog = dialogView.render().$el;\n\t\t$dialog.appendTo(appendTo);\n\t\t$dialog.slideDown(OC.menuSpeed, function() {\n\t\t\tOC.Share.droppedDown = true;\n\t\t});\n\t\titemModel.fetch();\n\t},\n\thideDropDown:function(callback) {\n\t\tOC.Share.currentShares = null;\n\t\t$('#dropdown').slideUp(OC.menuSpeed, function() {\n\t\t\tOC.Share.droppedDown = false;\n\t\t\t$('#dropdown').remove();\n\t\t\tif (typeof FileActions !== 'undefined') {\n\t\t\t\t$('tr').removeClass('mouseOver');\n\t\t\t}\n\t\t\tif (callback) {\n\t\t\t\tcallback.call();\n\t\t\t}\n\t\t});\n\t},\n\tdirname:function(path) {\n\t\treturn path.replace(/\\\\/g,'/').replace(/\\/[^\\/]*$/, '');\n\t}\n});\n\n$(document).ready(function() {\n\tif(typeof monthNames != 'undefined'){\n\t\t// min date should always be the next day\n\t\tvar minDate = new Date();\n\t\tminDate.setDate(minDate.getDate()+1);\n\t\t$.datepicker.setDefaults({\n\t\t\tmonthNames: monthNames,\n\t\t\tmonthNamesShort: monthNamesShort,\n\t\t\tdayNames: dayNames,\n\t\t\tdayNamesMin: dayNamesMin,\n\t\t\tdayNamesShort: dayNamesShort,\n\t\t\tfirstDay: firstDay,\n\t\t\tminDate : minDate\n\t\t});\n\t}\n\n\t$(this).click(function(event) {\n\t\tvar target = $(event.target);\n\t\tvar isMatched = !target.is('.drop, .ui-datepicker-next, .ui-datepicker-prev, .ui-icon')\n\t\t\t&& !target.closest('#ui-datepicker-div').length && !target.closest('.ui-autocomplete').length;\n\t\tif (OC.Share && OC.Share.droppedDown && isMatched && $('#dropdown').has(event.target).length === 0) {\n\t\t\tOC.Share.hideDropDown();\n\t\t}\n\t});\n\n\n\n});\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./core/js/merged-share-backend.js","webpack:///./core/js/shareconfigmodel.js","webpack:///./core/js/sharetemplates.js","webpack:///./core/js/shareitemmodel.js","webpack:///./core/js/sharesocialmanager.js","webpack:///./core/js/sharedialogresharerinfoview.js","webpack:///./core/js/sharedialoglinkshareview.js","webpack:///./core/js/sharedialogshareelistview.js","webpack:///./core/js/sharedialogview.js","webpack:///./core/js/share.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","OC","Share","Types","ShareConfigModel","Backbone","Model","extend","defaults","publicUploadEnabled","enforcePasswordForPublicLink","oc_appconfig","core","enableLinkPasswordByDefault","isDefaultExpireDateEnforced","defaultExpireDateEnforced","isDefaultExpireDateEnabled","defaultExpireDateEnabled","isRemoteShareAllowed","remoteShareAllowed","isMailShareAllowed","undefined","shareByMailEnabled","defaultExpireDate","isResharingAllowed","resharingAllowed","isPasswordForMailSharesRequired","shareByMail","enforcePasswordProtection","allowGroupSharing","isPublicUploadEnabled","$","data","isShareWithLinkAllowed","val","getFederatedShareDocLink","federatedCloudShareDoc","getDefaultExpirationDateString","expireDateString","this","date","moment","utc","expireAfterDays","add","format","template","templates","Handlebars","Templates","1","container","depth0","helpers","partials","stack1","alias1","nullContext","nolinkShares","hash","fn","program","inverse","noop","each","linkShares","2","helper","alias2","helperMissing","alias4","escapeExpression","_typeof","newShareId","newShareLabel","showPending","newShareTitle","unless","3","5","pendingPopoverMenu","7","alias3","cid","linkShareCreationDate","linkShareLabel","shareLinkURL","copyLabel","8","popoverMenu","10","noSharingPlaceholder","11","compiler","main","shareAllowed","useData","publicUploadRValue","publicUploadRChecked","publicUploadRLabel","publicUploadRWValue","publicUploadRWChecked","publicUploadRWLabel","publicUploadWValue","publicUploadWChecked","publicUploadWLabel","publicEditingChecked","publicEditingLabel","9","isPasswordByTalkSet","passwordByTalkLabel","13","15","expireDate","17","19","21","url","newWindow","iconClass","label","publicUpload","publicEditing","hideDownload","hideDownloadLabel","isPasswordSet","isPasswordEnforced","enablePasswordLabel","passwordPlaceholder","showPasswordByTalkCheckBox","hasExpireDate","isExpirationEnforced","expireDateLabel","expirationDate","expirationLabel","expirationDatePlaceholder","maxDate","addNoteLabel","hasNote","shareNote","shareId","social","unshareLinkLabel","enforcedPasswordLabel","minPasswordLength","reshareOwner","sharedByText","hasShareNote","isShareWithCurrentUser","shareType","shareWith","modSeed","shareWithAvatar","shareWithDisplayName","shareWithTitle","canUpdateShareSettings","editPermissionPossible","canEditLabel","shareInitiator","shareInitiatorText","unshareLabel","sharees","linkReshares","sharePermissionPossible","isMailShare","hasSharePermission","sharePermission","canShareLabel","4","6","createPermissionPossible","updatePermissionPossible","deletePermissionPossible","hasCreatePermission","createPermission","createPermissionLabel","hasUpdatePermission","updatePermission","updatePermissionLabel","14","hasDeletePermission","deletePermission","deletePermissionLabel","16","passwordLabel","password","passwordValue","isTalkEnabled","secureDropMode","readPermission","secureDropLabel","20","22","24","passwordByTalkPlaceholder","26","28","30","isFolder","isNoteAvailable","shareLabel","sharePlaceholder","isSharingAllowed","SHARE_RESPONSE_INT_PROPS","ShareItemModel","_linkShareId","initialize","attributes","options","_","isUndefined","configModel","fileInfoModel","bindAll","allowPublicUploadStatus","permissions","saveLinkShare","expiration","shareIndex","findIndex","share","id","length","updateShare","passwordChanged","sendPasswordByTalk","PERMISSION_READ","SHARE_TYPE_LINK","addShare","defaultPermissions","getCapabilities","PERMISSION_ALL","possiblePermissions","PERMISSION_UPDATE","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_SHARE","path","getFullPath","_addOrUpdateShare","type","_getUrl","dataType","attrs","encodeURIComponent","ajaxSettings","self","ajax","always","isFunction","complete","done","fetch","success","fail","xhr","msg","result","responseJSON","ocs","meta","message","error","dialogs","alert","removeShare","isPublicUploadAllowed","isPublicEditingAllowed","isHideFileListSet","isFile","hasReshare","reshare","isObject","uid_owner","hasUserShares","getSharesWithCurrentItem","hasLinkShares","getReshareOwner","getReshareOwnerDisplayname","displayname_owner","getReshareNote","note","getReshareWith","share_with","getReshareWithDisplayName","share_with_displayname","getReshareType","share_type","getExpireDate","_shareExpireDate","getNote","_shareNote","shares","fileId","filter","item_source","getShareWith","getShareWithDisplayName","getShareWithAvatar","share_with_avatar","getSharedBy","getSharedByDisplayName","getFileOwnerUid","uid_file_owner","findShareWithIndex","isArray","getShareType","_shareHasPermission","permission","getPermissions","hasReadPermission","editPermissionState","hcp","hup","hdp","linkSharePermissions","base","params","linkToOCS","buildQueryString","_fetchShares","reshares","_fetchReshare","_reshareFetched","Deferred","resolve","shared_with_me","_groupReshares","superShare","shift","combinedPermissions","SHARE_TYPE_USER","SHARE_TYPE_GROUP","model","trigger","deferred","when","data1","data2","sharesMap","shareItem","set","parse","_legacyFillCurrentShares","statuses","currentShares","itemShares","currentShareStatus","link","push","console","warn","currentUser","allowPublicEditingStatus","hideFileListStatus","map","prop","parseInt","reject","file_source","window","location","protocol","host","token","generateUrl","fullPath","isDirectory","linkTo","hide_download","send_password_by_talk","_parseTime","time","isString","isNaN","getShareTypes","pluck","uniq","Social","SocialModel","SocialCollection","Collection","comparator","ShareDialogResharerInfoView","View","tagName","className","_template","view","on","render","$el","empty","reshareTemplate","ownerDisplayName","group","owner","escape","SHARE_TYPE_CIRCLE","circle","SHARE_TYPE_ROOM","conversation","html","find","$this","avatar","contactsMenu","PASSWORD_PLACEHOLDER_MESSAGE","PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL","ShareDialogLinkShareView","showLink","events","click .share-menu .icon-more","change .hideDownloadCheckbox","click input.share-pass-submit","keyup input.linkPassText","change .showPasswordCheckbox","change .passwordByTalkCheckbox","change .publicEditingCheckbox","click .linkText","click .pop-up","change .publicUploadRadio","click .expireDate","change .datepicker","click .datepicker","click .share-add","click .share-note-delete","click .share-note-submit","click .unshare","click .new-share","submit .enforcedPassForm","previousLinkShares","previous","clipboard","Clipboard","e","$trigger","tooltip","attr","placement","delay","$menu","next","$linkTextMenu","$input","closest","showMenu","actionMsg","test","navigator","userAgent","removeClass","select","newShare","event","$li","target","$loading","hasClass","addClass","hideMenus","shareData","defaultExpireDays","focus","$newShare","response","Notification","showTemporary","then","enforcedPasswordSet","preventDefault","onLinkTextClick","onHideDownloadChange","$checkbox","siblings","is","obj","onShowPasswordClick","slideToggle","menuSpeed","toggleClass","Util","isIE","onPasswordKeyUp","keyCode","onPasswordEntered","$container","parent","onPasswordByTalkChange","onAllowPublicEditingChange","onPublicUploadChange","currentTarget","showNoteForm","stopPropagation","$element","$form","deleteNote","sendNote","updateNote","prev","trim","$submit","$error","hide","method","show","setTimeout","linkShareTemplate","templateData","passwordPlaceholderInitial","publicEditable","minDate","Date","setDate","getDate","datepicker","setDefaults","dateFormat","oc_capabilities","password_policy","minLength","popoverBase","urlLabel","mailPrivatePlaceholder","mailButtonText","pendingPopover","pendingPopoverMenuTemplate","getShareeList","replace","popover","getPopoverObject","popoverMenuTemplate","delegateEvents","autosize","onToggleMenu","isPasswordEnabledByDefault","onPopUpClick","left","screen","width","top","height","open","href","onExpireDateChange","datePicker","state","showDatePicker","setExpirationDate","expirationDatePicker","onSelect","list","index","getShareeObject","stime","oc_appswebroots","shareTime","isNumber","stripTime","getTime","onUnshare","eq","remove","ShareDialogShareeListView","_menuOpen","_renderPermissionChange","click .permissions","click .password","click .passwordByTalk","click .secureDrop","keyup input.passwordField","focusout input.passwordField","sharedBy","sharedByDisplayName","fileOwnerUid","SHARE_TYPE_REMOTE","SHARE_TYPE_REMOTE_GROUP","SHARE_TYPE_EMAIL","oc_current_user","sharer","hasPassword","isRemoteShare","isRemoteGroupShare","isCircleShare","isFileSharedByMail","getShareProperties","crudsLabel","triangleSImage","imagePath","universal","getLinkReshares","shareInitiatorDisplayName","permissionChangeShareId","shareWithIndex","sharee","replaceWith","css","imageplaceholder","_this","forEach","$edit","datePickerClass","datePickerInput","expireDateCheckbox","liSelector","log","onMailSharePasswordProtectChange","element","passwordContainerClass","passwordContainer","loading","inputClass","passwordField","passwordByTalkElement","passwordByTalkState","passwordByTalkContainerClass","onMailSharePasswordProtectByTalkChange","passwordByTalkContainer","passwordByTalkField","passwordElement","passwordState","onMailSharePasswordKeyUp","onMailSharePasswordEntered","startsWith","blur","onPermissionChange","checked","$checkboxes","not","numberChecked","$editCb","checkbox","enableCb","elem","onSecureDropChange","ShareDialogView","_templates","_showLink","resharerInfoView","linkShareView","shareeListView","_lastSuggestions","_lastRecommendations","_pendingOperationsCount","focus .shareWithField","input .shareWithField","click .shareWithConfirm","_onRequest","_onEndRequest","subViewOptions","subViews","Plugins","attach","onShareWithFieldChanged","onShareWithFieldFocus","autocomplete","_getSuggestions","searchTerm","perPage","promise","search","itemType","statuscode","users","groups","remotes","remote_groups","emails","circles","rooms","usersLength","groupsLength","remotesLength","remoteGroupsLength","emailsLength","circlesLength","roomsLength","j","splice","sharesLength","exact","exactUsers","exactGroups","exactRemotes","exactRemoteGroups","exactEmails","exactCircles","exactRooms","exactMatches","concat","remoteGroups","lookup","grouped","sort","a","b","aProperty","bProperty","previousUuid","groupedLength","uuid","merged","moreResultsAvailable","oc_config","Math","min","max","_getRecommendations","recommendationHandler","$shareWithField","suggestions","$confirm","info","autocompleteHandler","term","count","title","append","autocompleteRenderItem","ul","item","icon","text","escapeHTML","description","getTranslatedType","circleInfo","circleOwner","insert","appendTo","RegExp","_onSelectRecipient","stopImmediatePropagation","_confirmShare","restoreUI","_toggleLoading","_loading","_loadingOnce","defer","baseTemplate","_renderSharePlaceholderPart","$shareField","source","numberOfItems","size","_renderItem","setShowLink","allowRemoteSharing","allowMailSharing","SHARE_TYPE_GUEST","_REMOTE_OWNER_REGEXP","droppedDown","loadIcons","fileList","callback","dirInfo","subfiles","it","updateIcons","$fileList","currentDir","OCA","Files","App","getCurrentDirectory","hasLink","img","file","shareFolder","markFileAsShared","dir","last","actions","files","image","prepend","dirname","updateIcon","itemSource","$tr","filterAttr","String","_formatRemoteShare","parts","exec","userName","userDomain","server","_formatShareList","recipients","_parent","toArray","localeCompare","recipient","hasShares","avatars","shareFolderIcon","action","ownerId","MimeType","getIconUrl","isEncrypted","mountType","indexOf","removeAttr","showDropDown","filename","itemModel","dialogView","data-item-source-name","data-item-type","data-item-source","$dialog","slideDown","hideDropDown","slideUp","FileActions","document","ready","monthNames","monthNamesShort","dayNames","dayNamesMin","dayNamesShort","firstDay","click","isMatched","has"],"mappings":"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","file":"share_backend.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import './shareconfigmodel.js';\nimport './sharetemplates.js';\nimport './shareitemmodel.js';\nimport './sharesocialmanager.js';\nimport './sharedialogresharerinfoview.js';\nimport './sharedialoglinkshareview.js';\nimport './sharedialogshareelistview.js';\nimport './sharedialogview.js';\nimport './share.js';\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* global moment, oc_appconfig, oc_config */\n\n(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t\tOC.Share.Types = {};\n\t}\n\n\t// FIXME: the config model should populate its own model attributes based on\n\t// the old DOM-based config\n\tvar ShareConfigModel = OC.Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tpublicUploadEnabled: false,\n\t\t\tenforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink,\n\t\t\tenableLinkPasswordByDefault: oc_appconfig.core.enableLinkPasswordByDefault,\n\t\t\tisDefaultExpireDateEnforced: oc_appconfig.core.defaultExpireDateEnforced === true,\n\t\t\tisDefaultExpireDateEnabled: oc_appconfig.core.defaultExpireDateEnabled === true,\n\t\t\tisRemoteShareAllowed: oc_appconfig.core.remoteShareAllowed,\n\t\t\tisMailShareAllowed: oc_appconfig.shareByMailEnabled !== undefined,\n\t\t\tdefaultExpireDate: oc_appconfig.core.defaultExpireDate,\n\t\t\tisResharingAllowed: oc_appconfig.core.resharingAllowed,\n\t\t\tisPasswordForMailSharesRequired: (oc_appconfig.shareByMail === undefined) ? false : oc_appconfig.shareByMail.enforcePasswordProtection,\n\t\t\tallowGroupSharing: oc_appconfig.core.allowGroupSharing\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisPublicUploadEnabled: function() {\n\t\t\tvar publicUploadEnabled = $('#filestable').data('allow-public-upload');\n\t\t\treturn publicUploadEnabled === 'yes';\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisShareWithLinkAllowed: function() {\n\t\t\treturn $('#allowShareWithLink').val() === 'yes';\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetFederatedShareDocLink: function() {\n\t\t\treturn oc_appconfig.core.federatedCloudShareDoc;\n\t\t},\n\n\t\tgetDefaultExpirationDateString: function () {\n\t\t\tvar expireDateString = '';\n\t\t\tif (this.get('isDefaultExpireDateEnabled')) {\n\t\t\t\tvar date = moment.utc();\n\t\t\t\tvar expireAfterDays = this.get('defaultExpireDate');\n\t\t\t\tdate.add(expireAfterDays, 'days');\n\t\t\t\texpireDateString = date.format('YYYY-MM-DD 00:00:00');\n\t\t\t}\n\t\t\treturn expireDateString;\n\t\t}\n\t});\n\n\n\tOC.Share.ShareConfigModel = ShareConfigModel;\n})();\n","(function() {\n var template = Handlebars.template, templates = OC.Share.Templates = OC.Share.Templates || {};\ntemplates['sharedialoglinkshareview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<ul class=\\\"shareWithList\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.nolinkShares : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.linkShares : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</ul>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.newShareId || (depth0 != null ? depth0.newShareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar icon-public-white\\\"></div>\\n\t\t\t<span class=\\\"username\\\">\"\n + alias4(((helper = (helper = helpers.newShareLabel || (depth0 != null ? depth0.newShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\t\t\t\t<div class=\\\"share-menu\\\">\\n\t\t\t\t\t<a href=\\\"#\\\" class=\\\"icon icon-add new-share has-tooltip \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.newShareTitle || (depth0 != null ? depth0.newShareTitle : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareTitle\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></a>\\n\t\t\t\t\t<span class=\\\"icon icon-loading-small \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"></span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t\t</div>\\n\t\t\t</span>\\n\t\t</li>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"hidden\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, helper;\n\n return \"\t\t\t\t\t\t\"\n + ((stack1 = ((helper = (helper = helpers.pendingPopoverMenu || (depth0 != null ? depth0.pendingPopoverMenu : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"pendingPopoverMenu\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar icon-public-white\\\"></div>\\n\t\t\t<span class=\\\"username\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.linkShareCreationDate || (depth0 != null ? depth0.linkShareCreationDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"linkShareCreationDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.linkShareLabel || (depth0 != null ? depth0.linkShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"linkShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\\n\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"clipboard-button icon icon-clippy has-tooltip\\\" data-clipboard-text=\\\"\"\n + alias4(((helper = (helper = helpers.shareLinkURL || (depth0 != null ? depth0.shareLinkURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareLinkURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.copyLabel || (depth0 != null ? depth0.copyLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"copyLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></a>\\n\t\t\t\t<div class=\\\"share-menu\\\">\\n\t\t\t\t\t<a href=\\\"#\\\" class=\\\"icon icon-more \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"></a>\\n\t\t\t\t\t<span class=\\\"icon icon-loading-small \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"></span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPending : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.program(8, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t\t</div>\\n\t\t\t</span>\\n\t\t</li>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, helper;\n\n return \"\t\t\t\t\t\t\"\n + ((stack1 = ((helper = (helper = helpers.popoverMenu || (depth0 != null ? depth0.popoverMenu : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"popoverMenu\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.noSharingPlaceholder : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<input id=\\\"shareWith-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"shareWithField\\\" type=\\\"text\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.noSharingPlaceholder || (depth0 != null ? depth0.noSharingPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"noSharingPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" disabled=\\\"disabled\\\" />\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.shareAllowed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(10, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\ntemplates['sharedialoglinkshareview_popover_menu'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"radio\\\" name=\\\"publicUpload\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.publicUploadRValue || (depth0 != null ? depth0.publicUploadRValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" id=\\\"sharingDialogAllowPublicUpload-r-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"radio publicUploadRadio\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicUploadRChecked || (depth0 != null ? depth0.publicUploadRChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicUpload-r-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicUploadRLabel || (depth0 != null ? depth0.publicUploadRLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"radio\\\" name=\\\"publicUpload\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.publicUploadRWValue || (depth0 != null ? depth0.publicUploadRWValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRWValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" id=\\\"sharingDialogAllowPublicUpload-rw-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"radio publicUploadRadio\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicUploadRWChecked || (depth0 != null ? depth0.publicUploadRWChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRWChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicUpload-rw-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicUploadRWLabel || (depth0 != null ? depth0.publicUploadRWLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadRWLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"radio\\\" name=\\\"publicUpload\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.publicUploadWValue || (depth0 != null ? depth0.publicUploadWValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadWValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" id=\\\"sharingDialogAllowPublicUpload-w-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"radio publicUploadRadio\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicUploadWChecked || (depth0 != null ? depth0.publicUploadWChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadWChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicUpload-w-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicUploadWLabel || (depth0 != null ? depth0.publicUploadWLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicUploadWLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li id=\\\"allowPublicEditingWrapper\\\">\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"allowPublicEditing\\\" id=\\\"sharingDialogAllowPublicEditing-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox publicEditingCheckbox\\\" \"\n + ((stack1 = ((helper = (helper = helpers.publicEditingChecked || (depth0 != null ? depth0.publicEditingChecked : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicEditingChecked\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogAllowPublicEditing-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.publicEditingLabel || (depth0 != null ? depth0.publicEditingLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"publicEditingLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"checked=\\\"checked\\\"\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \"disabled=\\\"disabled\\\"\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"hidden\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"shareOption menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"passwordByTalk\\\" id=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox passwordByTalkCheckbox\\\"\\n\t\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordByTalkSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordByTalkLabel || (depth0 != null ? depth0.passwordByTalkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n return \"datepicker\";\n},\"15\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.expireDate || (depth0 != null ? depth0.expireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"expireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"17\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.defaultExpireDate || (depth0 != null ? depth0.defaultExpireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"defaultExpireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"19\":function(container,depth0,helpers,partials,data) {\n return \"readonly\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"menuitem pop-up\\\" data-url=\\\"\"\n + alias4(((helper = (helper = helpers.url || (depth0 != null ? depth0.url : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"url\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-window=\\\"\"\n + alias4(((helper = (helper = helpers.newWindow || (depth0 != null ? depth0.newWindow : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newWindow\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<span class=\\\"icon \"\n + alias4(((helper = (helper = helpers.iconClass || (depth0 != null ? depth0.iconClass : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"iconClass\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></span>\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.label || (depth0 != null ? depth0.label : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"label\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"popovermenu menu\\\">\\n\t<ul>\\n\t\t<li class=\\\"hidden linkTextMenu\\\">\\n\t\t\t<span class=\\\"menuitem icon-link-text\\\">\\n\t\t\t\t<input id=\\\"linkText-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"linkText\\\" type=\\\"text\\\" readonly=\\\"readonly\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.shareLinkURL || (depth0 != null ? depth0.shareLinkURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareLinkURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t</span>\\n\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.publicUpload : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.publicEditing : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"hideDownload\\\" id=\\\"sharingDialogHideDownload-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox hideDownloadCheckbox\\\"\\n\t\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hideDownload : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t<label for=\\\"sharingDialogHideDownload-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.hideDownloadLabel || (depth0 != null ? depth0.hideDownloadLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hideDownloadLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"showPassword\\\" id=\\\"showPassword-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"checkbox showPasswordCheckbox\\\"\\n\t\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" value=\\\"1\\\" />\\n\t\t\t\t\t<label for=\\\"showPassword-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.enablePasswordLabel || (depth0 != null ? depth0.enablePasswordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"enablePasswordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" linkPassMenu\\\">\\n\t\t\t\t<span class=\\\"menuitem icon-share-pass\\\">\\n\t\t\t\t\t<input id=\\\"linkPassText-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"linkPassText\\\" type=\\\"password\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordPlaceholder || (depth0 != null ? depth0.passwordPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"new-password\\\" />\\n\t\t\t\t\t<input type=\\\"submit\\\" class=\\\"icon-confirm share-pass-submit\\\" value=\\\"\\\" />\\n\t\t\t\t\t<span class=\\\"icon icon-loading-small hidden\\\"></span>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.showPasswordByTalkCheckBox : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t<input id=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"expirationDate\\\" class=\\\"expireDate checkbox\\\"\\n\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isExpirationEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t<label for=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expireDateLabel || (depth0 != null ? depth0.expireDateLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expireDateLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t</span>\\n\t\t</li>\\n\t\t<li class=\\\"\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<span class=\\\"menuitem icon-expiredate expirationDateContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t<label for=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDate || (depth0 != null ? depth0.expirationDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expirationLabel || (depth0 != null ? depth0.expirationLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t<!-- do not use the datepicker if enforced -->\\n\t\t\t\t<input id=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isExpirationEnforced : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" type=\\\"text\\\"\\n\t\t\t\t\tplaceholder=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDatePlaceholder || (depth0 != null ? depth0.expirationDatePlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDatePlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.program(17, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"\\n\t\t\t\t\tdata-max-date=\\\"\"\n + alias4(((helper = (helper = helpers.maxDate || (depth0 != null ? depth0.maxDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"maxDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isExpirationEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t</span>\\n\t\t\t</li>\\n\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"share-add\\\">\\n\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t<span class=\\\"icon icon-edit\\\"></span>\\n\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.addNoteLabel || (depth0 != null ? depth0.addNoteLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"addNoteLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t<input type=\\\"button\\\" class=\\\"share-note-delete icon-delete \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t</a>\\n\t\t</li>\\n\t\t<li class=\\\"share-note-form share-note-link \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<span class=\\\"menuitem icon-note\\\">\\n\t\t\t\t<textarea class=\\\"share-note\\\">\"\n + alias4(((helper = (helper = helpers.shareNote || (depth0 != null ? depth0.shareNote : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareNote\",\"hash\":{},\"data\":data}) : helper)))\n + \"</textarea>\\n\t\t\t\t<input type=\\\"submit\\\" class=\\\"icon-confirm share-note-submit\\\" value=\\\"\\\" id=\\\"add-note-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t</span>\\n\t\t</li>\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.social : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(21, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"unshare\\\"><span class=\\\"icon-loading-small hidden\\\"></span><span class=\\\"icon icon-delete\\\"></span><span>\"\n + alias4(((helper = (helper = helpers.unshareLinkLabel || (depth0 != null ? depth0.unshareLinkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"unshareLinkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span></a>\\n\t\t</li>\\n\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"new-share\\\">\\n\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t<span class=\\\"icon icon-add\\\"></span>\\n\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.newShareLabel || (depth0 != null ? depth0.newShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"newShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t</a>\\n\t\t</li>\\n\t</ul>\\n</div>\\n\";\n},\"useData\":true});\ntemplates['sharedialoglinkshareview_popover_menu_pending'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem icon-info\\\">\\n\t\t\t\t\t<p>\"\n + alias4(((helper = (helper = helpers.enforcedPasswordLabel || (depth0 != null ? depth0.enforcedPasswordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"enforcedPasswordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</p>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"linkPassMenu\\\">\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<form autocomplete=\\\"off\\\" class=\\\"enforcedPassForm\\\">\\n\t\t\t\t\t\t<input id=\\\"enforcedPassText\\\" required class=\\\"enforcedPassText\\\" type=\\\"password\\\"\\n\t\t\t\t\t\t\tplaceholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordPlaceholder || (depth0 != null ? depth0.passwordPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"enforcedPassText\\\" minlength=\\\"\"\n + alias4(((helper = (helper = helpers.minPasswordLength || (depth0 != null ? depth0.minPasswordLength : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"minPasswordLength\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t\t\t\t<input type=\\\"submit\\\" value=\\\" \\\" class=\\\"primary icon-checkmark-white\\\">\\n\t\t\t\t\t</form>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"popovermenu open menu pending\\\">\\n\t<ul>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isPasswordEnforced : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</ul>\\n</div>\\n\";\n},\"useData\":true});\ntemplates['sharedialogresharerinfoview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"share-note\\\">\"\n + container.escapeExpression(((helper = (helper = helpers.shareNote || (depth0 != null ? depth0.shareNote : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"shareNote\",\"hash\":{},\"data\":data}) : helper)))\n + \"</div>\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<span class=\\\"reshare\\\">\\n\t<div class=\\\"avatar\\\" data-userName=\\\"\"\n + alias4(((helper = (helper = helpers.reshareOwner || (depth0 != null ? depth0.reshareOwner : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"reshareOwner\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></div>\\n\t\"\n + alias4(((helper = (helper = helpers.sharedByText || (depth0 != null ? depth0.sharedByText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"sharedByText\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n</span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasShareNote : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"useData\":true});\ntemplates['sharedialogshareelistview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isShareWithCurrentUser : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-share-type=\\\"\"\n + alias4(((helper = (helper = helpers.shareType || (depth0 != null ? depth0.shareType : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareType\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-share-with=\\\"\"\n + alias4(((helper = (helper = helpers.shareWith || (depth0 != null ? depth0.shareWith : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWith\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.modSeed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" data-username=\\\"\"\n + alias4(((helper = (helper = helpers.shareWith || (depth0 != null ? depth0.shareWith : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWith\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-avatar=\\\"\"\n + alias4(((helper = (helper = helpers.shareWithAvatar || (depth0 != null ? depth0.shareWithAvatar : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithAvatar\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-displayname=\\\"\"\n + alias4(((helper = (helper = helpers.shareWithDisplayName || (depth0 != null ? depth0.shareWithDisplayName : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithDisplayName\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.modSeed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"></div>\\n\t\t\t<span class=\\\"username\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.shareWithTitle || (depth0 != null ? depth0.shareWithTitle : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithTitle\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.shareWithDisplayName || (depth0 != null ? depth0.shareWithDisplayName : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWithDisplayName\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.canUpdateShareSettings : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t</li>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"imageplaceholderseed\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"data-seed=\\\"\"\n + alias4(((helper = (helper = helpers.shareWith || (depth0 != null ? depth0.shareWith : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareWith\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + alias4(((helper = (helper = helpers.shareType || (depth0 != null ? depth0.shareType : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareType\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.editPermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t\t<div tabindex=\\\"0\\\" class=\\\"share-menu\\\"><span class=\\\"icon icon-more\\\"></span>\\n\t\t\t\t\t\"\n + ((stack1 = ((helper = (helper = helpers.popoverMenu || (depth0 != null ? depth0.popoverMenu : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"popoverMenu\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"\\n\t\t\t\t</div>\\n\t\t\t</span>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t\t<span>\\n\t\t\t\t\t\t<input id=\\\"canEdit-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"edit\\\" class=\\\"permissions checkbox\\\" />\\n\t\t\t\t\t\t<label for=\\\"canEdit-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.canEditLabel || (depth0 != null ? depth0.canEditLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"canEditLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t<li data-share-id=\\\"\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-share-type=\\\"\"\n + alias4(((helper = (helper = helpers.shareType || (depth0 != null ? depth0.shareType : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareType\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t<div class=\\\"avatar\\\" data-username=\\\"\"\n + alias4(((helper = (helper = helpers.shareInitiator || (depth0 != null ? depth0.shareInitiator : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareInitiator\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"></div>\\n\t\t\t<span class=\\\"has-tooltip username\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.shareInitiator || (depth0 != null ? depth0.shareInitiator : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareInitiator\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.shareInitiatorText || (depth0 != null ? depth0.shareInitiatorText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareInitiatorText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t<span class=\\\"sharingOptionsGroup\\\">\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"unshare\\\"><span class=\\\"icon-loading-small hidden\\\"></span><span class=\\\"icon icon-delete\\\"></span><span class=\\\"hidden-visually\\\">\"\n + alias4(((helper = (helper = helpers.unshareLabel || (depth0 != null ? depth0.unshareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"unshareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span></a>\\n\t\t\t</span>\\n\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<ul id=\\\"shareWithList\\\" class=\\\"shareWithList\\\">\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.sharees : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.linkReshares : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</ul>\\n\";\n},\"useData\":true});\ntemplates['sharedialogshareelistview_popover_menu'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" \"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.sharePermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \";\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" \"\n + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<input id=\\\"canShare-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"share\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasSharePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.sharePermission || (depth0 != null ? depth0.sharePermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"sharePermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t\t\t<label for=\\\"canShare-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.canShareLabel || (depth0 != null ? depth0.canShareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"canShareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"checked=\\\"checked\\\"\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.createPermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.updatePermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.deletePermissionPossible : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"canCreate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"create\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasCreatePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.createPermission || (depth0 != null ? depth0.createPermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"createPermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"canCreate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.createPermissionLabel || (depth0 != null ? depth0.createPermissionLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"createPermissionLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"canUpdate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"update\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasUpdatePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.updatePermission || (depth0 != null ? depth0.updatePermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"updatePermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"canUpdate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.updatePermissionLabel || (depth0 != null ? depth0.updatePermissionLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"updatePermissionLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\t\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\\n\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"canDelete-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"delete\\\" class=\\\"permissions checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasDeletePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.deletePermission || (depth0 != null ? depth0.deletePermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"deletePermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"canDelete-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.deletePermissionLabel || (depth0 != null ? depth0.deletePermissionLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"deletePermissionLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\t\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasCreatePermission : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t<li>\\n\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t<input id=\\\"password-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"password\\\" class=\\\"password checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" />\\n\t\t\t\t\t<label for=\\\"password-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordLabel || (depth0 != null ? depth0.passwordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"passwordMenu-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isPasswordSet : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t<span class=\\\"passwordContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" icon-passwordmail menuitem\\\">\\n\t\t\t\t\t<label for=\\\"passwordField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.password || (depth0 != null ? depth0.password : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"password\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordLabel || (depth0 != null ? depth0.passwordLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t<input id=\\\"passwordField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"passwordField\\\" type=\\\"password\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordPlaceholder || (depth0 != null ? depth0.passwordPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.passwordValue || (depth0 != null ? depth0.passwordValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"new-password\\\" />\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isTalkEnabled : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"17\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"secureDrop-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"secureDrop\\\" class=\\\"checkbox secureDrop\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.secureDropMode : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" data-permissions=\\\"\"\n + alias4(((helper = (helper = helpers.readPermission || (depth0 != null ? depth0.readPermission : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"readPermission\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"/>\\n\t\t\t\t\t\t<label for=\\\"secureDrop-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.secureDropLabel || (depth0 != null ? depth0.secureDropLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"secureDropLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isPasswordForMailSharesRequired : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n return \"disabled=\\\"\\\"\";\n},\"22\":function(container,depth0,helpers,partials,data) {\n return \"hidden\";\n},\"24\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t<li>\\n\t\t\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t\t\t<input id=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"passwordByTalk\\\" class=\\\"passwordByTalk checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isPasswordByTalkSet : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" />\\n\t\t\t\t\t\t<label for=\\\"passwordByTalk-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordByTalkLabel || (depth0 != null ? depth0.passwordByTalkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\t\t\t\t<li class=\\\"passwordByTalkMenu-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isPasswordByTalkSet : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t\t<span class=\\\"passwordByTalkContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" icon-passwordtalk menuitem\\\">\\n\t\t\t\t\t\t<label for=\\\"passwordByTalkField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.password || (depth0 != null ? depth0.password : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"password\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.passwordByTalkLabel || (depth0 != null ? depth0.passwordByTalkLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t\t\t<input id=\\\"passwordByTalkField-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"passwordField\\\" type=\\\"password\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.passwordByTalkPlaceholder || (depth0 != null ? depth0.passwordByTalkPlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordByTalkPlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.passwordValue || (depth0 != null ? depth0.passwordValue : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"passwordValue\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" autocomplete=\\\"new-password\\\" />\\n\t\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t</span>\\n\t\t\t\t</li>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.expireDate || (depth0 != null ? depth0.expireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"expireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"28\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return container.escapeExpression(((helper = (helper = helpers.defaultExpireDate || (depth0 != null ? depth0.defaultExpireDate : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"defaultExpireDate\",\"hash\":{},\"data\":data}) : helper)));\n},\"30\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"#\\\" class=\\\"share-add\\\">\\n\t\t\t\t\t<span class=\\\"icon-loading-small hidden\\\"></span>\\n\t\t\t\t\t<span class=\\\"icon icon-edit\\\"></span>\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.addNoteLabel || (depth0 != null ? depth0.addNoteLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"addNoteLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t\t<input type=\\\"button\\\" class=\\\"share-note-delete icon-delete \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\t\t\t<li class=\\\"share-note-form \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasNote : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t\t<span class=\\\"menuitem icon-note\\\">\\n\t\t\t\t\t<textarea class=\\\"share-note\\\">\"\n + alias4(((helper = (helper = helpers.shareNote || (depth0 != null ? depth0.shareNote : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareNote\",\"hash\":{},\"data\":data}) : helper)))\n + \"</textarea>\\n\t\t\t\t\t<input type=\\\"submit\\\" class=\\\"icon-confirm share-note-submit\\\" value=\\\"\\\" id=\\\"add-note-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t\t</span>\\n\t\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"popovermenu bubble hidden menu\\\">\\n\t<ul>\\n\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isResharingAllowed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isFolder : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isMailShare : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<span class=\\\"menuitem\\\">\\n\t\t\t\t<input id=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" type=\\\"checkbox\\\" name=\\\"expirationDate\\\" class=\\\"expireDate checkbox\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" />\\n\t\t\t\t<label for=\\\"expireDate-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expireDateLabel || (depth0 != null ? depth0.expireDateLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expireDateLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t</span>\\n\t\t</li>\\n\t\t<li class=\\\"expirationDateMenu-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" \"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<span class=\\\"expirationDateContainer-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \" icon-expiredate menuitem\\\">\\n\t\t\t\t<label for=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDate || (depth0 != null ? depth0.expirationDate : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDate\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.expirationLabel || (depth0 != null ? depth0.expirationLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t\t\t\t<input id=\\\"expirationDatePicker-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"-\"\n + alias4(((helper = (helper = helpers.shareId || (depth0 != null ? depth0.shareId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareId\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"datepicker\\\" type=\\\"text\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.expirationDatePlaceholder || (depth0 != null ? depth0.expirationDatePlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"expirationDatePlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasExpireDate : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.program(28, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" />\\n\t\t\t</span>\\n\t\t</li>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isNoteAvailable : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<li>\\n\t\t\t<a href=\\\"#\\\" class=\\\"unshare\\\"><span class=\\\"icon-loading-small hidden\\\"></span><span class=\\\"icon icon-delete\\\"></span><span>\"\n + alias4(((helper = (helper = helpers.unshareLabel || (depth0 != null ? depth0.unshareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"unshareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span></a>\\n\t\t</li>\\n\t</ul>\\n</div>\\n\";\n},\"useData\":true});\ntemplates['sharedialogview'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t<label for=\\\"shareWith-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"hidden-visually\\\">\"\n + alias4(((helper = (helper = helpers.shareLabel || (depth0 != null ? depth0.shareLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"shareLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n\t<div class=\\\"oneline\\\">\\n\t\t<input id=\\\"shareWith-\"\n + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"cid\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"shareWithField\\\" type=\\\"text\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.sharePlaceholder || (depth0 != null ? depth0.sharePlaceholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"sharePlaceholder\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t<span class=\\\"shareWithLoading icon-loading-small hidden\\\"></span>\\n\t\t<span class=\\\"shareWithConfirm icon icon-confirm\\\"></span>\\n\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"resharerInfoView subView\\\"></div>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.isSharingAllowed : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"<div class=\\\"linkShareView subView\\\"></div>\\n<div class=\\\"shareeListView subView\\\"></div>\\n<div class=\\\"loading hidden\\\" style=\\\"height: 50px\\\"></div>\\n\";\n},\"useData\":true});\n})();","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n(function() {\n\tif(!OC.Share) {\n\t\tOC.Share = {};\n\t\tOC.Share.Types = {};\n\t}\n\n\t/**\n\t * @typedef {object} OC.Share.Types.LinkShareInfo\n\t * @property {string} token\n\t * @property {bool} hideDownload\n\t * @property {string|null} password\n\t * @property {bool} sendPasswordByTalk\n\t * @property {number} permissions\n\t * @property {Date} expiration\n\t * @property {number} stime share time\n\t */\n\n\t/**\n\t * @typedef {object} OC.Share.Types.Reshare\n\t * @property {string} uid_owner\n\t * @property {number} share_type\n\t * @property {string} share_with\n\t * @property {string} displayname_owner\n\t * @property {number} permissions\n\t */\n\n\t/**\n\t * @typedef {object} OC.Share.Types.ShareInfo\n\t * @property {number} share_type\n\t * @property {number} permissions\n\t * @property {number} file_source optional\n\t * @property {number} item_source\n\t * @property {string} token\n\t * @property {string} share_with\n\t * @property {string} share_with_displayname\n\t * @property {string} share_with_avatar\n\t * @property {string} mail_send\n\t * @property {Date} expiration optional?\n\t * @property {number} stime optional?\n\t * @property {string} uid_owner\n\t * @property {string} displayname_owner\n\t */\n\n\t/**\n\t * @typedef {object} OC.Share.Types.ShareItemInfo\n\t * @property {OC.Share.Types.Reshare} reshare\n\t * @property {OC.Share.Types.ShareInfo[]} shares\n\t * @property {OC.Share.Types.LinkShareInfo|undefined} linkShare\n\t */\n\n\t/**\n\t * These properties are sometimes returned by the server as strings instead\n\t * of integers, so we need to convert them accordingly...\n\t */\n\tvar SHARE_RESPONSE_INT_PROPS = [\n\t\t'id', 'file_parent', 'mail_send', 'file_source', 'item_source', 'permissions',\n\t\t'storage', 'share_type', 'parent', 'stime'\n\t];\n\n\t/**\n\t * @class OCA.Share.ShareItemModel\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t * // FIXME: use OC Share API once #17143 is done\n\t *\n\t * // TODO: this really should be a collection of share item models instead,\n\t * where the link share is one of them\n\t */\n\tvar ShareItemModel = OC.Backbone.Model.extend({\n\t\t/**\n\t\t * share id of the link share, if applicable\n\t\t */\n\t\t_linkShareId: null,\n\n\t\tinitialize: function(attributes, options) {\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t}\n\t\t\tif(!_.isUndefined(options.fileInfoModel)) {\n\t\t\t\t/** @type {OC.Files.FileInfo} **/\n\t\t\t\tthis.fileInfoModel = options.fileInfoModel;\n\t\t\t}\n\n\t\t\t_.bindAll(this, 'addShare');\n\t\t},\n\n\t\tdefaults: {\n\t\t\tallowPublicUploadStatus: false,\n\t\t\tpermissions: 0,\n\t\t\tlinkShares: []\n\t\t},\n\n\t\t/**\n\t\t * Saves the current link share information.\n\t\t *\n\t\t * This will trigger an ajax call and, if successful, refetch the model\n\t\t * afterwards. Callbacks \"success\", \"error\" and \"complete\" can be given\n\t\t * in the options object; \"success\" is called after a successful save\n\t\t * once the model is refetch, \"error\" is called after a failed save, and\n\t\t * \"complete\" is called both after a successful save and after a failed\n\t\t * save. Note that \"complete\" is called before \"success\" and \"error\" are\n\t\t * called (unlike in jQuery, in which it is called after them); this\n\t\t * ensures that \"complete\" is called even if refetching the model fails.\n\t\t *\n\t\t * TODO: this should be a separate model\n\t\t */\n\t\tsaveLinkShare: function(attributes, options) {\n\t\t\toptions = options || {};\n\t\t\tattributes = _.extend({}, attributes);\n\n\t\t\tvar shareId = null;\n\t\t\tvar call;\n\n\t\t\t// oh yeah...\n\t\t\tif (attributes.expiration) {\n\t\t\t\tattributes.expireDate = attributes.expiration;\n\t\t\t\tdelete attributes.expiration;\n\t\t\t}\n\n\t\t\tvar linkShares = this.get('linkShares');\n\t\t\tvar shareIndex = _.findIndex(linkShares, function(share) {return share.id === attributes.cid})\n\n\t\t\tif (linkShares.length > 0 && shareIndex !== -1) {\n\t\t\t\tshareId = linkShares[shareIndex].id;\n\n\t\t\t\t// note: update can only update a single value at a time\n\t\t\t\tcall = this.updateShare(shareId, attributes, options);\n\t\t\t} else {\n\t\t\t\tattributes = _.defaults(attributes, {\n\t\t\t\t\thideDownload: false,\n\t\t\t\t\tpassword: '',\n\t\t\t\t\tpasswordChanged: false,\n\t\t\t\t\tsendPasswordByTalk: false,\n\t\t\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\t\t\texpireDate: this.configModel.getDefaultExpirationDateString(),\n\t\t\t\t\tshareType: OC.Share.SHARE_TYPE_LINK\n\t\t\t\t});\n\n\t\t\t\tcall = this.addShare(attributes, options);\n\t\t\t}\n\n\t\t\treturn call;\n\t\t},\n\n\t\taddShare: function(attributes, options) {\n\t\t\tvar shareType = attributes.shareType;\n\t\t\tattributes = _.extend({}, attributes);\n\n\t\t\t// get default permissions\n\t\t\tvar defaultPermissions = OC.getCapabilities()['files_sharing']['default_permissions'] || OC.PERMISSION_ALL;\n\t\t\tvar possiblePermissions = OC.PERMISSION_READ;\n\n\t\t\tif (this.updatePermissionPossible()) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_UPDATE;\n\t\t\t}\n\t\t\tif (this.createPermissionPossible()) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_CREATE;\n\t\t\t}\n\t\t\tif (this.deletePermissionPossible()) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_DELETE;\n\t\t\t}\n\t\t\tif (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) {\n\t\t\t\tpossiblePermissions = possiblePermissions | OC.PERMISSION_SHARE;\n\t\t\t}\n\n\t\t\tattributes.permissions = defaultPermissions & possiblePermissions;\n\t\t\tif (_.isUndefined(attributes.path)) {\n\t\t\t\tattributes.path = this.fileInfoModel.getFullPath();\n\t\t\t}\n\n\t\t\treturn this._addOrUpdateShare({\n\t\t\t\ttype: 'POST',\n\t\t\t\turl: this._getUrl('shares'),\n\t\t\t\tdata: attributes,\n\t\t\t\tdataType: 'json'\n\t\t\t}, options);\n\t\t},\n\n\t\tupdateShare: function(shareId, attrs, options) {\n\t\t\treturn this._addOrUpdateShare({\n\t\t\t\ttype: 'PUT',\n\t\t\t\turl: this._getUrl('shares/' + encodeURIComponent(shareId)),\n\t\t\t\tdata: attrs,\n\t\t\t\tdataType: 'json'\n\t\t\t}, options);\n\t\t},\n\n\t\t_addOrUpdateShare: function(ajaxSettings, options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\n\t\t\treturn $.ajax(\n\t\t\t\tajaxSettings\n\t\t\t).always(function() {\n\t\t\t\tif (_.isFunction(options.complete)) {\n\t\t\t\t\toptions.complete(self);\n\t\t\t\t}\n\t\t\t}).done(function() {\n\t\t\t\tself.fetch().done(function() {\n\t\t\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t\t\toptions.success(self);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).fail(function(xhr) {\n\t\t\t\tvar msg = t('core', 'Error');\n\t\t\t\tvar result = xhr.responseJSON;\n\t\t\t\tif (result && result.ocs && result.ocs.meta) {\n\t\t\t\t\tmsg = result.ocs.meta.message;\n\t\t\t\t}\n\n\t\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\t\toptions.error(self, msg);\n\t\t\t\t} else {\n\t\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error while sharing'));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Deletes the share with the given id\n\t\t *\n\t\t * @param {int} shareId share id\n\t\t * @return {jQuery}\n\t\t */\n\t\tremoveShare: function(shareId, options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\t\t\treturn $.ajax({\n\t\t\t\ttype: 'DELETE',\n\t\t\t\turl: this._getUrl('shares/' + encodeURIComponent(shareId)),\n\t\t\t}).done(function() {\n\t\t\t\tself.fetch({\n\t\t\t\t\tsuccess: function() {\n\t\t\t\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t\t\t\toptions.success(self);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).fail(function(xhr) {\n\t\t\t\tvar msg = t('core', 'Error');\n\t\t\t\tvar result = xhr.responseJSON;\n\t\t\t\tif (result.ocs && result.ocs.meta) {\n\t\t\t\t\tmsg = result.ocs.meta.message;\n\t\t\t\t}\n\n\t\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\t\toptions.error(self, msg);\n\t\t\t\t} else {\n\t\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error removing share'));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisPublicUploadAllowed: function() {\n\t\t\treturn this.get('allowPublicUploadStatus');\n\t\t},\n\n\t\tisPublicEditingAllowed: function() {\n\t\t\treturn this.get('allowPublicEditingStatus');\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisHideFileListSet: function() {\n\t\t\treturn this.get('hideFileListStatus');\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFolder: function() {\n\t\t\treturn this.get('itemType') === 'folder';\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFile: function() {\n\t\t\treturn this.get('itemType') === 'file';\n\t\t},\n\n\t\t/**\n\t\t * whether this item has reshare information\n\t\t * @returns {boolean}\n\t\t */\n\t\thasReshare: function() {\n\t\t\tvar reshare = this.get('reshare');\n\t\t\treturn _.isObject(reshare) && !_.isUndefined(reshare.uid_owner);\n\t\t},\n\n\t\t/**\n\t\t * whether this item has user share information\n\t\t * @returns {boolean}\n\t\t */\n\t\thasUserShares: function() {\n\t\t\treturn this.getSharesWithCurrentItem().length > 0;\n\t\t},\n\n\t\t/**\n\t\t * Returns whether this item has link shares\n\t\t *\n\t\t * @return {bool} true if a link share exists, false otherwise\n\t\t */\n\t\thasLinkShares: function() {\n\t\t\tvar linkShares = this.get('linkShares');\n\t\t\tif (linkShares && linkShares.length > 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareOwner: function() {\n\t\t\treturn this.get('reshare').uid_owner;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareOwnerDisplayname: function() {\n\t\t\treturn this.get('reshare').displayname_owner;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareNote: function() {\n\t\t\treturn this.get('reshare').note;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareWith: function() {\n\t\t\treturn this.get('reshare').share_with;\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tgetReshareWithDisplayName: function() {\n\t\t\tvar reshare = this.get('reshare');\n\t\t\treturn reshare.share_with_displayname || reshare.share_with;\n\t\t},\n\n\t\t/**\n\t\t * @returns {number}\n\t\t */\n\t\tgetReshareType: function() {\n\t\t\treturn this.get('reshare').share_type;\n\t\t},\n\n\t\tgetExpireDate: function(shareIndex) {\n\t\t\treturn this._shareExpireDate(shareIndex);\n\t\t},\n\n\t\tgetNote: function(shareIndex) {\n\t\t\treturn this._shareNote(shareIndex);\n\t\t},\n\n\t\t/**\n\t\t * Returns all share entries that only apply to the current item\n\t\t * (file/folder)\n\t\t *\n\t\t * @return {Array.<OC.Share.Types.ShareInfo>}\n\t\t */\n\t\tgetSharesWithCurrentItem: function() {\n\t\t\tvar shares = this.get('shares') || [];\n\t\t\tvar fileId = this.fileInfoModel.get('id');\n\t\t\treturn _.filter(shares, function(share) {\n\t\t\t\treturn share.item_source === fileId;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetShareWith: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_with;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetShareWithDisplayName: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_with_displayname;\n\t\t},\n\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetShareWithAvatar: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_with_avatar;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetSharedBy: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.uid_owner;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetSharedByDisplayName: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.displayname_owner;\n\t\t},\n\n\t\t/**\n\t\t * @param shareIndex\n\t\t * @returns {string}\n\t\t */\n\t\tgetFileOwnerUid: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.uid_file_owner;\n\t\t},\n\n\t\t/**\n\t\t * returns the array index of a sharee for a provided shareId\n\t\t *\n\t\t * @param shareId\n\t\t * @returns {number}\n\t\t */\n\t\tfindShareWithIndex: function(shareId) {\n\t\t\tvar shares = this.get('shares');\n\t\t\tif(!_.isArray(shares)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\tfor(var i = 0; i < shares.length; i++) {\n\t\t\t\tvar shareWith = shares[i];\n\t\t\t\tif(shareWith.id === shareId) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow \"Unknown Sharee\";\n\t\t},\n\n\t\tgetShareType: function(shareIndex) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.share_type;\n\t\t},\n\n\t\t/**\n\t\t * whether a share from shares has the requested permission\n\t\t *\n\t\t * @param {number} shareIndex\n\t\t * @param {number} permission\n\t\t * @returns {boolean}\n\t\t * @private\n\t\t */\n\t\t_shareHasPermission: function(shareIndex, permission) {\n\t\t\t/** @type OC.Share.Types.ShareInfo **/\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn (share.permissions & permission) === permission;\n\t\t},\n\n\n\t\t_shareExpireDate: function(shareIndex) {\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\tvar date2 = share.expiration;\n\t\t\treturn date2;\n\t\t},\n\n\n\t\t_shareNote: function(shareIndex) {\n\t\t\tvar share = this.get('shares')[shareIndex];\n\t\t\tif(!_.isObject(share)) {\n\t\t\t\tthrow \"Unknown Share\";\n\t\t\t}\n\t\t\treturn share.note;\n\t\t},\n\n\t\t/**\n\t\t * @return {int}\n\t\t */\n\t\tgetPermissions: function() {\n\t\t\treturn this.get('permissions');\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tsharePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_SHARE) === OC.PERMISSION_SHARE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasSharePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_SHARE);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tcreatePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_CREATE) === OC.PERMISSION_CREATE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasCreatePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_CREATE);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tupdatePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_UPDATE) === OC.PERMISSION_UPDATE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasUpdatePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_UPDATE);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tdeletePermissionPossible: function() {\n\t\t\treturn (this.get('permissions') & OC.PERMISSION_DELETE) === OC.PERMISSION_DELETE;\n\t\t},\n\n\t\t/**\n\t\t * @param {number} shareIndex\n\t\t * @returns {boolean}\n\t\t */\n\t\thasDeletePermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_DELETE);\n\t\t},\n\n\t\thasReadPermission: function(shareIndex) {\n\t\t\treturn this._shareHasPermission(shareIndex, OC.PERMISSION_READ);\n\t\t},\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\teditPermissionPossible: function() {\n\t\t\treturn this.createPermissionPossible()\n\t\t\t\t || this.updatePermissionPossible()\n\t\t\t\t || this.deletePermissionPossible();\n\t\t},\n\n\t\t/**\n\t\t * @returns {string}\n\t\t * The state that the 'can edit' permission checkbox should have.\n\t\t * Possible values:\n\t\t * - empty string: no permission\n\t\t * - 'checked': all applicable permissions\n\t\t * - 'indeterminate': some but not all permissions\n\t\t */\n\t\teditPermissionState: function(shareIndex) {\n\t\t\tvar hcp = this.hasCreatePermission(shareIndex);\n\t\t\tvar hup = this.hasUpdatePermission(shareIndex);\n\t\t\tvar hdp = this.hasDeletePermission(shareIndex);\n\t\t\tif (this.isFile()) {\n\t\t\t\tif (hcp || hup || hdp) {\n\t\t\t\t\treturn 'checked';\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tif (!hcp && !hup && !hdp) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tif ( (this.createPermissionPossible() && !hcp)\n\t\t\t\t|| (this.updatePermissionPossible() && !hup)\n\t\t\t\t|| (this.deletePermissionPossible() && !hdp) ) {\n\t\t\t\treturn 'indeterminate';\n\t\t\t}\n\t\t\treturn 'checked';\n\t\t},\n\n\t\t/**\n\t\t * @returns {int}\n\t\t */\n\t\tlinkSharePermissions: function(shareId) {\n\t\t\tvar linkShares = this.get('linkShares');\n\t\t\tvar shareIndex = _.findIndex(linkShares, function(share) {return share.id === shareId})\n\n\t\t\tif (!this.hasLinkShares()) {\n\t\t\t\treturn -1;\n\t\t\t} else if (linkShares.length > 0 && shareIndex !== -1) {\n\t\t\t\treturn linkShares[shareIndex].permissions;\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\n\t\t_getUrl: function(base, params) {\n\t\t\tparams = _.extend({format: 'json'}, params || {});\n\t\t\treturn OC.linkToOCS('apps/files_sharing/api/v1', 2) + base + '?' + OC.buildQueryString(params);\n\t\t},\n\n\t\t_fetchShares: function() {\n\t\t\tvar path = this.fileInfoModel.getFullPath();\n\t\t\treturn $.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: this._getUrl('shares', {path: path, reshares: true})\n\t\t\t});\n\t\t},\n\n\t\t_fetchReshare: function() {\n\t\t\t// only fetch original share once\n\t\t\tif (!this._reshareFetched) {\n\t\t\t\tvar path = this.fileInfoModel.getFullPath();\n\t\t\t\tthis._reshareFetched = true;\n\t\t\t\treturn $.ajax({\n\t\t\t\t\ttype: 'GET',\n\t\t\t\t\turl: this._getUrl('shares', {path: path, shared_with_me: true})\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn $.Deferred().resolve([{\n\t\t\t\t\tocs: {\n\t\t\t\t\t\tdata: [this.get('reshare')]\n\t\t\t\t\t}\n\t\t\t\t}]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Group reshares into a single super share element.\n\t\t * Does this by finding the most precise share and\n\t\t * combines the permissions to be the most permissive.\n\t\t *\n\t\t * @param {Array} reshares\n\t\t * @return {Object} reshare\n\t\t */\n\t\t_groupReshares: function(reshares) {\n\t\t\tif (!reshares || !reshares.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar superShare = reshares.shift();\n\t\t\tvar combinedPermissions = superShare.permissions;\n\t\t\t_.each(reshares, function(reshare) {\n\t\t\t\t// use share have higher priority than group share\n\t\t\t\tif (reshare.share_type === OC.Share.SHARE_TYPE_USER && superShare.share_type === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\tsuperShare = reshare;\n\t\t\t\t}\n\t\t\t\tcombinedPermissions |= reshare.permissions;\n\t\t\t});\n\n\t\t\tsuperShare.permissions = combinedPermissions;\n\t\t\treturn superShare;\n\t\t},\n\n\t\tfetch: function(options) {\n\t\t\tvar model = this;\n\t\t\tthis.trigger('request', this);\n\n\t\t\tvar deferred = $.when(\n\t\t\t\tthis._fetchShares(),\n\t\t\t\tthis._fetchReshare()\n\t\t\t);\n\t\t\tdeferred.done(function(data1, data2) {\n\t\t\t\tmodel.trigger('sync', 'GET', this);\n\t\t\t\tvar sharesMap = {};\n\t\t\t\t_.each(data1[0].ocs.data, function(shareItem) {\n\t\t\t\t\tsharesMap[shareItem.id] = shareItem;\n\t\t\t\t});\n\n\t\t\t\tvar reshare = false;\n\t\t\t\tif (data2[0].ocs.data.length) {\n\t\t\t\t\treshare = model._groupReshares(data2[0].ocs.data);\n\t\t\t\t}\n\n\t\t\t\tmodel.set(model.parse({\n\t\t\t\t\tshares: sharesMap,\n\t\t\t\t\treshare: reshare\n\t\t\t\t}));\n\n\t\t\t\tif(!_.isUndefined(options) && _.isFunction(options.success)) {\n\t\t\t\t\toptions.success();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn deferred;\n\t\t},\n\n\t\t/**\n\t\t * Updates OC.Share.itemShares and OC.Share.statuses.\n\t\t *\n\t\t * This is required in case the user navigates away and comes back,\n\t\t * the share statuses from the old arrays are still used to fill in the icons\n\t\t * in the file list.\n\t\t */\n\t\t_legacyFillCurrentShares: function(shares) {\n\t\t\tvar fileId = this.fileInfoModel.get('id');\n\t\t\tif (!shares || !shares.length) {\n\t\t\t\tdelete OC.Share.statuses[fileId];\n\t\t\t\tOC.Share.currentShares = {};\n\t\t\t\tOC.Share.itemShares = [];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar currentShareStatus = OC.Share.statuses[fileId];\n\t\t\tif (!currentShareStatus) {\n\t\t\t\tcurrentShareStatus = {link: false};\n\t\t\t\tOC.Share.statuses[fileId] = currentShareStatus;\n\t\t\t}\n\t\t\tcurrentShareStatus.link = false;\n\n\t\t\tOC.Share.currentShares = {};\n\t\t\tOC.Share.itemShares = [];\n\t\t\t_.each(shares,\n\t\t\t\t/**\n\t\t\t\t * @param {OC.Share.Types.ShareInfo} share\n\t\t\t\t */\n\t\t\t\tfunction(share) {\n\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\tOC.Share.itemShares[share.share_type] = true;\n\t\t\t\t\t\tcurrentShareStatus.link = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!OC.Share.itemShares[share.share_type]) {\n\t\t\t\t\t\t\tOC.Share.itemShares[share.share_type] = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tOC.Share.itemShares[share.share_type].push(share.share_with);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\tparse: function(data) {\n\t\t\tif(data === false) {\n\t\t\t\tconsole.warn('no data was returned');\n\t\t\t\tthis.trigger('fetchError');\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tvar permissions = this.fileInfoModel.get('permissions');\n\t\t\tif(!_.isUndefined(data.reshare) && !_.isUndefined(data.reshare.permissions) && data.reshare.uid_owner !== OC.currentUser) {\n\t\t\t\tpermissions = permissions & data.reshare.permissions;\n\t\t\t}\n\n\t\t\tvar allowPublicUploadStatus = false;\n\t\t\tif(!_.isUndefined(data.shares)) {\n\t\t\t\t$.each(data.shares, function (key, value) {\n\t\t\t\t\tif (value.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\tallowPublicUploadStatus = (value.permissions & OC.PERMISSION_CREATE) ? true : false;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar allowPublicEditingStatus = true;\n\t\t\tif(!_.isUndefined(data.shares)) {\n\t\t\t\t$.each(data.shares, function (key, value) {\n\t\t\t\t\tif (value.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\tallowPublicEditingStatus = (value.permissions & OC.PERMISSION_UPDATE) ? true : false;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tvar hideFileListStatus = false;\n\t\t\tif(!_.isUndefined(data.shares)) {\n\t\t\t\t$.each(data.shares, function (key, value) {\n\t\t\t\t\tif (value.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\thideFileListStatus = (value.permissions & OC.PERMISSION_READ) ? false : true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/** @type {OC.Share.Types.ShareInfo[]} **/\n\t\t\tvar shares = _.map(data.shares, function(share) {\n\t\t\t\t// properly parse some values because sometimes the server\n\t\t\t\t// returns integers as string...\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < SHARE_RESPONSE_INT_PROPS.length; i++) {\n\t\t\t\t\tvar prop = SHARE_RESPONSE_INT_PROPS[i];\n\t\t\t\t\tif (!_.isUndefined(share[prop])) {\n\t\t\t\t\t\tshare[prop] = parseInt(share[prop], 10);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn share;\n\t\t\t});\n\n\t\t\tthis._legacyFillCurrentShares(shares);\n\n\t\t\tvar linkShares = [];\n\t\t\t// filter out the share by link\n\t\t\tshares = _.reject(shares,\n\t\t\t\t/**\n\t\t\t\t * @param {OC.Share.Types.ShareInfo} share\n\t\t\t\t */\n\t\t\t\tfunction(share) {\n\t\t\t\t\tvar isShareLink =\n\t\t\t\t\t\tshare.share_type === OC.Share.SHARE_TYPE_LINK\n\t\t\t\t\t\t&& ( share.file_source === this.get('itemSource')\n\t\t\t\t\t\t|| share.item_source === this.get('itemSource'));\n\n\t\t\t\t\tif (isShareLink) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Ignore reshared link shares for now\n\t\t\t\t\t\t * FIXME: Find a way to display properly\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (share.uid_owner !== OC.currentUser) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar link = window.location.protocol + '//' + window.location.host;\n\t\t\t\t\t\tif (!share.token) {\n\t\t\t\t\t\t\t// pre-token link\n\t\t\t\t\t\t\tvar fullPath = this.fileInfoModel.get('path') + '/' +\n\t\t\t\t\t\t\t\tthis.fileInfoModel.get('name');\n\t\t\t\t\t\t\tvar location = '/' + OC.currentUser + '/files' + fullPath;\n\t\t\t\t\t\t\tvar type = this.fileInfoModel.isDirectory() ? 'folder' : 'file';\n\t\t\t\t\t\t\tlink += OC.linkTo('', 'public.php') + '?service=files&' +\n\t\t\t\t\t\t\t\ttype + '=' + encodeURIComponent(location);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlink += OC.generateUrl('/s/') + share.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlinkShares.push(_.extend({}, share, {\n\t\t\t\t\t\t\t// hide_download is returned as an int, so force it\n\t\t\t\t\t\t\t// to a boolean\n\t\t\t\t\t\t\thideDownload: !!share.hide_download,\n\t\t\t\t\t\t\tpassword: share.share_with,\n\t\t\t\t\t\t\tsendPasswordByTalk: share.send_password_by_talk\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\treturn share;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tthis\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\treshare: data.reshare,\n\t\t\t\tshares: shares,\n\t\t\t\tlinkShares: linkShares,\n\t\t\t\tpermissions: permissions,\n\t\t\t\tallowPublicUploadStatus: allowPublicUploadStatus,\n\t\t\t\tallowPublicEditingStatus: allowPublicEditingStatus,\n\t\t\t\thideFileListStatus: hideFileListStatus\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Parses a string to an valid integer (unix timestamp)\n\t\t * @param time\n\t\t * @returns {*}\n\t\t * @internal Only used to work around a bug in the backend\n\t\t */\n\t\t_parseTime: function(time) {\n\t\t\tif (_.isString(time)) {\n\t\t\t\t// skip empty strings and hex values\n\t\t\t\tif (time === '' || (time.length > 1 && time[0] === '0' && time[1] === 'x')) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\ttime = parseInt(time, 10);\n\t\t\t\tif(isNaN(time)) {\n\t\t\t\t\ttime = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn time;\n\t\t},\n\n\t\t/**\n\t\t * Returns a list of share types from the existing shares.\n\t\t *\n\t\t * @return {Array.<int>} array of share types\n\t\t */\n\t\tgetShareTypes: function() {\n\t\t\tvar result;\n\t\t\tresult = _.pluck(this.getSharesWithCurrentItem(), 'share_type');\n\t\t\tif (this.hasLinkShares()) {\n\t\t\t\tresult.push(OC.Share.SHARE_TYPE_LINK);\n\t\t\t}\n\t\t\treturn _.uniq(result);\n\t\t}\n\t});\n\n\tOC.Share.ShareItemModel = ShareItemModel;\n})();\n","/**\n * @copyright 2017, Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\tOC.Share.Social = {};\n\n\tvar SocialModel = OC.Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\t/** used for sorting social buttons */\n\t\t\tkey: null,\n\t\t\t/** url to open, {{reference}} will be replaced with the link */\n\t\t\turl: null,\n\t\t\t/** Name to show in the tooltip */\n\t\t\tname: null,\n\t\t\t/** Icon class to display */\n\t\t\ticonClass: null,\n\t\t\t/** Open in new windows */\n\t\t\tnewWindow: true\n\t\t}\n\t});\n\n\tOC.Share.Social.Model = SocialModel;\n\n\tvar SocialCollection = OC.Backbone.Collection.extend({\n\t\tmodel: OC.Share.Social.Model,\n\n\t\tcomparator: 'key'\n\t});\n\n\n\tOC.Share.Social.Collection = new SocialCollection;\n})();\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Handlebars */\n\n(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\t/**\n\t * @class OCA.Share.ShareDialogView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogResharerInfoView = OC.Backbone.View.extend({\n\t\t/** @type {string} **/\n\t\tid: 'shareDialogResharerInfo',\n\n\t\t/** @type {string} **/\n\t\ttagName: 'div',\n\n\t\t/** @type {string} **/\n\t\tclassName: 'reshare',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t/** @type {Function} **/\n\t\t_template: undefined,\n\n\t\tinitialize: function(options) {\n\t\t\tvar view = this;\n\n\t\t\tthis.model.on('change:reshare', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\t\t},\n\n\t\trender: function() {\n\t\t\tif (!this.model.hasReshare()\n\t\t\t\t|| this.model.getReshareOwner() === OC.currentUser)\n\t\t\t{\n\t\t\t\tthis.$el.empty();\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar reshareTemplate = this.template();\n\t\t\tvar ownerDisplayName = this.model.getReshareOwnerDisplayname();\n\t\t\tvar shareNote = this.model.getReshareNote();\n\t\t\t\n\t\t\tvar sharedByText = '';\n\n\t\t\tif (this.model.getReshareType() === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\tsharedByText = t(\n\t\t\t\t\t'core',\n\t\t\t\t\t'Shared with you and the group {group} by {owner}',\n\t\t\t\t\t{\n\t\t\t\t\t\tgroup: this.model.getReshareWithDisplayName(),\n\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t{escape: false}\n\t\t\t\t);\n\t\t\t} else if (this.model.getReshareType() === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\tsharedByText = t(\n\t\t\t\t\t'core',\n\t\t\t\t\t'Shared with you and {circle} by {owner}',\n\t\t\t\t\t{\n\t\t\t\t\t\tcircle: this.model.getReshareWithDisplayName(),\n\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t{escape: false}\n\t\t\t\t);\n\t\t\t} else if (this.model.getReshareType() === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\tif (this.model.get('reshare').share_with_displayname) {\n\t\t\t\t\tsharedByText = t(\n\t\t\t\t\t\t'core',\n\t\t\t\t\t\t'Shared with you and the conversation {conversation} by {owner}',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconversation: this.model.getReshareWithDisplayName(),\n\t\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t{escape: false}\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tsharedByText = t(\n\t\t\t\t\t\t'core',\n\t\t\t\t\t\t'Shared with you in a conversation by {owner}',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\towner: ownerDisplayName\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t{escape: false}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsharedByText = t(\n\t\t\t\t\t'core',\n\t\t\t\t\t'Shared with you by {owner}',\n\t\t\t\t\t{ owner: ownerDisplayName },\n\t\t\t\t\tundefined,\n\t\t\t\t\t{escape: false}\n\t\t\t\t);\n\t\t\t}\n\n\n\n\t\t\tthis.$el.html(reshareTemplate({\n\t\t\t\treshareOwner: this.model.getReshareOwner(),\n\t\t\t\tsharedByText: sharedByText,\n\t\t\t\tshareNote: shareNote,\n\t\t\t\thasShareNote: shareNote !== ''\n\t\t\t}));\n\n\t\t\tthis.$el.find('.avatar').each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\t$this.avatar($this.data('username'), 32);\n\t\t\t});\n\n\t\t\tthis.$el.find('.reshare').contactsMenu(\n\t\t\t\tthis.model.getReshareOwner(),\n\t\t\t\tOC.Share.SHARE_TYPE_USER,\n\t\t\t\tthis.$el);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * @returns {Function} from Handlebars\n\t\t * @private\n\t\t */\n\t\ttemplate: function () {\n\t\t\treturn OC.Share.Templates['sharedialogresharerinfoview'];\n\t\t}\n\n\t});\n\n\tOC.Share.ShareDialogResharerInfoView = ShareDialogResharerInfoView;\n\n})();\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Clipboard, Handlebars */\n\n(function() {\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\tvar PASSWORD_PLACEHOLDER = '**********';\n\tvar PASSWORD_PLACEHOLDER_MESSAGE = t('core', 'Choose a password for the public link');\n\tvar PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL = t('core', 'Choose a password for the public link or press the \"Enter\" key');\n\n\t/**\n\t * @class OCA.Share.ShareDialogLinkShareView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogLinkShareView = OC.Backbone.View.extend({\n\t\t/** @type {string} **/\n\t\tid: 'shareDialogLinkShare',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t/** @type {boolean} **/\n\t\tshowLink: true,\n\n\t\t/** @type {boolean} **/\n\t\tshowPending: false,\n\n\t\t/** @type {string} **/\n\t\tpassword: '',\n\n\t\t/** @type {string} **/\n\t\tnewShareId: 'new-share',\n\n\t\tevents: {\n\t\t\t// open menu\n\t\t\t'click .share-menu .icon-more': 'onToggleMenu',\n\t\t\t// hide download\n\t\t\t'change .hideDownloadCheckbox': 'onHideDownloadChange',\n\t\t\t// password\n\t\t\t'click input.share-pass-submit': 'onPasswordEntered', \n\t\t\t'keyup input.linkPassText': 'onPasswordKeyUp', // check for the enter key\n\t\t\t'change .showPasswordCheckbox': 'onShowPasswordClick',\n\t\t\t'change .passwordByTalkCheckbox': 'onPasswordByTalkChange',\n\t\t\t'change .publicEditingCheckbox': 'onAllowPublicEditingChange',\n\t\t\t// copy link url\n\t\t\t'click .linkText': 'onLinkTextClick',\n\t\t\t// social\n\t\t\t'click .pop-up': 'onPopUpClick',\n\t\t\t// permission change\n\t\t\t'change .publicUploadRadio': 'onPublicUploadChange',\n\t\t\t// expire date\n\t\t\t'click .expireDate' : 'onExpireDateChange',\n\t\t\t'change .datepicker': 'onChangeExpirationDate',\n\t\t\t'click .datepicker' : 'showDatePicker',\n\t\t\t// note\n\t\t\t'click .share-add': 'showNoteForm',\n\t\t\t'click .share-note-delete': 'deleteNote',\n\t\t\t'click .share-note-submit': 'updateNote',\n\t\t\t// remove\n\t\t\t'click .unshare': 'onUnshare',\n\t\t\t// new share\n\t\t\t'click .new-share': 'newShare',\n\t\t\t// enforced pass set\n\t\t\t'submit .enforcedPassForm': 'enforcedPasswordSet',\n\t\t},\n\n\t\tinitialize: function(options) {\n\t\t\tvar view = this;\n\n\t\t\tthis.model.on('change:permissions', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:itemType', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:allowPublicUploadStatus', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:hideFileListStatus', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('change:linkShares', function(model, linkShares) {\n\t\t\t\t// The \"Password protect by Talk\" item is shown only when there\n\t\t\t\t// is a password. Unfortunately there is no fine grained\n\t\t\t\t// rendering of items in the link shares, so the whole view\n\t\t\t\t// needs to be rendered again when the password of a share\n\t\t\t\t// changes.\n\t\t\t\t// Note that this event handler is concerned only about password\n\t\t\t\t// changes; other changes in the link shares does not trigger\n\t\t\t\t// a rendering, so the view must be rendered again as needed in\n\t\t\t\t// those cases (for example, when a link share is removed).\n\t\t\t\t\n\t\t\t\tvar previousLinkShares = model.previous('linkShares');\n\t\t\t\tif (previousLinkShares.length !== linkShares.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < linkShares.length; i++) {\n\t\t\t\t\tif (linkShares[i].id !== previousLinkShares[i].id) {\n\t\t\t\t\t\t// A resorting should never happen, but just in case.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (linkShares[i].password !== previousLinkShares[i].password) {\n\t\t\t\t\t\tview.render();\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\n\t\t\tvar clipboard = new Clipboard('.clipboard-button');\n\t\t\tclipboard.on('success', function(e) {\n\t\t\t\tvar $trigger = $(e.trigger);\n\n\t\t\t\t$trigger.tooltip('hide')\n\t\t\t\t\t.attr('data-original-title', t('core', 'Copied!'))\n\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t.tooltip({placement: 'bottom', trigger: 'manual'})\n\t\t\t\t\t.tooltip('show');\n\t\t\t\t_.delay(function() {\n\t\t\t\t\t$trigger.tooltip('hide')\n\t\t\t\t\t\t.attr('data-original-title', t('core', 'Copy link'))\n\t\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t}, 3000);\n\t\t\t});\n\t\t\tclipboard.on('error', function (e) {\n\t\t\t\tvar $trigger = $(e.trigger);\n\t\t\t\tvar $menu = $trigger.next('.share-menu').find('.popovermenu');\n\t\t\t\tvar $linkTextMenu = $menu.find('li.linkTextMenu');\n\t\t\t\tvar $input = $linkTextMenu.find('.linkText');\n\n\t\t\t\tvar $li = $trigger.closest('li[data-share-id]');\n\t\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\t\t// show menu\n\t\t\t\tOC.showMenu(null, $menu);\n\n\t\t\t\tvar actionMsg = '';\n\t\t\t\tif (/iPhone|iPad/i.test(navigator.userAgent)) {\n\t\t\t\t\tactionMsg = t('core', 'Not supported!');\n\t\t\t\t} else if (/Mac/i.test(navigator.userAgent)) {\n\t\t\t\t\tactionMsg = t('core', 'Press ⌘-C to copy.');\n\t\t\t\t} else {\n\t\t\t\t\tactionMsg = t('core', 'Press Ctrl-C to copy.');\n\t\t\t\t}\n\n\t\t\t\t$linkTextMenu.removeClass('hidden');\n\t\t\t\t$input.select();\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t\t.attr('data-original-title', actionMsg)\n\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t.tooltip({placement: 'bottom', trigger: 'manual'})\n\t\t\t\t\t.tooltip('show');\n\t\t\t\t_.delay(function () {\n\t\t\t\t\t$input.tooltip('hide');\n\t\t\t\t\t$input.attr('data-original-title', t('core', 'Copy'))\n\t\t\t\t\t\t .tooltip('fixTitle');\n\t\t\t\t}, 3000);\n\t\t\t});\n\t\t},\n\n\t\tnewShare: function(event) {\n\t\t\tvar self = this;\n\t\t\tvar $target = $(event.target);\n\t\t\tvar $li = $target.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $loading = $li.find('.share-menu > .icon-loading-small');\n\n\t\t\tif(!$loading.hasClass('hidden') && this.password === '') {\n\t\t\t\t// in process\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// hide all icons and show loading\n\t\t\t$li.find('.icon').addClass('hidden');\n\t\t\t$loading.removeClass('hidden');\n\n\t\t\t// hide menu\n\t\t\tOC.hideMenus();\n\n\t\t\tvar shareData = {}\n\n\t\t\tvar isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink');\n\t\t\tvar isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');\n\n\t\t\t// set default expire date\n\t\t\tif (isExpirationEnforced) {\n\t\t\t\tvar defaultExpireDays = this.configModel.get('defaultExpireDate');\n\t\t\t\tvar expireDate = moment().add(defaultExpireDays, 'day').format('DD-MM-YYYY')\n\t\t\t\tshareData.expireDate = expireDate;\n\t\t\t}\n\n\t\t\t// if password is set, add to data\n\t\t\tif (isPasswordEnforced && this.password !== '') {\n\t\t\t\tshareData.password = this.password\n\t\t\t}\n\n\t\t\tvar newShareId = false;\n\n\t\t\t// We need a password before the share creation\n\t\t\tif (isPasswordEnforced && !this.showPending && this.password === '') {\n\t\t\t\tthis.showPending = shareId;\n\t\t\t\tvar self = this.render();\n\t\t\t\tself.$el.find('.pending #enforcedPassText').focus();\n\t\t\t} else {\n\t\t\t\t// else, we have a password or it is not enforced\n\t\t\t\t$.when(this.model.saveLinkShare(shareData, {\n\t\t\t\t\tsuccess: function() {\n\t\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t\t$li.find('.icon').removeClass('hidden');\n\t\t\t\t\t\tself.render();\n\t\t\t\t\t\t// open the menu by default\n\t\t\t\t\t\t// we can only do that after the render\n\t\t\t\t\t\tif (newShareId) {\n\t\t\t\t\t\t\tvar shares = self.$el.find('li[data-share-id]');\n\t\t\t\t\t\t\tvar $newShare = self.$el.find('li[data-share-id=\"'+newShareId+'\"]');\n\t\t\t\t\t\t\t// only open the menu by default if this is the first share\n\t\t\t\t\t\t\tif ($newShare && shares.length === 1) {\n\t\t\t\t\t\t\t\tvar $menu = $newShare.find('.popovermenu');\n\t\t\t\t\t\t\t\tOC.showMenu(null, $menu);\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\terror: function() {\n\t\t\t\t\t\t// empty function to override the default Dialog warning\n\t\t\t\t\t}\n\t\t\t\t})).fail(function(response) {\n\t\t\t\t\t// password failure? Show error\n\t\t\t\t\tself.password = ''\n\t\t\t\t\tif (isPasswordEnforced && response && response.responseJSON && response.responseJSON.ocs.meta && response.responseJSON.ocs.meta.message) {\n\t\t\t\t\t\tvar $input = self.$el.find('.pending #enforcedPassText')\n\t\t\t\t\t\t$input.tooltip('destroy');\n\t\t\t\t\t\t$input.attr('title', response.responseJSON.ocs.meta.message);\n\t\t\t\t\t\t$input.tooltip({placement: 'bottom', trigger: 'manual'});\n\t\t\t\t\t\t$input.tooltip('show');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to create a link share'));\n\t\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t\t$li.find('.icon').removeClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t}).then(function(response) {\n\t\t\t\t\t// resolve before success\n\t\t\t\t\tnewShareId = response.ocs.data.id\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tenforcedPasswordSet: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tvar $form = $(event.target);\n\t\t\tvar $input = $form.find('input.enforcedPassText');\n\t\t\tthis.password = $input.val();\n\t\t\tthis.showPending = false;\n\t\t\tthis.newShare(event);\n\t\t},\n\n\t\tonLinkTextClick: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $el = $li.find('.linkText');\n\t\t\t$el.focus();\n\t\t\t$el.select();\n\t\t},\n\n\t\tonHideDownloadChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $checkbox = $li.find('.hideDownloadCheckbox');\n\t\t\t$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');\n\n\t\t\tvar hideDownload = false;\n\t\t\tif($checkbox.is(':checked')) {\n\t\t\t\thideDownload = true;\n\t\t\t}\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\thideDownload: hideDownload,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t},\n\t\t\t\terror: function(obj, msg) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to toggle this option'));\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonShowPasswordClick: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\t$li.find('.linkPass').slideToggle(OC.menuSpeed);\n\t\t\t$li.find('.linkPassMenu').toggleClass('hidden');\n\t\t\tif(!$li.find('.showPasswordCheckbox').is(':checked')) {\n\t\t\t\tthis.model.saveLinkShare({\n\t\t\t\t\tpassword: '',\n\t\t\t\t\tcid: shareId\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (!OC.Util.isIE()) {\n\t\t\t\t\t$li.find('.linkPassText').focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tonPasswordKeyUp: function(event) {\n\t\t\tif(event.keyCode === 13) {\n\t\t\t\tthis.onPasswordEntered(event);\n\t\t\t}\n\t\t},\n\n\t\tonPasswordEntered: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $loading = $li.find('.linkPassMenu .icon-loading-small');\n\t\t\tif (!$loading.hasClass('hidden')) {\n\t\t\t\t// still in process\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar $input = $li.find('.linkPassText');\n\t\t\t$input.removeClass('error');\n\t\t\tvar password = $input.val();\n\n\t\t\tif ($li.find('.linkPassText').attr('placeholder') === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) {\n\n\t\t\t\t// in IE9 the password might be the placeholder due to bugs in the placeholders polyfill\n\t\t\t\tif(password === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) {\n\t\t\t\t\tpassword = '';\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// in IE9 the password might be the placeholder due to bugs in the placeholders polyfill\n\t\t\t\tif(password === '' || password === PASSWORD_PLACEHOLDER || password === PASSWORD_PLACEHOLDER_MESSAGE) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$loading\n\t\t\t\t.removeClass('hidden')\n\t\t\t\t.addClass('inlineblock');\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tpassword: password,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tcomplete: function(model) {\n\t\t\t\t\t$loading.removeClass('inlineblock').addClass('hidden');\n\t\t\t\t},\n\t\t\t\terror: function(model, msg) {\n\t\t\t\t\t// destroy old tooltips\n\t\t\t\t\tvar $container = $input.parent();\n\t\t\t\t\t$container.tooltip('destroy');\n\t\t\t\t\t$input.addClass('error');\n\t\t\t\t\t$container.attr('title', msg);\n\t\t\t\t\t$container.tooltip({placement: 'bottom', trigger: 'manual'});\n\t\t\t\t\t$container.tooltip('show');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonPasswordByTalkChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $checkbox = $li.find('.passwordByTalkCheckbox');\n\t\t\t$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');\n\n\t\t\tvar sendPasswordByTalk = false;\n\t\t\tif($checkbox.is(':checked')) {\n\t\t\t\tsendPasswordByTalk = true;\n\t\t\t}\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tsendPasswordByTalk: sendPasswordByTalk,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t},\n\t\t\t\terror: function(obj, msg) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to toggle this option'));\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonAllowPublicEditingChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $checkbox = $li.find('.publicEditingCheckbox');\n\t\t\t$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');\n\n\t\t\tvar permissions = OC.PERMISSION_READ;\n\t\t\tif($checkbox.is(':checked')) {\n\t\t\t\tpermissions = OC.PERMISSION_UPDATE | OC.PERMISSION_READ;\n\t\t\t}\n\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tpermissions: permissions,\n\t\t\t\tcid: shareId\n\t\t\t}, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t},\n\t\t\t\terror: function(obj, msg) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Unable to toggle this option'));\n\t\t\t\t\t$checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\tonPublicUploadChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar permissions = event.currentTarget.value;\n\t\t\tthis.model.saveLinkShare({\n\t\t\t\tpermissions: permissions,\n\t\t\t\tcid: shareId\n\t\t\t});\n\t\t},\n\n\t\tshowNoteForm: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\t// show elements\n\t\t\t$menu.find('.share-note-delete').toggleClass('hidden');\n\t\t\t$form.toggleClass('hidden');\n\t\t\t$form.find('textarea').focus();\n\t\t},\n\n\t\tdeleteNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\t$form.find('.share-note').val('');\n\n\t\t\t$form.addClass('hidden');\n\t\t\t$menu.find('.share-note-delete').addClass('hidden');\n\n\t\t\tself.sendNote('', shareId, $menu);\n\t\t},\n\n\t\tupdateNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $form = $element.closest('li.share-note-form');\n\t\t\tvar $menu = $form.prev('li');\n\t\t\tvar message = $form.find('.share-note').val().trim();\n\n\t\t\tif (message.length < 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.sendNote(message, shareId, $menu);\n\t\t},\n\n\t\tsendNote: function(note, shareId, $menu) {\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\t\t\tvar $submit = $form.find('input.share-note-submit');\n\t\t\tvar $error = $form.find('input.share-note-error');\n\n\t\t\t$submit.prop('disabled', true);\n\t\t\t$menu.find('.icon-loading-small').removeClass('hidden');\n\t\t\t$menu.find('.icon-edit').hide();\n\n\t\t\tvar complete = function() {\n\t\t\t\t$submit.prop('disabled', false);\n\t\t\t\t$menu.find('.icon-loading-small').addClass('hidden');\n\t\t\t\t$menu.find('.icon-edit').show();\n\t\t\t};\n\t\t\tvar error = function() {\n\t\t\t\t$error.show();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$error.hide();\n\t\t\t\t}, 3000);\n\t\t\t};\n\n\t\t\t// send data\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'PUT',\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1/shares',2) + shareId + '?' + OC.buildQueryString({format: 'json'}),\n\t\t\t\tdata: { note: note },\n\t\t\t\tcomplete : complete,\n\t\t\t\terror: error\n\t\t\t});\n\t\t},\n\n\t\trender: function() {\n\t\t\tthis.$el.find('.has-tooltip').tooltip();\n\n\t\t\t// reset previously set passwords\n\t\t\tthis.password = '';\n\n\t\t\tvar linkShareTemplate = this.template();\n\t\t\tvar resharingAllowed = this.model.sharePermissionPossible();\n\n\t\t\tif(!resharingAllowed\n\t\t\t\t|| !this.showLink\n\t\t\t\t|| !this.configModel.isShareWithLinkAllowed())\n\t\t\t{\n\t\t\t\tvar templateData = {shareAllowed: false};\n\t\t\t\tif (!resharingAllowed) {\n\t\t\t\t\t// add message\n\t\t\t\t\ttemplateData.noSharingPlaceholder = t('core', 'Resharing is not allowed');\n\t\t\t\t}\n\t\t\t\tthis.$el.html(linkShareTemplate(templateData));\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar publicUpload =\n\t\t\t\tthis.model.isFolder()\n\t\t\t\t&& this.model.createPermissionPossible()\n\t\t\t\t&& this.configModel.isPublicUploadEnabled();\n\n\n\t\t\tvar publicEditingChecked = '';\n\t\t\tif(this.model.isPublicEditingAllowed()) {\n\t\t\t\tpublicEditingChecked = 'checked=\"checked\"';\n\t\t\t}\n\n\t\t\tvar isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink');\n\t\t\tvar isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true;\n\t\t\tvar passwordPlaceholderInitial = this.configModel.get('enforcePasswordForPublicLink')\n\t\t\t\t? PASSWORD_PLACEHOLDER_MESSAGE : PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL;\n\n\t\t\tvar publicEditable =\n\t\t\t\t!this.model.isFolder()\n\t\t\t\t&& this.model.updatePermissionPossible();\n\n\t\t\tvar isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');\n\n\t\t\t// what if there is another date picker on that page?\n\t\t\tvar minDate = new Date();\n\t\t\t// min date should always be the next day\n\t\t\tminDate.setDate(minDate.getDate()+1);\n\n\t\t\t$.datepicker.setDefaults({\n\t\t\t\tminDate: minDate\n\t\t\t});\n\n\t\t\tthis.$el.find('.datepicker').datepicker({dateFormat : 'dd-mm-yy'});\n\n\t\t\tvar minPasswordLength = 4\n\t\t\t// password policy?\n\t\t\tif(oc_capabilities.password_policy && oc_capabilities.password_policy.minLength) {\n\t\t\t\tminPasswordLength = oc_capabilities.password_policy.minLength;\n\t\t\t}\n\n\t\t\tvar popoverBase = {\n\t\t\t\turlLabel: t('core', 'Link'),\n\t\t\t\thideDownloadLabel: t('core', 'Hide download'),\n\t\t\t\tenablePasswordLabel: isPasswordEnforced ? t('core', 'Password protection enforced') : t('core', 'Password protect'),\n\t\t\t\tpasswordLabel: t('core', 'Password'),\n\t\t\t\tpasswordPlaceholderInitial: passwordPlaceholderInitial,\n\t\t\t\tpublicUpload: publicUpload,\n\t\t\t\tpublicEditing: publicEditable,\n\t\t\t\tpublicEditingChecked: publicEditingChecked,\n\t\t\t\tpublicEditingLabel: t('core', 'Allow editing'),\n\t\t\t\tmailPrivatePlaceholder: t('core', 'Email link to person'),\n\t\t\t\tmailButtonText: t('core', 'Send'),\n\t\t\t\tpublicUploadRWLabel: t('core', 'Allow upload and editing'),\n\t\t\t\tpublicUploadRLabel: t('core', 'Read only'),\n\t\t\t\tpublicUploadWLabel: t('core', 'File drop (upload only)'),\n\t\t\t\tpublicUploadRWValue: OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE,\n\t\t\t\tpublicUploadRValue: OC.PERMISSION_READ,\n\t\t\t\tpublicUploadWValue: OC.PERMISSION_CREATE,\n\t\t\t\texpireDateLabel: isExpirationEnforced ? t('core', 'Expiration date enforced') : t('core', 'Set expiration date'),\n\t\t\t\texpirationLabel: t('core', 'Expiration'),\n\t\t\t\texpirationDatePlaceholder: t('core', 'Expiration date'),\n\t\t\t\tisExpirationEnforced: isExpirationEnforced,\n\t\t\t\tisPasswordEnforced: isPasswordEnforced,\n\t\t\t\tdefaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today\n\t\t\t\taddNoteLabel: t('core', 'Note to recipient'),\n\t\t\t\tunshareLabel: t('core', 'Unshare'),\n\t\t\t\tunshareLinkLabel: t('core', 'Delete share link'),\n\t\t\t\tnewShareLabel: t('core', 'Add another link'),\n\t\t\t};\n\n\t\t\tvar pendingPopover = {\n\t\t\t\tisPasswordEnforced: isPasswordEnforced,\n\t\t\t\tenforcedPasswordLabel: t('core', 'Password protection for links is mandatory'),\n\t\t\t\tpasswordPlaceholder: passwordPlaceholderInitial,\n\t\t\t\tminPasswordLength: minPasswordLength,\n\t\t\t};\n\t\t\tvar pendingPopoverMenu = this.pendingPopoverMenuTemplate(_.extend({}, pendingPopover))\n\n\t\t\tvar linkShares = this.getShareeList();\n\t\t\tif(_.isArray(linkShares)) {\n\t\t\t\tfor (var i = 0; i < linkShares.length; i++) {\n\t\t\t\t\tvar social = [];\n\t\t\t\t\tOC.Share.Social.Collection.each(function (model) {\n\t\t\t\t\t\tvar url = model.get('url');\n\t\t\t\t\t\turl = url.replace('{{reference}}', linkShares[i].shareLinkURL);\n\t\t\t\t\t\tsocial.push({\n\t\t\t\t\t\t\turl: url,\n\t\t\t\t\t\t\tlabel: t('core', 'Share to {name}', {name: model.get('name')}),\n\t\t\t\t\t\t\tname: model.get('name'),\n\t\t\t\t\t\t\ticonClass: model.get('iconClass'),\n\t\t\t\t\t\t\tnewWindow: model.get('newWindow')\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tvar popover = this.getPopoverObject(linkShares[i])\n\t\t\t\t\tlinkShares[i].popoverMenu = this.popoverMenuTemplate(_.extend({}, popoverBase, popover, {social: social}));\n\t\t\t\t\tlinkShares[i].pendingPopoverMenu = pendingPopoverMenu\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$el.html(linkShareTemplate({\n\t\t\t\tlinkShares: linkShares,\n\t\t\t\tshareAllowed: true,\n\t\t\t\tnolinkShares: linkShares.length === 0,\n\t\t\t\tnewShareLabel: t('core', 'Share link'),\n\t\t\t\tnewShareTitle: t('core', 'New share link'),\n\t\t\t\tpendingPopoverMenu: pendingPopoverMenu,\n\t\t\t\tshowPending: this.showPending === this.newShareId,\n\t\t\t\tnewShareId: this.newShareId,\n\t\t\t}));\n\n\t\t\tthis.delegateEvents();\n\n\t\t\t// new note autosize\n\t\t\tautosize(this.$el.find('.share-note-form .share-note'));\n\n\t\t\treturn this;\n\t\t},\n\n\t\tonToggleMenu: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $menu = $li.find('.sharingOptionsGroup .popovermenu');\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tOC.showMenu(null, $menu);\n\n\t\t\t// focus the password if not set and enforced\n\t\t\tvar isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true;\n\t\t\tvar haspassword = $menu.find('.linkPassText').val() !== '';\n\n\t\t\tif (!haspassword && isPasswordEnabledByDefault) {\n\t\t\t\t$menu.find('.linkPassText').focus();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @returns {Function} from Handlebars\n\t\t * @private\n\t\t */\n\t\ttemplate: function () {\n\t\t\treturn OC.Share.Templates['sharedialoglinkshareview'];\n\t\t},\n\n\t\t/**\n\t\t * renders the popover template and returns the resulting HTML\n\t\t *\n\t\t * @param {Object} data\n\t\t * @returns {string}\n\t\t */\n\t\tpopoverMenuTemplate: function(data) {\n\t\t\treturn OC.Share.Templates['sharedialoglinkshareview_popover_menu'](data);\n\t\t},\n\n\t\t/**\n\t\t * renders the pending popover template and returns the resulting HTML\n\t\t *\n\t\t * @param {Object} data\n\t\t * @returns {string}\n\t\t */\n\t\tpendingPopoverMenuTemplate: function(data) {\n\t\t\treturn OC.Share.Templates['sharedialoglinkshareview_popover_menu_pending'](data);\n\t\t},\n\n\t\tonPopUpClick: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar url = $(event.currentTarget).data('url');\n\t\t\tvar newWindow = $(event.currentTarget).data('window');\n\t\t\t$(event.currentTarget).tooltip('hide');\n\t\t\tif (url) {\n\t\t\t\tif (newWindow === true) {\n\t\t\t\t\tvar width = 600;\n\t\t\t\t\tvar height = 400;\n\t\t\t\t\tvar left = (screen.width / 2) - (width / 2);\n\t\t\t\t\tvar top = (screen.height / 2) - (height / 2);\n\n\t\t\t\t\twindow.open(url, 'name', 'width=' + width + ', height=' + height + ', top=' + top + ', left=' + left);\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tonExpireDateChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar expirationDatePicker = '#expirationDateContainer-' + shareId;\n\t\t\tvar datePicker = $(expirationDatePicker);\n\t\t\tvar state = $element.prop('checked');\n\t\t\tdatePicker.toggleClass('hidden', !state);\n\n\t\t\tif (!state) {\n\t\t\t\t// disabled, let's hide the input and\n\t\t\t\t// set the expireDate to nothing\n\t\t\t\t$element.closest('li').next('li').addClass('hidden');\n\t\t\t\tthis.setExpirationDate('', shareId);\n\t\t\t} else {\n\t\t\t\t// enabled, show the input and the datepicker\n\t\t\t\t$element.closest('li').next('li').removeClass('hidden');\n\t\t\t\tthis.showDatePicker(event);\n\n\t\t\t}\n\t\t},\n\n\t\tshowDatePicker: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar maxDate = $element.data('max-date');\n\t\t\tvar expirationDatePicker = '#expirationDatePicker-' + shareId;\n\t\t\tvar self = this;\n\n\t\t\t$(expirationDatePicker).datepicker({\n\t\t\t\tdateFormat : 'dd-mm-yy',\n\t\t\t\tonSelect: function (expireDate) {\n\t\t\t\t\tself.setExpirationDate(expireDate, shareId);\n\t\t\t\t},\n\t\t\t\tmaxDate: maxDate\n\t\t\t});\n\t\t\t$(expirationDatePicker).datepicker('show');\n\t\t\t$(expirationDatePicker).focus();\n\n\t\t},\n\n\t\tsetExpirationDate: function(expireDate, shareId) {\n\t\t\tthis.model.saveLinkShare({expireDate: expireDate, cid: shareId});\n\t\t},\n\n\t\t/**\n\t\t * get an array of sharees' share properties\n\t\t *\n\t\t * @returns {Array}\n\t\t */\n\t\tgetShareeList: function() {\n\t\t\tvar shares = this.model.get('linkShares');\n\n\t\t\tif(!this.model.hasLinkShares()) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tvar list = [];\n\t\t\tfor(var index = 0; index < shares.length; index++) {\n\t\t\t\tvar share = this.getShareeObject(index);\n\t\t\t\t// first empty {} is necessary, otherwise we get in trouble\n\t\t\t\t// with references\n\t\t\t\tlist.push(_.extend({}, share));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {OC.Share.Types.ShareInfo} shareInfo\n\t\t * @returns {object}\n\t\t */\n\t\tgetShareeObject: function(shareIndex) {\n\t\t\tvar share = this.model.get('linkShares')[shareIndex];\n\n\t\t\treturn _.extend({}, share, {\n\t\t\t\tcid: share.id,\n\t\t\t\tshareAllowed: true,\n\t\t\t\tlinkShareLabel: share.label ? share.label : t('core', 'Share link'),\n\t\t\t\tpopoverMenu: {},\n\t\t\t\tshareLinkURL: share.url,\n\t\t\t\tnewShareTitle: t('core', 'New share link'),\n\t\t\t\tcopyLabel: t('core', 'Copy link'),\n\t\t\t\tshowPending: this.showPending === share.id,\n\t\t\t\tlinkShareCreationDate: t('core', 'Created on {time}', { time: moment(share.stime * 1000).format('LLLL') })\n\t\t\t})\n\t\t},\n\n\t\tgetPopoverObject: function(share) {\n\t\t\tvar publicUploadRWChecked = '';\n\t\t\tvar publicUploadRChecked = '';\n\t\t\tvar publicUploadWChecked = '';\n\n\t\t\tswitch (this.model.linkSharePermissions(share.id)) {\n\t\t\t\tcase OC.PERMISSION_READ:\n\t\t\t\t\tpublicUploadRChecked = 'checked';\n\t\t\t\t\tbreak;\n\t\t\t\tcase OC.PERMISSION_CREATE:\n\t\t\t\t\tpublicUploadWChecked = 'checked';\n\t\t\t\t\tbreak;\n\t\t\t\tcase OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE:\n\t\t\t\t\tpublicUploadRWChecked = 'checked';\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar isPasswordSet = !!share.password;\n\t\t\tvar isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true;\n\t\t\tvar isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink');\n\t\t\tvar isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');\n\t\t\tvar defaultExpireDays = this.configModel.get('defaultExpireDate');\n\t\t\tvar hasExpireDate = !!share.expiration || isExpirationEnforced;\n\n\t\t\tvar expireDate;\n\t\t\tif (hasExpireDate) {\n\t\t\t\texpireDate = moment(share.expiration, 'YYYY-MM-DD').format('DD-MM-YYYY');\n\t\t\t}\n\n\t\t\tvar isTalkEnabled = oc_appswebroots['spreed'] !== undefined;\n\t\t\tvar sendPasswordByTalk = share.sendPasswordByTalk;\n\n\t\t\tvar hideDownload = share.hideDownload;\n\n\t\t\tvar maxDate = null;\n\n\t\t\tif(hasExpireDate) {\n\t\t\t\tif(isExpirationEnforced) {\n\t\t\t\t\t// TODO: hack: backend returns string instead of integer\n\t\t\t\t\tvar shareTime = share.stime;\n\t\t\t\t\tif (_.isNumber(shareTime)) {\n\t\t\t\t\t\tshareTime = new Date(shareTime * 1000);\n\t\t\t\t\t}\n\t\t\t\t\tif (!shareTime) {\n\t\t\t\t\t\tshareTime = new Date(); // now\n\t\t\t\t\t}\n\t\t\t\t\tshareTime = OC.Util.stripTime(shareTime).getTime();\n\t\t\t\t\tmaxDate = new Date(shareTime + defaultExpireDays * 24 * 3600 * 1000);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcid: share.id,\n\t\t\t\tshareLinkURL: share.url,\n\t\t\t\tpasswordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,\n\t\t\t\tisPasswordSet: isPasswordSet || isPasswordEnabledByDefault || isPasswordEnforced,\n\t\t\t\tshowPasswordByTalkCheckBox: isTalkEnabled && isPasswordSet,\n\t\t\t\tpasswordByTalkLabel: t('core', 'Password protect by Talk'),\n\t\t\t\tisPasswordByTalkSet: sendPasswordByTalk,\n\t\t\t\tpublicUploadRWChecked: publicUploadRWChecked,\n\t\t\t\tpublicUploadRChecked: publicUploadRChecked,\n\t\t\t\tpublicUploadWChecked: publicUploadWChecked,\n\t\t\t\thasExpireDate: hasExpireDate,\n\t\t\t\texpireDate: expireDate,\n\t\t\t\tshareNote: share.note,\n\t\t\t\thasNote: share.note !== '',\n\t\t\t\tmaxDate: maxDate,\n\t\t\t\thideDownload: hideDownload,\n\t\t\t\tisExpirationEnforced: isExpirationEnforced,\n\t\t\t}\n\t\t},\n\n\t\tonUnshare: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tif (!$element.is('a')) {\n\t\t\t\t$element = $element.closest('a');\n\t\t\t}\n\n\t\t\tvar $loading = $element.find('.icon-loading-small').eq(0);\n\t\t\tif(!$loading.hasClass('hidden')) {\n\t\t\t\t// in process\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$loading.removeClass('hidden');\n\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tself.model.removeShare(shareId, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t$li.remove();\n\t\t\t\t\tself.render()\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Could not unshare'));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn false;\n\t\t},\n\n\n\t});\n\n\tOC.Share.ShareDialogLinkShareView = ShareDialogLinkShareView;\n\n})();\n","/* global OC, Handlebars */\n\n/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Handlebars */\n\n(function() {\n\n\tvar PASSWORD_PLACEHOLDER = '**********';\n\tvar PASSWORD_PLACEHOLDER_MESSAGE = t('core', 'Choose a password for the mail share');\n\n\tif (!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\t/**\n\t * @class OCA.Share.ShareDialogShareeListView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the sharee list part in the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogShareeListView = OC.Backbone.View.extend({\n\t\t/** @type {string} **/\n\t\tid: 'shareDialogLinkShare',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t_menuOpen: false,\n\n\t\t/** @type {boolean|number} **/\n\t\t_renderPermissionChange: false,\n\n\t\tevents: {\n\t\t\t'click .unshare': 'onUnshare',\n\t\t\t'click .share-add': 'showNoteForm',\n\t\t\t'click .share-note-delete': 'deleteNote',\n\t\t\t'click .share-note-submit': 'updateNote',\n\t\t\t'click .share-menu .icon-more': 'onToggleMenu',\n\t\t\t'click .permissions': 'onPermissionChange',\n\t\t\t'click .expireDate' : 'onExpireDateChange',\n\t\t\t'click .password' : 'onMailSharePasswordProtectChange',\n\t\t\t'click .passwordByTalk' : 'onMailSharePasswordProtectByTalkChange',\n\t\t\t'click .secureDrop' : 'onSecureDropChange',\n\t\t\t'keyup input.passwordField': 'onMailSharePasswordKeyUp',\n\t\t\t'focusout input.passwordField': 'onMailSharePasswordEntered',\n\t\t\t'change .datepicker': 'onChangeExpirationDate',\n\t\t\t'click .datepicker' : 'showDatePicker'\n\t\t},\n\n\t\tinitialize: function(options) {\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\n\t\t\tvar view = this;\n\t\t\tthis.model.on('change:shares', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {OC.Share.Types.ShareInfo} shareInfo\n\t\t * @returns {object}\n\t\t */\n\t\tgetShareeObject: function(shareIndex) {\n\t\t\tvar shareWith = this.model.getShareWith(shareIndex);\n\t\t\tvar shareWithDisplayName = this.model.getShareWithDisplayName(shareIndex);\n\t\t\tvar shareWithAvatar = this.model.getShareWithAvatar(shareIndex);\n\t\t\tvar shareWithTitle = '';\n\t\t\tvar shareType = this.model.getShareType(shareIndex);\n\t\t\tvar sharedBy = this.model.getSharedBy(shareIndex);\n\t\t\tvar sharedByDisplayName = this.model.getSharedByDisplayName(shareIndex);\n\t\t\tvar fileOwnerUid = this.model.getFileOwnerUid(shareIndex);\n\n\t\t\tvar hasPermissionOverride = {};\n\t\t\tif (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'group') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'remote') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'remote group') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'email') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\tshareWithDisplayName = shareWithDisplayName + \" (\" + t('core', 'conversation') + ')';\n\t\t\t}\n\n\t\t\tif (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'group') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'remote') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'remote group') + ')';\n\t\t\t}\n\t\t\telse if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\tshareWithTitle = shareWith + \" (\" + t('core', 'email') + ')';\n\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\tshareWithTitle = shareWith;\n\t\t\t\t// Force \"shareWith\" in the template to a safe value, as the\n\t\t\t\t// original \"shareWith\" returned by the model may contain\n\t\t\t\t// problematic characters like \"'\".\n\t\t\t\tshareWith = 'circle-' + shareIndex;\n\t\t\t}\n\n\t\t\tif (sharedBy !== oc_current_user) {\n\t\t\t\tvar empty = shareWithTitle === '';\n\t\t\t\tif (!empty) {\n\t\t\t\t\tshareWithTitle += ' (';\n\t\t\t\t}\n\t\t\t\tshareWithTitle += t('core', 'shared by {sharer}', {sharer: sharedByDisplayName});\n\t\t\t\tif (!empty) {\n\t\t\t\t\tshareWithTitle += ')';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar share = this.model.get('shares')[shareIndex];\n\t\t\tvar password = share.password;\n\t\t\tvar hasPassword = password !== null && password !== '';\n\t\t\tvar sendPasswordByTalk = share.send_password_by_talk;\n\n\t\t\tvar shareNote = this.model.getNote(shareIndex);\n\n\t\t\treturn _.extend(hasPermissionOverride, {\n\t\t\t\tcid: this.cid,\n\t\t\t\thasSharePermission: this.model.hasSharePermission(shareIndex),\n\t\t\t\teditPermissionState: this.model.editPermissionState(shareIndex),\n\t\t\t\thasCreatePermission: this.model.hasCreatePermission(shareIndex),\n\t\t\t\thasUpdatePermission: this.model.hasUpdatePermission(shareIndex),\n\t\t\t\thasDeletePermission: this.model.hasDeletePermission(shareIndex),\n\t\t\t\tsharedBy: sharedBy,\n\t\t\t\tsharedByDisplayName: sharedByDisplayName,\n\t\t\t\tshareWith: shareWith,\n\t\t\t\tshareWithDisplayName: shareWithDisplayName,\n\t\t\t\tshareWithAvatar: shareWithAvatar,\n\t\t\t\tshareWithTitle: shareWithTitle,\n\t\t\t\tshareType: shareType,\n\t\t\t\tshareId: this.model.get('shares')[shareIndex].id,\n\t\t\t\tmodSeed: shareWithAvatar || (shareType !== OC.Share.SHARE_TYPE_USER && shareType !== OC.Share.SHARE_TYPE_CIRCLE && shareType !== OC.Share.SHARE_TYPE_ROOM),\n\t\t\t\towner: fileOwnerUid,\n\t\t\t\tisShareWithCurrentUser: (shareType === OC.Share.SHARE_TYPE_USER && shareWith === oc_current_user),\n\t\t\t\tcanUpdateShareSettings: (sharedBy === oc_current_user || fileOwnerUid === oc_current_user),\n\t\t\t\tisRemoteShare: shareType === OC.Share.SHARE_TYPE_REMOTE,\n\t\t\t\tisRemoteGroupShare: shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tisNoteAvailable: shareType !== OC.Share.SHARE_TYPE_REMOTE && shareType !== OC.Share.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tisMailShare: shareType === OC.Share.SHARE_TYPE_EMAIL,\n\t\t\t\tisCircleShare: shareType === OC.Share.SHARE_TYPE_CIRCLE,\n\t\t\t\tisFileSharedByMail: shareType === OC.Share.SHARE_TYPE_EMAIL && !this.model.isFolder(),\n\t\t\t\tisPasswordSet: hasPassword && !sendPasswordByTalk,\n\t\t\t\tisPasswordByTalkSet: hasPassword && sendPasswordByTalk,\n\t\t\t\tisTalkEnabled: oc_appswebroots['spreed'] !== undefined,\n\t\t\t\tsecureDropMode: !this.model.hasReadPermission(shareIndex),\n\t\t\t\thasExpireDate: this.model.getExpireDate(shareIndex) !== null,\n\t\t\t\tshareNote: shareNote,\n\t\t\t\thasNote: shareNote !== '',\n\t\t\t\texpireDate: moment(this.model.getExpireDate(shareIndex), 'YYYY-MM-DD').format('DD-MM-YYYY'),\n\t\t\t\t// The password placeholder does not take into account if\n\t\t\t\t// sending the password by Talk is enabled or not; when\n\t\t\t\t// switching from sending the password by Talk to sending the\n\t\t\t\t// password by email the password is reused and the share\n\t\t\t\t// updated, so the placeholder already shows the password in the\n\t\t\t\t// brief time between disabling sending the password by email\n\t\t\t\t// and receiving the updated share.\n\t\t\t\tpasswordPlaceholder: hasPassword ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,\n\t\t\t\tpasswordByTalkPlaceholder: (hasPassword && sendPasswordByTalk)? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,\n\t\t\t});\n\t\t},\n\n\t\tgetShareProperties: function() {\n\t\t\treturn {\n\t\t\t\tunshareLabel: t('core', 'Unshare'),\n\t\t\t\taddNoteLabel: t('core', 'Note to recipient'),\n\t\t\t\tcanShareLabel: t('core', 'Can reshare'),\n\t\t\t\tcanEditLabel: t('core', 'Can edit'),\n\t\t\t\tcreatePermissionLabel: t('core', 'Can create'),\n\t\t\t\tupdatePermissionLabel: t('core', 'Can change'),\n\t\t\t\tdeletePermissionLabel: t('core', 'Can delete'),\n\t\t\t\tsecureDropLabel: t('core', 'File drop (upload only)'),\n\t\t\t\texpireDateLabel: t('core', 'Set expiration date'),\n\t\t\t\tpasswordLabel: t('core', 'Password protect'),\n\t\t\t\tpasswordByTalkLabel: t('core', 'Password protect by Talk'),\n\t\t\t\tcrudsLabel: t('core', 'Access control'),\n\t\t\t\texpirationDatePlaceholder: t('core', 'Expiration date'),\n\t\t\t\tdefaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today\n\t\t\t\ttriangleSImage: OC.imagePath('core', 'actions/triangle-s'),\n\t\t\t\tisResharingAllowed: this.configModel.get('isResharingAllowed'),\n\t\t\t\tisPasswordForMailSharesRequired: this.configModel.get('isPasswordForMailSharesRequired'),\n\t\t\t\tsharePermissionPossible: this.model.sharePermissionPossible(),\n\t\t\t\teditPermissionPossible: this.model.editPermissionPossible(),\n\t\t\t\tcreatePermissionPossible: this.model.createPermissionPossible(),\n\t\t\t\tupdatePermissionPossible: this.model.updatePermissionPossible(),\n\t\t\t\tdeletePermissionPossible: this.model.deletePermissionPossible(),\n\t\t\t\tsharePermission: OC.PERMISSION_SHARE,\n\t\t\t\tcreatePermission: OC.PERMISSION_CREATE,\n\t\t\t\tupdatePermission: OC.PERMISSION_UPDATE,\n\t\t\t\tdeletePermission: OC.PERMISSION_DELETE,\n\t\t\t\treadPermission: OC.PERMISSION_READ,\n\t\t\t\tisFolder: this.model.isFolder()\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * get an array of sharees' share properties\n\t\t *\n\t\t * @returns {Array}\n\t\t */\n\t\tgetShareeList: function() {\n\t\t\tvar universal = this.getShareProperties();\n\n\t\t\tif(!this.model.hasUserShares()) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tvar shares = this.model.get('shares');\n\t\t\tvar list = [];\n\t\t\tfor(var index = 0; index < shares.length; index++) {\n\t\t\t\tvar share = this.getShareeObject(index);\n\n\t\t\t\tif (share.shareType === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// first empty {} is necessary, otherwise we get in trouble\n\t\t\t\t// with references\n\t\t\t\tlist.push(_.extend({}, universal, share));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t},\n\n\t\tgetLinkReshares: function() {\n\t\t\tvar universal = {\n\t\t\t\tunshareLabel: t('core', 'Unshare'),\n\t\t\t};\n\n\t\t\tif(!this.model.hasUserShares()) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tvar shares = this.model.get('shares');\n\t\t\tvar list = [];\n\t\t\tfor(var index = 0; index < shares.length; index++) {\n\t\t\t\tvar share = this.getShareeObject(index);\n\n\t\t\t\tif (share.shareType !== OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// first empty {} is necessary, otherwise we get in trouble\n\t\t\t\t// with references\n\t\t\t\tlist.push(_.extend({}, universal, share, {\n\t\t\t\t\tshareInitiator: shares[index].uid_owner,\n\t\t\t\t\tshareInitiatorText: t('core', '{shareInitiatorDisplayName} shared via link', {shareInitiatorDisplayName: shares[index].displayname_owner})\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t},\n\n\t\trender: function() {\n\t\t\tif(!this._renderPermissionChange) {\n\t\t\t\tthis.$el.html(this.template({\n\t\t\t\t\tcid: this.cid,\n\t\t\t\t\tsharees: this.getShareeList(),\n\t\t\t\t\tlinkReshares: this.getLinkReshares()\n\t\t\t\t}));\n\n\t\t\t\tthis.$('.avatar').each(function () {\n\t\t\t\t\tvar $this = $(this);\n\n\t\t\t\t\tif ($this.hasClass('imageplaceholderseed')) {\n\t\t\t\t\t\t$this.css({width: 32, height: 32});\n\t\t\t\t\t\tif ($this.data('avatar')) {\n\t\t\t\t\t\t\t$this.css('border-radius', '0%');\n\t\t\t\t\t\t\t$this.css('background', 'url(' + $this.data('avatar') + ') no-repeat');\n\t\t\t\t\t\t\t$this.css('background-size', '31px');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$this.imageplaceholder($this.data('seed'));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// user, size, ie8fix, hidedefault, callback, displayname\n\t\t\t\t\t\t$this.avatar($this.data('username'), 32, undefined, undefined, undefined, $this.data('displayname'));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.$('.has-tooltip').tooltip({\n\t\t\t\t\tplacement: 'bottom'\n\t\t\t\t});\n\n\t\t\t\tthis.$('ul.shareWithList > li').each(function() {\n\t\t\t\t\tvar $this = $(this);\n\n\t\t\t\t\tvar shareWith = $this.data('share-with');\n\t\t\t\t\tvar shareType = $this.data('share-type');\n\n\t\t\t\t\t$this.find('div.avatar, span.username').contactsMenu(shareWith, shareType, $this);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar permissionChangeShareId = parseInt(this._renderPermissionChange, 10);\n\t\t\t\tvar shareWithIndex = this.model.findShareWithIndex(permissionChangeShareId);\n\t\t\t\tvar sharee = this.getShareeObject(shareWithIndex);\n\t\t\t\t$.extend(sharee, this.getShareProperties());\n\t\t\t\tvar $li = this.$('li[data-share-id=' + permissionChangeShareId + ']');\n\t\t\t\t$li.find('.sharingOptionsGroup .popovermenu').replaceWith(this.popoverMenuTemplate(sharee));\n\t\t\t}\n\n\t\t\tvar _this = this;\n\t\t\tthis.getShareeList().forEach(function(sharee) {\n\t\t\t\tvar $edit = _this.$('#canEdit-' + _this.cid + '-' + sharee.shareId);\n\t\t\t\tif($edit.length === 1) {\n\t\t\t\t\t$edit.prop('checked', sharee.editPermissionState === 'checked');\n\t\t\t\t\tif (sharee.isFolder) {\n\t\t\t\t\t\t$edit.prop('indeterminate', sharee.editPermissionState === 'indeterminate');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.$('.popovermenu').on('afterHide', function() {\n\t\t\t\t_this._menuOpen = false;\n\t\t\t});\n\t\t\tthis.$('.popovermenu').on('beforeHide', function() {\n\t\t\t\tvar shareId = parseInt(_this._menuOpen, 10);\n\t\t\t\tif(!_.isNaN(shareId)) {\n\t\t\t\t\tvar datePickerClass = '.expirationDateContainer-' + _this.cid + '-' + shareId;\n\t\t\t\t\tvar datePickerInput = '#expirationDatePicker-' + _this.cid + '-' + shareId;\n\t\t\t\t\tvar expireDateCheckbox = '#expireDate-' + _this.cid + '-' + shareId;\n\t\t\t\t\tif ($(expireDateCheckbox).prop('checked')) {\n\t\t\t\t\t\t$(datePickerInput).removeClass('hidden-visually');\n\t\t\t\t\t\t$(datePickerClass).removeClass('hasDatepicker');\n\t\t\t\t\t\t$(datePickerClass + ' .ui-datepicker').hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (this._menuOpen !== false) {\n\t\t\t\t// Open menu again if it was opened before\n\t\t\t\tvar shareId = parseInt(this._menuOpen, 10);\n\t\t\t\tif(!_.isNaN(shareId)) {\n\t\t\t\t\tvar liSelector = 'li[data-share-id=' + shareId + ']';\n\t\t\t\t\tOC.showMenu(null, this.$(liSelector + ' .sharingOptionsGroup .popovermenu'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._renderPermissionChange = false;\n\n\t\t\t// new note autosize\n\t\t\tautosize(this.$el.find('.share-note-form .share-note'));\n\n\t\t\tthis.delegateEvents();\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * @returns {Function} from Handlebars\n\t\t * @private\n\t\t */\n\t\ttemplate: function (data) {\n\t\t\tvar sharees = data.sharees;\n\t\t\tif(_.isArray(sharees)) {\n\t\t\t\tfor (var i = 0; i < sharees.length; i++) {\n\t\t\t\t\tdata.sharees[i].popoverMenu = this.popoverMenuTemplate(sharees[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn OC.Share.Templates['sharedialogshareelistview'](data);\n\t\t},\n\n\t\t/**\n\t\t * renders the popover template and returns the resulting HTML\n\t\t *\n\t\t * @param {Object} data\n\t\t * @returns {string}\n\t\t */\n\t\tpopoverMenuTemplate: function(data) {\n\t\t\treturn OC.Share.Templates['sharedialogshareelistview_popover_menu'](data);\n\t\t},\n\n\t\tshowNoteForm: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\t// show elements\n\t\t\t$menu.find('.share-note-delete').toggleClass('hidden');\n\t\t\t$form.toggleClass('hidden');\n\t\t\t$form.find('textarea').focus();\n\t\t},\n\n\t\tdeleteNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $menu = $element.closest('li');\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\n\t\t\tconsole.log($form.find('.share-note'));\n\t\t\t$form.find('.share-note').val('');\n\t\t\t\n\t\t\t$form.addClass('hidden');\n\t\t\t$menu.find('.share-note-delete').addClass('hidden');\n\n\t\t\tself.sendNote('', shareId, $menu);\n\t\t},\n\n\t\tupdateNote: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\t\t\tvar $form = $element.closest('li.share-note-form');\n\t\t\tvar $menu = $form.prev('li');\n\t\t\tvar message = $form.find('.share-note').val().trim();\n\n\t\t\tif (message.length < 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.sendNote(message, shareId, $menu);\n\n\t\t},\n\n\t\tsendNote: function(note, shareId, $menu) {\n\t\t\tvar $form = $menu.next('li.share-note-form');\n\t\t\tvar $submit = $form.find('input.share-note-submit');\n\t\t\tvar $error = $form.find('input.share-note-error');\n\n\t\t\t$submit.prop('disabled', true);\n\t\t\t$menu.find('.icon-loading-small').removeClass('hidden');\n\t\t\t$menu.find('.icon-edit').hide();\n\n\t\t\tvar complete = function() {\n\t\t\t\t$submit.prop('disabled', false);\n\t\t\t\t$menu.find('.icon-loading-small').addClass('hidden');\n\t\t\t\t$menu.find('.icon-edit').show();\n\t\t\t};\n\t\t\tvar error = function() {\n\t\t\t\t$error.show();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$error.hide();\n\t\t\t\t}, 3000);\n\t\t\t};\n\n\t\t\t// send data\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'PUT',\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1/shares',2) + shareId + '?' + OC.buildQueryString({format: 'json'}),\n\t\t\t\tdata: { note: note },\n\t\t\t\tcomplete : complete,\n\t\t\t\terror: error\n\t\t\t});\n\t\t},\n\n\t\tonUnshare: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar self = this;\n\t\t\tvar $element = $(event.target);\n\t\t\tif (!$element.is('a')) {\n\t\t\t\t$element = $element.closest('a');\n\t\t\t}\n\n\t\t\tvar $loading = $element.find('.icon-loading-small').eq(0);\n\t\t\tif(!$loading.hasClass('hidden')) {\n\t\t\t\t// in process\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$loading.removeClass('hidden');\n\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tself.model.removeShare(shareId)\n\t\t\t\t.done(function() {\n\t\t\t\t\t$li.remove();\n\t\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Could not unshare'));\n\t\t\t\t});\n\t\t\treturn false;\n\t\t},\n\n\t\tonToggleMenu: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar $menu = $li.find('.sharingOptionsGroup .popovermenu');\n\n\t\t\tOC.showMenu(null, $menu);\n\t\t\tthis._menuOpen = $li.data('share-id');\n\t\t},\n\n\t\tonExpireDateChange: function(event) {\n\t\t\tvar $element = $(event.target);\n\t\t\tvar li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar datePickerClass = '.expirationDateContainer-' + this.cid + '-' + shareId;\n\t\t\tvar datePicker = $(datePickerClass);\n\t\t\tvar state = $element.prop('checked');\n\t\t\tdatePicker.toggleClass('hidden', !state);\n\t\t\tif (!state) {\n\t\t\t\t// disabled, let's hide the input and\n\t\t\t\t// set the expireDate to nothing\n\t\t\t\t$element.closest('li').next('li').addClass('hidden');\n\t\t\t\tthis.setExpirationDate(shareId, '');\n\t\t\t} else {\n\t\t\t\t// enabled, show the input and the datepicker\n\t\t\t\t$element.closest('li').next('li').removeClass('hidden');\n\t\t\t\tthis.showDatePicker(event);\n\n\t\t\t}\n\t\t},\n\n\t\tshowDatePicker: function(event) {\n\t\t\tvar element = $(event.target);\n\t\t\tvar li = element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar expirationDatePicker = '#expirationDatePicker-' + this.cid + '-' + shareId;\n\t\t\tvar view = this;\n\t\t\t$(expirationDatePicker).datepicker({\n\t\t\t\tdateFormat : 'dd-mm-yy',\n\t\t\t\tonSelect: function (expireDate) {\n\t\t\t\t\tview.setExpirationDate(shareId, expireDate);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$(expirationDatePicker).focus();\n\n\t\t},\n\n\t\tsetExpirationDate: function(shareId, expireDate) {\n\t\t\tthis.model.updateShare(shareId, {expireDate: expireDate}, {});\n\t\t},\n\n\t\tonMailSharePasswordProtectChange: function(event) {\n\t\t\tvar element = $(event.target);\n\t\t\tvar li = element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId;\n\t\t\tvar passwordContainer = $(passwordContainerClass);\n\t\t\tvar loading = this.$el.find(passwordContainerClass + ' .icon-loading-small');\n\t\t\tvar inputClass = '#passwordField-' + this.cid + '-' + shareId;\n\t\t\tvar passwordField = $(inputClass);\n\t\t\tvar state = element.prop('checked');\n\t\t\tvar passwordByTalkElement = $('#passwordByTalk-' + this.cid + '-' + shareId);\n\t\t\tvar passwordByTalkState = passwordByTalkElement.prop('checked');\n\t\t\tif (!state && !passwordByTalkState) {\n\t\t\t\tthis.model.updateShare(shareId, {password: '', sendPasswordByTalk: false});\n\t\t\t\tpasswordField.attr('value', '');\n\t\t\t\tpasswordField.removeClass('error');\n\t\t\t\tpasswordField.tooltip('hide');\n\t\t\t\tloading.addClass('hidden');\n\t\t\t\tpasswordField.attr('placeholder', PASSWORD_PLACEHOLDER_MESSAGE);\n\t\t\t\t// We first need to reset the password field before we hide it\n\t\t\t\tpasswordContainer.toggleClass('hidden', !state);\n\t\t\t} else if (state) {\n\t\t\t\tif (passwordByTalkState) {\n\t\t\t\t\t// Switching from sending the password by Talk to sending\n\t\t\t\t\t// the password by mail can be done keeping the previous\n\t\t\t\t\t// password sent by Talk.\n\t\t\t\t\tthis.model.updateShare(shareId, {sendPasswordByTalk: false});\n\n\t\t\t\t\tvar passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId;\n\t\t\t\t\tvar passwordByTalkContainer = $(passwordByTalkContainerClass);\n\t\t\t\t\tpasswordByTalkContainer.addClass('hidden');\n\t\t\t\t\tpasswordByTalkElement.prop('checked', false);\n\t\t\t\t}\n\n\t\t\t\tpasswordContainer.toggleClass('hidden', !state);\n\t\t\t\tpasswordField = '#passwordField-' + this.cid + '-' + shareId;\n\t\t\t\tthis.$(passwordField).focus();\n\t\t\t}\n\t\t},\n\n\t\tonMailSharePasswordProtectByTalkChange: function(event) {\n\t\t\tvar element = $(event.target);\n\t\t\tvar li = element.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId;\n\t\t\tvar passwordByTalkContainer = $(passwordByTalkContainerClass);\n\t\t\tvar loading = this.$el.find(passwordByTalkContainerClass + ' .icon-loading-small');\n\t\t\tvar inputClass = '#passwordByTalkField-' + this.cid + '-' + shareId;\n\t\t\tvar passwordByTalkField = $(inputClass);\n\t\t\tvar state = element.prop('checked');\n\t\t\tvar passwordElement = $('#password-' + this.cid + '-' + shareId);\n\t\t\tvar passwordState = passwordElement.prop('checked');\n\t\t\tif (!state) {\n\t\t\t\tthis.model.updateShare(shareId, {password: '', sendPasswordByTalk: false});\n\t\t\t\tpasswordByTalkField.attr('value', '');\n\t\t\t\tpasswordByTalkField.removeClass('error');\n\t\t\t\tpasswordByTalkField.tooltip('hide');\n\t\t\t\tloading.addClass('hidden');\n\t\t\t\tpasswordByTalkField.attr('placeholder', PASSWORD_PLACEHOLDER_MESSAGE);\n\t\t\t\t// We first need to reset the password field before we hide it\n\t\t\t\tpasswordByTalkContainer.toggleClass('hidden', !state);\n\t\t\t} else if (state) {\n\t\t\t\tif (passwordState) {\n\t\t\t\t\t// Enabling sending the password by Talk requires a new\n\t\t\t\t\t// password to be given (the one sent by mail is not reused,\n\t\t\t\t\t// as it would defeat the purpose of checking the identity\n\t\t\t\t\t// of the sharee by Talk if it was already sent by mail), so\n\t\t\t\t\t// the share is not updated until the user explicitly gives\n\t\t\t\t\t// the new password.\n\n\t\t\t\t\tvar passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId;\n\t\t\t\t\tvar passwordContainer = $(passwordContainerClass);\n\t\t\t\t\tpasswordContainer.addClass('hidden');\n\t\t\t\t\tpasswordElement.prop('checked', false);\n\t\t\t\t}\n\n\t\t\t\tpasswordByTalkContainer.toggleClass('hidden', !state);\n\t\t\t\tpasswordByTalkField = '#passwordByTalkField-' + this.cid + '-' + shareId;\n\t\t\t\tthis.$(passwordByTalkField).focus();\n\t\t\t}\n\t\t},\n\n\t\tonMailSharePasswordKeyUp: function(event) {\n\t\t\tif(event.keyCode === 13) {\n\t\t\t\tthis.onMailSharePasswordEntered(event);\n\t\t\t}\n\t\t},\n\n\t\tonMailSharePasswordEntered: function(event) {\n\t\t\tvar passwordField = $(event.target);\n\t\t\tvar li = passwordField.closest('li[data-share-id]');\n\t\t\tvar shareId = li.data('share-id');\n\t\t\tvar passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId;\n\t\t\tvar passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId;\n\t\t\tvar sendPasswordByTalk = passwordField.attr('id').startsWith('passwordByTalk');\n\t\t\tvar loading;\n\t\t\tif (sendPasswordByTalk) {\n\t\t\t\tloading = this.$el.find(passwordByTalkContainerClass + ' .icon-loading-small');\n\t\t\t} else {\n\t\t\t\tloading = this.$el.find(passwordContainerClass + ' .icon-loading-small');\n\t\t\t}\n\t\t\tif (!loading.hasClass('hidden')) {\n\t\t\t\t// still in process\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpasswordField.removeClass('error');\n\t\t\tvar password = passwordField.val();\n\t\t\t// in IE9 the password might be the placeholder due to bugs in the placeholders polyfill\n\t\t\tif(password === '' || password === PASSWORD_PLACEHOLDER || password === PASSWORD_PLACEHOLDER_MESSAGE) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tloading\n\t\t\t\t.removeClass('hidden')\n\t\t\t\t.addClass('inlineblock');\n\n\n\t\t\tthis.model.updateShare(shareId, {\n\t\t\t\tpassword: password,\n\t\t\t\tsendPasswordByTalk: sendPasswordByTalk\n\t\t\t}, {\n\t\t\t\terror: function(model, msg) {\n\t\t\t\t\t// destroy old tooltips\n\t\t\t\t\tpasswordField.tooltip('destroy');\n\t\t\t\t\tloading.removeClass('inlineblock').addClass('hidden');\n\t\t\t\t\tpasswordField.addClass('error');\n\t\t\t\t\tpasswordField.attr('title', msg);\n\t\t\t\t\tpasswordField.tooltip({placement: 'bottom', trigger: 'manual'});\n\t\t\t\t\tpasswordField.tooltip('show');\n\t\t\t\t},\n\t\t\t\tsuccess: function(model, msg) {\n\t\t\t\t\tpasswordField.blur();\n\t\t\t\t\tpasswordField.attr('value', '');\n\t\t\t\t\tpasswordField.attr('placeholder', PASSWORD_PLACEHOLDER);\n\t\t\t\t\tloading.removeClass('inlineblock').addClass('hidden');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tonPermissionChange: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tvar permissions = OC.PERMISSION_READ;\n\n\t\t\tif (this.model.isFolder()) {\n\t\t\t\t// adjust checkbox states\n\t\t\t\tvar $checkboxes = $('.permissions', $li).not('input[name=\"edit\"]').not('input[name=\"share\"]');\n\t\t\t\tvar checked;\n\t\t\t\tif ($element.attr('name') === 'edit') {\n\t\t\t\t\tchecked = $element.is(':checked');\n\t\t\t\t\t// Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck\n\t\t\t\t\t$($checkboxes).prop('checked', checked);\n\t\t\t\t\tif (checked) {\n\t\t\t\t\t\tpermissions |= OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar numberChecked = $checkboxes.filter(':checked').length;\n\t\t\t\t\tchecked = numberChecked === $checkboxes.length;\n\t\t\t\t\tvar $editCb = $('input[name=\"edit\"]', $li);\n\t\t\t\t\t$editCb.prop('checked', checked);\n\t\t\t\t\t$editCb.prop('indeterminate', !checked && numberChecked > 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($element.attr('name') === 'edit' && $element.is(':checked')) {\n\t\t\t\t\tpermissions |= OC.PERMISSION_UPDATE;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$('.permissions', $li).not('input[name=\"edit\"]').filter(':checked').each(function(index, checkbox) {\n\t\t\t\tpermissions |= $(checkbox).data('permissions');\n\t\t\t});\n\n\n\t\t\t/** disable checkboxes during save operation to avoid race conditions **/\n\t\t\t$li.find('input[type=checkbox]').prop('disabled', true);\n\t\t\tvar enableCb = function() {\n\t\t\t\t$li.find('input[type=checkbox]').prop('disabled', false);\n\t\t\t};\n\t\t\tvar errorCb = function(elem, msg) {\n\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error while sharing'));\n\t\t\t\tenableCb();\n\t\t\t};\n\n\t\t\tthis.model.updateShare(shareId, {permissions: permissions}, {error: errorCb, success: enableCb});\n\n\t\t\tthis._renderPermissionChange = shareId;\n\t\t},\n\n\t\tonSecureDropChange: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tvar $element = $(event.target);\n\t\t\tvar $li = $element.closest('li[data-share-id]');\n\t\t\tvar shareId = $li.data('share-id');\n\n\t\t\tvar permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE | OC.PERMISSION_READ;\n\t\t\tif ($element.is(':checked')) {\n\t\t\t\tpermissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE;\n\t\t\t}\n\n\t\t\t/** disable checkboxes during save operation to avoid race conditions **/\n\t\t\t$li.find('input[type=checkbox]').prop('disabled', true);\n\t\t\tvar enableCb = function() {\n\t\t\t\t$li.find('input[type=checkbox]').prop('disabled', false);\n\t\t\t};\n\t\t\tvar errorCb = function(elem, msg) {\n\t\t\t\tOC.dialogs.alert(msg, t('core', 'Error while sharing'));\n\t\t\t\tenableCb();\n\t\t\t};\n\n\t\t\tthis.model.updateShare(shareId, {permissions: permissions}, {error: errorCb, success: enableCb});\n\n\t\t\tthis._renderPermissionChange = shareId;\n\t\t}\n\n\t});\n\n\tOC.Share.ShareDialogShareeListView = ShareDialogShareeListView;\n\n})();\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* globals Handlebars */\n\n(function() {\n\tif(!OC.Share) {\n\t\tOC.Share = {};\n\t}\n\n\t/**\n\t * @class OCA.Share.ShareDialogView\n\t * @member {OC.Share.ShareItemModel} model\n\t * @member {jQuery} $el\n\t * @memberof OCA.Sharing\n\t * @classdesc\n\t *\n\t * Represents the GUI of the share dialogue\n\t *\n\t */\n\tvar ShareDialogView = OC.Backbone.View.extend({\n\t\t/** @type {Object} **/\n\t\t_templates: {},\n\n\t\t/** @type {boolean} **/\n\t\t_showLink: true,\n\n\t\t/** @type {string} **/\n\t\ttagName: 'div',\n\n\t\t/** @type {OC.Share.ShareConfigModel} **/\n\t\tconfigModel: undefined,\n\n\t\t/** @type {object} **/\n\t\tresharerInfoView: undefined,\n\n\t\t/** @type {object} **/\n\t\tlinkShareView: undefined,\n\n\t\t/** @type {object} **/\n\t\tshareeListView: undefined,\n\n\t\t/** @type {object} **/\n\t\t_lastSuggestions: undefined,\n\n\t\t/** @type {object} **/\n\t\t_lastRecommendations: undefined,\n\n\t\t/** @type {int} **/\n\t\t_pendingOperationsCount: 0,\n\n\t\tevents: {\n\t\t\t'focus .shareWithField': 'onShareWithFieldFocus',\n\t\t\t'input .shareWithField': 'onShareWithFieldChanged',\n\t\t\t'click .shareWithConfirm': '_confirmShare'\n\t\t},\n\n\t\tinitialize: function(options) {\n\t\t\tvar view = this;\n\n\t\t\tthis.model.on('fetchError', function() {\n\t\t\t\tOC.Notification.showTemporary(t('core', 'Share details could not be loaded for this item.'));\n\t\t\t});\n\n\t\t\tif(!_.isUndefined(options.configModel)) {\n\t\t\t\tthis.configModel = options.configModel;\n\t\t\t} else {\n\t\t\t\tthrow 'missing OC.Share.ShareConfigModel';\n\t\t\t}\n\n\t\t\tthis.configModel.on('change:isRemoteShareAllowed', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\t\t\tthis.configModel.on('change:isRemoteGroupShareAllowed', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\t\t\tthis.model.on('change:permissions', function() {\n\t\t\t\tview.render();\n\t\t\t});\n\n\t\t\tthis.model.on('request', this._onRequest, this);\n\t\t\tthis.model.on('sync', this._onEndRequest, this);\n\n\t\t\tvar subViewOptions = {\n\t\t\t\tmodel: this.model,\n\t\t\t\tconfigModel: this.configModel\n\t\t\t};\n\n\t\t\tvar subViews = {\n\t\t\t\tresharerInfoView: 'ShareDialogResharerInfoView',\n\t\t\t\tlinkShareView: 'ShareDialogLinkShareView',\n\t\t\t\tshareeListView: 'ShareDialogShareeListView'\n\t\t\t};\n\n\t\t\tfor(var name in subViews) {\n\t\t\t\tvar className = subViews[name];\n\t\t\t\tthis[name] = _.isUndefined(options[name])\n\t\t\t\t\t? new OC.Share[className](subViewOptions)\n\t\t\t\t\t: options[name];\n\t\t\t}\n\n\t\t\t_.bindAll(this,\n\t\t\t\t'autocompleteHandler',\n\t\t\t\t'_onSelectRecipient',\n\t\t\t\t'onShareWithFieldChanged',\n\t\t\t\t'onShareWithFieldFocus'\n\t\t\t);\n\n\t\t\tOC.Plugins.attach('OC.Share.ShareDialogView', this);\n\t\t},\n\n\t\tonShareWithFieldChanged: function() {\n\t\t\tvar $el = this.$el.find('.shareWithField');\n\t\t\tif ($el.val().length < 2) {\n\t\t\t\t$el.removeClass('error').tooltip('hide');\n\t\t\t}\n\t\t},\n\n\t\t/* trigger search after the field was re-selected */\n\t\tonShareWithFieldFocus: function() {\n\t\t\tthis.$el.find('.shareWithField').autocomplete(\"search\");\n\t\t},\n\n\t\t_getSuggestions: function(searchTerm, perPage, model) {\n\t\t\tif (this._lastSuggestions &&\n\t\t\t\tthis._lastSuggestions.searchTerm === searchTerm &&\n\t\t\t\tthis._lastSuggestions.perPage === perPage &&\n\t\t\t\tthis._lastSuggestions.model === model) {\n\t\t\t\treturn this._lastSuggestions.promise;\n\t\t\t}\n\n\t\t\tvar deferred = $.Deferred();\n\n\t\t\t$.get(\n\t\t\t\tOC.linkToOCS('apps/files_sharing/api/v1') + 'sharees',\n\t\t\t\t{\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tsearch: searchTerm,\n\t\t\t\t\tperPage: perPage,\n\t\t\t\t\titemType: model.get('itemType')\n\t\t\t\t},\n\t\t\t\tfunction (result) {\n\t\t\t\t\tif (result.ocs.meta.statuscode === 100) {\n\t\t\t\t\t\tvar filter = function(users, groups, remotes, remote_groups, emails, circles, rooms) {\n\t\t\t\t\t\t\tif (typeof(emails) === 'undefined') {\n\t\t\t\t\t\t\t\temails = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof(circles) === 'undefined') {\n\t\t\t\t\t\t\t\tcircles = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof(rooms) === 'undefined') {\n\t\t\t\t\t\t\t\trooms = [];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar usersLength;\n\t\t\t\t\t\t\tvar groupsLength;\n\t\t\t\t\t\t\tvar remotesLength;\n\t\t\t\t\t\t\tvar remoteGroupsLength;\n\t\t\t\t\t\t\tvar emailsLength;\n\t\t\t\t\t\t\tvar circlesLength;\n\t\t\t\t\t\t\tvar roomsLength;\n\n\t\t\t\t\t\t\tvar i, j;\n\n\t\t\t\t\t\t\t//Filter out the current user\n\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\tfor (i = 0; i < usersLength; i++) {\n\t\t\t\t\t\t\t\tif (users[i].value.shareWith === OC.currentUser) {\n\t\t\t\t\t\t\t\t\tusers.splice(i, 1);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Filter out the owner of the share\n\t\t\t\t\t\t\tif (model.hasReshare()) {\n\t\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\t\tfor (i = 0 ; i < usersLength; i++) {\n\t\t\t\t\t\t\t\t\tif (users[i].value.shareWith === model.getReshareOwner()) {\n\t\t\t\t\t\t\t\t\t\tusers.splice(i, 1);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar shares = model.get('shares');\n\t\t\t\t\t\t\tvar sharesLength = shares.length;\n\n\t\t\t\t\t\t\t// Now filter out all sharees that are already shared with\n\t\t\t\t\t\t\tfor (i = 0; i < sharesLength; i++) {\n\t\t\t\t\t\t\t\tvar share = shares[i];\n\n\t\t\t\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_USER) {\n\t\t\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < usersLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (users[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tusers.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\t\t\t\t\tgroupsLength = groups.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < groupsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (groups[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tgroups.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\t\t\t\t\t\tremotesLength = remotes.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < remotesLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (remotes[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tremotes.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\t\t\t\t\t\tremoteGroupsLength = remote_groups.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < remoteGroupsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (remote_groups[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tremote_groups.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\t\t\t\temailsLength = emails.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < emailsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (emails[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\temails.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\t\t\t\t\t\tcirclesLength = circles.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < circlesLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (circles[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tcircles.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\t\t\t\t\t\troomsLength = rooms.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < roomsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (rooms[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\trooms.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tfilter(\n\t\t\t\t\t\t\tresult.ocs.data.exact.users,\n\t\t\t\t\t\t\tresult.ocs.data.exact.groups,\n\t\t\t\t\t\t\tresult.ocs.data.exact.remotes,\n\t\t\t\t\t\t\tresult.ocs.data.exact.remote_groups,\n\t\t\t\t\t\t\tresult.ocs.data.exact.emails,\n\t\t\t\t\t\t\tresult.ocs.data.exact.circles,\n\t\t\t\t\t\t\tresult.ocs.data.exact.rooms\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar exactUsers = result.ocs.data.exact.users;\n\t\t\t\t\t\tvar exactGroups = result.ocs.data.exact.groups;\n\t\t\t\t\t\tvar exactRemotes = result.ocs.data.exact.remotes;\n\t\t\t\t\t\tvar exactRemoteGroups = result.ocs.data.exact.remote_groups;\n\t\t\t\t\t\tvar exactEmails = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.emails) !== 'undefined') {\n\t\t\t\t\t\t\texactEmails = result.ocs.data.exact.emails;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar exactCircles = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.circles) !== 'undefined') {\n\t\t\t\t\t\t\texactCircles = result.ocs.data.exact.circles;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar exactRooms = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.rooms) !== 'undefined') {\n\t\t\t\t\t\t\texactRooms = result.ocs.data.exact.rooms;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar exactMatches = exactUsers.concat(exactGroups).concat(exactRemotes).concat(exactRemoteGroups).concat(exactEmails).concat(exactCircles).concat(exactRooms);\n\n\t\t\t\t\t\tfilter(\n\t\t\t\t\t\t\tresult.ocs.data.users,\n\t\t\t\t\t\t\tresult.ocs.data.groups,\n\t\t\t\t\t\t\tresult.ocs.data.remotes,\n\t\t\t\t\t\t\tresult.ocs.data.remote_groups,\n\t\t\t\t\t\t\tresult.ocs.data.emails,\n\t\t\t\t\t\t\tresult.ocs.data.circles,\n\t\t\t\t\t\t\tresult.ocs.data.rooms\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar users = result.ocs.data.users;\n\t\t\t\t\t\tvar groups = result.ocs.data.groups;\n\t\t\t\t\t\tvar remotes = result.ocs.data.remotes;\n\t\t\t\t\t\tvar remoteGroups = result.ocs.data.remote_groups;\n\t\t\t\t\t\tvar lookup = result.ocs.data.lookup;\n\t\t\t\t\t\tvar emails = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.emails) !== 'undefined') {\n\t\t\t\t\t\t\temails = result.ocs.data.emails;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar circles = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.circles) !== 'undefined') {\n\t\t\t\t\t\t\tcircles = result.ocs.data.circles;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar rooms = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.rooms) !== 'undefined') {\n\t\t\t\t\t\t\trooms = result.ocs.data.rooms;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar suggestions = exactMatches.concat(users).concat(groups).concat(remotes).concat(remoteGroups).concat(emails).concat(circles).concat(rooms).concat(lookup);\n\n\t\t\t\t\t\tfunction dynamicSort(property) {\n\t\t\t\t\t\t\treturn function (a,b) {\n\t\t\t\t\t\t\t\tvar aProperty = '';\n\t\t\t\t\t\t\t\tvar bProperty = '';\n\t\t\t\t\t\t\t\tif (typeof a[property] !== 'undefined') {\n\t\t\t\t\t\t\t\t\taProperty = a[property];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (typeof b[property] !== 'undefined') {\n\t\t\t\t\t\t\t\t\tbProperty = b[property];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (aProperty < bProperty) ? -1 : (aProperty > bProperty) ? 1 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Sort share entries by uuid to properly group them\n\t\t\t\t\t\t */\n\t\t\t\t\t\tvar grouped = suggestions.sort(dynamicSort('uuid'));\n\n\t\t\t\t\t\tvar previousUuid = null;\n\t\t\t\t\t\tvar groupedLength = grouped.length;\n\t\t\t\t\t\tvar result = [];\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * build the result array that only contains all contact entries from\n\t\t\t\t\t\t * merged contacts, if the search term matches its contact name\n\t\t\t\t\t\t */\n\t\t\t\t\t\tfor (var i = 0; i < groupedLength; i++) {\n\t\t\t\t\t\t\tif (typeof grouped[i].uuid !== 'undefined' && grouped[i].uuid === previousUuid) {\n\t\t\t\t\t\t\t\tgrouped[i].merged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (searchTerm === grouped[i].name || typeof grouped[i].merged === 'undefined') {\n\t\t\t\t\t\t\t\tresult.push(grouped[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpreviousUuid = grouped[i].uuid;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar moreResultsAvailable =\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\toc_config['sharing.maxAutocompleteResults'] > 0\n\t\t\t\t\t\t\t\t&& Math.min(perPage, oc_config['sharing.maxAutocompleteResults'])\n\t\t\t\t\t\t\t\t\t<= Math.max(\n\t\t\t\t\t\t\t\t\t\tusers.length + exactUsers.length,\n\t\t\t\t\t\t\t\t\t\tgroups.length + exactGroups.length,\n\t\t\t\t\t\t\t\t\t\tremoteGroups.length + exactRemoteGroups.length,\n\t\t\t\t\t\t\t\t\t\tremotes.length + exactRemotes.length,\n\t\t\t\t\t\t\t\t\t\temails.length + exactEmails.length,\n\t\t\t\t\t\t\t\t\t\tcircles.length + exactCircles.length,\n\t\t\t\t\t\t\t\t\t\trooms.length + exactRooms.length,\n\t\t\t\t\t\t\t\t\t\tlookup.length\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tdeferred.resolve(result, exactMatches, moreResultsAvailable);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.reject(result.ocs.meta.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t).fail(function() {\n\t\t\t\tdeferred.reject();\n\t\t\t});\n\n\t\t\tthis._lastSuggestions = {\n\t\t\t\tsearchTerm: searchTerm,\n\t\t\t\tperPage: perPage,\n\t\t\t\tmodel: model,\n\t\t\t\tpromise: deferred.promise()\n\t\t\t};\n\n\t\t\treturn this._lastSuggestions.promise;\n\t\t},\n\n\t\t_getRecommendations: function(model) {\n\t\t\tif (this._lastRecommendations &&\n\t\t\t\tthis._lastRecommendations.model === model) {\n\t\t\t\treturn this._lastRecommendations.promise;\n\t\t\t}\n\n\t\t\tvar deferred = $.Deferred();\n\n\t\t\t$.get(\n\t\t\t\tOC.linkToOCS('apps/files_sharing/api/v1') + 'sharees_recommended',\n\t\t\t\t{\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\titemType: model.get('itemType')\n\t\t\t\t},\n\t\t\t\tfunction (result) {\n\t\t\t\t\tif (result.ocs.meta.statuscode === 100) {\n\t\t\t\t\t\tvar filter = function(users, groups, remotes, remote_groups, emails, circles, rooms) {\n\t\t\t\t\t\t\tif (typeof(emails) === 'undefined') {\n\t\t\t\t\t\t\t\temails = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof(circles) === 'undefined') {\n\t\t\t\t\t\t\t\tcircles = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof(rooms) === 'undefined') {\n\t\t\t\t\t\t\t\trooms = [];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar usersLength;\n\t\t\t\t\t\t\tvar groupsLength;\n\t\t\t\t\t\t\tvar remotesLength;\n\t\t\t\t\t\t\tvar remoteGroupsLength;\n\t\t\t\t\t\t\tvar emailsLength;\n\t\t\t\t\t\t\tvar circlesLength;\n\t\t\t\t\t\t\tvar roomsLength;\n\n\t\t\t\t\t\t\tvar i, j;\n\n\t\t\t\t\t\t\t//Filter out the current user\n\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\tfor (i = 0; i < usersLength; i++) {\n\t\t\t\t\t\t\t\tif (users[i].value.shareWith === OC.currentUser) {\n\t\t\t\t\t\t\t\t\tusers.splice(i, 1);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Filter out the owner of the share\n\t\t\t\t\t\t\tif (model.hasReshare()) {\n\t\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\t\tfor (i = 0 ; i < usersLength; i++) {\n\t\t\t\t\t\t\t\t\tif (users[i].value.shareWith === model.getReshareOwner()) {\n\t\t\t\t\t\t\t\t\t\tusers.splice(i, 1);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar shares = model.get('shares');\n\t\t\t\t\t\t\tvar sharesLength = shares.length;\n\n\t\t\t\t\t\t\t// Now filter out all sharees that are already shared with\n\t\t\t\t\t\t\tfor (i = 0; i < sharesLength; i++) {\n\t\t\t\t\t\t\t\tvar share = shares[i];\n\n\t\t\t\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_USER) {\n\t\t\t\t\t\t\t\t\tusersLength = users.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < usersLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (users[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tusers.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\t\t\t\t\tgroupsLength = groups.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < groupsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (groups[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tgroups.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\t\t\t\t\t\tremotesLength = remotes.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < remotesLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (remotes[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tremotes.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\t\t\t\t\t\tremoteGroupsLength = remote_groups.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < remoteGroupsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (remote_groups[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tremote_groups.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\t\t\t\temailsLength = emails.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < emailsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (emails[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\temails.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\t\t\t\t\t\tcirclesLength = circles.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < circlesLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (circles[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\tcircles.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (share.share_type === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\t\t\t\t\t\troomsLength = rooms.length;\n\t\t\t\t\t\t\t\t\tfor (j = 0; j < roomsLength; j++) {\n\t\t\t\t\t\t\t\t\t\tif (rooms[j].value.shareWith === share.share_with) {\n\t\t\t\t\t\t\t\t\t\t\trooms.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tfilter(\n\t\t\t\t\t\t\tresult.ocs.data.exact.users,\n\t\t\t\t\t\t\tresult.ocs.data.exact.groups,\n\t\t\t\t\t\t\tresult.ocs.data.exact.remotes,\n\t\t\t\t\t\t\tresult.ocs.data.exact.remote_groups,\n\t\t\t\t\t\t\tresult.ocs.data.exact.emails,\n\t\t\t\t\t\t\tresult.ocs.data.exact.circles,\n\t\t\t\t\t\t\tresult.ocs.data.exact.rooms\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar exactUsers = result.ocs.data.exact.users;\n\t\t\t\t\t\tvar exactGroups = result.ocs.data.exact.groups;\n\t\t\t\t\t\tvar exactRemotes = result.ocs.data.exact.remotes || [];\n\t\t\t\t\t\tvar exactRemoteGroups = result.ocs.data.exact.remote_groups || [];\n\t\t\t\t\t\tvar exactEmails = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.emails) !== 'undefined') {\n\t\t\t\t\t\t\texactEmails = result.ocs.data.exact.emails;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar exactCircles = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.circles) !== 'undefined') {\n\t\t\t\t\t\t\texactCircles = result.ocs.data.exact.circles;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar exactRooms = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.rooms) !== 'undefined') {\n\t\t\t\t\t\t\texactRooms = result.ocs.data.exact.rooms;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar exactMatches = exactUsers.concat(exactGroups).concat(exactRemotes).concat(exactRemoteGroups).concat(exactEmails).concat(exactCircles).concat(exactRooms);\n\n\t\t\t\t\t\tfilter(\n\t\t\t\t\t\t\tresult.ocs.data.users,\n\t\t\t\t\t\t\tresult.ocs.data.groups,\n\t\t\t\t\t\t\tresult.ocs.data.remotes,\n\t\t\t\t\t\t\tresult.ocs.data.remote_groups,\n\t\t\t\t\t\t\tresult.ocs.data.emails,\n\t\t\t\t\t\t\tresult.ocs.data.circles,\n\t\t\t\t\t\t\tresult.ocs.data.rooms\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar users = result.ocs.data.users;\n\t\t\t\t\t\tvar groups = result.ocs.data.groups;\n\t\t\t\t\t\tvar remotes = result.ocs.data.remotes || [];\n\t\t\t\t\t\tvar remoteGroups = result.ocs.data.remote_groups || [];\n\t\t\t\t\t\tvar lookup = result.ocs.data.lookup || [];\n\t\t\t\t\t\tvar emails = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.emails) !== 'undefined') {\n\t\t\t\t\t\t\temails = result.ocs.data.emails;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar circles = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.circles) !== 'undefined') {\n\t\t\t\t\t\t\tcircles = result.ocs.data.circles;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar rooms = [];\n\t\t\t\t\t\tif (typeof(result.ocs.data.rooms) !== 'undefined') {\n\t\t\t\t\t\t\trooms = result.ocs.data.rooms;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar suggestions = exactMatches.concat(users).concat(groups).concat(remotes).concat(remoteGroups).concat(emails).concat(circles).concat(rooms).concat(lookup);\n\n\t\t\t\t\t\tfunction dynamicSort(property) {\n\t\t\t\t\t\t\treturn function (a,b) {\n\t\t\t\t\t\t\t\tvar aProperty = '';\n\t\t\t\t\t\t\t\tvar bProperty = '';\n\t\t\t\t\t\t\t\tif (typeof a[property] !== 'undefined') {\n\t\t\t\t\t\t\t\t\taProperty = a[property];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (typeof b[property] !== 'undefined') {\n\t\t\t\t\t\t\t\t\tbProperty = b[property];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (aProperty < bProperty) ? -1 : (aProperty > bProperty) ? 1 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Sort share entries by uuid to properly group them\n\t\t\t\t\t\t */\n\t\t\t\t\t\tvar grouped = suggestions.sort(dynamicSort('uuid'));\n\n\t\t\t\t\t\tvar previousUuid = null;\n\t\t\t\t\t\tvar groupedLength = grouped.length;\n\t\t\t\t\t\tvar result = [];\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * build the result array that only contains all contact entries from\n\t\t\t\t\t\t * merged contacts, if the search term matches its contact name\n\t\t\t\t\t\t */\n\t\t\t\t\t\tfor (var i = 0; i < groupedLength; i++) {\n\t\t\t\t\t\t\tif (typeof grouped[i].uuid !== 'undefined' && grouped[i].uuid === previousUuid) {\n\t\t\t\t\t\t\t\tgrouped[i].merged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof grouped[i].merged === 'undefined') {\n\t\t\t\t\t\t\t\tresult.push(grouped[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpreviousUuid = grouped[i].uuid;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar moreResultsAvailable =\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\toc_config['sharing.maxAutocompleteResults'] > 0\n\t\t\t\t\t\t\t\t&& Math.min(perPage, oc_config['sharing.maxAutocompleteResults'])\n\t\t\t\t\t\t\t\t<= Math.max(\n\t\t\t\t\t\t\t\t\tusers.length + exactUsers.length,\n\t\t\t\t\t\t\t\t\tgroups.length + exactGroups.length,\n\t\t\t\t\t\t\t\t\tremoteGroups.length + exactRemoteGroups.length,\n\t\t\t\t\t\t\t\t\tremotes.length + exactRemotes.length,\n\t\t\t\t\t\t\t\t\temails.length + exactEmails.length,\n\t\t\t\t\t\t\t\t\tcircles.length + exactCircles.length,\n\t\t\t\t\t\t\t\t\trooms.length + exactRooms.length,\n\t\t\t\t\t\t\t\t\tlookup.length\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tdeferred.resolve(result, exactMatches, moreResultsAvailable);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.reject(result.ocs.meta.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t).fail(function() {\n\t\t\t\tdeferred.reject();\n\t\t\t});\n\n\t\t\tthis._lastRecommendations = {\n\t\t\t\tmodel: model,\n\t\t\t\tpromise: deferred.promise()\n\t\t\t};\n\n\t\t\treturn this._lastRecommendations.promise;\n\t\t},\n\n\t\trecommendationHandler: function (response) {\n\t\t\tvar view = this;\n\t\t\tvar $shareWithField = $('.shareWithField');\n\t\t\tthis._getRecommendations(\n\t\t\t\tview.model\n\t\t\t).done(function(suggestions, exactMatches) {\n\t\t\t\tview._pendingOperationsCount--;\n\t\t\t\tif (view._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\tif (suggestions.length > 0) {\n\t\t\t\t\t$shareWithField\n\t\t\t\t\t\t.autocomplete(\"option\", \"autoFocus\", true);\n\n\t\t\t\t\tresponse(suggestions);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.info('no sharing recommendations found');\n\t\t\t\t\tresponse();\n\t\t\t\t}\n\t\t\t}).fail(function(message) {\n\t\t\t\tview._pendingOperationsCount--;\n\t\t\t\tif (view._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\tconsole.error('could not load recommendations', message)\n\t\t\t});\n\t\t},\n\n\t\tautocompleteHandler: function (search, response) {\n\t\t\t// If nothing is entered we show recommendations instead of search\n\t\t\t// results\n\t\t\tif (search.term.length === 0) {\n\t\t\t\tthis.recommendationHandler(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $shareWithField = $('.shareWithField'),\n\t\t\t\tview = this,\n\t\t\t\t$loading = this.$el.find('.shareWithLoading'),\n\t\t\t\t$confirm = this.$el.find('.shareWithConfirm');\n\n\t\t\tvar count = oc_config['sharing.minSearchStringLength'];\n\t\t\tif (search.term.trim().length < count) {\n\t\t\t\tvar title = n('core',\n\t\t\t\t\t'At least {count} character is needed for autocompletion',\n\t\t\t\t\t'At least {count} characters are needed for autocompletion',\n\t\t\t\t\tcount,\n\t\t\t\t\t{ count: count }\n\t\t\t\t);\n\t\t\t\t$shareWithField.addClass('error')\n\t\t\t\t\t.attr('data-original-title', title)\n\t\t\t\t\t.tooltip('hide')\n\t\t\t\t\t.tooltip({\n\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t\t})\n\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t.tooltip('show');\n\t\t\t\tresponse();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$loading.removeClass('hidden');\n\t\t\t$loading.addClass('inlineblock');\n\t\t\t$confirm.addClass('hidden');\n\t\t\tthis._pendingOperationsCount++;\n\n\t\t\t$shareWithField.removeClass('error')\n\t\t\t\t.tooltip('hide');\n\n\t\t\tvar perPage = parseInt(oc_config['sharing.maxAutocompleteResults'], 10) || 200;\n\t\t\tthis._getSuggestions(\n\t\t\t\tsearch.term.trim(),\n\t\t\t\tperPage,\n\t\t\t\tview.model\n\t\t\t).done(function(suggestions, exactMatches, moreResultsAvailable) {\n\t\t\t\tview._pendingOperationsCount--;\n\t\t\t\tif (view._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\tif (suggestions.length > 0) {\n\t\t\t\t\t$shareWithField\n\t\t\t\t\t\t.autocomplete(\"option\", \"autoFocus\", true);\n\n\t\t\t\t\tresponse(suggestions);\n\n\t\t\t\t\t// show a notice that the list is truncated\n\t\t\t\t\t// this is the case if one of the search results is at least as long as the max result config option\n\t\t\t\t\tif(moreResultsAvailable) {\n\t\t\t\t\t\tvar message = t('core', 'This list is maybe truncated - please refine your search term to see more results.');\n\t\t\t\t\t\t$('.ui-autocomplete').append('<li class=\"autocomplete-note\">' + message + '</li>');\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tvar title = t('core', 'No users or groups found for {search}', {search: $shareWithField.val()});\n\t\t\t\t\tif (!view.configModel.get('allowGroupSharing')) {\n\t\t\t\t\t\ttitle = t('core', 'No users found for {search}', {search: $('.shareWithField').val()});\n\t\t\t\t\t}\n\t\t\t\t\t$shareWithField.addClass('error')\n\t\t\t\t\t\t.attr('data-original-title', title)\n\t\t\t\t\t\t.tooltip('hide')\n\t\t\t\t\t\t.tooltip({\n\t\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.tooltip('fixTitle')\n\t\t\t\t\t\t.tooltip('show');\n\t\t\t\t\tresponse();\n\t\t\t\t}\n\t\t\t}).fail(function(message) {\n\t\t\t\tview._pendingOperationsCount--;\n\t\t\t\tif (view._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\tif (message) {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'An error occurred (\"{message}\"). Please try again', { message: message }));\n\t\t\t\t} else {\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'An error occurred. Please try again'));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tautocompleteRenderItem: function(ul, item) {\n\t\t\tvar icon = 'icon-user';\n\t\t\tvar text = escapeHTML(item.label);\n\t\t\tvar description = '';\n\t\t\tvar type = '';\n\t\t\tvar getTranslatedType = function(type) {\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'HOME':\n\t\t\t\t\t\treturn t('core', 'Home');\n\t\t\t\t\tcase 'WORK':\n\t\t\t\t\t\treturn t('core', 'Work');\n\t\t\t\t\tcase 'OTHER':\n\t\t\t\t\t\treturn t('core', 'Other');\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn '' + type;\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (typeof item.type !== 'undefined' && item.type !== null) {\n\t\t\t\ttype = getTranslatedType(item.type) + ' ';\n\t\t\t}\n\n\t\t\tif (typeof item.name !== 'undefined') {\n\t\t\t\ttext = escapeHTML(item.name);\n\t\t\t}\n\t\t\tif (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\ticon = 'icon-contacts-dark';\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\ticon = 'icon-shared';\n\t\t\t\tdescription += item.value.shareWith;\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\ttext = t('core', '{sharee} (remote group)', { sharee: text }, undefined, { escape: false });\n\t\t\t\ticon = 'icon-shared';\n\t\t\t\tdescription += item.value.shareWith;\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\ticon = 'icon-mail';\n\t\t\t\tdescription += item.value.shareWith;\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\ttext = t('core', '{sharee} ({type}, {owner})', {sharee: text, type: item.value.circleInfo, owner: item.value.circleOwner}, undefined, {escape: false});\n\t\t\t\ticon = 'icon-circle';\n\t\t\t} else if (item.value.shareType === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\ticon = 'icon-talk';\n\t\t\t}\n\n\t\t\tvar insert = $(\"<div class='share-autocomplete-item'/>\");\n\t\t\tif (item.merged) {\n\t\t\t\tinsert.addClass('merged');\n\t\t\t\ttext = item.value.shareWith;\n\t\t\t\tdescription = type;\n\t\t\t} else {\n\t\t\t\tvar avatar = $(\"<div class='avatardiv'></div>\").appendTo(insert);\n\t\t\t\tif (item.value.shareType === OC.Share.SHARE_TYPE_USER || item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\t\tavatar.avatar(item.value.shareWith, 32, undefined, undefined, undefined, item.label);\n\t\t\t\t} else {\n\t\t\t\t\tif (typeof item.uuid === 'undefined') {\n\t\t\t\t\t\titem.uuid = text;\n\t\t\t\t\t}\n\t\t\t\t\tavatar.imageplaceholder(item.uuid, text, 32);\n\t\t\t\t}\n\t\t\t\tdescription = type + description;\n\t\t\t}\n\t\t\tif (description !== '') {\n\t\t\t\tinsert.addClass('with-description');\n\t\t\t}\n\n\t\t\t$(\"<div class='autocomplete-item-text'></div>\")\n\t\t\t\t.html(\n\t\t\t\t\ttext.replace(\n\t\t\t\t\tnew RegExp(this.term, \"gi\"),\n\t\t\t\t\t\"<span class='ui-state-highlight'>$&</span>\")\n\t\t\t\t\t+ '<span class=\"autocomplete-item-details\">' + description + '</span>'\n\t\t\t\t)\n\t\t\t\t.appendTo(insert);\n\t\t\tinsert.attr('title', item.value.shareWith);\n\t\t\tinsert.append('<span class=\"icon '+icon+'\" title=\"' + text + '\"></span>');\n\t\t\tinsert = $(\"<a>\")\n\t\t\t\t.append(insert);\n\t\t\treturn $(\"<li>\")\n\t\t\t\t.addClass((item.value.shareType === OC.Share.SHARE_TYPE_GROUP) ? 'group' : 'user')\n\t\t\t\t.append(insert)\n\t\t\t\t.appendTo(ul);\n\t\t},\n\n\t\t_onSelectRecipient: function(e, s) {\n\t\t\tvar self = this;\n\n\t\t\tif (e.keyCode == 9) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (typeof s.item.name !== 'undefined') {\n\t\t\t\t\te.target.value = s.item.name;\n\t\t\t\t} else {\n\t\t\t\t\te.target.value = s.item.label;\n\t\t\t\t}\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$(e.target).attr('disabled', false)\n\t\t\t\t\t\t.autocomplete('search', $(e.target).val());\n\t\t\t\t}, 0);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\t// Ensure that the keydown handler for the input field is not\n\t\t\t// called; otherwise it would try to add the recipient again, which\n\t\t\t// would fail.\n\t\t\te.stopImmediatePropagation();\n\t\t\t$(e.target).attr('disabled', true)\n\t\t\t\t.val(s.item.label);\n\n\t\t\tvar $loading = this.$el.find('.shareWithLoading');\n\t\t\tvar $confirm = this.$el.find('.shareWithConfirm');\n\n\t\t\t$loading.removeClass('hidden');\n\t\t\t$loading.addClass('inlineblock');\n\t\t\t$confirm.addClass('hidden');\n\t\t\tthis._pendingOperationsCount++;\n\n\t\t\tthis.model.addShare(s.item.value, {success: function() {\n\t\t\t\t// Adding a share changes the suggestions.\n\t\t\t\tself._lastSuggestions = undefined;\n\n\t\t\t\t$(e.target).val('')\n\t\t\t\t\t.attr('disabled', false);\n\n\t\t\t\tself._pendingOperationsCount--;\n\t\t\t\tif (self._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\t\t\t}, error: function(obj, msg) {\n\t\t\t\tOC.Notification.showTemporary(msg);\n\t\t\t\t$(e.target).attr('disabled', false)\n\t\t\t\t\t.autocomplete('search', $(e.target).val());\n\n\t\t\t\tself._pendingOperationsCount--;\n\t\t\t\tif (self._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\t\t\t}});\n\t\t},\n\n\t\t_confirmShare: function() {\n\t\t\tvar self = this;\n\t\t\tvar $shareWithField = $('.shareWithField');\n\t\t\tvar $loading = this.$el.find('.shareWithLoading');\n\t\t\tvar $confirm = this.$el.find('.shareWithConfirm');\n\n\t\t\t$loading.removeClass('hidden');\n\t\t\t$loading.addClass('inlineblock');\n\t\t\t$confirm.addClass('hidden');\n\t\t\tthis._pendingOperationsCount++;\n\n\t\t\t$shareWithField.prop('disabled', true);\n\n\t\t\t// Disabling the autocompletion does not clear its search timeout;\n\t\t\t// removing the focus from the input field does, but only if the\n\t\t\t// autocompletion is not disabled when the field loses the focus.\n\t\t\t// Thus, the field has to be disabled before disabling the\n\t\t\t// autocompletion to prevent an old pending search result from\n\t\t\t// appearing once the field is enabled again.\n\t\t\t$shareWithField.autocomplete('close');\n\t\t\t$shareWithField.autocomplete('disable');\n\n\t\t\tvar restoreUI = function() {\n\t\t\t\tself._pendingOperationsCount--;\n\t\t\t\tif (self._pendingOperationsCount === 0) {\n\t\t\t\t\t$loading.addClass('hidden');\n\t\t\t\t\t$loading.removeClass('inlineblock');\n\t\t\t\t\t$confirm.removeClass('hidden');\n\t\t\t\t}\n\n\t\t\t\t$shareWithField.prop('disabled', false);\n\t\t\t\t$shareWithField.focus();\n\t\t\t};\n\n\t\t\tvar perPage = parseInt(oc_config['sharing.maxAutocompleteResults'], 10) || 200;\n\t\t\tvar onlyExactMatches = true;\n\t\t\tthis._getSuggestions(\n\t\t\t\t$shareWithField.val(),\n\t\t\t\tperPage,\n\t\t\t\tthis.model,\n\t\t\t\tonlyExactMatches\n\t\t\t).done(function(suggestions, exactMatches) {\n\t\t\t\tif (suggestions.length === 0) {\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t\t// There is no need to show an error message here; it will\n\t\t\t\t\t// be automatically shown when the autocomplete is activated\n\t\t\t\t\t// again (due to the focus on the field) and it finds no\n\t\t\t\t\t// matches.\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (exactMatches.length !== 1) {\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actionSuccess = function() {\n\t\t\t\t\t// Adding a share changes the suggestions.\n\t\t\t\t\tself._lastSuggestions = undefined;\n\n\t\t\t\t\t$shareWithField.val('');\n\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\t\t\t\t};\n\n\t\t\t\tvar actionError = function(obj, msg) {\n\t\t\t\t\trestoreUI();\n\n\t\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t\tOC.Notification.showTemporary(msg);\n\t\t\t\t};\n\n\t\t\t\tself.model.addShare(exactMatches[0].value, {\n\t\t\t\t\tsuccess: actionSuccess,\n\t\t\t\t\terror: actionError\n\t\t\t\t});\n\t\t\t}).fail(function(message) {\n\t\t\t\trestoreUI();\n\n\t\t\t\t$shareWithField.autocomplete('enable');\n\n\t\t\t\t// There is no need to show an error message here; it will be\n\t\t\t\t// automatically shown when the autocomplete is activated again\n\t\t\t\t// (due to the focus on the field) and getting the suggestions\n\t\t\t\t// fail.\n\t\t\t});\n\t\t},\n\n\t\t_toggleLoading: function(state) {\n\t\t\tthis._loading = state;\n\t\t\tthis.$el.find('.subView').toggleClass('hidden', state);\n\t\t\tthis.$el.find('.loading').toggleClass('hidden', !state);\n\t\t},\n\n\t\t_onRequest: function() {\n\t\t\t// only show the loading spinner for the first request (for now)\n\t\t\tif (!this._loadingOnce) {\n\t\t\t\tthis._toggleLoading(true);\n\t\t\t}\n\t\t},\n\n\t\t_onEndRequest: function() {\n\t\t\tvar self = this;\n\t\t\tthis._toggleLoading(false);\n\t\t\tif (!this._loadingOnce) {\n\t\t\t\tthis._loadingOnce = true;\n\t\t\t\t// the first time, focus on the share field after the spinner disappeared\n\t\t\t\tif (!OC.Util.isIE()) {\n\t\t\t\t\t_.defer(function () {\n\t\t\t\t\t\tself.$('.shareWithField').focus();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trender: function() {\n\t\t\tvar self = this;\n\t\t\tvar baseTemplate = OC.Share.Templates['sharedialogview'];\n\n\t\t\tthis.$el.html(baseTemplate({\n\t\t\t\tcid: this.cid,\n\t\t\t\tshareLabel: t('core', 'Share'),\n\t\t\t\tsharePlaceholder: this._renderSharePlaceholderPart(),\n\t\t\t\tisSharingAllowed: this.model.sharePermissionPossible()\n\t\t\t}));\n\n\t\t\tvar $shareField = this.$el.find('.shareWithField');\n\t\t\tif ($shareField.length) {\n\t\t\t\tvar shareFieldKeydownHandler = function(event) {\n\t\t\t\t\tif (event.keyCode !== 13) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tself._confirmShare();\n\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\n\t\t\t\t$shareField.autocomplete({\n\t\t\t\t\tminLength: 0,\n\t\t\t\t\tdelay: 750,\n\t\t\t\t\tfocus: function(event) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t},\n\t\t\t\t\tsource: this.autocompleteHandler,\n\t\t\t\t\tselect: this._onSelectRecipient,\n\t\t\t\t\topen: function() {\n\t\t\t\t\t\tvar autocomplete = $(this).autocomplete('widget');\n\t\t\t\t\t\tvar numberOfItems = autocomplete.find('li').size();\n\t\t\t\t\t\tautocomplete.removeClass('item-count-1');\n\t\t\t\t\t\tautocomplete.removeClass('item-count-2');\n\t\t\t\t\t\tif (numberOfItems <= 2) {\n\t\t\t\t\t\t\tautocomplete.addClass('item-count-' + numberOfItems);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}).data('ui-autocomplete')._renderItem = this.autocompleteRenderItem;\n\n\t\t\t\t$shareField.on('keydown', null, shareFieldKeydownHandler);\n\t\t\t}\n\n\t\t\tthis.resharerInfoView.$el = this.$el.find('.resharerInfoView');\n\t\t\tthis.resharerInfoView.render();\n\n\t\t\tthis.linkShareView.$el = this.$el.find('.linkShareView');\n\t\t\tthis.linkShareView.render();\n\n\t\t\tthis.shareeListView.$el = this.$el.find('.shareeListView');\n\t\t\tthis.shareeListView.render();\n\n\t\t\tthis.$el.find('.hasTooltip').tooltip();\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * sets whether share by link should be displayed or not. Default is\n\t\t * true.\n\t\t *\n\t\t * @param {bool} showLink\n\t\t */\n\t\tsetShowLink: function(showLink) {\n\t\t\tthis._showLink = (typeof showLink === 'boolean') ? showLink : true;\n\t\t\tthis.linkShareView.showLink = this._showLink;\n\t\t},\n\n\t\t_renderSharePlaceholderPart: function () {\n\t\t\tvar allowRemoteSharing = this.configModel.get('isRemoteShareAllowed');\n\t\t\tvar allowMailSharing = this.configModel.get('isMailShareAllowed');\n\n\t\t\tif (!allowRemoteSharing && allowMailSharing) {\n\t\t\t\treturn t('core', 'Name or email address...');\n\t\t\t}\n\t\t\tif (allowRemoteSharing && !allowMailSharing) {\n\t\t\t\treturn t('core', 'Name or federated cloud ID...');\n\t\t\t}\n\t\t\tif (allowRemoteSharing && allowMailSharing) {\n\t\t\t\treturn t('core', 'Name, federated cloud ID or email address...');\n\t\t\t}\n\n\t\t\treturn \tt('core', 'Name...');\n\t\t},\n\n\t});\n\n\tOC.Share.ShareDialogView = ShareDialogView;\n\n})();\n","/* global escapeHTML */\n\n/**\n * @namespace\n */\nOC.Share = _.extend(OC.Share || {}, {\n\tSHARE_TYPE_USER:0,\n\tSHARE_TYPE_GROUP:1,\n\tSHARE_TYPE_LINK:3,\n\tSHARE_TYPE_EMAIL:4,\n\tSHARE_TYPE_REMOTE:6,\n\tSHARE_TYPE_CIRCLE:7,\n\tSHARE_TYPE_GUEST:8,\n\tSHARE_TYPE_REMOTE_GROUP:9,\n\tSHARE_TYPE_ROOM:10,\n\n\t/**\n\t * Regular expression for splitting parts of remote share owners:\n\t * \"user@example.com/path/to/owncloud\"\n\t * \"user@anotherexample.com@example.com/path/to/owncloud\n\t */\n\t_REMOTE_OWNER_REGEXP: new RegExp(\"^([^@]*)@(([^@]*)@)?([^/]*)([/](.*)?)?$\"),\n\n\t/**\n\t * @deprecated use OC.Share.currentShares instead\n\t */\n\titemShares:[],\n\t/**\n\t * Full list of all share statuses\n\t */\n\tstatuses:{},\n\t/**\n\t * Shares for the currently selected file.\n\t * (for which the dropdown is open)\n\t *\n\t * Key is item type and value is an array or\n\t * shares of the given item type.\n\t */\n\tcurrentShares: {},\n\t/**\n\t * Whether the share dropdown is opened.\n\t */\n\tdroppedDown:false,\n\t/**\n\t * Loads ALL share statuses from server, stores them in\n\t * OC.Share.statuses then calls OC.Share.updateIcons() to update the\n\t * files \"Share\" icon to \"Shared\" according to their share status and\n\t * share type.\n\t *\n\t * If a callback is specified, the update step is skipped.\n\t *\n\t * @param itemType item type\n\t * @param fileList file list instance, defaults to OCA.Files.App.fileList\n\t * @param callback function to call after the shares were loaded\n\t */\n\tloadIcons:function(itemType, fileList, callback) {\n\t\tvar path = fileList.dirInfo.path;\n\t\tif (path === '/') {\n\t\t\tpath = '';\n\t\t}\n\t\tpath += '/' + fileList.dirInfo.name;\n\n\t\t// Load all share icons\n\t\t$.get(\n\t\t\tOC.linkToOCS('apps/files_sharing/api/v1', 2) + 'shares',\n\t\t\t{\n\t\t\t\tsubfiles: 'true',\n\t\t\t\tpath: path,\n\t\t\t\tformat: 'json'\n\t\t\t}, function(result) {\n\t\t\t\tif (result && result.ocs.meta.statuscode === 200) {\n\t\t\t\t\tOC.Share.statuses = {};\n\t\t\t\t\t$.each(result.ocs.data, function(it, share) {\n\t\t\t\t\t\tif (!(share.item_source in OC.Share.statuses)) {\n\t\t\t\t\t\t\tOC.Share.statuses[share.item_source] = {link: false};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\t\tOC.Share.statuses[share.item_source] = {link: true};\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (_.isFunction(callback)) {\n\t\t\t\t\t\tcallback(OC.Share.statuses);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tOC.Share.updateIcons(itemType, fileList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\t/**\n\t * Updates the files' \"Share\" icons according to the known\n\t * sharing states stored in OC.Share.statuses.\n\t * (not reloaded from server)\n\t *\n\t * @param itemType item type\n\t * @param fileList file list instance\n\t * defaults to OCA.Files.App.fileList\n\t */\n\tupdateIcons:function(itemType, fileList){\n\t\tvar item;\n\t\tvar $fileList;\n\t\tvar currentDir;\n\t\tif (!fileList && OCA.Files) {\n\t\t\tfileList = OCA.Files.App.fileList;\n\t\t}\n\t\t// fileList is usually only defined in the files app\n\t\tif (fileList) {\n\t\t\t$fileList = fileList.$fileList;\n\t\t\tcurrentDir = fileList.getCurrentDirectory();\n\t\t}\n\t\t// TODO: iterating over the files might be more efficient\n\t\tfor (item in OC.Share.statuses){\n\t\t\tvar iconClass = 'icon-shared';\n\t\t\tvar data = OC.Share.statuses[item];\n\t\t\tvar hasLink = data.link;\n\t\t\t// Links override shared in terms of icon display\n\t\t\tif (hasLink) {\n\t\t\t\ticonClass = 'icon-public';\n\t\t\t}\n\t\t\tif (itemType !== 'file' && itemType !== 'folder') {\n\t\t\t\t$('a.share[data-item=\"'+item+'\"] .icon').removeClass('icon-shared icon-public').addClass(iconClass);\n\t\t\t} else {\n\t\t\t\t// TODO: ultimately this part should be moved to files_sharing app\n\t\t\t\tvar file = $fileList.find('tr[data-id=\"'+item+'\"]');\n\t\t\t\tvar shareFolder = OC.imagePath('core', 'filetypes/folder-shared');\n\t\t\t\tvar img;\n\t\t\t\tif (file.length > 0) {\n\t\t\t\t\tthis.markFileAsShared(file, true, hasLink);\n\t\t\t\t} else {\n\t\t\t\t\tvar dir = currentDir;\n\t\t\t\t\tif (dir.length > 1) {\n\t\t\t\t\t\tvar last = '';\n\t\t\t\t\t\tvar path = dir;\n\t\t\t\t\t\t// Search for possible parent folders that are shared\n\t\t\t\t\t\twhile (path != last) {\n\t\t\t\t\t\t\tif (path === data.path && !data.link) {\n\t\t\t\t\t\t\t\tvar actions = $fileList.find('.fileactions .action[data-action=\"Share\"]');\n\t\t\t\t\t\t\t\tvar files = $fileList.find('.filename');\n\t\t\t\t\t\t\t\tvar i;\n\t\t\t\t\t\t\t\tfor (i = 0; i < actions.length; i++) {\n\t\t\t\t\t\t\t\t\t// TODO: use this.markFileAsShared()\n\t\t\t\t\t\t\t\t\timg = $(actions[i]).find('img');\n\t\t\t\t\t\t\t\t\tif (img.attr('src') !== OC.imagePath('core', 'actions/public')) {\n\t\t\t\t\t\t\t\t\t\timg.attr('src', image);\n\t\t\t\t\t\t\t\t\t\t$(actions[i]).addClass('permanent');\n\t\t\t\t\t\t\t\t\t\t$(actions[i]).html('<span> '+t('core', 'Shared')+'</span>').prepend(img);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor(i = 0; i < files.length; i++) {\n\t\t\t\t\t\t\t\t\tif ($(files[i]).closest('tr').data('type') === 'dir') {\n\t\t\t\t\t\t\t\t\t\t$(files[i]).find('.thumbnail').css('background-image', 'url('+shareFolder+')');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlast = path;\n\t\t\t\t\t\t\tpath = OC.Share.dirname(path);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tupdateIcon:function(itemType, itemSource) {\n\t\tvar shares = false;\n\t\tvar link = false;\n\t\tvar iconClass = '';\n\t\t$.each(OC.Share.itemShares, function(index) {\n\t\t\tif (OC.Share.itemShares[index]) {\n\t\t\t\tif (index == OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\tif (OC.Share.itemShares[index] == true) {\n\t\t\t\t\t\tshares = true;\n\t\t\t\t\t\ticonClass = 'icon-public';\n\t\t\t\t\t\tlink = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else if (OC.Share.itemShares[index].length > 0) {\n\t\t\t\t\tshares = true;\n\t\t\t\t\ticonClass = 'icon-shared';\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif (itemType != 'file' && itemType != 'folder') {\n\t\t\t$('a.share[data-item=\"'+itemSource+'\"] .icon').removeClass('icon-shared icon-public').addClass(iconClass);\n\t\t} else {\n\t\t\tvar $tr = $('tr').filterAttr('data-id', String(itemSource));\n\t\t\tif ($tr.length > 0) {\n\t\t\t\t// it might happen that multiple lists exist in the DOM\n\t\t\t\t// with the same id\n\t\t\t\t$tr.each(function() {\n\t\t\t\t\tOC.Share.markFileAsShared($(this), shares, link);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (shares) {\n\t\t\tOC.Share.statuses[itemSource] = OC.Share.statuses[itemSource] || {};\n\t\t\tOC.Share.statuses[itemSource].link = link;\n\t\t} else {\n\t\t\tdelete OC.Share.statuses[itemSource];\n\t\t}\n\t},\n\t/**\n\t * Format a remote address\n\t *\n\t * @param {String} shareWith userid, full remote share, or whatever\n\t * @param {String} shareWithDisplayName\n\t * @param {String} message\n\t * @return {String} HTML code to display\n\t */\n\t_formatRemoteShare: function(shareWith, shareWithDisplayName, message) {\n\t\tvar parts = this._REMOTE_OWNER_REGEXP.exec(shareWith);\n\t\tif (!parts) {\n\t\t\t// display avatar of the user\n\t\t\tvar avatar = '<span class=\"avatar\" data-username=\"' + escapeHTML(shareWith) + '\" title=\"' + message + \" \" + escapeHTML(shareWithDisplayName) + '\"></span>';\n\t\t\tvar hidden = '<span class=\"hidden-visually\">' + message + ' ' + escapeHTML(shareWithDisplayName) + '</span> ';\n\t\t\treturn avatar + hidden;\n\t\t}\n\n\t\tvar userName = parts[1];\n\t\tvar userDomain = parts[3];\n\t\tvar server = parts[4];\n\t\tvar tooltip = message + ' ' + userName;\n\t\tif (userDomain) {\n\t\t\ttooltip += '@' + userDomain;\n\t\t}\n\t\tif (server) {\n\t\t\tif (!userDomain) {\n\t\t\t\tuserDomain = '…';\n\t\t\t}\n\t\t\ttooltip += '@' + server;\n\t\t}\n\n\t\tvar html = '<span class=\"remoteAddress\" title=\"' + escapeHTML(tooltip) + '\">';\n\t\thtml += '<span class=\"username\">' + escapeHTML(userName) + '</span>';\n\t\tif (userDomain) {\n\t\t\thtml += '<span class=\"userDomain\">@' + escapeHTML(userDomain) + '</span>';\n\t\t}\n\t\thtml += '</span> ';\n\t\treturn html;\n\t},\n\t/**\n\t * Loop over all recipients in the list and format them using\n\t * all kind of fancy magic.\n\t *\n\t * @param {Object} recipients array of all the recipients\n\t * @return {String[]} modified list of recipients\n\t */\n\t_formatShareList: function(recipients) {\n\t\tvar _parent = this;\n\t\trecipients = _.toArray(recipients);\n\t\trecipients.sort(function(a, b) {\n\t\t\treturn a.shareWithDisplayName.localeCompare(b.shareWithDisplayName);\n\t\t});\n\t\treturn $.map(recipients, function(recipient) {\n\t\t\treturn _parent._formatRemoteShare(recipient.shareWith, recipient.shareWithDisplayName, t('core', 'Shared with'));\n\t\t});\n\t},\n\t/**\n\t * Marks/unmarks a given file as shared by changing its action icon\n\t * and folder icon.\n\t *\n\t * @param $tr file element to mark as shared\n\t * @param hasShares whether shares are available\n\t * @param hasLink whether link share is available\n\t */\n\tmarkFileAsShared: function($tr, hasShares, hasLink) {\n\t\tvar action = $tr.find('.fileactions .action[data-action=\"Share\"]');\n\t\tvar type = $tr.data('type');\n\t\tvar icon = action.find('.icon');\n\t\tvar message, recipients, avatars;\n\t\tvar ownerId = $tr.attr('data-share-owner-id');\n\t\tvar owner = $tr.attr('data-share-owner');\n\t\tvar shareFolderIcon;\n\t\tvar iconClass = 'icon-shared';\n\t\taction.removeClass('shared-style');\n\t\t// update folder icon\n\t\tif (type === 'dir' && (hasShares || hasLink || ownerId)) {\n\t\t\tif (hasLink) {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-public');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-shared');\n\t\t\t}\n\t\t\t$tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n\t\t\t$tr.attr('data-icon', shareFolderIcon);\n\t\t} else if (type === 'dir') {\n\t\t\tvar isEncrypted = $tr.attr('data-e2eencrypted');\n\t\t\tvar mountType = $tr.attr('data-mounttype');\n\t\t\t// FIXME: duplicate of FileList._createRow logic for external folder,\n\t\t\t// need to refactor the icon logic into a single code path eventually\n\t\t\tif (isEncrypted === 'true') {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-encrypted');\n\t\t\t\t$tr.attr('data-icon', shareFolderIcon);\n\t\t\t} else if (mountType && mountType.indexOf('external') === 0) {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir-external');\n\t\t\t\t$tr.attr('data-icon', shareFolderIcon);\n\t\t\t} else {\n\t\t\t\tshareFolderIcon = OC.MimeType.getIconUrl('dir');\n\t\t\t\t// back to default\n\t\t\t\t$tr.removeAttr('data-icon');\n\t\t\t}\n\t\t\t$tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n\t\t}\n\t\t// update share action text / icon\n\t\tif (hasShares || ownerId) {\n\t\t\trecipients = $tr.data('share-recipient-data');\n\t\t\taction.addClass('shared-style');\n\n\t\t\tavatars = '<span>' + t('core', 'Shared') + '</span>';\n\t\t\t// even if reshared, only show \"Shared by\"\n\t\t\tif (ownerId) {\n\t\t\t\tmessage = t('core', 'Shared by');\n\t\t\t\tavatars = this._formatRemoteShare(ownerId, owner, message);\n\t\t\t} else if (recipients) {\n\t\t\t\tavatars = this._formatShareList(recipients);\n\t\t\t}\n\t\t\taction.html(avatars).prepend(icon);\n\n\t\t\tif (ownerId || recipients) {\n\t\t\t\tvar avatarElement = action.find('.avatar');\n\t\t\t\tavatarElement.each(function () {\n\t\t\t\t\t$(this).avatar($(this).data('username'), 32);\n\t\t\t\t});\n\t\t\t\taction.find('span[title]').tooltip({placement: 'top'});\n\t\t\t}\n\t\t} else {\n\t\t\taction.html('<span class=\"hidden-visually\">' + t('core', 'Shared') + '</span>').prepend(icon);\n\t\t}\n\t\tif (hasLink) {\n\t\t\ticonClass = 'icon-public';\n\t\t}\n\t\ticon.removeClass('icon-shared icon-public').addClass(iconClass);\n\t},\n\tshowDropDown:function(itemType, itemSource, appendTo, link, possiblePermissions, filename) {\n\t\tvar configModel = new OC.Share.ShareConfigModel();\n\t\tvar attributes = {itemType: itemType, itemSource: itemSource, possiblePermissions: possiblePermissions};\n\t\tvar itemModel = new OC.Share.ShareItemModel(attributes, {configModel: configModel});\n\t\tvar dialogView = new OC.Share.ShareDialogView({\n\t\t\tid: 'dropdown',\n\t\t\tmodel: itemModel,\n\t\t\tconfigModel: configModel,\n\t\t\tclassName: 'drop shareDropDown',\n\t\t\tattributes: {\n\t\t\t\t'data-item-source-name': filename,\n\t\t\t\t'data-item-type': itemType,\n\t\t\t\t'data-item-source': itemSource\n\t\t\t}\n\t\t});\n\t\tdialogView.setShowLink(link);\n\t\tvar $dialog = dialogView.render().$el;\n\t\t$dialog.appendTo(appendTo);\n\t\t$dialog.slideDown(OC.menuSpeed, function() {\n\t\t\tOC.Share.droppedDown = true;\n\t\t});\n\t\titemModel.fetch();\n\t},\n\thideDropDown:function(callback) {\n\t\tOC.Share.currentShares = null;\n\t\t$('#dropdown').slideUp(OC.menuSpeed, function() {\n\t\t\tOC.Share.droppedDown = false;\n\t\t\t$('#dropdown').remove();\n\t\t\tif (typeof FileActions !== 'undefined') {\n\t\t\t\t$('tr').removeClass('mouseOver');\n\t\t\t}\n\t\t\tif (callback) {\n\t\t\t\tcallback.call();\n\t\t\t}\n\t\t});\n\t},\n\tdirname:function(path) {\n\t\treturn path.replace(/\\\\/g,'/').replace(/\\/[^\\/]*$/, '');\n\t}\n});\n\n$(document).ready(function() {\n\tif(typeof monthNames != 'undefined'){\n\t\t// min date should always be the next day\n\t\tvar minDate = new Date();\n\t\tminDate.setDate(minDate.getDate()+1);\n\t\t$.datepicker.setDefaults({\n\t\t\tmonthNames: monthNames,\n\t\t\tmonthNamesShort: monthNamesShort,\n\t\t\tdayNames: dayNames,\n\t\t\tdayNamesMin: dayNamesMin,\n\t\t\tdayNamesShort: dayNamesShort,\n\t\t\tfirstDay: firstDay,\n\t\t\tminDate : minDate\n\t\t});\n\t}\n\n\t$(this).click(function(event) {\n\t\tvar target = $(event.target);\n\t\tvar isMatched = !target.is('.drop, .ui-datepicker-next, .ui-datepicker-prev, .ui-icon')\n\t\t\t&& !target.closest('#ui-datepicker-div').length && !target.closest('.ui-autocomplete').length;\n\t\tif (OC.Share && OC.Share.droppedDown && isMatched && $('#dropdown').has(event.target).length === 0) {\n\t\t\tOC.Share.hideDropDown();\n\t\t}\n\t});\n\n\n\n});\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js
index ffb75f9d152..b80db5d680a 100644
--- a/core/js/sharedialogview.js
+++ b/core/js/sharedialogview.js
@@ -50,6 +50,9 @@
/** @type {object} **/
_lastSuggestions: undefined,
+ /** @type {object} **/
+ _lastRecommendations: undefined,
+
/** @type {int} **/
_pendingOperationsCount: 0,
@@ -382,7 +385,299 @@
return this._lastSuggestions.promise;
},
+ _getRecommendations: function(model) {
+ if (this._lastRecommendations &&
+ this._lastRecommendations.model === model) {
+ return this._lastRecommendations.promise;
+ }
+
+ var deferred = $.Deferred();
+
+ $.get(
+ OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees_recommended',
+ {
+ format: 'json',
+ itemType: model.get('itemType')
+ },
+ function (result) {
+ if (result.ocs.meta.statuscode === 100) {
+ var filter = function(users, groups, remotes, remote_groups, emails, circles, rooms) {
+ if (typeof(emails) === 'undefined') {
+ emails = [];
+ }
+ if (typeof(circles) === 'undefined') {
+ circles = [];
+ }
+ if (typeof(rooms) === 'undefined') {
+ rooms = [];
+ }
+
+ var usersLength;
+ var groupsLength;
+ var remotesLength;
+ var remoteGroupsLength;
+ var emailsLength;
+ var circlesLength;
+ var roomsLength;
+
+ var i, j;
+
+ //Filter out the current user
+ usersLength = users.length;
+ for (i = 0; i < usersLength; i++) {
+ if (users[i].value.shareWith === OC.currentUser) {
+ users.splice(i, 1);
+ break;
+ }
+ }
+
+ // Filter out the owner of the share
+ if (model.hasReshare()) {
+ usersLength = users.length;
+ for (i = 0 ; i < usersLength; i++) {
+ if (users[i].value.shareWith === model.getReshareOwner()) {
+ users.splice(i, 1);
+ break;
+ }
+ }
+ }
+
+ var shares = model.get('shares');
+ var sharesLength = shares.length;
+
+ // Now filter out all sharees that are already shared with
+ for (i = 0; i < sharesLength; i++) {
+ var share = shares[i];
+
+ if (share.share_type === OC.Share.SHARE_TYPE_USER) {
+ usersLength = users.length;
+ for (j = 0; j < usersLength; j++) {
+ if (users[j].value.shareWith === share.share_with) {
+ users.splice(j, 1);
+ break;
+ }
+ }
+ } else if (share.share_type === OC.Share.SHARE_TYPE_GROUP) {
+ groupsLength = groups.length;
+ for (j = 0; j < groupsLength; j++) {
+ if (groups[j].value.shareWith === share.share_with) {
+ groups.splice(j, 1);
+ break;
+ }
+ }
+ } else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {
+ remotesLength = remotes.length;
+ for (j = 0; j < remotesLength; j++) {
+ if (remotes[j].value.shareWith === share.share_with) {
+ remotes.splice(j, 1);
+ break;
+ }
+ }
+ } else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE_GROUP) {
+ remoteGroupsLength = remote_groups.length;
+ for (j = 0; j < remoteGroupsLength; j++) {
+ if (remote_groups[j].value.shareWith === share.share_with) {
+ remote_groups.splice(j, 1);
+ break;
+ }
+ }
+ } else if (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {
+ emailsLength = emails.length;
+ for (j = 0; j < emailsLength; j++) {
+ if (emails[j].value.shareWith === share.share_with) {
+ emails.splice(j, 1);
+ break;
+ }
+ }
+ } else if (share.share_type === OC.Share.SHARE_TYPE_CIRCLE) {
+ circlesLength = circles.length;
+ for (j = 0; j < circlesLength; j++) {
+ if (circles[j].value.shareWith === share.share_with) {
+ circles.splice(j, 1);
+ break;
+ }
+ }
+ } else if (share.share_type === OC.Share.SHARE_TYPE_ROOM) {
+ roomsLength = rooms.length;
+ for (j = 0; j < roomsLength; j++) {
+ if (rooms[j].value.shareWith === share.share_with) {
+ rooms.splice(j, 1);
+ break;
+ }
+ }
+ }
+ }
+ };
+
+ filter(
+ result.ocs.data.exact.users,
+ result.ocs.data.exact.groups,
+ result.ocs.data.exact.remotes,
+ result.ocs.data.exact.remote_groups,
+ result.ocs.data.exact.emails,
+ result.ocs.data.exact.circles,
+ result.ocs.data.exact.rooms
+ );
+
+ var exactUsers = result.ocs.data.exact.users;
+ var exactGroups = result.ocs.data.exact.groups;
+ var exactRemotes = result.ocs.data.exact.remotes || [];
+ var exactRemoteGroups = result.ocs.data.exact.remote_groups || [];
+ var exactEmails = [];
+ if (typeof(result.ocs.data.emails) !== 'undefined') {
+ exactEmails = result.ocs.data.exact.emails;
+ }
+ var exactCircles = [];
+ if (typeof(result.ocs.data.circles) !== 'undefined') {
+ exactCircles = result.ocs.data.exact.circles;
+ }
+ var exactRooms = [];
+ if (typeof(result.ocs.data.rooms) !== 'undefined') {
+ exactRooms = result.ocs.data.exact.rooms;
+ }
+
+ var exactMatches = exactUsers.concat(exactGroups).concat(exactRemotes).concat(exactRemoteGroups).concat(exactEmails).concat(exactCircles).concat(exactRooms);
+
+ filter(
+ result.ocs.data.users,
+ result.ocs.data.groups,
+ result.ocs.data.remotes,
+ result.ocs.data.remote_groups,
+ result.ocs.data.emails,
+ result.ocs.data.circles,
+ result.ocs.data.rooms
+ );
+
+ var users = result.ocs.data.users;
+ var groups = result.ocs.data.groups;
+ var remotes = result.ocs.data.remotes || [];
+ var remoteGroups = result.ocs.data.remote_groups || [];
+ var lookup = result.ocs.data.lookup || [];
+ var emails = [];
+ if (typeof(result.ocs.data.emails) !== 'undefined') {
+ emails = result.ocs.data.emails;
+ }
+ var circles = [];
+ if (typeof(result.ocs.data.circles) !== 'undefined') {
+ circles = result.ocs.data.circles;
+ }
+ var rooms = [];
+ if (typeof(result.ocs.data.rooms) !== 'undefined') {
+ rooms = result.ocs.data.rooms;
+ }
+
+ var suggestions = exactMatches.concat(users).concat(groups).concat(remotes).concat(remoteGroups).concat(emails).concat(circles).concat(rooms).concat(lookup);
+
+ function dynamicSort(property) {
+ return function (a,b) {
+ var aProperty = '';
+ var bProperty = '';
+ if (typeof a[property] !== 'undefined') {
+ aProperty = a[property];
+ }
+ if (typeof b[property] !== 'undefined') {
+ bProperty = b[property];
+ }
+ return (aProperty < bProperty) ? -1 : (aProperty > bProperty) ? 1 : 0;
+ }
+ }
+
+ /**
+ * Sort share entries by uuid to properly group them
+ */
+ var grouped = suggestions.sort(dynamicSort('uuid'));
+
+ var previousUuid = null;
+ var groupedLength = grouped.length;
+ var result = [];
+ /**
+ * build the result array that only contains all contact entries from
+ * merged contacts, if the search term matches its contact name
+ */
+ for (var i = 0; i < groupedLength; i++) {
+ if (typeof grouped[i].uuid !== 'undefined' && grouped[i].uuid === previousUuid) {
+ grouped[i].merged = true;
+ }
+ if (typeof grouped[i].merged === 'undefined') {
+ result.push(grouped[i]);
+ }
+ previousUuid = grouped[i].uuid;
+ }
+ var moreResultsAvailable =
+ (
+ oc_config['sharing.maxAutocompleteResults'] > 0
+ && Math.min(perPage, oc_config['sharing.maxAutocompleteResults'])
+ <= Math.max(
+ users.length + exactUsers.length,
+ groups.length + exactGroups.length,
+ remoteGroups.length + exactRemoteGroups.length,
+ remotes.length + exactRemotes.length,
+ emails.length + exactEmails.length,
+ circles.length + exactCircles.length,
+ rooms.length + exactRooms.length,
+ lookup.length
+ )
+ );
+
+ deferred.resolve(result, exactMatches, moreResultsAvailable);
+ } else {
+ deferred.reject(result.ocs.meta.message);
+ }
+ }
+ ).fail(function() {
+ deferred.reject();
+ });
+
+ this._lastRecommendations = {
+ model: model,
+ promise: deferred.promise()
+ };
+
+ return this._lastRecommendations.promise;
+ },
+
+ recommendationHandler: function (response) {
+ var view = this;
+ var $shareWithField = $('.shareWithField');
+ this._getRecommendations(
+ view.model
+ ).done(function(suggestions, exactMatches) {
+ view._pendingOperationsCount--;
+ if (view._pendingOperationsCount === 0) {
+ $loading.addClass('hidden');
+ $loading.removeClass('inlineblock');
+ $confirm.removeClass('hidden');
+ }
+
+ if (suggestions.length > 0) {
+ $shareWithField
+ .autocomplete("option", "autoFocus", true);
+
+ response(suggestions);
+ } else {
+ console.info('no sharing recommendations found');
+ response();
+ }
+ }).fail(function(message) {
+ view._pendingOperationsCount--;
+ if (view._pendingOperationsCount === 0) {
+ $loading.addClass('hidden');
+ $loading.removeClass('inlineblock');
+ $confirm.removeClass('hidden');
+ }
+
+ console.error('could not load recommendations', message)
+ });
+ },
+
autocompleteHandler: function (search, response) {
+ // If nothing is entered we show recommendations instead of search
+ // results
+ if (search.term.length === 0) {
+ this.recommendationHandler(response);
+ return;
+ }
+
var $shareWithField = $('.shareWithField'),
view = this,
$loading = this.$el.find('.shareWithLoading'),
@@ -766,7 +1061,7 @@
};
$shareField.autocomplete({
- minLength: 1,
+ minLength: 0,
delay: 750,
focus: function(event) {
event.preventDefault();
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index 71717d56719..729a3518ccd 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Odolné heslo",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven, pro umožnění synchronizace souborů, rozhraní WebDAV pravděpodobně není funkční.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Váš webový server není správně nastaven pro rozpoznání „{url}“. Více informací lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaci</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Váš webový server není nastaven správně aby přeložil „{url}“. To nejspíš souvisí s nastavením webového serveru, které nebylo aktualizováno pro přímé doručování této složky. Porovnejte svá nastavení vůči dodávaným rewrite pravidlům v „.htaccess“ (pro Apache) nebo těm poskytnutým v dokumentaci (pro Nginx) v jeho <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">stránce v dokumentaci</a>. U Nginx je typicky třeba aktualizovat řádky začínající na „location ~“.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Váš webový server není nastaven správně tak, aby doručoval soubory .woff2. Toto je typicky problém s nastavením Nginx. Pro Nextcloud 15 je třeba ho upravit aby doručoval také soubory .woff2. Porovnejte svoje nastavení Nginx s tím doporučeným v naší <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaci</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Zdá se, že PHP není správně nastaveno pro dotazování proměnných prostředí systému. Test s příkazem getenv (\"PATH\") vrátí pouze prázdnou odpověď.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Nahlédněte do <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">instalační dokumentace ↗</a> kvůli poznámkám pro nastavování PHP a zkontrolujte nastavení PHP na svém serveru, zejména pokud používáte php-fpm.",
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index 9e05320fa69..cd91fe7bb87 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -200,6 +200,7 @@
"Strong password" : "Odolné heslo",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven, pro umožnění synchronizace souborů, rozhraní WebDAV pravděpodobně není funkční.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Váš webový server není správně nastaven pro rozpoznání „{url}“. Více informací lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaci</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Váš webový server není nastaven správně aby přeložil „{url}“. To nejspíš souvisí s nastavením webového serveru, které nebylo aktualizováno pro přímé doručování této složky. Porovnejte svá nastavení vůči dodávaným rewrite pravidlům v „.htaccess“ (pro Apache) nebo těm poskytnutým v dokumentaci (pro Nginx) v jeho <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">stránce v dokumentaci</a>. U Nginx je typicky třeba aktualizovat řádky začínající na „location ~“.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Váš webový server není nastaven správně tak, aby doručoval soubory .woff2. Toto je typicky problém s nastavením Nginx. Pro Nextcloud 15 je třeba ho upravit aby doručoval také soubory .woff2. Porovnejte svoje nastavení Nginx s tím doporučeným v naší <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaci</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Zdá se, že PHP není správně nastaveno pro dotazování proměnných prostředí systému. Test s příkazem getenv (\"PATH\") vrátí pouze prázdnou odpověď.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Nahlédněte do <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">instalační dokumentace ↗</a> kvůli poznámkám pro nastavování PHP a zkontrolujte nastavení PHP na svém serveru, zejména pokud používáte php-fpm.",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 37af9bdccb3..be90b349603 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um \"{url}\" aufzulösen. Weitere Informationen findest Du in der <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Dein Webserver ist nicht ordnungsgemäß für die Auflösung von \"{url}\" eingerichtet. Dies hängt höchstwahrscheinlich mit einer Webserverkonfiguration zusammen, die nicht aktualisiert wurde, um diesen Ordner direkt zu liefern. Bitte vergleiche Deine Konfiguration mit den mitgelieferten Rewrite-Regeln in \".htaccess\" für Apache oder den in der Nginx-Dokumentation bereitgestellten auf dessen <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentationsseite</a>. Auf Nginx sind das typischerweise die Zeilen, die mit \"location ~\" beginnen und ein Update benötigen.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um .woff2-Dateien auszuliefern. Dies ist meist ein Thema der Nginx-Konfiguration. Für Nextcloud 15 wird eine Anpassung für die Auslieferung von .woff2-Dateien benötigt. Vergleiche Deine Nginx-Konfiguration mit der empfohlenen Nginx-Konfiguration in unserer <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv(\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Installationsdokumentation ↗</a> auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Deines Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 988646002af..c8a2cc1c7f8 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -200,6 +200,7 @@
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um \"{url}\" aufzulösen. Weitere Informationen findest Du in der <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Dein Webserver ist nicht ordnungsgemäß für die Auflösung von \"{url}\" eingerichtet. Dies hängt höchstwahrscheinlich mit einer Webserverkonfiguration zusammen, die nicht aktualisiert wurde, um diesen Ordner direkt zu liefern. Bitte vergleiche Deine Konfiguration mit den mitgelieferten Rewrite-Regeln in \".htaccess\" für Apache oder den in der Nginx-Dokumentation bereitgestellten auf dessen <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentationsseite</a>. Auf Nginx sind das typischerweise die Zeilen, die mit \"location ~\" beginnen und ein Update benötigen.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um .woff2-Dateien auszuliefern. Dies ist meist ein Thema der Nginx-Konfiguration. Für Nextcloud 15 wird eine Anpassung für die Auslieferung von .woff2-Dateien benötigt. Vergleiche Deine Nginx-Konfiguration mit der empfohlenen Nginx-Konfiguration in unserer <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv(\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Installationsdokumentation ↗</a> auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Deines Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 5c7bb338342..c2a31cb965e 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert. Die WebDAV-Schnittstelle ist vermutlich defekt.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Ihr Webserver ist nicht ordnungsgemäß für die Auflösung von \"{url}\" eingerichtet. Dies hängt höchstwahrscheinlich mit einer Webserverkonfiguration zusammen, die nicht aktualisiert wurde, um diesen Ordner direkt zu liefern. Bitte vergleichen Sie Ihre Konfiguration mit den mitgelieferten Rewrite-Regeln in \".htaccess\" für Apache oder den in der Nginx-Dokumentation bereitgestellten auf dessen <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentationsseite</a>. Auf Nginx sind das typischerweise die Zeilen, die mit \"location ~\" beginnen und ein Update benötigen.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ihr Web-Server ist nicht richtig eingerichtet um .woff2-Dateien auszuliefern. Dies ist meist ein Thema der Nginx-Konfiguration. Für Nextcloud 15 wird eine Anpassung für die Auslieferung von .woff2-Dateien benötigt. Vergleichen Sie Ihre Nginx-Konfiguration mit der empfohlenen Nginx-Konfiguration in unserer <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv(\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Installationsdokumentation ↗</a> auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Ihres Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 8d66f256540..d22757f56b1 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -200,6 +200,7 @@
"Strong password" : "Starkes Passwort",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert. Die WebDAV-Schnittstelle ist vermutlich defekt.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Ihr Webserver ist nicht ordnungsgemäß für die Auflösung von \"{url}\" eingerichtet. Dies hängt höchstwahrscheinlich mit einer Webserverkonfiguration zusammen, die nicht aktualisiert wurde, um diesen Ordner direkt zu liefern. Bitte vergleichen Sie Ihre Konfiguration mit den mitgelieferten Rewrite-Regeln in \".htaccess\" für Apache oder den in der Nginx-Dokumentation bereitgestellten auf dessen <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentationsseite</a>. Auf Nginx sind das typischerweise die Zeilen, die mit \"location ~\" beginnen und ein Update benötigen.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ihr Web-Server ist nicht richtig eingerichtet um .woff2-Dateien auszuliefern. Dies ist meist ein Thema der Nginx-Konfiguration. Für Nextcloud 15 wird eine Anpassung für die Auslieferung von .woff2-Dateien benötigt. Vergleichen Sie Ihre Nginx-Konfiguration mit der empfohlenen Nginx-Konfiguration in unserer <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Dokumentation</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv(\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Installationsdokumentation ↗</a> auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Ihres Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
diff --git a/core/l10n/eo.js b/core/l10n/eo.js
index 73f2ad8382a..0f10d17e559 100644
--- a/core/l10n/eo.js
+++ b/core/l10n/eo.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Forta pasvorto",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Via retservilo ankoraŭ ne estas agordita por permesi sinkronigon de dosieroj, ĉar la WebDAV-interfaco ŝajne difektiĝas.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Via retservilo ne estas agordita por trovi la adreson „{url}“. Pli da informo troveblas en la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaro</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Via retservilo ne estas agordita por trovi la adreson „{url}“. Tio plej verŝajne estas kaŭzita de servilo ne ĝisdatigita por rekte liveri tiun ĉi dosierujon. Bv. kompari vian agordon al transformreguloj en „.htaccess“ por Apache, aŭ la reguloj por Nginx en la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaro</a>. Ĉe Nginx, tio, kio devas ĝisdatiĝi estas kutime linioj komencantaj per „location ~“.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Via retservilo ne estas agordita por sendi .woff2-dosierojn. Tio estas tipe problemo kun la agordo de Nginx. Nextcloud 15 bezonas adapton por ankaŭ sendi .woff2-dosierojn. Komparu vian Nginx-agordon kun la rekomendita agordo en nia <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaro</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ŝajnas ne esti taŭge agordita por informpeti sistemajn medivariablojn. La testado kun getenv(\"PATH\") revenigas nur malplenan respondon.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Bv. legi la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">instal-dokumentaron ↗</a> pri agordo-notoj pri PHP kaj pri PHP-agordo de via retservilo, precipe kiam vi uzas la modulon „php-fpm“.",
diff --git a/core/l10n/eo.json b/core/l10n/eo.json
index 70a19232e9c..57cbd8ea907 100644
--- a/core/l10n/eo.json
+++ b/core/l10n/eo.json
@@ -200,6 +200,7 @@
"Strong password" : "Forta pasvorto",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Via retservilo ankoraŭ ne estas agordita por permesi sinkronigon de dosieroj, ĉar la WebDAV-interfaco ŝajne difektiĝas.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Via retservilo ne estas agordita por trovi la adreson „{url}“. Pli da informo troveblas en la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaro</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Via retservilo ne estas agordita por trovi la adreson „{url}“. Tio plej verŝajne estas kaŭzita de servilo ne ĝisdatigita por rekte liveri tiun ĉi dosierujon. Bv. kompari vian agordon al transformreguloj en „.htaccess“ por Apache, aŭ la reguloj por Nginx en la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaro</a>. Ĉe Nginx, tio, kio devas ĝisdatiĝi estas kutime linioj komencantaj per „location ~“.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Via retservilo ne estas agordita por sendi .woff2-dosierojn. Tio estas tipe problemo kun la agordo de Nginx. Nextcloud 15 bezonas adapton por ankaŭ sendi .woff2-dosierojn. Komparu vian Nginx-agordon kun la rekomendita agordo en nia <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentaro</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ŝajnas ne esti taŭge agordita por informpeti sistemajn medivariablojn. La testado kun getenv(\"PATH\") revenigas nur malplenan respondon.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Bv. legi la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">instal-dokumentaron ↗</a> pri agordo-notoj pri PHP kaj pri PHP-agordo de via retservilo, precipe kiam vi uzas la modulon „php-fpm“.",
diff --git a/core/l10n/gl.js b/core/l10n/gl.js
index 75248a23343..02f4c198b48 100644
--- a/core/l10n/gl.js
+++ b/core/l10n/gl.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Contrasinal forte",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "O servidor non está configurado correctamente para resolver «{url}». Pode atopar máis información na nosa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "O servidor web non está configurado correctamente para resolver «{url}». O máis probábel é que isto estea relacionado cunha configuración do servidor web que non se actualizou para entregar directamente este cartafol. Compare a configuración contra as regras de reescritura enviadas en «.htaccess» para Apache ou a fornecida na documentación de Nginx na súa <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">páxina de documentación</a>. En Nginx estas normalmente son as liñas que comezan por «location ~» que precisan unha actualización.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "O servidor web non está configurado correctamente para fornecer ficheiros .woff2. Isto é un incidente frecuente en configuracións de Nginx. Para Nextcloud 15 necesita un axuste para fornecer ficheiros .woff2. Compare a súa configuración do Nginx coa configuración recomendada na nosa <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentación</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Semella que PHP non está configurado correctamente para consultar as variábeis de contorno do sistema. A proba con getenv(\"PATH\") só devolve unha resposta baleira.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Revise a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentación de instalación ↗</a> para as notas de configuración PHP e a configuración PHP do seu servidor, especialmente cando se está a empregar php-fpm",
diff --git a/core/l10n/gl.json b/core/l10n/gl.json
index 0807d27e8d7..42d61f1cb75 100644
--- a/core/l10n/gl.json
+++ b/core/l10n/gl.json
@@ -200,6 +200,7 @@
"Strong password" : "Contrasinal forte",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "O servidor non está configurado correctamente para resolver «{url}». Pode atopar máis información na nosa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "O servidor web non está configurado correctamente para resolver «{url}». O máis probábel é que isto estea relacionado cunha configuración do servidor web que non se actualizou para entregar directamente este cartafol. Compare a configuración contra as regras de reescritura enviadas en «.htaccess» para Apache ou a fornecida na documentación de Nginx na súa <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">páxina de documentación</a>. En Nginx estas normalmente son as liñas que comezan por «location ~» que precisan unha actualización.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "O servidor web non está configurado correctamente para fornecer ficheiros .woff2. Isto é un incidente frecuente en configuracións de Nginx. Para Nextcloud 15 necesita un axuste para fornecer ficheiros .woff2. Compare a súa configuración do Nginx coa configuración recomendada na nosa <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentación</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Semella que PHP non está configurado correctamente para consultar as variábeis de contorno do sistema. A proba con getenv(\"PATH\") só devolve unha resposta baleira.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Revise a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentación de instalación ↗</a> para as notas de configuración PHP e a configuración PHP do seu servidor, especialmente cando se está a empregar php-fpm",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index ee32ff290b8..e499912370e 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Password forte",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file, poiché l'interfaccia WebDAV sembra essere danneggiata.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Il tuo server web non è configurato correttamente per risolvere \"{url}\". Ulteriori informazioni sono disponibili nella <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentazione</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Il tuo server non è configurato correttamente per risolvere \"{url}\". Ciò è probabilmente legato a una configurazione del server che non è stata aggiornata per fornire direttamente questa cartella. Confronta la tua configurazione con le regole di rewrite fornite in \".htaccess\" per Apache o quella fornita nella documentazione di Nginx alla sua <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">pagina</a>. Su Nginx di solito sono le righe che iniziano con \"location ~\" quelle da aggiornare.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Il tuo server web non è configurato correttamente per fornire file .woff2. Questo è solitamente un problema con la configurazione di Nginx. Per Nextcloud 15, richiede una modifica per fornire anche i file .woff2. Confronta la tua configurazione di Nginx con la configurazione consigliata nella nostra <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentazione</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentazione di installazione ↗</a> per le note di configurazione di PHP e la configurazione PHP del tuo server, in particolare quando utilizzi php-fpm.",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index b3d4da70db3..8680ad16cc4 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -200,6 +200,7 @@
"Strong password" : "Password forte",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file, poiché l'interfaccia WebDAV sembra essere danneggiata.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Il tuo server web non è configurato correttamente per risolvere \"{url}\". Ulteriori informazioni sono disponibili nella <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentazione</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Il tuo server non è configurato correttamente per risolvere \"{url}\". Ciò è probabilmente legato a una configurazione del server che non è stata aggiornata per fornire direttamente questa cartella. Confronta la tua configurazione con le regole di rewrite fornite in \".htaccess\" per Apache o quella fornita nella documentazione di Nginx alla sua <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">pagina</a>. Su Nginx di solito sono le righe che iniziano con \"location ~\" quelle da aggiornare.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Il tuo server web non è configurato correttamente per fornire file .woff2. Questo è solitamente un problema con la configurazione di Nginx. Per Nextcloud 15, richiede una modifica per fornire anche i file .woff2. Confronta la tua configurazione di Nginx con la configurazione consigliata nella nostra <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentazione</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentazione di installazione ↗</a> per le note di configurazione di PHP e la configurazione PHP del tuo server, in particolare quando utilizzi php-fpm.",
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 35af0f2ba82..5575dd68b47 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -5,12 +5,12 @@ OC.L10N.register(
"File is too big" : "Plik jest za duży",
"The selected file is not an image." : "Wybrany plik nie jest obrazem.",
"The selected file cannot be read." : "Wybrany plik nie może być odczytany.",
- "Invalid file provided" : "Podano błędny plik",
- "No image or file provided" : "Brak obrazu lub pliku dostarczonego",
+ "Invalid file provided" : "Wskazano niepoprawny plik",
+ "No image or file provided" : "Brak obrazu lub pliku",
"Unknown filetype" : "Nieznany typ pliku",
- "Invalid image" : "Nieprawidłowe zdjęcie",
- "An error occurred. Please contact your admin." : "Pojawił się błąd. Skontaktuj się z administratorem.",
- "No temporary profile picture available, try again" : "Brak obrazka profilu tymczasowego, spróbuj ponownie",
+ "Invalid image" : "Nieprawidłowy obraz",
+ "An error occurred. Please contact your admin." : "Wystąpił błąd. Skontaktuj się z administratorem.",
+ "No temporary profile picture available, try again" : "Brak tymczasowego zdjęcia profilowego, spróbuj ponownie",
"No crop data provided" : "Brak danych do przycięcia",
"No valid crop data provided" : "Brak danych do przycięcia",
"Crop is not square" : "Przycięcie nie jest prostokątem",
@@ -19,8 +19,8 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny",
"Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nie udało się wysłać ponownego e-maila, ponieważ nie ma adresu e-mail do tego użytkownika. Proszę skontaktować się z administratorem.",
- "%s password reset" : "%s reset hasła",
- "Password reset" : "Reset hasła",
+ "%s password reset" : "%s zresetowanie hasła",
+ "Password reset" : "Zresetowanie hasła",
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
"Reset your password" : "Zresetuj hasło",
@@ -36,9 +36,9 @@ OC.L10N.register(
"[%d / %d]: Checking table %s" : "[%d / %d]: Sprawdzanie tabeli %s",
"Turned on maintenance mode" : "Włączony tryb konserwacji",
"Turned off maintenance mode" : "Wyłączony tryb konserwacji",
- "Maintenance mode is kept active" : "Tryb konserwacji pozostaje aktywny",
+ "Maintenance mode is kept active" : "Tryb konserwacji jest aktywny",
"Updating database schema" : "Aktualizacja struktury bazy danych",
- "Updated database" : "Zaktualizuj bazę",
+ "Updated database" : "Zaktualizowana baza danych",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Sprawdzam, czy struktura bazy danych może zostać zaktualizowana (to może zająć dużo czasu w zależności od rozmiaru bazy danych)",
"Checked database schema update" : "Sprawdzono aktualizację struktury bazy danych",
"Checking updates of apps" : "Sprawdzam aktualizacje aplikacji",
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Silne hasło",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Serwer WWW nie jest jeszcze na tyle poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Twój serwer WWW nie jest poprawnie skonfigurowany aby poprawnie wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentacji</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Twój serwer internetowy nie jest prawidłowo skonfigurowany, aby rozwiązać problem \"{url}\". Jest to najprawdopodobniej związane z konfiguracją serwera www, który nie został zaktualizowany do bezpośredniego dostępu tego katalogu. Proszę porównać swoją konfigurację z dostarczonymi regułami przepisywania w \".htaccess\" dla Apache lub podanym w dokumentacji dla Nginx na <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">stronie dokumentacji</a>. W Nginx zazwyczaj są to linie zaczynające się od \"location ~\", które wymagają aktualizacji.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Twój serwer internetowy nie jest poprawnie skonfigurowany do dostarczania plików .woff2. Zazwyczaj jest to problem z konfiguracją Nginx. W przypadku usługi Nextcloud 15 wymagana jest korekta w celu dostarczenia plików .woff2. Porównaj swoją konfigurację Nginx z zalecaną konfiguracją w naszej <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentacji</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP wydaje się być błędnie skonfigurowane odnośnie zapytania o zmienne środowiskowe systemu. Test gentenv(\"PATH\") zwraca pustą wartość.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Sprawdź proszę <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentację instalacji ↗</a> dla konfiguracji PHP Twojego serwera względem informacji konfiguracyjnych dokumentacji, zwłaszcza kiedy używasz php-fpm.",
@@ -334,12 +335,12 @@ OC.L10N.register(
"Forgot password?" : "Zapomniałeś hasła?",
"Back to login" : "Powrót do logowania",
"Connect to your account" : "Połącz się z kontem",
- "Please log in before granting %1$s access to your %2$s account." : "Zaloguj się proszę, przed przyznaniem %1$s dostępu do swojego %2$s konta.",
+ "Please log in before granting %1$s access to your %2$s account." : "Zaloguj się, aby udzielić %1$s dostępu do swojego konta %2$s.",
"App token" : "Token aplikacji",
"Grant access" : "Udziel dostępu",
- "Alternative log in using app token" : "Zaloguj alternatywnie używając tokenu aplikacji",
+ "Alternative log in using app token" : "Alternatywne logowanie przy użyciu tokena aplikacji",
"Account access" : "Dostęp do konta",
- "You are about to grant %1$s access to your %2$s account." : "Za chwilę udzielisz %1$s dostępu do swojego %2$s konta.",
+ "You are about to grant %1$s access to your %2$s account." : "Za chwilę udzielisz %1$s dostępu do swojego konta %2$s.",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
"This share is password-protected" : "Ten udział jest zabezpieczony hasłem",
@@ -400,8 +401,8 @@ OC.L10N.register(
"Stay logged in" : "Pozostań zalogowany",
"Back to log in" : "Powrót do logowania",
"Alternative Logins" : "Alternatywne loginy",
- "You are about to grant %s access to your %s account." : "Zamierzasz udzielić %s dostępu do Twojego konta %s.",
- "Alternative login using app token" : "Zaloguj alternatywnie używając tokenu aplikacji",
+ "You are about to grant %s access to your %s account." : "Za chwilę udzielisz %s dostępu do swojego konta %s.",
+ "Alternative login using app token" : "Alternatywne logowanie przy użyciu tokena aplikacji",
"Redirecting …" : "Przekierowuję…",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Dla Twojego konta uruchomiono wzmocnioną ochronę. Uwierzytelnij przy pomocy drugiego składnika.",
"Depending on your configuration, this button could also work to trust the domain:" : "W zależności od Twojej konfiguracji, ten przycisk aby zaufać domenie powinien również zadziałać: ",
@@ -413,7 +414,7 @@ OC.L10N.register(
"Copy URL" : "Skopiuj URL",
"Enable" : "Włącz",
"{sharee} (conversation)" : "{sharee} (konwersacja)",
- "Please log in before granting %s access to your %s account." : "Zaloguj się aby udzielić %s dostępu do Twojego konta %s.",
+ "Please log in before granting %s access to your %s account." : "Zaloguj się, aby udzielić %s dostępu do swojego konta %s.",
"Further information how to configure this can be found in the %sdocumentation%s." : "Więcej informacji o konfiguracji znajdziesz w %sdokumentacji%s."
},
"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/core/l10n/pl.json b/core/l10n/pl.json
index fb79ef6c3a7..26a9fddf3b9 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -3,12 +3,12 @@
"File is too big" : "Plik jest za duży",
"The selected file is not an image." : "Wybrany plik nie jest obrazem.",
"The selected file cannot be read." : "Wybrany plik nie może być odczytany.",
- "Invalid file provided" : "Podano błędny plik",
- "No image or file provided" : "Brak obrazu lub pliku dostarczonego",
+ "Invalid file provided" : "Wskazano niepoprawny plik",
+ "No image or file provided" : "Brak obrazu lub pliku",
"Unknown filetype" : "Nieznany typ pliku",
- "Invalid image" : "Nieprawidłowe zdjęcie",
- "An error occurred. Please contact your admin." : "Pojawił się błąd. Skontaktuj się z administratorem.",
- "No temporary profile picture available, try again" : "Brak obrazka profilu tymczasowego, spróbuj ponownie",
+ "Invalid image" : "Nieprawidłowy obraz",
+ "An error occurred. Please contact your admin." : "Wystąpił błąd. Skontaktuj się z administratorem.",
+ "No temporary profile picture available, try again" : "Brak tymczasowego zdjęcia profilowego, spróbuj ponownie",
"No crop data provided" : "Brak danych do przycięcia",
"No valid crop data provided" : "Brak danych do przycięcia",
"Crop is not square" : "Przycięcie nie jest prostokątem",
@@ -17,8 +17,8 @@
"Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny",
"Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nie udało się wysłać ponownego e-maila, ponieważ nie ma adresu e-mail do tego użytkownika. Proszę skontaktować się z administratorem.",
- "%s password reset" : "%s reset hasła",
- "Password reset" : "Reset hasła",
+ "%s password reset" : "%s zresetowanie hasła",
+ "Password reset" : "Zresetowanie hasła",
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
"Reset your password" : "Zresetuj hasło",
@@ -34,9 +34,9 @@
"[%d / %d]: Checking table %s" : "[%d / %d]: Sprawdzanie tabeli %s",
"Turned on maintenance mode" : "Włączony tryb konserwacji",
"Turned off maintenance mode" : "Wyłączony tryb konserwacji",
- "Maintenance mode is kept active" : "Tryb konserwacji pozostaje aktywny",
+ "Maintenance mode is kept active" : "Tryb konserwacji jest aktywny",
"Updating database schema" : "Aktualizacja struktury bazy danych",
- "Updated database" : "Zaktualizuj bazę",
+ "Updated database" : "Zaktualizowana baza danych",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Sprawdzam, czy struktura bazy danych może zostać zaktualizowana (to może zająć dużo czasu w zależności od rozmiaru bazy danych)",
"Checked database schema update" : "Sprawdzono aktualizację struktury bazy danych",
"Checking updates of apps" : "Sprawdzam aktualizacje aplikacji",
@@ -200,6 +200,7 @@
"Strong password" : "Silne hasło",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Serwer WWW nie jest jeszcze na tyle poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Twój serwer WWW nie jest poprawnie skonfigurowany aby poprawnie wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentacji</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Twój serwer internetowy nie jest prawidłowo skonfigurowany, aby rozwiązać problem \"{url}\". Jest to najprawdopodobniej związane z konfiguracją serwera www, który nie został zaktualizowany do bezpośredniego dostępu tego katalogu. Proszę porównać swoją konfigurację z dostarczonymi regułami przepisywania w \".htaccess\" dla Apache lub podanym w dokumentacji dla Nginx na <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">stronie dokumentacji</a>. W Nginx zazwyczaj są to linie zaczynające się od \"location ~\", które wymagają aktualizacji.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Twój serwer internetowy nie jest poprawnie skonfigurowany do dostarczania plików .woff2. Zazwyczaj jest to problem z konfiguracją Nginx. W przypadku usługi Nextcloud 15 wymagana jest korekta w celu dostarczenia plików .woff2. Porównaj swoją konfigurację Nginx z zalecaną konfiguracją w naszej <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentacji</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP wydaje się być błędnie skonfigurowane odnośnie zapytania o zmienne środowiskowe systemu. Test gentenv(\"PATH\") zwraca pustą wartość.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Sprawdź proszę <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentację instalacji ↗</a> dla konfiguracji PHP Twojego serwera względem informacji konfiguracyjnych dokumentacji, zwłaszcza kiedy używasz php-fpm.",
@@ -332,12 +333,12 @@
"Forgot password?" : "Zapomniałeś hasła?",
"Back to login" : "Powrót do logowania",
"Connect to your account" : "Połącz się z kontem",
- "Please log in before granting %1$s access to your %2$s account." : "Zaloguj się proszę, przed przyznaniem %1$s dostępu do swojego %2$s konta.",
+ "Please log in before granting %1$s access to your %2$s account." : "Zaloguj się, aby udzielić %1$s dostępu do swojego konta %2$s.",
"App token" : "Token aplikacji",
"Grant access" : "Udziel dostępu",
- "Alternative log in using app token" : "Zaloguj alternatywnie używając tokenu aplikacji",
+ "Alternative log in using app token" : "Alternatywne logowanie przy użyciu tokena aplikacji",
"Account access" : "Dostęp do konta",
- "You are about to grant %1$s access to your %2$s account." : "Za chwilę udzielisz %1$s dostępu do swojego %2$s konta.",
+ "You are about to grant %1$s access to your %2$s account." : "Za chwilę udzielisz %1$s dostępu do swojego konta %2$s.",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
"This share is password-protected" : "Ten udział jest zabezpieczony hasłem",
@@ -398,8 +399,8 @@
"Stay logged in" : "Pozostań zalogowany",
"Back to log in" : "Powrót do logowania",
"Alternative Logins" : "Alternatywne loginy",
- "You are about to grant %s access to your %s account." : "Zamierzasz udzielić %s dostępu do Twojego konta %s.",
- "Alternative login using app token" : "Zaloguj alternatywnie używając tokenu aplikacji",
+ "You are about to grant %s access to your %s account." : "Za chwilę udzielisz %s dostępu do swojego konta %s.",
+ "Alternative login using app token" : "Alternatywne logowanie przy użyciu tokena aplikacji",
"Redirecting …" : "Przekierowuję…",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Dla Twojego konta uruchomiono wzmocnioną ochronę. Uwierzytelnij przy pomocy drugiego składnika.",
"Depending on your configuration, this button could also work to trust the domain:" : "W zależności od Twojej konfiguracji, ten przycisk aby zaufać domenie powinien również zadziałać: ",
@@ -411,7 +412,7 @@
"Copy URL" : "Skopiuj URL",
"Enable" : "Włącz",
"{sharee} (conversation)" : "{sharee} (konwersacja)",
- "Please log in before granting %s access to your %s account." : "Zaloguj się aby udzielić %s dostępu do Twojego konta %s.",
+ "Please log in before granting %s access to your %s account." : "Zaloguj się, aby udzielić %s dostępu do swojego konta %s.",
"Further information how to configure this can be found in the %sdocumentation%s." : "Więcej informacji o konfiguracji znajdziesz w %sdokumentacji%s."
},"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/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index f0b4214a23e..6cbcd58091f 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Senha forte",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, porque a interface do WebDAV parece estar quebrada.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informações podem ser encontradas na <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Seu servidor da web não está configurado corretamente para resolver \"{url}\". Isso está relacionado a uma configuração do servidor web que não foi atualizado para entregar essa pasta diretamente. Por favor, compare sua configuração com as regras de reescrita enviadas em \".htaccess\" para o Apache ou fornecido na documentação do Nginx em sua <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">página da documentação</a>. No Nginx, as linhas que começam com \"location ~\" precisam de atualização.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Seu servidor da web não está configurado corretamente para entregar arquivos .woff2. Isso geralmente é um problema com a configuração do Nginx. Para o Nextcloud 15 ele precisa de um ajuste para também entregar arquivos .woff2. Compare sua configuração do Nginx com a configuração recomendada em nossa <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parece estar configurado corretamente para consultar variáveis de ambiente do sistema. O teste com getenv(\"PATH\") retorna apenas uma resposta vazia.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Verifique a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação de instalação ↗</a> para as notas de configuração do PHP, especialmente ao usar o php-fpm.",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 263070d4c9b..f44409d8879 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -200,6 +200,7 @@
"Strong password" : "Senha forte",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, porque a interface do WebDAV parece estar quebrada.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informações podem ser encontradas na <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Seu servidor da web não está configurado corretamente para resolver \"{url}\". Isso está relacionado a uma configuração do servidor web que não foi atualizado para entregar essa pasta diretamente. Por favor, compare sua configuração com as regras de reescrita enviadas em \".htaccess\" para o Apache ou fornecido na documentação do Nginx em sua <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">página da documentação</a>. No Nginx, as linhas que começam com \"location ~\" precisam de atualização.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Seu servidor da web não está configurado corretamente para entregar arquivos .woff2. Isso geralmente é um problema com a configuração do Nginx. Para o Nextcloud 15 ele precisa de um ajuste para também entregar arquivos .woff2. Compare sua configuração do Nginx com a configuração recomendada em nossa <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parece estar configurado corretamente para consultar variáveis de ambiente do sistema. O teste com getenv(\"PATH\") retorna apenas uma resposta vazia.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Verifique a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentação de instalação ↗</a> para as notas de configuração do PHP, especialmente ao usar o php-fpm.",
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 43576db7dc3..cc88c439c30 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -202,6 +202,7 @@ OC.L10N.register(
"Strong password" : "Јака лозинка",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ваш сервер није правилно подешен да разлучи „{url}“. Можете наћи више информација у <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документацији</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Ваш сервер није подешен да може да разлучи адресу „{url}“. Ово је најчешће везано за неажурирану конфигурацију веб сервера која не може да испоручи ову фасциклу директно. Упоредите Вашу конфигурацију са испорученим rewrite правилима у „.htaccess“-у за Apache или онима датим за Nginx у његовој <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документацији</a>. На Nginx-у су обично линије које почињу са „location ~“ оне којима треба ажурирање.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ваш веб сервер није правилно подешен да испоручује .woff2 фајлове. Ово је обично проблем са Nginx конфигурацијом. У Некстклауду 15, потребна су додатна прилагођавања да се и .woff2 фајлови испоручују. Упоредите Вашу Nginx конфигурацију са препорученом конфигурацијом из наше <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документације</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP изгледа није исправно подешен да дохвата променљиве окружења. Тест са getenv(\"PATH\") враћа празну листу као одговор.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Погледајте <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">инсталациону документацију ↗</a> за белешке око PHP конфигурације и PHP конфигурацију Вашег сервера, поготову ако користите php-fpm.",
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index 7233ed9fa38..6911a6c65c2 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -200,6 +200,7 @@
"Strong password" : "Јака лозинка",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.",
"Your web server is not properly set up to resolve \"{url}\". Further information can be found in the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ваш сервер није правилно подешен да разлучи „{url}“. Можете наћи више информација у <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документацији</a>.",
+ "Your web server is not properly set up to resolve \"{url}\". This is most likely related to a web server configuration that was not updated to deliver this folder directly. Please compare your configuration against the shipped rewrite rules in \".htaccess\" for Apache or the provided one in the documentation for Nginx at it's <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation page</a>. On Nginx those are typically the lines starting with \"location ~\" that need an update." : "Ваш сервер није подешен да може да разлучи адресу „{url}“. Ово је најчешће везано за неажурирану конфигурацију веб сервера која не може да испоручи ову фасциклу директно. Упоредите Вашу конфигурацију са испорученим rewrite правилима у „.htaccess“-у за Apache или онима датим за Nginx у његовој <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документацији</a>. На Nginx-у су обично линије које почињу са „location ~“ оне којима треба ажурирање.",
"Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation</a>." : "Ваш веб сервер није правилно подешен да испоручује .woff2 фајлове. Ово је обично проблем са Nginx конфигурацијом. У Некстклауду 15, потребна су додатна прилагођавања да се и .woff2 фајлови испоручују. Упоредите Вашу Nginx конфигурацију са препорученом конфигурацијом из наше <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документације</a>.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP изгледа није исправно подешен да дохвата променљиве окружења. Тест са getenv(\"PATH\") враћа празну листу као одговор.",
"Please check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Погледајте <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">инсталациону документацију ↗</a> за белешке око PHP конфигурације и PHP конфигурацију Вашег сервера, поготову ако користите php-fpm.",
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index c20888e7070..3c41aceb4fe 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -28,6 +28,10 @@ OC.L10N.register(
"Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmejl. Vänligen kontrollera att ditt användarnamn är korrekt.",
"Preparing update" : "Förbereder uppdatering",
"[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair step:" : "Reparationssteg: ",
+ "Repair info:" : "Reparationsinfo:",
+ "Repair warning:" : "Reperationsvarning:",
+ "Repair error:" : "Reperationsfel:",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Vänligen uppdatera via kommandotolken då automatisk uppdatering är inaktiverat i config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Kontrollerar tabell %s",
"Turned on maintenance mode" : "Aktiverade underhållsläge",
@@ -135,6 +139,7 @@ OC.L10N.register(
"An error occurred (\"{message}\"). Please try again" : "Ett fel uppstod (\"{message}\"). Försök igen",
"An error occurred. Please try again" : "Ett fel uppstod. Vänligen försök igen",
"Home" : "Hem",
+ "Work" : "Arbete",
"Other" : "Annan",
"{sharee} (remote group)" : "{sharee} (remote group)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
@@ -158,6 +163,7 @@ OC.L10N.register(
"Connection to server lost" : "Anslutning till server förlorad",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem med att ladda sidan, laddar om sidan om %n sekund","Problem med att ladda sidan, laddar om sidan om %n sekunder"],
"Logging in …" : "Loggar in ...",
+ "We have send a password reset e-mail to the e-mail address known to us for this account. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Vi har skickat ett mejl för lösenordsåterställning till den e-postadress som är känd för detta konto. Om du inte får det inom rimlig tid, kontrollera dina skräppost-mappar.<br>Om det inte är där, fråga din lokala administratör.",
"Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Det kommer inte att finnas något sätt att få tillbaka din data efter att ditt lösenord om ditt lösenord återställs..<br />Om du är osäker på hur du ska göra, vänligen kontakta din administratör innan du fortsätter..<br />Är du verkligen säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag vet vad jag gör",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index ab749702886..2750c807535 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -26,6 +26,10 @@
"Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmejl. Vänligen kontrollera att ditt användarnamn är korrekt.",
"Preparing update" : "Förbereder uppdatering",
"[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair step:" : "Reparationssteg: ",
+ "Repair info:" : "Reparationsinfo:",
+ "Repair warning:" : "Reperationsvarning:",
+ "Repair error:" : "Reperationsfel:",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Vänligen uppdatera via kommandotolken då automatisk uppdatering är inaktiverat i config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Kontrollerar tabell %s",
"Turned on maintenance mode" : "Aktiverade underhållsläge",
@@ -133,6 +137,7 @@
"An error occurred (\"{message}\"). Please try again" : "Ett fel uppstod (\"{message}\"). Försök igen",
"An error occurred. Please try again" : "Ett fel uppstod. Vänligen försök igen",
"Home" : "Hem",
+ "Work" : "Arbete",
"Other" : "Annan",
"{sharee} (remote group)" : "{sharee} (remote group)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
@@ -156,6 +161,7 @@
"Connection to server lost" : "Anslutning till server förlorad",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem med att ladda sidan, laddar om sidan om %n sekund","Problem med att ladda sidan, laddar om sidan om %n sekunder"],
"Logging in …" : "Loggar in ...",
+ "We have send a password reset e-mail to the e-mail address known to us for this account. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Vi har skickat ett mejl för lösenordsåterställning till den e-postadress som är känd för detta konto. Om du inte får det inom rimlig tid, kontrollera dina skräppost-mappar.<br>Om det inte är där, fråga din lokala administratör.",
"Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Det kommer inte att finnas något sätt att få tillbaka din data efter att ditt lösenord om ditt lösenord återställs..<br />Om du är osäker på hur du ska göra, vänligen kontakta din administratör innan du fortsätter..<br />Är du verkligen säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag vet vad jag gör",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index d4a58b9e369..4d9f1754296 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -28,6 +28,10 @@ OC.L10N.register(
"Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。",
"Preparing update" : "正在准备更新",
"[%d / %d]: %s" : "[%d / %d]:%s",
+ "Repair step:" : "修复错误:",
+ "Repair info:" : "修复信息:",
+ "Repair warning:" : "修复警告:",
+ "Repair error:" : "修复错误:",
"Please use the command line updater because automatic updating is disabled in the config.php." : "由于自动更新在 config.php 中已禁用,请使用命令行更新。",
"[%d / %d]: Checking table %s" : "[%d / %d]:检查数据表 %s",
"Turned on maintenance mode" : "启用维护模式",
@@ -159,6 +163,7 @@ OC.L10N.register(
"Connection to server lost" : "与服务器的连接断开",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["加载页面出现问题,将在 %n 秒后重新加载"],
"Logging in …" : "正在登录 …",
+ "We have send a password reset e-mail to the e-mail address known to us for this account. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "我们已将密码重置电子邮件发送到我们已知道的此帐户的电子邮件地址。 如果您未在合理的时间内收到,请检查您的垃圾邮件/垃圾邮件文件夹。<br> 如果不存在,请咨询管理员。",
"Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密。当您的密码重置后没有任何方式能恢复您的数据。<br />如果您不确定,请在继续前联系您的管理员。<br/>您是否真的要继续?",
"I know what I'm doing" : "我知道我在做什么",
"Password can not be changed. Please contact your administrator." : "无法修改密码,请联系管理员。",
@@ -169,6 +174,7 @@ OC.L10N.register(
"No files in here" : "未找到文件",
"New folder" : "新建文件夹",
"No more subfolders in here" : "没有更多的子文件夹",
+ "{newName} already exists" : "{newName} 已经存在",
"Choose" : "选择",
"Move" : "移动",
"Error loading file picker template: {error}" : "加载文件选择模板出错:{error}",
@@ -367,6 +373,8 @@ OC.L10N.register(
"This %s instance is currently in maintenance mode, which may take a while." : "该实例 %s 当前处于维护模式,这将花费一些时间。",
"This page will refresh itself when the instance is available again." : "当实力再次可用时,页面会自动刷新。",
"Contact your system administrator if this message persists or appeared unexpectedly." : "如果这个消息一直存在或不停出现,请联系您的系统管理员。",
+ "Repair step: " : "修复步骤:",
+ "Repair info: " : "修复信息:",
"Repair warning: " : "修复警告:",
"Repair error: " : "修复错误:",
"Updated \"%s\" to %s" : "更新 \"%s\" 为 %s",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index c9252d162f4..47c518622c1 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -26,6 +26,10 @@
"Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。",
"Preparing update" : "正在准备更新",
"[%d / %d]: %s" : "[%d / %d]:%s",
+ "Repair step:" : "修复错误:",
+ "Repair info:" : "修复信息:",
+ "Repair warning:" : "修复警告:",
+ "Repair error:" : "修复错误:",
"Please use the command line updater because automatic updating is disabled in the config.php." : "由于自动更新在 config.php 中已禁用,请使用命令行更新。",
"[%d / %d]: Checking table %s" : "[%d / %d]:检查数据表 %s",
"Turned on maintenance mode" : "启用维护模式",
@@ -157,6 +161,7 @@
"Connection to server lost" : "与服务器的连接断开",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["加载页面出现问题,将在 %n 秒后重新加载"],
"Logging in …" : "正在登录 …",
+ "We have send a password reset e-mail to the e-mail address known to us for this account. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "我们已将密码重置电子邮件发送到我们已知道的此帐户的电子邮件地址。 如果您未在合理的时间内收到,请检查您的垃圾邮件/垃圾邮件文件夹。<br> 如果不存在,请咨询管理员。",
"Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密。当您的密码重置后没有任何方式能恢复您的数据。<br />如果您不确定,请在继续前联系您的管理员。<br/>您是否真的要继续?",
"I know what I'm doing" : "我知道我在做什么",
"Password can not be changed. Please contact your administrator." : "无法修改密码,请联系管理员。",
@@ -167,6 +172,7 @@
"No files in here" : "未找到文件",
"New folder" : "新建文件夹",
"No more subfolders in here" : "没有更多的子文件夹",
+ "{newName} already exists" : "{newName} 已经存在",
"Choose" : "选择",
"Move" : "移动",
"Error loading file picker template: {error}" : "加载文件选择模板出错:{error}",
@@ -365,6 +371,8 @@
"This %s instance is currently in maintenance mode, which may take a while." : "该实例 %s 当前处于维护模式,这将花费一些时间。",
"This page will refresh itself when the instance is available again." : "当实力再次可用时,页面会自动刷新。",
"Contact your system administrator if this message persists or appeared unexpectedly." : "如果这个消息一直存在或不停出现,请联系您的系统管理员。",
+ "Repair step: " : "修复步骤:",
+ "Repair info: " : "修复信息:",
"Repair warning: " : "修复警告:",
"Repair error: " : "修复错误:",
"Updated \"%s\" to %s" : "更新 \"%s\" 为 %s",
diff --git a/core/register_command.php b/core/register_command.php
index 15bb37e4338..6bd1b1b18a9 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -61,7 +61,7 @@ $application->add(new \OC\Core\Command\Integrity\CheckCore(
if (\OC::$server->getConfig()->getSystemValue('installed', false)) {
$application->add(new OC\Core\Command\App\Disable(\OC::$server->getAppManager()));
- $application->add(new OC\Core\Command\App\Enable(\OC::$server->getAppManager()));
+ $application->add(new OC\Core\Command\App\Enable(\OC::$server->getAppManager(), \OC::$server->getGroupManager()));
$application->add(new OC\Core\Command\App\Install());
$application->add(new OC\Core\Command\App\GetPath());
$application->add(new OC\Core\Command\App\ListApps(\OC::$server->getAppManager()));
diff --git a/core/routes.php b/core/routes.php
index c5de63b8f33..d79fea1ca21 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -52,10 +52,18 @@ $application->registerRoutes($this, [
['name' => 'login#confirmPassword', 'url' => '/login/confirm', 'verb' => 'POST'],
['name' => 'login#showLoginForm', 'url' => '/login', 'verb' => 'GET'],
['name' => 'login#logout', 'url' => '/logout', 'verb' => 'GET'],
+ // Original login flow used by all clients
['name' => 'ClientFlowLogin#showAuthPickerPage', 'url' => '/login/flow', 'verb' => 'GET'],
['name' => 'ClientFlowLogin#generateAppPassword', 'url' => '/login/flow', 'verb' => 'POST'],
['name' => 'ClientFlowLogin#grantPage', 'url' => '/login/flow/grant', 'verb' => 'GET'],
['name' => 'ClientFlowLogin#apptokenRedirect', 'url' => '/login/flow/apptoken', 'verb' => 'POST'],
+ // NG login flow used by desktop client in case of Kerberos/fancy 2fa (smart cards for example)
+ ['name' => 'ClientFlowLoginV2#poll', 'url' => '/login/v2/poll', 'verb' => 'POST'],
+ ['name' => 'ClientFlowLoginV2#showAuthPickerPage', 'url' => '/login/v2/flow', 'verb' => 'GET'],
+ ['name' => 'ClientFlowLoginV2#landing', 'url' => '/login/v2/flow/{token}', 'verb' => 'GET'],
+ ['name' => 'ClientFlowLoginV2#grantPage', 'url' => '/login/v2/grant', 'verb' => 'GET'],
+ ['name' => 'ClientFlowLoginV2#generateAppPassword', 'url' => '/login/v2/grant', 'verb' => 'POST'],
+ ['name' => 'ClientFlowLoginV2#init', 'url' => '/login/v2', 'verb' => 'POST'],
['name' => 'TwoFactorChallenge#selectChallenge', 'url' => '/login/selectchallenge', 'verb' => 'GET'],
['name' => 'TwoFactorChallenge#showChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'GET'],
['name' => 'TwoFactorChallenge#solveChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'POST'],
diff --git a/core/templates/installation.php b/core/templates/installation.php
index 3fdde8da1c2..6dd7ed31382 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -50,14 +50,14 @@ script('core', [
value="<?php p($_['adminpass']); ?>"
autocomplete="off" autocapitalize="none" autocorrect="off" required>
<label for="adminpass" class="infield"><?php p($l->t( 'Password' )); ?></label>
- <input type="checkbox" id="show" name="show">
+ <input type="checkbox" id="show" class="hidden-visually" name="show">
<label for="show"></label>
</p>
</fieldset>
<?php if(!$_['directoryIsSet'] OR !$_['dbIsSet'] OR count($_['errors']) > 0): ?>
<fieldset id="advancedHeader">
- <legend><a id="showAdvanced"><?php p($l->t( 'Storage & database' )); ?> <img src="<?php print_unescaped(image_path('', 'actions/caret-white.svg')); ?>" /></a></legend>
+ <legend><a id="showAdvanced" tabindex="0" href="#"><?php p($l->t( 'Storage & database' )); ?> <img src="<?php print_unescaped(image_path('', 'actions/caret-white.svg')); ?>" /></a></legend>
</fieldset>
<?php endif; ?>
@@ -113,7 +113,7 @@ script('core', [
value="<?php p($_['dbpass']); ?>"
autocomplete="off" autocapitalize="none" autocorrect="off">
<label for="dbpass" class="infield"><?php p($l->t( 'Database password' )); ?></label>
- <input type="checkbox" id="dbpassword-toggle" name="dbpassword-toggle">
+ <input type="checkbox" id="dbpassword-toggle" class="hidden-visually" name="dbpassword-toggle">
<label for="dbpassword-toggle"></label>
</p>
<p class="groupmiddle">
diff --git a/core/templates/loginflowv2/authpicker.php b/core/templates/loginflowv2/authpicker.php
new file mode 100644
index 00000000000..79462eec8dc
--- /dev/null
+++ b/core/templates/loginflowv2/authpicker.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+style('core', 'login/authpicker');
+
+/** @var array $_ */
+/** @var \OCP\IURLGenerator $urlGenerator */
+$urlGenerator = $_['urlGenerator'];
+?>
+
+<div class="picker-window">
+ <h2><?php p($l->t('Connect to your account')) ?></h2>
+ <p class="info">
+ <?php print_unescaped($l->t('Please log in before granting %1$s access to your %2$s account.', [
+ '<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
+ \OCP\Util::sanitizeHTML($_['instanceName'])
+ ])) ?>
+ </p>
+
+ <br/>
+
+ <p id="redirect-link">
+ <a href="<?php p($urlGenerator->linkToRouteAbsolute('core.ClientFlowLoginV2.grantPage', ['stateToken' => $_['stateToken']])) ?>">
+ <input type="submit" class="login primary icon-confirm-white" value="<?php p($l->t('Log in')) ?>">
+ </a>
+ </p>
+
+</div>
diff --git a/core/templates/loginflowv2/done.php b/core/templates/loginflowv2/done.php
new file mode 100644
index 00000000000..aa5fc89f5ab
--- /dev/null
+++ b/core/templates/loginflowv2/done.php
@@ -0,0 +1,39 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+style('core', 'login/authpicker');
+
+/** @var array $_ */
+/** @var \OCP\IURLGenerator $urlGenerator */
+$urlGenerator = $_['urlGenerator'];
+?>
+
+<div class="picker-window">
+ <h2><?php p($l->t('Account connected')) ?></h2>
+ <p class="info">
+ <?php print_unescaped($l->t('Your client should now be connected! You can close this window.')) ?>
+ </p>
+
+ <br/>
+</div>
diff --git a/core/templates/loginflowv2/grant.php b/core/templates/loginflowv2/grant.php
new file mode 100644
index 00000000000..e5991d11a25
--- /dev/null
+++ b/core/templates/loginflowv2/grant.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+style('core', 'login/authpicker');
+
+/** @var array $_ */
+/** @var \OCP\IURLGenerator $urlGenerator */
+$urlGenerator = $_['urlGenerator'];
+?>
+
+<div class="picker-window">
+ <h2><?php p($l->t('Account access')) ?></h2>
+ <p class="info">
+ <?php print_unescaped($l->t('You are about to grant %1$s access to your %2$s account.', [
+ '<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
+ \OCP\Util::sanitizeHTML($_['instanceName'])
+ ])) ?>
+ </p>
+
+ <br/>
+
+ <p id="redirect-link">
+ <form method="POST" action="<?php p($urlGenerator->linkToRouteAbsolute('core.ClientFlowLoginV2.generateAppPassword')) ?>">
+ <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" />
+ <input type="hidden" name="stateToken" value="<?php p($_['stateToken']) ?>" />
+ <div id="submit-wrapper">
+ <input type="submit" id="submit" class="login primary" title="" value="<?php p($l->t('Grant access')); ?>" />
+ <div class="submit-icon icon-confirm-white"></div>
+ </div>
+ </form>
+ </p>
+</div>