diff options
Diffstat (limited to 'core')
138 files changed, 6053 insertions, 215 deletions
diff --git a/core/command/upgrade.php b/core/command/upgrade.php index d037082c5e8..5b9432d631b 100644 --- a/core/command/upgrade.php +++ b/core/command/upgrade.php @@ -9,6 +9,7 @@ namespace OC\Core\Command; use OC\Updater; +use OCP\IConfig; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -22,6 +23,20 @@ class Upgrade extends Command { const ERROR_UP_TO_DATE = 3; const ERROR_INVALID_ARGUMENTS = 4; + public $upgradeFailed = false; + + /** + * @var IConfig + */ + private $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + protected function configure() { $this ->setName('upgrade') @@ -48,14 +63,6 @@ class Upgrade extends Command { */ protected function execute(InputInterface $input, OutputInterface $output) { - require_once \OC::$SERVERROOT . '/lib/base.php'; - - // Don't do anything if ownCloud has not been installed - if(!\OC_Config::getValue('installed', false)) { - $output->writeln('<error>ownCloud has not yet been installed</error>'); - return self::ERROR_NOT_INSTALLED; - } - $simulateStepEnabled = true; $updateStepEnabled = true; @@ -75,6 +82,7 @@ class Upgrade extends Command { } if(\OC::checkUpgrade(false)) { + $self = $this; $updater = new Updater(); $updater->setSimulateStepEnabled($simulateStepEnabled); @@ -83,15 +91,14 @@ class Upgrade extends Command { $updater->listen('\OC\Updater', 'maintenanceStart', function () use($output) { $output->writeln('<info>Turned on maintenance mode</info>'); }); - $updater->listen('\OC\Updater', 'maintenanceEnd', function () use($output, $updateStepEnabled) { - $output->writeln('<info>Turned off maintenance mode</info>'); - if (!$updateStepEnabled) { - $output->writeln('<info>Update simulation successful</info>'); - } - else { - $output->writeln('<info>Update successful</info>'); - } - }); + $updater->listen('\OC\Updater', 'maintenanceEnd', + function () use($output, $updateStepEnabled, $self) { + $output->writeln('<info>Turned off maintenance mode</info>'); + $mode = $updateStepEnabled ? 'Update' : 'Update simulation'; + $status = $self->upgradeFailed ? 'failed' : 'successful'; + $message = "<info>$mode $status</info>"; + $output->writeln($message); + }); $updater->listen('\OC\Updater', 'dbUpgrade', function () use($output) { $output->writeln('<info>Updated database</info>'); }); @@ -102,9 +109,9 @@ class Upgrade extends Command { $output->writeln('<info>Disabled incompatible apps: ' . implode(', ', $appList) . '</info>'); }); - $updater->listen('\OC\Updater', 'failure', function ($message) use($output) { - $output->writeln($message); - \OC_Config::setValue('maintenance', false); + $updater->listen('\OC\Updater', 'failure', function ($message) use($output, $self) { + $output->writeln("<error>$message</error>"); + $self->upgradeFailed = true; }); $updater->upgrade(); @@ -112,7 +119,7 @@ class Upgrade extends Command { $this->postUpgradeCheck($input, $output); return self::ERROR_SUCCESS; - } else if(\OC_Config::getValue('maintenance', false)) { + } else if($this->config->getSystemValue('maintenance', false)) { //Possible scenario: ownCloud core is updated but an app failed $output->writeln('<warning>ownCloud is in maintenance mode</warning>'); $output->write('<comment>Maybe an upgrade is already in process. Please check the ' @@ -134,7 +141,7 @@ class Upgrade extends Command { * @param OutputInterface $output output interface */ protected function postUpgradeCheck(InputInterface $input, OutputInterface $output) { - $trustedDomains = \OC_Config::getValue('trusted_domains', array()); + $trustedDomains = $this->config->getSystemValue('trusted_domains', array()); if (empty($trustedDomains)) { $output->write( '<warning>The setting "trusted_domains" could not be ' . diff --git a/core/css/fixes.css b/core/css/fixes.css index 5aba741b64b..0f1584c623f 100644 --- a/core/css/fixes.css +++ b/core/css/fixes.css @@ -15,8 +15,8 @@ select { font-family: Frutiger, Calibri, 'Myriad Pro', Myriad, Arial, sans-serif; } -.lte8 .delete-icon { background-image: url('../img/actions/delete.png'); } -.lte8 .delete-icon:hover, .delete-icon:focus { +.lte8 .icon-delete { background-image: url('../img/actions/delete.png'); } +.lte8 .icon-delete:hover, .icon-delete:focus { background-image: url('../img/actions/delete-hover.png'); } diff --git a/core/css/select2/select2-spinner.gif b/core/css/select2/select2-spinner.gif Binary files differnew file mode 100644 index 00000000000..5b33f7e54f4 --- /dev/null +++ b/core/css/select2/select2-spinner.gif diff --git a/core/css/select2/select2.css b/core/css/select2/select2.css new file mode 100644 index 00000000000..1eb4d229f6d --- /dev/null +++ b/core/css/select2/select2.css @@ -0,0 +1,646 @@ +/* +Version: 3.4.8 Timestamp: Thu May 1 09:50:32 EDT 2014 +*/ +.select2-container { + margin: 0; + position: relative; + display: inline-block; + /* inline-block for ie7 */ + zoom: 1; + *display: inline; + vertical-align: middle; +} + +.select2-container, +.select2-drop, +.select2-search, +.select2-search input { + /* + Force border-box so that % widths fit the parent + container without overlap because of margin/padding. + More Info : http://www.quirksmode.org/css/box.html + */ + -webkit-box-sizing: border-box; /* webkit */ + -moz-box-sizing: border-box; /* firefox */ + box-sizing: border-box; /* css3 */ +} + +.select2-container .select2-choice { + display: block; + height: 26px; + padding: 0 0 0 8px; + overflow: hidden; + position: relative; + + border: 1px solid #aaa; + white-space: nowrap; + line-height: 26px; + color: #444; + text-decoration: none; + + border-radius: 4px; + + background-clip: padding-box; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + background-color: #fff; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); + background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); + background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); + background-image: linear-gradient(to top, #eee 0%, #fff 50%); +} + +.select2-container.select2-drop-above .select2-choice { + border-bottom-color: #aaa; + + border-radius: 0 0 4px 4px; + + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff)); + background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%); + background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0); + background-image: linear-gradient(to bottom, #eee 0%, #fff 90%); +} + +.select2-container.select2-allowclear .select2-choice .select2-chosen { + margin-right: 42px; +} + +.select2-container .select2-choice > .select2-chosen { + margin-right: 26px; + display: block; + overflow: hidden; + + white-space: nowrap; + + text-overflow: ellipsis; + float: none; + width: auto; +} + +.select2-container .select2-choice abbr { + display: none; + width: 12px; + height: 12px; + position: absolute; + right: 24px; + top: 8px; + + font-size: 1px; + text-decoration: none; + + border: 0; + background: url('select2.png') right top no-repeat; + cursor: pointer; + outline: 0; +} + +.select2-container.select2-allowclear .select2-choice abbr { + display: inline-block; +} + +.select2-container .select2-choice abbr:hover { + background-position: right -11px; + cursor: pointer; +} + +.select2-drop-mask { + border: 0; + margin: 0; + padding: 0; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 9998; + /* styles required for IE to work */ + background-color: #fff; + filter: alpha(opacity=0); +} + +.select2-drop { + width: 100%; + margin-top: -1px; + position: absolute; + z-index: 9999; + top: 100%; + + background: #fff; + color: #000; + border: 1px solid #aaa; + border-top: 0; + + border-radius: 0 0 4px 4px; + + -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); + box-shadow: 0 4px 5px rgba(0, 0, 0, .15); +} + +.select2-drop.select2-drop-above { + margin-top: 1px; + border-top: 1px solid #aaa; + border-bottom: 0; + + border-radius: 4px 4px 0 0; + + -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); + box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); +} + +.select2-drop-active { + border: 1px solid #5897fb; + border-top: none; +} + +.select2-drop.select2-drop-above.select2-drop-active { + border-top: 1px solid #5897fb; +} + +.select2-drop-auto-width { + border-top: 1px solid #aaa; + width: auto; +} + +.select2-drop-auto-width .select2-search { + padding-top: 4px; +} + +.select2-container .select2-choice .select2-arrow { + display: inline-block; + width: 18px; + height: 100%; + position: absolute; + right: 0; + top: 0; + + border-left: 1px solid #aaa; + border-radius: 0 4px 4px 0; + + background-clip: padding-box; + + background: #ccc; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); + background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); + background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0); + background-image: linear-gradient(to top, #ccc 0%, #eee 60%); +} + +.select2-container .select2-choice .select2-arrow b { + display: block; + width: 100%; + height: 100%; + background: url('select2.png') no-repeat 0 1px; +} + +.select2-search { + display: inline-block; + width: 100%; + min-height: 26px; + margin: 0; + padding-left: 4px; + padding-right: 4px; + + position: relative; + z-index: 10000; + + white-space: nowrap; +} + +.select2-search input { + width: 100%; + height: auto !important; + min-height: 26px; + padding: 4px 20px 4px 5px; + margin: 0; + + outline: 0; + font-family: sans-serif; + font-size: 1em; + + border: 1px solid #aaa; + border-radius: 0; + + -webkit-box-shadow: none; + box-shadow: none; + + background: #fff url('select2.png') no-repeat 100% -22px; + background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); + background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; +} + +.select2-drop.select2-drop-above .select2-search input { + margin-top: 4px; +} + +.select2-search input.select2-active { + background: #fff url('select2-spinner.gif') no-repeat 100%; + background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); + background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); + background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; +} + +.select2-container-active .select2-choice, +.select2-container-active .select2-choices { + border: 1px solid #5897fb; + outline: none; + + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); + box-shadow: 0 0 5px rgba(0, 0, 0, .3); +} + +.select2-dropdown-open .select2-choice { + border-bottom-color: transparent; + -webkit-box-shadow: 0 1px 0 #fff inset; + box-shadow: 0 1px 0 #fff inset; + + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + + background-color: #eee; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee)); + background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%); + background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); + background-image: linear-gradient(to top, #fff 0%, #eee 50%); +} + +.select2-dropdown-open.select2-drop-above .select2-choice, +.select2-dropdown-open.select2-drop-above .select2-choices { + border: 1px solid #5897fb; + border-top-color: transparent; + + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee)); + background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%); + background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); + background-image: linear-gradient(to bottom, #fff 0%, #eee 50%); +} + +.select2-dropdown-open .select2-choice .select2-arrow { + background: transparent; + border-left: none; + filter: none; +} +.select2-dropdown-open .select2-choice .select2-arrow b { + background-position: -18px 1px; +} + +.select2-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +/* results */ +.select2-results { + max-height: 200px; + padding: 0 0 0 4px; + margin: 4px 4px 4px 0; + position: relative; + overflow-x: hidden; + overflow-y: auto; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.select2-results ul.select2-result-sub { + margin: 0; + padding-left: 0; +} + +.select2-results li { + list-style: none; + display: list-item; + background-image: none; +} + +.select2-results li.select2-result-with-children > .select2-result-label { + font-weight: bold; +} + +.select2-results .select2-result-label { + padding: 3px 7px 4px; + margin: 0; + cursor: pointer; + + min-height: 1em; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.select2-results-dept-1 .select2-result-label { padding-left: 20px } +.select2-results-dept-2 .select2-result-label { padding-left: 40px } +.select2-results-dept-3 .select2-result-label { padding-left: 60px } +.select2-results-dept-4 .select2-result-label { padding-left: 80px } +.select2-results-dept-5 .select2-result-label { padding-left: 100px } +.select2-results-dept-6 .select2-result-label { padding-left: 110px } +.select2-results-dept-7 .select2-result-label { padding-left: 120px } + +.select2-results .select2-highlighted { + background: #3875d7; + color: #fff; +} + +.select2-results li em { + background: #feffde; + font-style: normal; +} + +.select2-results .select2-highlighted em { + background: transparent; +} + +.select2-results .select2-highlighted ul { + background: #fff; + color: #000; +} + + +.select2-results .select2-no-results, +.select2-results .select2-searching, +.select2-results .select2-selection-limit { + background: #f4f4f4; + display: list-item; + padding-left: 5px; +} + +/* +disabled look for disabled choices in the results dropdown +*/ +.select2-results .select2-disabled.select2-highlighted { + color: #666; + background: #f4f4f4; + display: list-item; + cursor: default; +} +.select2-results .select2-disabled { + background: #f4f4f4; + display: list-item; + cursor: default; +} + +.select2-results .select2-selected { + display: none; +} + +.select2-more-results.select2-active { + background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%; +} + +.select2-more-results { + background: #f4f4f4; + display: list-item; +} + +/* disabled styles */ + +.select2-container.select2-container-disabled .select2-choice { + background-color: #f4f4f4; + background-image: none; + border: 1px solid #ddd; + cursor: default; +} + +.select2-container.select2-container-disabled .select2-choice .select2-arrow { + background-color: #f4f4f4; + background-image: none; + border-left: 0; +} + +.select2-container.select2-container-disabled .select2-choice abbr { + display: none; +} + + +/* multiselect */ + +.select2-container-multi .select2-choices { + height: auto !important; + height: 1%; + margin: 0; + padding: 0; + position: relative; + + border: 1px solid #aaa; + cursor: text; + overflow: hidden; + + background-color: #fff; + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); + background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%); + background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%); + background-image: linear-gradient(to bottom, #eee 1%, #fff 15%); +} + +.select2-locked { + padding: 3px 5px 3px 5px !important; +} + +.select2-container-multi .select2-choices { + min-height: 26px; +} + +.select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #5897fb; + outline: none; + + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); + box-shadow: 0 0 5px rgba(0, 0, 0, .3); +} +.select2-container-multi .select2-choices li { + float: left; + list-style: none; +} +html[dir="rtl"] .select2-container-multi .select2-choices li +{ + float: right; +} +.select2-container-multi .select2-choices .select2-search-field { + margin: 0; + padding: 0; + white-space: nowrap; +} + +.select2-container-multi .select2-choices .select2-search-field input { + padding: 5px; + margin: 1px 0; + + font-family: sans-serif; + font-size: 100%; + color: #666; + outline: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + background: transparent !important; +} + +.select2-container-multi .select2-choices .select2-search-field input.select2-active { + background: #fff url('select2-spinner.gif') no-repeat 100% !important; +} + +.select2-default { + color: #999 !important; +} + +.select2-container-multi .select2-choices .select2-search-choice { + padding: 3px 5px 3px 18px; + margin: 3px 0 3px 5px; + position: relative; + + line-height: 13px; + color: #333; + cursor: default; + border: 1px solid #aaaaaa; + + border-radius: 3px; + + -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); + box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); + + background-clip: padding-box; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + background-color: #e4e4e4; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0); + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); + background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: linear-gradient(to top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); +} +html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice +{ + margin-left: 0; + margin-right: 5px; +} +.select2-container-multi .select2-choices .select2-search-choice .select2-chosen { + cursor: default; +} +.select2-container-multi .select2-choices .select2-search-choice-focus { + background: #d4d4d4; +} + +.select2-search-choice-close { + display: block; + width: 12px; + height: 13px; + position: absolute; + right: 3px; + top: 4px; + + font-size: 1px; + outline: none; + background: url('select2.png') right top no-repeat; +} +html[dir="rtl"] .select2-search-choice-close { + right: auto; + left: 3px; +} + +.select2-container-multi .select2-search-choice-close { + left: 3px; +} + +.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover { + background-position: right -11px; +} +.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close { + background-position: right -11px; +} + +/* disabled styles */ +.select2-container-multi.select2-container-disabled .select2-choices { + background-color: #f4f4f4; + background-image: none; + border: 1px solid #ddd; + cursor: default; +} + +.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { + padding: 3px 5px 3px 5px; + border: 1px solid #ddd; + background-image: none; + background-color: #f4f4f4; +} + +.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none; + background: none; +} +/* end multiselect */ + + +.select2-result-selectable .select2-match, +.select2-result-unselectable .select2-match { + text-decoration: underline; +} + +.select2-offscreen, .select2-offscreen:focus { + clip: rect(0 0 0 0) !important; + width: 1px !important; + height: 1px !important; + border: 0 !important; + margin: 0 !important; + padding: 0 !important; + overflow: hidden !important; + position: absolute !important; + outline: 0 !important; + left: 0px !important; + top: 0px !important; +} + +.select2-display-none { + display: none; +} + +.select2-measure-scrollbar { + position: absolute; + top: -10000px; + left: -10000px; + width: 100px; + height: 100px; + overflow: scroll; +} + +/* Retina-ize icons */ + +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) { + .select2-search input, + .select2-search-choice-close, + .select2-container .select2-choice abbr, + .select2-container .select2-choice .select2-arrow b { + background-image: url('select2x2.png') !important; + background-repeat: no-repeat !important; + background-size: 60px 40px !important; + } + + .select2-search input { + background-position: 100% -21px !important; + } +} diff --git a/core/css/select2/select2.png b/core/css/select2/select2.png Binary files differnew file mode 100644 index 00000000000..1d804ffb996 --- /dev/null +++ b/core/css/select2/select2.png diff --git a/core/css/select2/select2x2.png b/core/css/select2/select2x2.png Binary files differnew file mode 100644 index 00000000000..4bdd5c961d4 --- /dev/null +++ b/core/css/select2/select2x2.png diff --git a/core/css/styles.css b/core/css/styles.css index e8c58cff249..2c4aa76e98c 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -140,6 +140,18 @@ input[type="time"] { -moz-box-sizing: border-box; box-sizing: border-box; } +.select2-choices { + border: 1px solid #ddd; + border-radius: 3px; + color: #333; + background-image: none; +} +.select2-dropdown-open .select2-choices { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border: 1px solid #3875d7; +} + /* correctly align images inside of buttons */ input img, button img, .button img { vertical-align: text-bottom; diff --git a/core/js/js.js b/core/js/js.js index d49001ee387..dde8ffa3211 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -256,6 +256,7 @@ var OC={ * @param {string} type the type of the file to link to (e.g. css,img,ajax.template) * @param {string} file the filename * @return {string} Absolute URL for a file in an app + * @deprecated use OC.generateUrl() instead */ filePath:function(app,type,file){ var isCore=OC.coreApps.indexOf(app)!==-1, diff --git a/core/js/jstz.js b/core/js/jstz.js new file mode 100644 index 00000000000..0f9abe8b78d --- /dev/null +++ b/core/js/jstz.js @@ -0,0 +1,358 @@ +/** + * This script gives you the zone info key representing your device's time zone setting. + * + * @name jsTimezoneDetect + * @version 1.0.5 + * @author Jon Nylander + * @license MIT License - http://www.opensource.org/licenses/mit-license.php + * + * For usage and examples, visit: + * http://pellepim.bitbucket.org/jstz/ + * + * Copyright (c) Jon Nylander + */ + +/*jslint undef: true */ +/*global console, exports*/ + +(function(root) { + /** + * Namespace to hold all the code for timezone detection. + */ + var jstz = (function () { + 'use strict'; + var HEMISPHERE_SOUTH = 's', + + /** + * Gets the offset in minutes from UTC for a certain date. + * @param {Date} date + * @returns {Number} + */ + get_date_offset = function (date) { + var offset = -date.getTimezoneOffset(); + return (offset !== null ? offset : 0); + }, + + get_date = function (year, month, date) { + var d = new Date(); + if (year !== undefined) { + d.setFullYear(year); + } + d.setMonth(month); + d.setDate(date); + return d; + }, + + get_january_offset = function (year) { + return get_date_offset(get_date(year, 0 ,2)); + }, + + get_june_offset = function (year) { + return get_date_offset(get_date(year, 5, 2)); + }, + + /** + * Private method. + * Checks whether a given date is in daylight saving time. + * If the date supplied is after august, we assume that we're checking + * for southern hemisphere DST. + * @param {Date} date + * @returns {Boolean} + */ + date_is_dst = function (date) { + var is_southern = date.getMonth() > 7, + base_offset = is_southern ? get_june_offset(date.getFullYear()) : + get_january_offset(date.getFullYear()), + date_offset = get_date_offset(date), + is_west = base_offset < 0, + dst_offset = base_offset - date_offset; + + if (!is_west && !is_southern) { + return dst_offset < 0; + } + + return dst_offset !== 0; + }, + + /** + * This function does some basic calculations to create information about + * the user's timezone. It uses REFERENCE_YEAR as a solid year for which + * the script has been tested rather than depend on the year set by the + * client device. + * + * Returns a key that can be used to do lookups in jstz.olson.timezones. + * eg: "720,1,2". + * + * @returns {String} + */ + + lookup_key = function () { + var january_offset = get_january_offset(), + june_offset = get_june_offset(), + diff = january_offset - june_offset; + + if (diff < 0) { + return january_offset + ",1"; + } else if (diff > 0) { + return june_offset + ",1," + HEMISPHERE_SOUTH; + } + + return january_offset + ",0"; + }, + + /** + * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary. + * + * Returns a primitive object on the format: + * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'} + * + * @returns Object + */ + determine = function () { + var key = lookup_key(); + return new jstz.TimeZone(jstz.olson.timezones[key]); + }, + + /** + * This object contains information on when daylight savings starts for + * different timezones. + * + * The list is short for a reason. Often we do not have to be very specific + * to single out the correct timezone. But when we do, this list comes in + * handy. + * + * Each value is a date denoting when daylight savings starts for that timezone. + */ + dst_start_for = function (tz_name) { + + var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :) + dst_starts = { + 'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0), + 'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0), + 'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0), + 'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0), + 'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0), + 'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0), + 'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0), + 'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0), + 'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0), + 'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0), + 'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0), + 'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0), + 'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0), + 'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0), + 'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0), + 'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0), + 'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0), + 'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0), + 'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0), + 'Europe/Moscow': ru_pre_dst_change, + 'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0), + 'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0), + 'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0), + 'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0), + 'Asia/Yekaterinburg': ru_pre_dst_change, + 'Asia/Omsk': ru_pre_dst_change, + 'Asia/Krasnoyarsk': ru_pre_dst_change, + 'Asia/Irkutsk': ru_pre_dst_change, + 'Asia/Yakutsk': ru_pre_dst_change, + 'Asia/Vladivostok': ru_pre_dst_change, + 'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0), + 'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0), + 'Asia/Kamchatka': ru_pre_dst_change, + 'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0), + 'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0), + 'Europe/Minsk': ru_pre_dst_change, + 'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0), + 'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0), + 'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0) + }; + + return dst_starts[tz_name]; + }; + + return { + determine: determine, + date_is_dst: date_is_dst, + dst_start_for: dst_start_for + }; + }()); + + /** + * Simple object to perform ambiguity check and to return name of time zone. + */ + jstz.TimeZone = function (tz_name) { + 'use strict'; + /** + * The keys in this object are timezones that we know may be ambiguous after + * a preliminary scan through the olson_tz object. + * + * The array of timezones to compare must be in the order that daylight savings + * starts for the regions. + */ + var AMBIGUITIES = { + 'America/Denver': ['America/Denver', 'America/Mazatlan'], + 'America/Chicago': ['America/Chicago', 'America/Mexico_City'], + 'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'], + 'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'], + 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'], + 'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'], + 'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'], + 'America/New_York': ['America/Havana', 'America/New_York'], + 'America/Halifax': ['America/Goose_Bay', 'America/Halifax'], + 'America/Godthab': ['America/Miquelon', 'America/Godthab'], + 'Asia/Dubai': ['Europe/Moscow'], + 'Asia/Dhaka': ['Asia/Yekaterinburg'], + 'Asia/Jakarta': ['Asia/Omsk'], + 'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'], + 'Asia/Tokyo': ['Asia/Irkutsk'], + 'Australia/Brisbane': ['Asia/Yakutsk'], + 'Pacific/Noumea': ['Asia/Vladivostok'], + 'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'], + 'Pacific/Tongatapu': ['Pacific/Apia'], + 'Asia/Baghdad': ['Europe/Minsk'], + 'Asia/Baku': ['Asia/Yerevan','Asia/Baku'], + 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo'] + }, + + timezone_name = tz_name, + + /** + * Checks if a timezone has possible ambiguities. I.e timezones that are similar. + * + * For example, if the preliminary scan determines that we're in America/Denver. + * We double check here that we're really there and not in America/Mazatlan. + * + * This is done by checking known dates for when daylight savings start for different + * timezones during 2010 and 2011. + */ + ambiguity_check = function () { + var ambiguity_list = AMBIGUITIES[timezone_name], + length = ambiguity_list.length, + i = 0, + tz = ambiguity_list[0]; + + for (; i < length; i += 1) { + tz = ambiguity_list[i]; + + if (jstz.date_is_dst(jstz.dst_start_for(tz))) { + timezone_name = tz; + return; + } + } + }, + + /** + * Checks if it is possible that the timezone is ambiguous. + */ + is_ambiguous = function () { + return typeof (AMBIGUITIES[timezone_name]) !== 'undefined'; + }; + + if (is_ambiguous()) { + ambiguity_check(); + } + + return { + name: function () { + return timezone_name; + } + }; + }; + + jstz.olson = {}; + + /* + * The keys in this dictionary are comma separated as such: + * + * First the offset compared to UTC time in minutes. + * + * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it + * does. + * + * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere, + * only interesting for timezones with DST. + * + * The mapped arrays is used for constructing the jstz.TimeZone object from within + * jstz.determine_timezone(); + */ + jstz.olson.timezones = { + '-720,0' : 'Pacific/Majuro', + '-660,0' : 'Pacific/Pago_Pago', + '-600,1' : 'America/Adak', + '-600,0' : 'Pacific/Honolulu', + '-570,0' : 'Pacific/Marquesas', + '-540,0' : 'Pacific/Gambier', + '-540,1' : 'America/Anchorage', + '-480,1' : 'America/Los_Angeles', + '-480,0' : 'Pacific/Pitcairn', + '-420,0' : 'America/Phoenix', + '-420,1' : 'America/Denver', + '-360,0' : 'America/Guatemala', + '-360,1' : 'America/Chicago', + '-360,1,s' : 'Pacific/Easter', + '-300,0' : 'America/Bogota', + '-300,1' : 'America/New_York', + '-270,0' : 'America/Caracas', + '-240,1' : 'America/Halifax', + '-240,0' : 'America/Santo_Domingo', + '-240,1,s' : 'America/Santiago', + '-210,1' : 'America/St_Johns', + '-180,1' : 'America/Godthab', + '-180,0' : 'America/Argentina/Buenos_Aires', + '-180,1,s' : 'America/Montevideo', + '-120,0' : 'America/Noronha', + '-120,1' : 'America/Noronha', + '-60,1' : 'Atlantic/Azores', + '-60,0' : 'Atlantic/Cape_Verde', + '0,0' : 'UTC', + '0,1' : 'Europe/London', + '60,1' : 'Europe/Berlin', + '60,0' : 'Africa/Lagos', + '60,1,s' : 'Africa/Windhoek', + '120,1' : 'Asia/Beirut', + '120,0' : 'Africa/Johannesburg', + '180,0' : 'Asia/Baghdad', + '180,1' : 'Europe/Moscow', + '210,1' : 'Asia/Tehran', + '240,0' : 'Asia/Dubai', + '240,1' : 'Asia/Baku', + '270,0' : 'Asia/Kabul', + '300,1' : 'Asia/Yekaterinburg', + '300,0' : 'Asia/Karachi', + '330,0' : 'Asia/Kolkata', + '345,0' : 'Asia/Kathmandu', + '360,0' : 'Asia/Dhaka', + '360,1' : 'Asia/Omsk', + '390,0' : 'Asia/Rangoon', + '420,1' : 'Asia/Krasnoyarsk', + '420,0' : 'Asia/Jakarta', + '480,0' : 'Asia/Shanghai', + '480,1' : 'Asia/Irkutsk', + '525,0' : 'Australia/Eucla', + '525,1,s' : 'Australia/Eucla', + '540,1' : 'Asia/Yakutsk', + '540,0' : 'Asia/Tokyo', + '570,0' : 'Australia/Darwin', + '570,1,s' : 'Australia/Adelaide', + '600,0' : 'Australia/Brisbane', + '600,1' : 'Asia/Vladivostok', + '600,1,s' : 'Australia/Sydney', + '630,1,s' : 'Australia/Lord_Howe', + '660,1' : 'Asia/Kamchatka', + '660,0' : 'Pacific/Noumea', + '690,0' : 'Pacific/Norfolk', + '720,1,s' : 'Pacific/Auckland', + '720,0' : 'Pacific/Tarawa', + '765,1,s' : 'Pacific/Chatham', + '780,0' : 'Pacific/Tongatapu', + '780,1,s' : 'Pacific/Apia', + '840,0' : 'Pacific/Kiritimati' + }; + + if (typeof exports !== 'undefined') { + exports.jstz = jstz; + } else { + root.jstz = jstz; + } +})(this); diff --git a/core/js/select2/LICENSE b/core/js/select2/LICENSE new file mode 100644 index 00000000000..0247cc76273 --- /dev/null +++ b/core/js/select2/LICENSE @@ -0,0 +1,18 @@ +Copyright 2014 Igor Vaynberg + +Version: @@ver@@ Timestamp: @@timestamp@@ + +This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU +General Public License version 2 (the "GPL License"). You may choose either license to govern your +use of this software only upon the condition that you accept all of the terms of either the Apache +License or the GPL License. + +You may obtain a copy of the Apache License and the GPL License at: + +http://www.apache.org/licenses/LICENSE-2.0 +http://www.gnu.org/licenses/gpl-2.0.html + +Unless required by applicable law or agreed to in writing, software distributed under the Apache License +or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +either express or implied. See the Apache License and the GPL License for the specific language governing +permissions and limitations under the Apache License and the GPL License. diff --git a/core/js/select2/README.md b/core/js/select2/README.md new file mode 100644 index 00000000000..406fe79dc95 --- /dev/null +++ b/core/js/select2/README.md @@ -0,0 +1,90 @@ +Select2 +======= + +Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results. + +To get started, checkout examples and documentation at http://ivaynberg.github.com/select2 + +Use cases +--------- + +* Enhancing native selects with search. +* Enhancing native selects with a better multi-select interface. +* Loading data from JavaScript: easily load items via ajax and have them searchable. +* Nesting optgroups: native selects only support one level of nested. Select2 does not have this restriction. +* Tagging: ability to add new items on the fly. +* Working with large, remote datasets: ability to partially load a dataset based on the search term. +* Paging of large datasets: easy support for loading more pages when the results are scrolled to the end. +* Templating: support for custom rendering of results and selections. + +Browser compatibility +--------------------- +* IE 8+ +* Chrome 8+ +* Firefox 10+ +* Safari 3+ +* Opera 10.6+ + +Usage +----- +You can source Select2 directly from a [CDN like JSDliver](http://www.jsdelivr.com/#!select2), [download it from this GitHub repo](https://github.com/ivaynberg/select2/tags), or use one of the integrations below. + +Integrations +------------ + +* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / [Apache Wicket](http://wicket.apache.org)) +* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails) +* [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](angularjs.org)) +* [Django](https://github.com/applegrew/django-select2) +* [Symfony](https://github.com/19Gerhard85/sfSelect2WidgetsPlugin) +* [Symfony2](https://github.com/avocode/FormExtensions) +* [Bootstrap 2](https://github.com/t0m/select2-bootstrap-css) and [Bootstrap 3](https://github.com/t0m/select2-bootstrap-css/tree/bootstrap3) (CSS skins) +* [Meteor](https://github.com/nate-strauser/meteor-select2) (modern reactive JavaScript framework; + [Bootstrap 3 skin](https://github.com/esperadomedia/meteor-select2-bootstrap3-css/)) +* [Yii 2.x](http://demos.krajee.com/widgets#select2) +* [Yii 1.x](https://github.com/tonybolzan/yii-select2) + +Internationalization (i18n) +--------------------------- + +Select2 supports multiple languages by simply including the right +language JS file (`select2_locale_it.js`, `select2_locale_nl.js`, etc.). + +Missing a language? Just copy `select2_locale_en.js.template`, translate +it, and make a pull request back to Select2 here on GitHub. + +Bug tracker +----------- + +Have a bug? Please create an issue here on GitHub! + +https://github.com/ivaynberg/select2/issues + +Mailing list +------------ + +Have a question? Ask on our mailing list! + +select2@googlegroups.com + +https://groups.google.com/d/forum/select2 + + +Copyright and license +--------------------- + +Copyright 2012 Igor Vaynberg + +This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU +General Public License version 2 (the "GPL License"). You may choose either license to govern your +use of this software only upon the condition that you accept all of the terms of either the Apache +License or the GPL License. + +You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at: + +http://www.apache.org/licenses/LICENSE-2.0 +http://www.gnu.org/licenses/gpl-2.0.html + +Unless required by applicable law or agreed to in writing, software distributed under the Apache License +or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +either express or implied. See the Apache License and the GPL License for the specific language governing +permissions and limitations under the Apache License and the GPL License. diff --git a/core/js/select2/bower.json b/core/js/select2/bower.json new file mode 100644 index 00000000000..80e8596e806 --- /dev/null +++ b/core/js/select2/bower.json @@ -0,0 +1,8 @@ +{ + "name": "select2", + "version": "3.4.8", + "main": ["select2.js", "select2.css", "select2.png", "select2x2.png", "select2-spinner.gif"], + "dependencies": { + "jquery": ">= 1.7.1" + } +} diff --git a/core/js/select2/component.json b/core/js/select2/component.json new file mode 100644 index 00000000000..ad7abf9d9fa --- /dev/null +++ b/core/js/select2/component.json @@ -0,0 +1,66 @@ +{ + "name": "select2", + "repo": "ivaynberg/select2", + "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.", + "version": "3.4.8", + "demo": "http://ivaynberg.github.io/select2/", + "keywords": [ + "jquery" + ], + "main": "select2.js", + "styles": [ + "select2.css", + "select2-bootstrap.css" + ], + "scripts": [ + "select2.js", + "select2_locale_ar.js", + "select2_locale_bg.js", + "select2_locale_ca.js", + "select2_locale_cs.js", + "select2_locale_da.js", + "select2_locale_de.js", + "select2_locale_el.js", + "select2_locale_es.js", + "select2_locale_et.js", + "select2_locale_eu.js", + "select2_locale_fa.js", + "select2_locale_fi.js", + "select2_locale_fr.js", + "select2_locale_gl.js", + "select2_locale_he.js", + "select2_locale_hr.js", + "select2_locale_hu.js", + "select2_locale_id.js", + "select2_locale_is.js", + "select2_locale_it.js", + "select2_locale_ja.js", + "select2_locale_ka.js", + "select2_locale_ko.js", + "select2_locale_lt.js", + "select2_locale_lv.js", + "select2_locale_mk.js", + "select2_locale_ms.js", + "select2_locale_nl.js", + "select2_locale_no.js", + "select2_locale_pl.js", + "select2_locale_pt-BR.js", + "select2_locale_pt-PT.js", + "select2_locale_ro.js", + "select2_locale_ru.js", + "select2_locale_sk.js", + "select2_locale_sv.js", + "select2_locale_th.js", + "select2_locale_tr.js", + "select2_locale_uk.js", + "select2_locale_vi.js", + "select2_locale_zh-CN.js", + "select2_locale_zh-TW.js" + ], + "images": [ + "select2-spinner.gif", + "select2.png", + "select2x2.png" + ], + "license": "MIT" +} diff --git a/core/js/select2/composer.json b/core/js/select2/composer.json new file mode 100644 index 00000000000..c50fadba855 --- /dev/null +++ b/core/js/select2/composer.json @@ -0,0 +1,29 @@ +{ + "name": + "ivaynberg/select2", + "description": "Select2 is a jQuery based replacement for select boxes.", + "version": "3.4.8", + "type": "component", + "homepage": "http://ivaynberg.github.io/select2/", + "license": "Apache-2.0", + "require": { + "robloach/component-installer": "*", + "components/jquery": ">=1.7.1" + }, + "extra": { + "component": { + "scripts": [ + "select2.js" + ], + "files": [ + "select2.js", + "select2_locale_*.js", + "select2.css", + "select2-bootstrap.css", + "select2-spinner.gif", + "select2.png", + "select2x2.png" + ] + } + } +} diff --git a/core/js/select2/package.json b/core/js/select2/package.json new file mode 100644 index 00000000000..75ad84acaf8 --- /dev/null +++ b/core/js/select2/package.json @@ -0,0 +1,20 @@ +{ + "name" : "Select2", + "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.", + "homepage": "http://ivaynberg.github.io/select2", + "author": "Igor Vaynberg", + "repository": {"type": "git", "url": "git://github.com/ivaynberg/select2.git"}, + "main": "select2.js", + "version": "3.4.8", + "jspm": { + "main": "select2", + "files": ["select2.js", "select2.png", "select2.css", "select2-spinner.gif"], + "shim": { + "select2": { + "imports": ["jquery", "./select2.css!"], + "exports": "$" + } + }, + "buildConfig": { "uglify": true } + } +} diff --git a/core/js/select2/release.sh b/core/js/select2/release.sh new file mode 100755 index 00000000000..0d2e279ead4 --- /dev/null +++ b/core/js/select2/release.sh @@ -0,0 +1,79 @@ +#!/bin/bash +set -e + +echo -n "Enter the version for this release: " + +read ver + +if [ ! $ver ]; then + echo "Invalid version." + exit +fi + +name="select2" +js="$name.js" +mini="$name.min.js" +css="$name.css" +release="$name-$ver" +tag="$ver" +branch="build-$ver" +curbranch=`git branch | grep "*" | sed "s/* //"` +timestamp=$(date) +tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g" +remote="github" + +echo "Pulling from origin" + +git pull + +echo "Updating Version Identifiers" + +sed -E -e "s/\"version\": \"([0-9\.]+)\",/\"version\": \"$ver\",/g" -i -- bower.json select2.jquery.json component.json composer.json package.json + +git add bower.json +git add select2.jquery.json +git add component.json +git add composer.json +git add package.json + +git commit -m "modified version identifiers in descriptors for release $ver" +git push + +git branch "$branch" +git checkout "$branch" + +echo "Tokenizing..." + +find . -name "$js" | xargs -I{} sed -e "$tokens" -i -- {} +find . -name "$css" | xargs -I{} sed -e "$tokens" -i -- {} + +sed -e "s/latest/$ver/g" -i -- bower.json + +git add "$js" +git add "$css" + +echo "Minifying..." + +echo "/*" > "$mini" +cat LICENSE | sed "$tokens" >> "$mini" +echo "*/" >> "$mini" + +curl -s \ + --data-urlencode "js_code@$js" \ + http://marijnhaverbeke.nl/uglifyjs \ + >> "$mini" + +git add "$mini" + +git commit -m "release $ver" + +echo "Tagging..." +git tag -a "$tag" -m "tagged version $ver" +git push "$remote" --tags + +echo "Cleaning Up..." + +git checkout "$curbranch" +git branch -D "$branch" + +echo "Done" diff --git a/core/js/select2/select2-bootstrap.css b/core/js/select2/select2-bootstrap.css new file mode 100644 index 00000000000..3b83f0a2297 --- /dev/null +++ b/core/js/select2/select2-bootstrap.css @@ -0,0 +1,87 @@ +.form-control .select2-choice { + border: 0; + border-radius: 2px; +} + +.form-control .select2-choice .select2-arrow { + border-radius: 0 2px 2px 0; +} + +.form-control.select2-container { + height: auto !important; + padding: 0; +} + +.form-control.select2-container.select2-dropdown-open { + border-color: #5897FB; + border-radius: 3px 3px 0 0; +} + +.form-control .select2-container.select2-dropdown-open .select2-choices { + border-radius: 3px 3px 0 0; +} + +.form-control.select2-container .select2-choices { + border: 0 !important; + border-radius: 3px; +} + +.control-group.warning .select2-container .select2-choice, +.control-group.warning .select2-container .select2-choices, +.control-group.warning .select2-container-active .select2-choice, +.control-group.warning .select2-container-active .select2-choices, +.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.warning .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #C09853 !important; +} + +.control-group.warning .select2-container .select2-choice div { + border-left: 1px solid #C09853 !important; + background: #FCF8E3 !important; +} + +.control-group.error .select2-container .select2-choice, +.control-group.error .select2-container .select2-choices, +.control-group.error .select2-container-active .select2-choice, +.control-group.error .select2-container-active .select2-choices, +.control-group.error .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.error .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.error .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #B94A48 !important; +} + +.control-group.error .select2-container .select2-choice div { + border-left: 1px solid #B94A48 !important; + background: #F2DEDE !important; +} + +.control-group.info .select2-container .select2-choice, +.control-group.info .select2-container .select2-choices, +.control-group.info .select2-container-active .select2-choice, +.control-group.info .select2-container-active .select2-choices, +.control-group.info .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.info .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.info .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #3A87AD !important; +} + +.control-group.info .select2-container .select2-choice div { + border-left: 1px solid #3A87AD !important; + background: #D9EDF7 !important; +} + +.control-group.success .select2-container .select2-choice, +.control-group.success .select2-container .select2-choices, +.control-group.success .select2-container-active .select2-choice, +.control-group.success .select2-container-active .select2-choices, +.control-group.success .select2-dropdown-open.select2-drop-above .select2-choice, +.control-group.success .select2-dropdown-open.select2-drop-above .select2-choices, +.control-group.success .select2-container-multi.select2-container-active .select2-choices { + border: 1px solid #468847 !important; +} + +.control-group.success .select2-container .select2-choice div { + border-left: 1px solid #468847 !important; + background: #DFF0D8 !important; +} diff --git a/core/js/select2/select2.jquery.json b/core/js/select2/select2.jquery.json new file mode 100644 index 00000000000..e9119279f11 --- /dev/null +++ b/core/js/select2/select2.jquery.json @@ -0,0 +1,36 @@ +{ + "name": "select2", + "title": "Select2", + "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.", + "keywords": [ + "select", + "autocomplete", + "typeahead", + "dropdown", + "multiselect", + "tag", + "tagging" + ], + "version": "3.4.8", + "author": { + "name": "Igor Vaynberg", + "url": "https://github.com/ivaynberg" + }, + "licenses": [ + { + "type": "Apache", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + }, + { + "type": "GPL v2", + "url": "http://www.gnu.org/licenses/gpl-2.0.html" + } + ], + "bugs": "https://github.com/ivaynberg/select2/issues", + "homepage": "http://ivaynberg.github.com/select2", + "docs": "http://ivaynberg.github.com/select2/", + "download": "https://github.com/ivaynberg/select2/tags", + "dependencies": { + "jquery": ">=1.7.1" + } +} diff --git a/core/js/select2/select2.js b/core/js/select2/select2.js new file mode 100644 index 00000000000..2969da5d1f7 --- /dev/null +++ b/core/js/select2/select2.js @@ -0,0 +1,3448 @@ +/* +Copyright 2012 Igor Vaynberg + +Version: 3.4.8 Timestamp: Thu May 1 09:50:32 EDT 2014 + +This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU +General Public License version 2 (the "GPL License"). You may choose either license to govern your +use of this software only upon the condition that you accept all of the terms of either the Apache +License or the GPL License. + +You may obtain a copy of the Apache License and the GPL License at: + + http://www.apache.org/licenses/LICENSE-2.0 + http://www.gnu.org/licenses/gpl-2.0.html + +Unless required by applicable law or agreed to in writing, software distributed under the +Apache License or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for +the specific language governing permissions and limitations under the Apache License and the GPL License. +*/ +(function ($) { + if(typeof $.fn.each2 == "undefined") { + $.extend($.fn, { + /* + * 4-10 times faster .each replacement + * use it carefully, as it overrides jQuery context of element on each iteration + */ + each2 : function (c) { + var j = $([0]), i = -1, l = this.length; + while ( + ++i < l + && (j.context = j[0] = this[i]) + && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object + ); + return this; + } + }); + } +})(jQuery); + +(function ($, undefined) { + "use strict"; + /*global document, window, jQuery, console */ + + if (window.Select2 !== undefined) { + return; + } + + var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer, + lastMousePosition={x:0,y:0}, $document, scrollBarDimensions, + + KEY = { + TAB: 9, + ENTER: 13, + ESC: 27, + SPACE: 32, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + SHIFT: 16, + CTRL: 17, + ALT: 18, + PAGE_UP: 33, + PAGE_DOWN: 34, + HOME: 36, + END: 35, + BACKSPACE: 8, + DELETE: 46, + isArrow: function (k) { + k = k.which ? k.which : k; + switch (k) { + case KEY.LEFT: + case KEY.RIGHT: + case KEY.UP: + case KEY.DOWN: + return true; + } + return false; + }, + isControl: function (e) { + var k = e.which; + switch (k) { + case KEY.SHIFT: + case KEY.CTRL: + case KEY.ALT: + return true; + } + + if (e.metaKey) return true; + + return false; + }, + isFunctionKey: function (k) { + k = k.which ? k.which : k; + return k >= 112 && k <= 123; + } + }, + MEASURE_SCROLLBAR_TEMPLATE = "<div class='select2-measure-scrollbar'></div>", + + DIACRITICS = {"\u24B6":"A","\uFF21":"A","\u00C0":"A","\u00C1":"A","\u00C2":"A","\u1EA6":"A","\u1EA4":"A","\u1EAA":"A","\u1EA8":"A","\u00C3":"A","\u0100":"A","\u0102":"A","\u1EB0":"A","\u1EAE":"A","\u1EB4":"A","\u1EB2":"A","\u0226":"A","\u01E0":"A","\u00C4":"A","\u01DE":"A","\u1EA2":"A","\u00C5":"A","\u01FA":"A","\u01CD":"A","\u0200":"A","\u0202":"A","\u1EA0":"A","\u1EAC":"A","\u1EB6":"A","\u1E00":"A","\u0104":"A","\u023A":"A","\u2C6F":"A","\uA732":"AA","\u00C6":"AE","\u01FC":"AE","\u01E2":"AE","\uA734":"AO","\uA736":"AU","\uA738":"AV","\uA73A":"AV","\uA73C":"AY","\u24B7":"B","\uFF22":"B","\u1E02":"B","\u1E04":"B","\u1E06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24B8":"C","\uFF23":"C","\u0106":"C","\u0108":"C","\u010A":"C","\u010C":"C","\u00C7":"C","\u1E08":"C","\u0187":"C","\u023B":"C","\uA73E":"C","\u24B9":"D","\uFF24":"D","\u1E0A":"D","\u010E":"D","\u1E0C":"D","\u1E10":"D","\u1E12":"D","\u1E0E":"D","\u0110":"D","\u018B":"D","\u018A":"D","\u0189":"D","\uA779":"D","\u01F1":"DZ","\u01C4":"DZ","\u01F2":"Dz","\u01C5":"Dz","\u24BA":"E","\uFF25":"E","\u00C8":"E","\u00C9":"E","\u00CA":"E","\u1EC0":"E","\u1EBE":"E","\u1EC4":"E","\u1EC2":"E","\u1EBC":"E","\u0112":"E","\u1E14":"E","\u1E16":"E","\u0114":"E","\u0116":"E","\u00CB":"E","\u1EBA":"E","\u011A":"E","\u0204":"E","\u0206":"E","\u1EB8":"E","\u1EC6":"E","\u0228":"E","\u1E1C":"E","\u0118":"E","\u1E18":"E","\u1E1A":"E","\u0190":"E","\u018E":"E","\u24BB":"F","\uFF26":"F","\u1E1E":"F","\u0191":"F","\uA77B":"F","\u24BC":"G","\uFF27":"G","\u01F4":"G","\u011C":"G","\u1E20":"G","\u011E":"G","\u0120":"G","\u01E6":"G","\u0122":"G","\u01E4":"G","\u0193":"G","\uA7A0":"G","\uA77D":"G","\uA77E":"G","\u24BD":"H","\uFF28":"H","\u0124":"H","\u1E22":"H","\u1E26":"H","\u021E":"H","\u1E24":"H","\u1E28":"H","\u1E2A":"H","\u0126":"H","\u2C67":"H","\u2C75":"H","\uA78D":"H","\u24BE":"I","\uFF29":"I","\u00CC":"I","\u00CD":"I","\u00CE":"I","\u0128":"I","\u012A":"I","\u012C":"I","\u0130":"I","\u00CF":"I","\u1E2E":"I","\u1EC8":"I","\u01CF":"I","\u0208":"I","\u020A":"I","\u1ECA":"I","\u012E":"I","\u1E2C":"I","\u0197":"I","\u24BF":"J","\uFF2A":"J","\u0134":"J","\u0248":"J","\u24C0":"K","\uFF2B":"K","\u1E30":"K","\u01E8":"K","\u1E32":"K","\u0136":"K","\u1E34":"K","\u0198":"K","\u2C69":"K","\uA740":"K","\uA742":"K","\uA744":"K","\uA7A2":"K","\u24C1":"L","\uFF2C":"L","\u013F":"L","\u0139":"L","\u013D":"L","\u1E36":"L","\u1E38":"L","\u013B":"L","\u1E3C":"L","\u1E3A":"L","\u0141":"L","\u023D":"L","\u2C62":"L","\u2C60":"L","\uA748":"L","\uA746":"L","\uA780":"L","\u01C7":"LJ","\u01C8":"Lj","\u24C2":"M","\uFF2D":"M","\u1E3E":"M","\u1E40":"M","\u1E42":"M","\u2C6E":"M","\u019C":"M","\u24C3":"N","\uFF2E":"N","\u01F8":"N","\u0143":"N","\u00D1":"N","\u1E44":"N","\u0147":"N","\u1E46":"N","\u0145":"N","\u1E4A":"N","\u1E48":"N","\u0220":"N","\u019D":"N","\uA790":"N","\uA7A4":"N","\u01CA":"NJ","\u01CB":"Nj","\u24C4":"O","\uFF2F":"O","\u00D2":"O","\u00D3":"O","\u00D4":"O","\u1ED2":"O","\u1ED0":"O","\u1ED6":"O","\u1ED4":"O","\u00D5":"O","\u1E4C":"O","\u022C":"O","\u1E4E":"O","\u014C":"O","\u1E50":"O","\u1E52":"O","\u014E":"O","\u022E":"O","\u0230":"O","\u00D6":"O","\u022A":"O","\u1ECE":"O","\u0150":"O","\u01D1":"O","\u020C":"O","\u020E":"O","\u01A0":"O","\u1EDC":"O","\u1EDA":"O","\u1EE0":"O","\u1EDE":"O","\u1EE2":"O","\u1ECC":"O","\u1ED8":"O","\u01EA":"O","\u01EC":"O","\u00D8":"O","\u01FE":"O","\u0186":"O","\u019F":"O","\uA74A":"O","\uA74C":"O","\u01A2":"OI","\uA74E":"OO","\u0222":"OU","\u24C5":"P","\uFF30":"P","\u1E54":"P","\u1E56":"P","\u01A4":"P","\u2C63":"P","\uA750":"P","\uA752":"P","\uA754":"P","\u24C6":"Q","\uFF31":"Q","\uA756":"Q","\uA758":"Q","\u024A":"Q","\u24C7":"R","\uFF32":"R","\u0154":"R","\u1E58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1E5A":"R","\u1E5C":"R","\u0156":"R","\u1E5E":"R","\u024C":"R","\u2C64":"R","\uA75A":"R","\uA7A6":"R","\uA782":"R","\u24C8":"S","\uFF33":"S","\u1E9E":"S","\u015A":"S","\u1E64":"S","\u015C":"S","\u1E60":"S","\u0160":"S","\u1E66":"S","\u1E62":"S","\u1E68":"S","\u0218":"S","\u015E":"S","\u2C7E":"S","\uA7A8":"S","\uA784":"S","\u24C9":"T","\uFF34":"T","\u1E6A":"T","\u0164":"T","\u1E6C":"T","\u021A":"T","\u0162":"T","\u1E70":"T","\u1E6E":"T","\u0166":"T","\u01AC":"T","\u01AE":"T","\u023E":"T","\uA786":"T","\uA728":"TZ","\u24CA":"U","\uFF35":"U","\u00D9":"U","\u00DA":"U","\u00DB":"U","\u0168":"U","\u1E78":"U","\u016A":"U","\u1E7A":"U","\u016C":"U","\u00DC":"U","\u01DB":"U","\u01D7":"U","\u01D5":"U","\u01D9":"U","\u1EE6":"U","\u016E":"U","\u0170":"U","\u01D3":"U","\u0214":"U","\u0216":"U","\u01AF":"U","\u1EEA":"U","\u1EE8":"U","\u1EEE":"U","\u1EEC":"U","\u1EF0":"U","\u1EE4":"U","\u1E72":"U","\u0172":"U","\u1E76":"U","\u1E74":"U","\u0244":"U","\u24CB":"V","\uFF36":"V","\u1E7C":"V","\u1E7E":"V","\u01B2":"V","\uA75E":"V","\u0245":"V","\uA760":"VY","\u24CC":"W","\uFF37":"W","\u1E80":"W","\u1E82":"W","\u0174":"W","\u1E86":"W","\u1E84":"W","\u1E88":"W","\u2C72":"W","\u24CD":"X","\uFF38":"X","\u1E8A":"X","\u1E8C":"X","\u24CE":"Y","\uFF39":"Y","\u1EF2":"Y","\u00DD":"Y","\u0176":"Y","\u1EF8":"Y","\u0232":"Y","\u1E8E":"Y","\u0178":"Y","\u1EF6":"Y","\u1EF4":"Y","\u01B3":"Y","\u024E":"Y","\u1EFE":"Y","\u24CF":"Z","\uFF3A":"Z","\u0179":"Z","\u1E90":"Z","\u017B":"Z","\u017D":"Z","\u1E92":"Z","\u1E94":"Z","\u01B5":"Z","\u0224":"Z","\u2C7F":"Z","\u2C6B":"Z","\uA762":"Z","\u24D0":"a","\uFF41":"a","\u1E9A":"a","\u00E0":"a","\u00E1":"a","\u00E2":"a","\u1EA7":"a","\u1EA5":"a","\u1EAB":"a","\u1EA9":"a","\u00E3":"a","\u0101":"a","\u0103":"a","\u1EB1":"a","\u1EAF":"a","\u1EB5":"a","\u1EB3":"a","\u0227":"a","\u01E1":"a","\u00E4":"a","\u01DF":"a","\u1EA3":"a","\u00E5":"a","\u01FB":"a","\u01CE":"a","\u0201":"a","\u0203":"a","\u1EA1":"a","\u1EAD":"a","\u1EB7":"a","\u1E01":"a","\u0105":"a","\u2C65":"a","\u0250":"a","\uA733":"aa","\u00E6":"ae","\u01FD":"ae","\u01E3":"ae","\uA735":"ao","\uA737":"au","\uA739":"av","\uA73B":"av","\uA73D":"ay","\u24D1":"b","\uFF42":"b","\u1E03":"b","\u1E05":"b","\u1E07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24D2":"c","\uFF43":"c","\u0107":"c","\u0109":"c","\u010B":"c","\u010D":"c","\u00E7":"c","\u1E09":"c","\u0188":"c","\u023C":"c","\uA73F":"c","\u2184":"c","\u24D3":"d","\uFF44":"d","\u1E0B":"d","\u010F":"d","\u1E0D":"d","\u1E11":"d","\u1E13":"d","\u1E0F":"d","\u0111":"d","\u018C":"d","\u0256":"d","\u0257":"d","\uA77A":"d","\u01F3":"dz","\u01C6":"dz","\u24D4":"e","\uFF45":"e","\u00E8":"e","\u00E9":"e","\u00EA":"e","\u1EC1":"e","\u1EBF":"e","\u1EC5":"e","\u1EC3":"e","\u1EBD":"e","\u0113":"e","\u1E15":"e","\u1E17":"e","\u0115":"e","\u0117":"e","\u00EB":"e","\u1EBB":"e","\u011B":"e","\u0205":"e","\u0207":"e","\u1EB9":"e","\u1EC7":"e","\u0229":"e","\u1E1D":"e","\u0119":"e","\u1E19":"e","\u1E1B":"e","\u0247":"e","\u025B":"e","\u01DD":"e","\u24D5":"f","\uFF46":"f","\u1E1F":"f","\u0192":"f","\uA77C":"f","\u24D6":"g","\uFF47":"g","\u01F5":"g","\u011D":"g","\u1E21":"g","\u011F":"g","\u0121":"g","\u01E7":"g","\u0123":"g","\u01E5":"g","\u0260":"g","\uA7A1":"g","\u1D79":"g","\uA77F":"g","\u24D7":"h","\uFF48":"h","\u0125":"h","\u1E23":"h","\u1E27":"h","\u021F":"h","\u1E25":"h","\u1E29":"h","\u1E2B":"h","\u1E96":"h","\u0127":"h","\u2C68":"h","\u2C76":"h","\u0265":"h","\u0195":"hv","\u24D8":"i","\uFF49":"i","\u00EC":"i","\u00ED":"i","\u00EE":"i","\u0129":"i","\u012B":"i","\u012D":"i","\u00EF":"i","\u1E2F":"i","\u1EC9":"i","\u01D0":"i","\u0209":"i","\u020B":"i","\u1ECB":"i","\u012F":"i","\u1E2D":"i","\u0268":"i","\u0131":"i","\u24D9":"j","\uFF4A":"j","\u0135":"j","\u01F0":"j","\u0249":"j","\u24DA":"k","\uFF4B":"k","\u1E31":"k","\u01E9":"k","\u1E33":"k","\u0137":"k","\u1E35":"k","\u0199":"k","\u2C6A":"k","\uA741":"k","\uA743":"k","\uA745":"k","\uA7A3":"k","\u24DB":"l","\uFF4C":"l","\u0140":"l","\u013A":"l","\u013E":"l","\u1E37":"l","\u1E39":"l","\u013C":"l","\u1E3D":"l","\u1E3B":"l","\u017F":"l","\u0142":"l","\u019A":"l","\u026B":"l","\u2C61":"l","\uA749":"l","\uA781":"l","\uA747":"l","\u01C9":"lj","\u24DC":"m","\uFF4D":"m","\u1E3F":"m","\u1E41":"m","\u1E43":"m","\u0271":"m","\u026F":"m","\u24DD":"n","\uFF4E":"n","\u01F9":"n","\u0144":"n","\u00F1":"n","\u1E45":"n","\u0148":"n","\u1E47":"n","\u0146":"n","\u1E4B":"n","\u1E49":"n","\u019E":"n","\u0272":"n","\u0149":"n","\uA791":"n","\uA7A5":"n","\u01CC":"nj","\u24DE":"o","\uFF4F":"o","\u00F2":"o","\u00F3":"o","\u00F4":"o","\u1ED3":"o","\u1ED1":"o","\u1ED7":"o","\u1ED5":"o","\u00F5":"o","\u1E4D":"o","\u022D":"o","\u1E4F":"o","\u014D":"o","\u1E51":"o","\u1E53":"o","\u014F":"o","\u022F":"o","\u0231":"o","\u00F6":"o","\u022B":"o","\u1ECF":"o","\u0151":"o","\u01D2":"o","\u020D":"o","\u020F":"o","\u01A1":"o","\u1EDD":"o","\u1EDB":"o","\u1EE1":"o","\u1EDF":"o","\u1EE3":"o","\u1ECD":"o","\u1ED9":"o","\u01EB":"o","\u01ED":"o","\u00F8":"o","\u01FF":"o","\u0254":"o","\uA74B":"o","\uA74D":"o","\u0275":"o","\u01A3":"oi","\u0223":"ou","\uA74F":"oo","\u24DF":"p","\uFF50":"p","\u1E55":"p","\u1E57":"p","\u01A5":"p","\u1D7D":"p","\uA751":"p","\uA753":"p","\uA755":"p","\u24E0":"q","\uFF51":"q","\u024B":"q","\uA757":"q","\uA759":"q","\u24E1":"r","\uFF52":"r","\u0155":"r","\u1E59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1E5B":"r","\u1E5D":"r","\u0157":"r","\u1E5F":"r","\u024D":"r","\u027D":"r","\uA75B":"r","\uA7A7":"r","\uA783":"r","\u24E2":"s","\uFF53":"s","\u00DF":"s","\u015B":"s","\u1E65":"s","\u015D":"s","\u1E61":"s","\u0161":"s","\u1E67":"s","\u1E63":"s","\u1E69":"s","\u0219":"s","\u015F":"s","\u023F":"s","\uA7A9":"s","\uA785":"s","\u1E9B":"s","\u24E3":"t","\uFF54":"t","\u1E6B":"t","\u1E97":"t","\u0165":"t","\u1E6D":"t","\u021B":"t","\u0163":"t","\u1E71":"t","\u1E6F":"t","\u0167":"t","\u01AD":"t","\u0288":"t","\u2C66":"t","\uA787":"t","\uA729":"tz","\u24E4":"u","\uFF55":"u","\u00F9":"u","\u00FA":"u","\u00FB":"u","\u0169":"u","\u1E79":"u","\u016B":"u","\u1E7B":"u","\u016D":"u","\u00FC":"u","\u01DC":"u","\u01D8":"u","\u01D6":"u","\u01DA":"u","\u1EE7":"u","\u016F":"u","\u0171":"u","\u01D4":"u","\u0215":"u","\u0217":"u","\u01B0":"u","\u1EEB":"u","\u1EE9":"u","\u1EEF":"u","\u1EED":"u","\u1EF1":"u","\u1EE5":"u","\u1E73":"u","\u0173":"u","\u1E77":"u","\u1E75":"u","\u0289":"u","\u24E5":"v","\uFF56":"v","\u1E7D":"v","\u1E7F":"v","\u028B":"v","\uA75F":"v","\u028C":"v","\uA761":"vy","\u24E6":"w","\uFF57":"w","\u1E81":"w","\u1E83":"w","\u0175":"w","\u1E87":"w","\u1E85":"w","\u1E98":"w","\u1E89":"w","\u2C73":"w","\u24E7":"x","\uFF58":"x","\u1E8B":"x","\u1E8D":"x","\u24E8":"y","\uFF59":"y","\u1EF3":"y","\u00FD":"y","\u0177":"y","\u1EF9":"y","\u0233":"y","\u1E8F":"y","\u00FF":"y","\u1EF7":"y","\u1E99":"y","\u1EF5":"y","\u01B4":"y","\u024F":"y","\u1EFF":"y","\u24E9":"z","\uFF5A":"z","\u017A":"z","\u1E91":"z","\u017C":"z","\u017E":"z","\u1E93":"z","\u1E95":"z","\u01B6":"z","\u0225":"z","\u0240":"z","\u2C6C":"z","\uA763":"z"}; + + $document = $(document); + + nextUid=(function() { var counter=1; return function() { return counter++; }; }()); + + + function reinsertElement(element) { + var placeholder = $(document.createTextNode('')); + + element.before(placeholder); + placeholder.before(element); + placeholder.remove(); + } + + function stripDiacritics(str) { + // Used 'uni range + named function' from http://jsperf.com/diacritics/18 + function match(a) { + return DIACRITICS[a] || a; + } + + return str.replace(/[^\u0000-\u007E]/g, match); + } + + function indexOf(value, array) { + var i = 0, l = array.length; + for (; i < l; i = i + 1) { + if (equal(value, array[i])) return i; + } + return -1; + } + + function measureScrollbar () { + var $template = $( MEASURE_SCROLLBAR_TEMPLATE ); + $template.appendTo('body'); + + var dim = { + width: $template.width() - $template[0].clientWidth, + height: $template.height() - $template[0].clientHeight + }; + $template.remove(); + + return dim; + } + + /** + * Compares equality of a and b + * @param a + * @param b + */ + function equal(a, b) { + if (a === b) return true; + if (a === undefined || b === undefined) return false; + if (a === null || b === null) return false; + // Check whether 'a' or 'b' is a string (primitive or object). + // The concatenation of an empty string (+'') converts its argument to a string's primitive. + if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object + if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object + return false; + } + + /** + * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty + * strings + * @param string + * @param separator + */ + function splitVal(string, separator) { + var val, i, l; + if (string === null || string.length < 1) return []; + val = string.split(separator); + for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]); + return val; + } + + function getSideBorderPadding(element) { + return element.outerWidth(false) - element.width(); + } + + function installKeyUpChangeEvent(element) { + var key="keyup-change-value"; + element.on("keydown", function () { + if ($.data(element, key) === undefined) { + $.data(element, key, element.val()); + } + }); + element.on("keyup", function () { + var val= $.data(element, key); + if (val !== undefined && element.val() !== val) { + $.removeData(element, key); + element.trigger("keyup-change"); + } + }); + } + + $document.on("mousemove", function (e) { + lastMousePosition.x = e.pageX; + lastMousePosition.y = e.pageY; + }); + + /** + * filters mouse events so an event is fired only if the mouse moved. + * + * filters out mouse events that occur when mouse is stationary but + * the elements under the pointer are scrolled. + */ + function installFilteredMouseMove(element) { + element.on("mousemove", function (e) { + var lastpos = lastMousePosition; + if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) { + $(e.target).trigger("mousemove-filtered", e); + } + }); + } + + /** + * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made + * within the last quietMillis milliseconds. + * + * @param quietMillis number of milliseconds to wait before invoking fn + * @param fn function to be debounced + * @param ctx object to be used as this reference within fn + * @return debounced version of fn + */ + function debounce(quietMillis, fn, ctx) { + ctx = ctx || undefined; + var timeout; + return function () { + var args = arguments; + window.clearTimeout(timeout); + timeout = window.setTimeout(function() { + fn.apply(ctx, args); + }, quietMillis); + }; + } + + function installDebouncedScroll(threshold, element) { + var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);}); + element.on("scroll", function (e) { + if (indexOf(e.target, element.get()) >= 0) notify(e); + }); + } + + function focus($el) { + if ($el[0] === document.activeElement) return; + + /* set the focus in a 0 timeout - that way the focus is set after the processing + of the current event has finished - which seems like the only reliable way + to set focus */ + window.setTimeout(function() { + var el=$el[0], pos=$el.val().length, range; + + $el.focus(); + + /* make sure el received focus so we do not error out when trying to manipulate the caret. + sometimes modals or others listeners may steal it after its set */ + var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0); + if (isVisible && el === document.activeElement) { + + /* after the focus is set move the caret to the end, necessary when we val() + just before setting focus */ + if(el.setSelectionRange) + { + el.setSelectionRange(pos, pos); + } + else if (el.createTextRange) { + range = el.createTextRange(); + range.collapse(false); + range.select(); + } + } + }, 0); + } + + function getCursorInfo(el) { + el = $(el)[0]; + var offset = 0; + var length = 0; + if ('selectionStart' in el) { + offset = el.selectionStart; + length = el.selectionEnd - offset; + } else if ('selection' in document) { + el.focus(); + var sel = document.selection.createRange(); + length = document.selection.createRange().text.length; + sel.moveStart('character', -el.value.length); + offset = sel.text.length - length; + } + return { offset: offset, length: length }; + } + + function killEvent(event) { + event.preventDefault(); + event.stopPropagation(); + } + function killEventImmediately(event) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + + function measureTextWidth(e) { + if (!sizer){ + var style = e[0].currentStyle || window.getComputedStyle(e[0], null); + sizer = $(document.createElement("div")).css({ + position: "absolute", + left: "-10000px", + top: "-10000px", + display: "none", + fontSize: style.fontSize, + fontFamily: style.fontFamily, + fontStyle: style.fontStyle, + fontWeight: style.fontWeight, + letterSpacing: style.letterSpacing, + textTransform: style.textTransform, + whiteSpace: "nowrap" + }); + sizer.attr("class","select2-sizer"); + $("body").append(sizer); + } + sizer.text(e.val()); + return sizer.width(); + } + + function syncCssClasses(dest, src, adapter) { + var classes, replacements = [], adapted; + + classes = dest.attr("class"); + if (classes) { + classes = '' + classes; // for IE which returns object + $(classes.split(" ")).each2(function() { + if (this.indexOf("select2-") === 0) { + replacements.push(this); + } + }); + } + classes = src.attr("class"); + if (classes) { + classes = '' + classes; // for IE which returns object + $(classes.split(" ")).each2(function() { + if (this.indexOf("select2-") !== 0) { + adapted = adapter(this); + if (adapted) { + replacements.push(adapted); + } + } + }); + } + dest.attr("class", replacements.join(" ")); + } + + + function markMatch(text, term, markup, escapeMarkup) { + var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())), + tl=term.length; + + if (match<0) { + markup.push(escapeMarkup(text)); + return; + } + + markup.push(escapeMarkup(text.substring(0, match))); + markup.push("<span class='select2-match'>"); + markup.push(escapeMarkup(text.substring(match, match + tl))); + markup.push("</span>"); + markup.push(escapeMarkup(text.substring(match + tl, text.length))); + } + + function defaultEscapeMarkup(markup) { + var replace_map = { + '\\': '\', + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + "/": '/' + }; + + return String(markup).replace(/[&<>"'\/\\]/g, function (match) { + return replace_map[match]; + }); + } + + /** + * Produces an ajax-based query function + * + * @param options object containing configuration parameters + * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax + * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax + * @param options.url url for the data + * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url. + * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified + * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often + * @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2. + * The expected format is an object containing the following keys: + * results array of objects that will be used as choices + * more (optional) boolean indicating whether there are more results available + * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true} + */ + function ajax(options) { + var timeout, // current scheduled but not yet executed request + handler = null, + quietMillis = options.quietMillis || 100, + ajaxUrl = options.url, + self = this; + + return function (query) { + window.clearTimeout(timeout); + timeout = window.setTimeout(function () { + var data = options.data, // ajax data function + url = ajaxUrl, // ajax url string or function + transport = options.transport || $.fn.select2.ajaxDefaults.transport, + // deprecated - to be removed in 4.0 - use params instead + deprecated = { + type: options.type || 'GET', // set type of request (GET or POST) + cache: options.cache || false, + jsonpCallback: options.jsonpCallback||undefined, + dataType: options.dataType||"json" + }, + params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated); + + data = data ? data.call(self, query.term, query.page, query.context) : null; + url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url; + + if (handler && typeof handler.abort === "function") { handler.abort(); } + + if (options.params) { + if ($.isFunction(options.params)) { + $.extend(params, options.params.call(self)); + } else { + $.extend(params, options.params); + } + } + + $.extend(params, { + url: url, + dataType: options.dataType, + data: data, + success: function (data) { + // TODO - replace query.page with query so users have access to term, page, etc. + var results = options.results(data, query.page); + query.callback(results); + } + }); + handler = transport.call(self, params); + }, quietMillis); + }; + } + + /** + * Produces a query function that works with a local array + * + * @param options object containing configuration parameters. The options parameter can either be an array or an + * object. + * + * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys. + * + * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain + * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text' + * key can either be a String in which case it is expected that each element in the 'data' array has a key with the + * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract + * the text. + */ + function local(options) { + var data = options, // data elements + dataText, + tmp, + text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search + + if ($.isArray(data)) { + tmp = data; + data = { results: tmp }; + } + + if ($.isFunction(data) === false) { + tmp = data; + data = function() { return tmp; }; + } + + var dataItem = data(); + if (dataItem.text) { + text = dataItem.text; + // if text is not a function we assume it to be a key name + if (!$.isFunction(text)) { + dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available + text = function (item) { return item[dataText]; }; + } + } + + return function (query) { + var t = query.term, filtered = { results: [] }, process; + if (t === "") { + query.callback(data()); + return; + } + + process = function(datum, collection) { + var group, attr; + datum = datum[0]; + if (datum.children) { + group = {}; + for (attr in datum) { + if (datum.hasOwnProperty(attr)) group[attr]=datum[attr]; + } + group.children=[]; + $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); }); + if (group.children.length || query.matcher(t, text(group), datum)) { + collection.push(group); + } + } else { + if (query.matcher(t, text(datum), datum)) { + collection.push(datum); + } + } + }; + + $(data().results).each2(function(i, datum) { process(datum, filtered.results); }); + query.callback(filtered); + }; + } + + // TODO javadoc + function tags(data) { + var isFunc = $.isFunction(data); + return function (query) { + var t = query.term, filtered = {results: []}; + var result = isFunc ? data(query) : data; + if ($.isArray(result)) { + $(result).each(function () { + var isObject = this.text !== undefined, + text = isObject ? this.text : this; + if (t === "" || query.matcher(t, text)) { + filtered.results.push(isObject ? this : {id: this, text: this}); + } + }); + query.callback(filtered); + } + }; + } + + /** + * Checks if the formatter function should be used. + * + * Throws an error if it is not a function. Returns true if it should be used, + * false if no formatting should be performed. + * + * @param formatter + */ + function checkFormatter(formatter, formatterName) { + if ($.isFunction(formatter)) return true; + if (!formatter) return false; + if (typeof(formatter) === 'string') return true; + throw new Error(formatterName +" must be a string, function, or falsy value"); + } + + function evaluate(val) { + if ($.isFunction(val)) { + var args = Array.prototype.slice.call(arguments, 1); + return val.apply(null, args); + } + return val; + } + + function countResults(results) { + var count = 0; + $.each(results, function(i, item) { + if (item.children) { + count += countResults(item.children); + } else { + count++; + } + }); + return count; + } + + /** + * Default tokenizer. This function uses breaks the input on substring match of any string from the + * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those + * two options have to be defined in order for the tokenizer to work. + * + * @param input text user has typed so far or pasted into the search field + * @param selection currently selected choices + * @param selectCallback function(choice) callback tho add the choice to selection + * @param opts select2's opts + * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value + */ + function defaultTokenizer(input, selection, selectCallback, opts) { + var original = input, // store the original so we can compare and know if we need to tell the search to update its text + dupe = false, // check for whether a token we extracted represents a duplicate selected choice + token, // token + index, // position at which the separator was found + i, l, // looping variables + separator; // the matched separator + + if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined; + + while (true) { + index = -1; + + for (i = 0, l = opts.tokenSeparators.length; i < l; i++) { + separator = opts.tokenSeparators[i]; + index = input.indexOf(separator); + if (index >= 0) break; + } + + if (index < 0) break; // did not find any token separator in the input string, bail + + token = input.substring(0, index); + input = input.substring(index + separator.length); + + if (token.length > 0) { + token = opts.createSearchChoice.call(this, token, selection); + if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) { + dupe = false; + for (i = 0, l = selection.length; i < l; i++) { + if (equal(opts.id(token), opts.id(selection[i]))) { + dupe = true; break; + } + } + + if (!dupe) selectCallback(token); + } + } + } + + if (original!==input) return input; + } + + function cleanupJQueryElements() { + var self = this; + + Array.prototype.forEach.call(arguments, function (element) { + self[element].remove(); + self[element] = null; + }); + } + + /** + * Creates a new class + * + * @param superClass + * @param methods + */ + function clazz(SuperClass, methods) { + var constructor = function () {}; + constructor.prototype = new SuperClass; + constructor.prototype.constructor = constructor; + constructor.prototype.parent = SuperClass.prototype; + constructor.prototype = $.extend(constructor.prototype, methods); + return constructor; + } + + AbstractSelect2 = clazz(Object, { + + // abstract + bind: function (func) { + var self = this; + return function () { + func.apply(self, arguments); + }; + }, + + // abstract + init: function (opts) { + var results, search, resultsSelector = ".select2-results"; + + // prepare options + this.opts = opts = this.prepareOpts(opts); + + this.id=opts.id; + + // destroy if called on an existing component + if (opts.element.data("select2") !== undefined && + opts.element.data("select2") !== null) { + opts.element.data("select2").destroy(); + } + + this.container = this.createContainer(); + + this.liveRegion = $("<span>", { + role: "status", + "aria-live": "polite" + }) + .addClass("select2-hidden-accessible") + .appendTo(document.body); + + this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid()); + this.containerEventName= this.containerId + .replace(/([.])/g, '_') + .replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1'); + this.container.attr("id", this.containerId); + + this.container.attr("title", opts.element.attr("title")); + + this.body = $("body"); + + syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass); + + this.container.attr("style", opts.element.attr("style")); + this.container.css(evaluate(opts.containerCss)); + this.container.addClass(evaluate(opts.containerCssClass)); + + this.elementTabIndex = this.opts.element.attr("tabindex"); + + // swap container for the element + this.opts.element + .data("select2", this) + .attr("tabindex", "-1") + .before(this.container) + .on("click.select2", killEvent); // do not leak click events + + this.container.data("select2", this); + + this.dropdown = this.container.find(".select2-drop"); + + syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass); + + this.dropdown.addClass(evaluate(opts.dropdownCssClass)); + this.dropdown.data("select2", this); + this.dropdown.on("click", killEvent); + + this.results = results = this.container.find(resultsSelector); + this.search = search = this.container.find("input.select2-input"); + + this.queryCount = 0; + this.resultsPage = 0; + this.context = null; + + // initialize the container + this.initContainer(); + + this.container.on("click", killEvent); + + installFilteredMouseMove(this.results); + + this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent)); + this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event) { + this._touchEvent = true; + this.highlightUnderEvent(event); + })); + this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved)); + this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved)); + + // Waiting for a click event on touch devices to select option and hide dropdown + // otherwise click will be triggered on an underlying element + this.dropdown.on('click', this.bind(function (event) { + if (this._touchEvent) { + this._touchEvent = false; + this.selectHighlighted(); + } + })); + + installDebouncedScroll(80, this.results); + this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded)); + + // do not propagate change event from the search field out of the component + $(this.container).on("change", ".select2-input", function(e) {e.stopPropagation();}); + $(this.dropdown).on("change", ".select2-input", function(e) {e.stopPropagation();}); + + // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel + if ($.fn.mousewheel) { + results.mousewheel(function (e, delta, deltaX, deltaY) { + var top = results.scrollTop(); + if (deltaY > 0 && top - deltaY <= 0) { + results.scrollTop(0); + killEvent(e); + } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) { + results.scrollTop(results.get(0).scrollHeight - results.height()); + killEvent(e); + } + }); + } + + installKeyUpChangeEvent(search); + search.on("keyup-change input paste", this.bind(this.updateResults)); + search.on("focus", function () { search.addClass("select2-focused"); }); + search.on("blur", function () { search.removeClass("select2-focused");}); + + this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) { + if ($(e.target).closest(".select2-result-selectable").length > 0) { + this.highlightUnderEvent(e); + this.selectHighlighted(e); + } + })); + + // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening + // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's + // dom it will trigger the popup close, which is not what we want + // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal. + this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function (e) { e.stopPropagation(); }); + + this.nextSearchTerm = undefined; + + if ($.isFunction(this.opts.initSelection)) { + // initialize selection based on the current value of the source element + this.initSelection(); + + // if the user has provided a function that can set selection based on the value of the source element + // we monitor the change event on the element and trigger it, allowing for two way synchronization + this.monitorSource(); + } + + if (opts.maximumInputLength !== null) { + this.search.attr("maxlength", opts.maximumInputLength); + } + + var disabled = opts.element.prop("disabled"); + if (disabled === undefined) disabled = false; + this.enable(!disabled); + + var readonly = opts.element.prop("readonly"); + if (readonly === undefined) readonly = false; + this.readonly(readonly); + + // Calculate size of scrollbar + scrollBarDimensions = scrollBarDimensions || measureScrollbar(); + + this.autofocus = opts.element.prop("autofocus"); + opts.element.prop("autofocus", false); + if (this.autofocus) this.focus(); + + this.search.attr("placeholder", opts.searchInputPlaceholder); + }, + + // abstract + destroy: function () { + var element=this.opts.element, select2 = element.data("select2"); + + this.close(); + + if (this.propertyObserver) { + this.propertyObserver.disconnect(); + this.propertyObserver = null; + } + + if (select2 !== undefined) { + select2.container.remove(); + select2.liveRegion.remove(); + select2.dropdown.remove(); + element + .removeClass("select2-offscreen") + .removeData("select2") + .off(".select2") + .prop("autofocus", this.autofocus || false); + if (this.elementTabIndex) { + element.attr({tabindex: this.elementTabIndex}); + } else { + element.removeAttr("tabindex"); + } + element.show(); + } + + cleanupJQueryElements.call(this, + "container", + "liveRegion", + "dropdown", + "results", + "search" + ); + }, + + // abstract + optionToData: function(element) { + if (element.is("option")) { + return { + id:element.prop("value"), + text:element.text(), + element: element.get(), + css: element.attr("class"), + disabled: element.prop("disabled"), + locked: equal(element.attr("locked"), "locked") || equal(element.data("locked"), true) + }; + } else if (element.is("optgroup")) { + return { + text:element.attr("label"), + children:[], + element: element.get(), + css: element.attr("class") + }; + } + }, + + // abstract + prepareOpts: function (opts) { + var element, select, idKey, ajaxUrl, self = this; + + element = opts.element; + + if (element.get(0).tagName.toLowerCase() === "select") { + this.select = select = opts.element; + } + + if (select) { + // these options are not allowed when attached to a select because they are picked up off the element itself + $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () { + if (this in opts) { + throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element."); + } + }); + } + + opts = $.extend({}, { + populateResults: function(container, results, query) { + var populate, id=this.opts.id, liveRegion=this.liveRegion; + + populate=function(results, container, depth) { + + var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted; + + results = opts.sortResults(results, container, query); + + for (i = 0, l = results.length; i < l; i = i + 1) { + + result=results[i]; + + disabled = (result.disabled === true); + selectable = (!disabled) && (id(result) !== undefined); + + compound=result.children && result.children.length > 0; + + node=$("<li></li>"); + node.addClass("select2-results-dept-"+depth); + node.addClass("select2-result"); + node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable"); + if (disabled) { node.addClass("select2-disabled"); } + if (compound) { node.addClass("select2-result-with-children"); } + node.addClass(self.opts.formatResultCssClass(result)); + node.attr("role", "presentation"); + + label=$(document.createElement("div")); + label.addClass("select2-result-label"); + label.attr("id", "select2-result-label-" + nextUid()); + label.attr("role", "option"); + + formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup); + if (formatted!==undefined) { + label.html(formatted); + node.append(label); + } + + + if (compound) { + + innerContainer=$("<ul></ul>"); + innerContainer.addClass("select2-result-sub"); + populate(result.children, innerContainer, depth+1); + node.append(innerContainer); + } + + node.data("select2-data", result); + container.append(node); + } + + liveRegion.text(opts.formatMatches(results.length)); + }; + + populate(results, container, 0); + } + }, $.fn.select2.defaults, opts); + + if (typeof(opts.id) !== "function") { + idKey = opts.id; + opts.id = function (e) { return e[idKey]; }; + } + + if ($.isArray(opts.element.data("select2Tags"))) { + if ("tags" in opts) { + throw "tags specified as both an attribute 'data-select2-tags' and in options of Select2 " + opts.element.attr("id"); + } + opts.tags=opts.element.data("select2Tags"); + } + + if (select) { + opts.query = this.bind(function (query) { + var data = { results: [], more: false }, + term = query.term, + children, placeholderOption, process; + + process=function(element, collection) { + var group; + if (element.is("option")) { + if (query.matcher(term, element.text(), element)) { + collection.push(self.optionToData(element)); + } + } else if (element.is("optgroup")) { + group=self.optionToData(element); + element.children().each2(function(i, elm) { process(elm, group.children); }); + if (group.children.length>0) { + collection.push(group); + } + } + }; + + children=element.children(); + + // ignore the placeholder option if there is one + if (this.getPlaceholder() !== undefined && children.length > 0) { + placeholderOption = this.getPlaceholderOption(); + if (placeholderOption) { + children=children.not(placeholderOption); + } + } + + children.each2(function(i, elm) { process(elm, data.results); }); + + query.callback(data); + }); + // this is needed because inside val() we construct choices from options and there id is hardcoded + opts.id=function(e) { return e.id; }; + } else { + if (!("query" in opts)) { + + if ("ajax" in opts) { + ajaxUrl = opts.element.data("ajax-url"); + if (ajaxUrl && ajaxUrl.length > 0) { + opts.ajax.url = ajaxUrl; + } + opts.query = ajax.call(opts.element, opts.ajax); + } else if ("data" in opts) { + opts.query = local(opts.data); + } else if ("tags" in opts) { + opts.query = tags(opts.tags); + if (opts.createSearchChoice === undefined) { + opts.createSearchChoice = function (term) { return {id: $.trim(term), text: $.trim(term)}; }; + } + if (opts.initSelection === undefined) { + opts.initSelection = function (element, callback) { + var data = []; + $(splitVal(element.val(), opts.separator)).each(function () { + var obj = { id: this, text: this }, + tags = opts.tags; + if ($.isFunction(tags)) tags=tags(); + $(tags).each(function() { if (equal(this.id, obj.id)) { obj = this; return false; } }); + data.push(obj); + }); + + callback(data); + }; + } + } + } + } + if (typeof(opts.query) !== "function") { + throw "query function not defined for Select2 " + opts.element.attr("id"); + } + + if (opts.createSearchChoicePosition === 'top') { + opts.createSearchChoicePosition = function(list, item) { list.unshift(item); }; + } + else if (opts.createSearchChoicePosition === 'bottom') { + opts.createSearchChoicePosition = function(list, item) { list.push(item); }; + } + else if (typeof(opts.createSearchChoicePosition) !== "function") { + throw "invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function"; + } + + return opts; + }, + + /** + * Monitor the original element for changes and update select2 accordingly + */ + // abstract + monitorSource: function () { + var el = this.opts.element, sync, observer; + + el.on("change.select2", this.bind(function (e) { + if (this.opts.element.data("select2-change-triggered") !== true) { + this.initSelection(); + } + })); + + sync = this.bind(function () { + + // sync enabled state + var disabled = el.prop("disabled"); + if (disabled === undefined) disabled = false; + this.enable(!disabled); + + var readonly = el.prop("readonly"); + if (readonly === undefined) readonly = false; + this.readonly(readonly); + + syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass); + this.container.addClass(evaluate(this.opts.containerCssClass)); + + syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass); + this.dropdown.addClass(evaluate(this.opts.dropdownCssClass)); + + }); + + // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener) + if (el.length && el[0].attachEvent) { + el.each(function() { + this.attachEvent("onpropertychange", sync); + }); + } + + // safari, chrome, firefox, IE11 + observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver; + if (observer !== undefined) { + if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; } + this.propertyObserver = new observer(function (mutations) { + mutations.forEach(sync); + }); + this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false }); + } + }, + + // abstract + triggerSelect: function(data) { + var evt = $.Event("select2-selecting", { val: this.id(data), object: data }); + this.opts.element.trigger(evt); + return !evt.isDefaultPrevented(); + }, + + /** + * Triggers the change event on the source element + */ + // abstract + triggerChange: function (details) { + + details = details || {}; + details= $.extend({}, details, { type: "change", val: this.val() }); + // prevents recursive triggering + this.opts.element.data("select2-change-triggered", true); + this.opts.element.trigger(details); + this.opts.element.data("select2-change-triggered", false); + + // some validation frameworks ignore the change event and listen instead to keyup, click for selects + // so here we trigger the click event manually + this.opts.element.click(); + + // ValidationEngine ignores the change event and listens instead to blur + // so here we trigger the blur event manually if so desired + if (this.opts.blurOnChange) + this.opts.element.blur(); + }, + + //abstract + isInterfaceEnabled: function() + { + return this.enabledInterface === true; + }, + + // abstract + enableInterface: function() { + var enabled = this._enabled && !this._readonly, + disabled = !enabled; + + if (enabled === this.enabledInterface) return false; + + this.container.toggleClass("select2-container-disabled", disabled); + this.close(); + this.enabledInterface = enabled; + + return true; + }, + + // abstract + enable: function(enabled) { + if (enabled === undefined) enabled = true; + if (this._enabled === enabled) return; + this._enabled = enabled; + + this.opts.element.prop("disabled", !enabled); + this.enableInterface(); + }, + + // abstract + disable: function() { + this.enable(false); + }, + + // abstract + readonly: function(enabled) { + if (enabled === undefined) enabled = false; + if (this._readonly === enabled) return; + this._readonly = enabled; + + this.opts.element.prop("readonly", enabled); + this.enableInterface(); + }, + + // abstract + opened: function () { + return this.container.hasClass("select2-dropdown-open"); + }, + + // abstract + positionDropdown: function() { + var $dropdown = this.dropdown, + offset = this.container.offset(), + height = this.container.outerHeight(false), + width = this.container.outerWidth(false), + dropHeight = $dropdown.outerHeight(false), + $window = $(window), + windowWidth = $window.width(), + windowHeight = $window.height(), + viewPortRight = $window.scrollLeft() + windowWidth, + viewportBottom = $window.scrollTop() + windowHeight, + dropTop = offset.top + height, + dropLeft = offset.left, + enoughRoomBelow = dropTop + dropHeight <= viewportBottom, + enoughRoomAbove = (offset.top - dropHeight) >= $window.scrollTop(), + dropWidth = $dropdown.outerWidth(false), + enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight, + aboveNow = $dropdown.hasClass("select2-drop-above"), + bodyOffset, + above, + changeDirection, + css, + resultsListNode; + + // always prefer the current above/below alignment, unless there is not enough room + if (aboveNow) { + above = true; + if (!enoughRoomAbove && enoughRoomBelow) { + changeDirection = true; + above = false; + } + } else { + above = false; + if (!enoughRoomBelow && enoughRoomAbove) { + changeDirection = true; + above = true; + } + } + + //if we are changing direction we need to get positions when dropdown is hidden; + if (changeDirection) { + $dropdown.hide(); + offset = this.container.offset(); + height = this.container.outerHeight(false); + width = this.container.outerWidth(false); + dropHeight = $dropdown.outerHeight(false); + viewPortRight = $window.scrollLeft() + windowWidth; + viewportBottom = $window.scrollTop() + windowHeight; + dropTop = offset.top + height; + dropLeft = offset.left; + dropWidth = $dropdown.outerWidth(false); + enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight; + $dropdown.show(); + + // fix so the cursor does not move to the left within the search-textbox in IE + this.focusSearch(); + } + + if (this.opts.dropdownAutoWidth) { + resultsListNode = $('.select2-results', $dropdown)[0]; + $dropdown.addClass('select2-drop-auto-width'); + $dropdown.css('width', ''); + // Add scrollbar width to dropdown if vertical scrollbar is present + dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width); + dropWidth > width ? width = dropWidth : dropWidth = width; + dropHeight = $dropdown.outerHeight(false); + enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight; + } + else { + this.container.removeClass('select2-drop-auto-width'); + } + + //console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow); + //console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body.scrollTop(), "enough?", enoughRoomAbove); + + // fix positioning when body has an offset and is not position: static + if (this.body.css('position') !== 'static') { + bodyOffset = this.body.offset(); + dropTop -= bodyOffset.top; + dropLeft -= bodyOffset.left; + } + + if (!enoughRoomOnRight) { + dropLeft = offset.left + this.container.outerWidth(false) - dropWidth; + } + + css = { + left: dropLeft, + width: width + }; + + if (above) { + css.top = offset.top - dropHeight; + css.bottom = 'auto'; + this.container.addClass("select2-drop-above"); + $dropdown.addClass("select2-drop-above"); + } + else { + css.top = dropTop; + css.bottom = 'auto'; + this.container.removeClass("select2-drop-above"); + $dropdown.removeClass("select2-drop-above"); + } + css = $.extend(css, evaluate(this.opts.dropdownCss)); + + $dropdown.css(css); + }, + + // abstract + shouldOpen: function() { + var event; + + if (this.opened()) return false; + + if (this._enabled === false || this._readonly === true) return false; + + event = $.Event("select2-opening"); + this.opts.element.trigger(event); + return !event.isDefaultPrevented(); + }, + + // abstract + clearDropdownAlignmentPreference: function() { + // clear the classes used to figure out the preference of where the dropdown should be opened + this.container.removeClass("select2-drop-above"); + this.dropdown.removeClass("select2-drop-above"); + }, + + /** + * Opens the dropdown + * + * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example, + * the dropdown is already open, or if the 'open' event listener on the element called preventDefault(). + */ + // abstract + open: function () { + + if (!this.shouldOpen()) return false; + + this.opening(); + + return true; + }, + + /** + * Performs the opening of the dropdown + */ + // abstract + opening: function() { + var cid = this.containerEventName, + scroll = "scroll." + cid, + resize = "resize."+cid, + orient = "orientationchange."+cid, + mask; + + this.container.addClass("select2-dropdown-open").addClass("select2-container-active"); + + this.clearDropdownAlignmentPreference(); + + if(this.dropdown[0] !== this.body.children().last()[0]) { + this.dropdown.detach().appendTo(this.body); + } + + // create the dropdown mask if doesn't already exist + mask = $("#select2-drop-mask"); + if (mask.length == 0) { + mask = $(document.createElement("div")); + mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask"); + mask.hide(); + mask.appendTo(this.body); + mask.on("mousedown touchstart click", function (e) { + // Prevent IE from generating a click event on the body + reinsertElement(mask); + + var dropdown = $("#select2-drop"), self; + if (dropdown.length > 0) { + self=dropdown.data("select2"); + if (self.opts.selectOnBlur) { + self.selectHighlighted({noFocus: true}); + } + self.close(); + e.preventDefault(); + e.stopPropagation(); + } + }); + } + + // ensure the mask is always right before the dropdown + if (this.dropdown.prev()[0] !== mask[0]) { + this.dropdown.before(mask); + } + + // move the global id to the correct dropdown + $("#select2-drop").removeAttr("id"); + this.dropdown.attr("id", "select2-drop"); + + // show the elements + mask.show(); + + this.positionDropdown(); + this.dropdown.show(); + this.positionDropdown(); + + this.dropdown.addClass("select2-drop-active"); + + // attach listeners to events that can change the position of the container and thus require + // the position of the dropdown to be updated as well so it does not come unglued from the container + var that = this; + this.container.parents().add(window).each(function () { + $(this).on(resize+" "+scroll+" "+orient, function (e) { + if (that.opened()) that.positionDropdown(); + }); + }); + + + }, + + // abstract + close: function () { + if (!this.opened()) return; + + var cid = this.containerEventName, + scroll = "scroll." + cid, + resize = "resize."+cid, + orient = "orientationchange."+cid; + + // unbind event listeners + this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); }); + + this.clearDropdownAlignmentPreference(); + + $("#select2-drop-mask").hide(); + this.dropdown.removeAttr("id"); // only the active dropdown has the select2-drop id + this.dropdown.hide(); + this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"); + this.results.empty(); + + + this.clearSearch(); + this.search.removeClass("select2-active"); + this.opts.element.trigger($.Event("select2-close")); + }, + + /** + * Opens control, sets input value, and updates results. + */ + // abstract + externalSearch: function (term) { + this.open(); + this.search.val(term); + this.updateResults(false); + }, + + // abstract + clearSearch: function () { + + }, + + //abstract + getMaximumSelectionSize: function() { + return evaluate(this.opts.maximumSelectionSize); + }, + + // abstract + ensureHighlightVisible: function () { + var results = this.results, children, index, child, hb, rb, y, more; + + index = this.highlight(); + + if (index < 0) return; + + if (index == 0) { + + // if the first element is highlighted scroll all the way to the top, + // that way any unselectable headers above it will also be scrolled + // into view + + results.scrollTop(0); + return; + } + + children = this.findHighlightableChoices().find('.select2-result-label'); + + child = $(children[index]); + + hb = child.offset().top + child.outerHeight(true); + + // if this is the last child lets also make sure select2-more-results is visible + if (index === children.length - 1) { + more = results.find("li.select2-more-results"); + if (more.length > 0) { + hb = more.offset().top + more.outerHeight(true); + } + } + + rb = results.offset().top + results.outerHeight(true); + if (hb > rb) { + results.scrollTop(results.scrollTop() + (hb - rb)); + } + y = child.offset().top - results.offset().top; + + // make sure the top of the element is visible + if (y < 0 && child.css('display') != 'none' ) { + results.scrollTop(results.scrollTop() + y); // y is negative + } + }, + + // abstract + findHighlightableChoices: function() { + return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)"); + }, + + // abstract + moveHighlight: function (delta) { + var choices = this.findHighlightableChoices(), + index = this.highlight(); + + while (index > -1 && index < choices.length) { + index += delta; + var choice = $(choices[index]); + if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) { + this.highlight(index); + break; + } + } + }, + + // abstract + highlight: function (index) { + var choices = this.findHighlightableChoices(), + choice, + data; + + if (arguments.length === 0) { + return indexOf(choices.filter(".select2-highlighted")[0], choices.get()); + } + + if (index >= choices.length) index = choices.length - 1; + if (index < 0) index = 0; + + this.removeHighlight(); + + choice = $(choices[index]); + choice.addClass("select2-highlighted"); + + // ensure assistive technology can determine the active choice + this.search.attr("aria-activedescendant", choice.find(".select2-result-label").attr("id")); + + this.ensureHighlightVisible(); + + this.liveRegion.text(choice.text()); + + data = choice.data("select2-data"); + if (data) { + this.opts.element.trigger({ type: "select2-highlight", val: this.id(data), choice: data }); + } + }, + + removeHighlight: function() { + this.results.find(".select2-highlighted").removeClass("select2-highlighted"); + }, + + touchMoved: function() { + this._touchMoved = true; + }, + + clearTouchMoved: function() { + this._touchMoved = false; + }, + + // abstract + countSelectableResults: function() { + return this.findHighlightableChoices().length; + }, + + // abstract + highlightUnderEvent: function (event) { + var el = $(event.target).closest(".select2-result-selectable"); + if (el.length > 0 && !el.is(".select2-highlighted")) { + var choices = this.findHighlightableChoices(); + this.highlight(choices.index(el)); + } else if (el.length == 0) { + // if we are over an unselectable item remove all highlights + this.removeHighlight(); + } + }, + + // abstract + loadMoreIfNeeded: function () { + var results = this.results, + more = results.find("li.select2-more-results"), + below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible + page = this.resultsPage + 1, + self=this, + term=this.search.val(), + context=this.context; + + if (more.length === 0) return; + below = more.offset().top - results.offset().top - results.height(); + + if (below <= this.opts.loadMorePadding) { + more.addClass("select2-active"); + this.opts.query({ + element: this.opts.element, + term: term, + page: page, + context: context, + matcher: this.opts.matcher, + callback: this.bind(function (data) { + + // ignore a response if the select2 has been closed before it was received + if (!self.opened()) return; + + + self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context}); + self.postprocessResults(data, false, false); + + if (data.more===true) { + more.detach().appendTo(results).text(evaluate(self.opts.formatLoadMore, page+1)); + window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10); + } else { + more.remove(); + } + self.positionDropdown(); + self.resultsPage = page; + self.context = data.context; + this.opts.element.trigger({ type: "select2-loaded", items: data }); + })}); + } + }, + + /** + * Default tokenizer function which does nothing + */ + tokenize: function() { + + }, + + /** + * @param initial whether or not this is the call to this method right after the dropdown has been opened + */ + // abstract + updateResults: function (initial) { + var search = this.search, + results = this.results, + opts = this.opts, + data, + self = this, + input, + term = search.val(), + lastTerm = $.data(this.container, "select2-last-term"), + // sequence number used to drop out-of-order responses + queryNumber; + + // prevent duplicate queries against the same term + if (initial !== true && lastTerm && equal(term, lastTerm)) return; + + $.data(this.container, "select2-last-term", term); + + // if the search is currently hidden we do not alter the results + if (initial !== true && (this.showSearchInput === false || !this.opened())) { + return; + } + + function postRender() { + search.removeClass("select2-active"); + self.positionDropdown(); + if (results.find('.select2-no-results,.select2-selection-limit,.select2-searching').length) { + self.liveRegion.text(results.text()); + } + else { + self.liveRegion.text(self.opts.formatMatches(results.find('.select2-result-selectable').length)); + } + } + + function render(html) { + results.html(html); + postRender(); + } + + queryNumber = ++this.queryCount; + + var maxSelSize = this.getMaximumSelectionSize(); + if (maxSelSize >=1) { + data = this.data(); + if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) { + render("<li class='select2-selection-limit'>" + evaluate(opts.formatSelectionTooBig, maxSelSize) + "</li>"); + return; + } + } + + if (search.val().length < opts.minimumInputLength) { + if (checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) { + render("<li class='select2-no-results'>" + evaluate(opts.formatInputTooShort, search.val(), opts.minimumInputLength) + "</li>"); + } else { + render(""); + } + if (initial && this.showSearch) this.showSearch(true); + return; + } + + if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) { + if (checkFormatter(opts.formatInputTooLong, "formatInputTooLong")) { + render("<li class='select2-no-results'>" + evaluate(opts.formatInputTooLong, search.val(), opts.maximumInputLength) + "</li>"); + } else { + render(""); + } + return; + } + + if (opts.formatSearching && this.findHighlightableChoices().length === 0) { + render("<li class='select2-searching'>" + evaluate(opts.formatSearching) + "</li>"); + } + + search.addClass("select2-active"); + + this.removeHighlight(); + + // give the tokenizer a chance to pre-process the input + input = this.tokenize(); + if (input != undefined && input != null) { + search.val(input); + } + + this.resultsPage = 1; + + opts.query({ + element: opts.element, + term: search.val(), + page: this.resultsPage, + context: null, + matcher: opts.matcher, + callback: this.bind(function (data) { + var def; // default choice + + // ignore old responses + if (queryNumber != this.queryCount) { + return; + } + + // ignore a response if the select2 has been closed before it was received + if (!this.opened()) { + this.search.removeClass("select2-active"); + return; + } + + // save context, if any + this.context = (data.context===undefined) ? null : data.context; + // create a default choice and prepend it to the list + if (this.opts.createSearchChoice && search.val() !== "") { + def = this.opts.createSearchChoice.call(self, search.val(), data.results); + if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) { + if ($(data.results).filter( + function () { + return equal(self.id(this), self.id(def)); + }).length === 0) { + this.opts.createSearchChoicePosition(data.results, def); + } + } + } + + if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) { + render("<li class='select2-no-results'>" + evaluate(opts.formatNoMatches, search.val()) + "</li>"); + return; + } + + results.empty(); + self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null}); + + if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) { + results.append("<li class='select2-more-results'>" + self.opts.escapeMarkup(evaluate(opts.formatLoadMore, this.resultsPage)) + "</li>"); + window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10); + } + + this.postprocessResults(data, initial); + + postRender(); + + this.opts.element.trigger({ type: "select2-loaded", items: data }); + })}); + }, + + // abstract + cancel: function () { + this.close(); + }, + + // abstract + blur: function () { + // if selectOnBlur == true, select the currently highlighted option + if (this.opts.selectOnBlur) + this.selectHighlighted({noFocus: true}); + + this.close(); + this.container.removeClass("select2-container-active"); + // synonymous to .is(':focus'), which is available in jquery >= 1.6 + if (this.search[0] === document.activeElement) { this.search.blur(); } + this.clearSearch(); + this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); + }, + + // abstract + focusSearch: function () { + focus(this.search); + }, + + // abstract + selectHighlighted: function (options) { + if (this._touchMoved) { + this.clearTouchMoved(); + return; + } + var index=this.highlight(), + highlighted=this.results.find(".select2-highlighted"), + data = highlighted.closest('.select2-result').data("select2-data"); + + if (data) { + this.highlight(index); + this.onSelect(data, options); + } else if (options && options.noFocus) { + this.close(); + } + }, + + // abstract + getPlaceholder: function () { + var placeholderOption; + return this.opts.element.attr("placeholder") || + this.opts.element.attr("data-placeholder") || // jquery 1.4 compat + this.opts.element.data("placeholder") || + this.opts.placeholder || + ((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined); + }, + + // abstract + getPlaceholderOption: function() { + if (this.select) { + var firstOption = this.select.children('option').first(); + if (this.opts.placeholderOption !== undefined ) { + //Determine the placeholder option based on the specified placeholderOption setting + return (this.opts.placeholderOption === "first" && firstOption) || + (typeof this.opts.placeholderOption === "function" && this.opts.placeholderOption(this.select)); + } else if ($.trim(firstOption.text()) === "" && firstOption.val() === "") { + //No explicit placeholder option specified, use the first if it's blank + return firstOption; + } + } + }, + + /** + * Get the desired width for the container element. This is + * derived first from option `width` passed to select2, then + * the inline 'style' on the original element, and finally + * falls back to the jQuery calculated element width. + */ + // abstract + initContainerWidth: function () { + function resolveContainerWidth() { + var style, attrs, matches, i, l, attr; + + if (this.opts.width === "off") { + return null; + } else if (this.opts.width === "element"){ + return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px'; + } else if (this.opts.width === "copy" || this.opts.width === "resolve") { + // check if there is inline style on the element that contains width + style = this.opts.element.attr('style'); + if (style !== undefined) { + attrs = style.split(';'); + for (i = 0, l = attrs.length; i < l; i = i + 1) { + attr = attrs[i].replace(/\s/g, ''); + matches = attr.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i); + if (matches !== null && matches.length >= 1) + return matches[1]; + } + } + + if (this.opts.width === "resolve") { + // next check if css('width') can resolve a width that is percent based, this is sometimes possible + // when attached to input type=hidden or elements hidden via css + style = this.opts.element.css('width'); + if (style.indexOf("%") > 0) return style; + + // finally, fallback on the calculated width of the element + return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px'); + } + + return null; + } else if ($.isFunction(this.opts.width)) { + return this.opts.width(); + } else { + return this.opts.width; + } + }; + + var width = resolveContainerWidth.call(this); + if (width !== null) { + this.container.css("width", width); + } + } + }); + + SingleSelect2 = clazz(AbstractSelect2, { + + // single + + createContainer: function () { + var container = $(document.createElement("div")).attr({ + "class": "select2-container" + }).html([ + "<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>", + " <span class='select2-chosen'> </span><abbr class='select2-search-choice-close'></abbr>", + " <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>", + "</a>", + "<label for='' class='select2-offscreen'></label>", + "<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />", + "<div class='select2-drop select2-display-none'>", + " <div class='select2-search'>", + " <label for='' class='select2-offscreen'></label>", + " <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'", + " aria-autocomplete='list' />", + " </div>", + " <ul class='select2-results' role='listbox'>", + " </ul>", + "</div>"].join("")); + return container; + }, + + // single + enableInterface: function() { + if (this.parent.enableInterface.apply(this, arguments)) { + this.focusser.prop("disabled", !this.isInterfaceEnabled()); + } + }, + + // single + opening: function () { + var el, range, len; + + if (this.opts.minimumResultsForSearch >= 0) { + this.showSearch(true); + } + + this.parent.opening.apply(this, arguments); + + if (this.showSearchInput !== false) { + // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range + // all other browsers handle this just fine + + this.search.val(this.focusser.val()); + } + if (this.opts.shouldFocusInput(this)) { + this.search.focus(); + // move the cursor to the end after focussing, otherwise it will be at the beginning and + // new text will appear *before* focusser.val() + el = this.search.get(0); + if (el.createTextRange) { + range = el.createTextRange(); + range.collapse(false); + range.select(); + } else if (el.setSelectionRange) { + len = this.search.val().length; + el.setSelectionRange(len, len); + } + } + + // initializes search's value with nextSearchTerm (if defined by user) + // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter + if(this.search.val() === "") { + if(this.nextSearchTerm != undefined){ + this.search.val(this.nextSearchTerm); + this.search.select(); + } + } + + this.focusser.prop("disabled", true).val(""); + this.updateResults(true); + this.opts.element.trigger($.Event("select2-open")); + }, + + // single + close: function () { + if (!this.opened()) return; + this.parent.close.apply(this, arguments); + + this.focusser.prop("disabled", false); + + if (this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + }, + + // single + focus: function () { + if (this.opened()) { + this.close(); + } else { + this.focusser.prop("disabled", false); + if (this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + } + }, + + // single + isFocused: function () { + return this.container.hasClass("select2-container-active"); + }, + + // single + cancel: function () { + this.parent.cancel.apply(this, arguments); + this.focusser.prop("disabled", false); + + if (this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + }, + + // single + destroy: function() { + $("label[for='" + this.focusser.attr('id') + "']") + .attr('for', this.opts.element.attr("id")); + this.parent.destroy.apply(this, arguments); + + cleanupJQueryElements.call(this, + "selection", + "focusser" + ); + }, + + // single + initContainer: function () { + + var selection, + container = this.container, + dropdown = this.dropdown, + idSuffix = nextUid(), + elementLabel; + + if (this.opts.minimumResultsForSearch < 0) { + this.showSearch(false); + } else { + this.showSearch(true); + } + + this.selection = selection = container.find(".select2-choice"); + + this.focusser = container.find(".select2-focusser"); + + // add aria associations + selection.find(".select2-chosen").attr("id", "select2-chosen-"+idSuffix); + this.focusser.attr("aria-labelledby", "select2-chosen-"+idSuffix); + this.results.attr("id", "select2-results-"+idSuffix); + this.search.attr("aria-owns", "select2-results-"+idSuffix); + + // rewrite labels from original element to focusser + this.focusser.attr("id", "s2id_autogen"+idSuffix); + + elementLabel = $("label[for='" + this.opts.element.attr("id") + "']"); + + this.focusser.prev() + .text(elementLabel.text()) + .attr('for', this.focusser.attr('id')); + + // Ensure the original element retains an accessible name + var originalTitle = this.opts.element.attr("title"); + this.opts.element.attr("title", (originalTitle || elementLabel.text())); + + this.focusser.attr("tabindex", this.elementTabIndex); + + // write label for search field using the label from the focusser element + this.search.attr("id", this.focusser.attr('id') + '_search'); + + this.search.prev() + .text($("label[for='" + this.focusser.attr('id') + "']").text()) + .attr('for', this.search.attr('id')); + + this.search.on("keydown", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { + // prevent the page from scrolling + killEvent(e); + return; + } + + switch (e.which) { + case KEY.UP: + case KEY.DOWN: + this.moveHighlight((e.which === KEY.UP) ? -1 : 1); + killEvent(e); + return; + case KEY.ENTER: + this.selectHighlighted(); + killEvent(e); + return; + case KEY.TAB: + this.selectHighlighted({noFocus: true}); + return; + case KEY.ESC: + this.cancel(e); + killEvent(e); + return; + } + })); + + this.search.on("blur", this.bind(function(e) { + // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown. + // without this the search field loses focus which is annoying + if (document.activeElement === this.body.get(0)) { + window.setTimeout(this.bind(function() { + if (this.opened()) { + this.search.focus(); + } + }), 0); + } + })); + + this.focusser.on("keydown", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) { + return; + } + + if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { + killEvent(e); + return; + } + + if (e.which == KEY.DOWN || e.which == KEY.UP + || (e.which == KEY.ENTER && this.opts.openOnEnter)) { + + if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return; + + this.open(); + killEvent(e); + return; + } + + if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) { + if (this.opts.allowClear) { + this.clear(); + } + killEvent(e); + return; + } + })); + + + installKeyUpChangeEvent(this.focusser); + this.focusser.on("keyup-change input", this.bind(function(e) { + if (this.opts.minimumResultsForSearch >= 0) { + e.stopPropagation(); + if (this.opened()) return; + this.open(); + } + })); + + selection.on("mousedown touchstart", "abbr", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + this.clear(); + killEventImmediately(e); + this.close(); + this.selection.focus(); + })); + + selection.on("mousedown touchstart", this.bind(function (e) { + // Prevent IE from generating a click event on the body + reinsertElement(selection); + + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + + if (this.opened()) { + this.close(); + } else if (this.isInterfaceEnabled()) { + this.open(); + } + + killEvent(e); + })); + + dropdown.on("mousedown touchstart", this.bind(function() { + if (this.opts.shouldFocusInput(this)) { + this.search.focus(); + } + })); + + selection.on("focus", this.bind(function(e) { + killEvent(e); + })); + + this.focusser.on("focus", this.bind(function(){ + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.container.addClass("select2-container-active"); + })).on("blur", this.bind(function() { + if (!this.opened()) { + this.container.removeClass("select2-container-active"); + this.opts.element.trigger($.Event("select2-blur")); + } + })); + this.search.on("focus", this.bind(function(){ + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.container.addClass("select2-container-active"); + })); + + this.initContainerWidth(); + this.opts.element.addClass("select2-offscreen"); + this.setPlaceholder(); + + }, + + // single + clear: function(triggerChange) { + var data=this.selection.data("select2-data"); + if (data) { // guard against queued quick consecutive clicks + var evt = $.Event("select2-clearing"); + this.opts.element.trigger(evt); + if (evt.isDefaultPrevented()) { + return; + } + var placeholderOption = this.getPlaceholderOption(); + this.opts.element.val(placeholderOption ? placeholderOption.val() : ""); + this.selection.find(".select2-chosen").empty(); + this.selection.removeData("select2-data"); + this.setPlaceholder(); + + if (triggerChange !== false){ + this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data }); + this.triggerChange({removed:data}); + } + } + }, + + /** + * Sets selection based on source element's value + */ + // single + initSelection: function () { + var selected; + if (this.isPlaceholderOptionSelected()) { + this.updateSelection(null); + this.close(); + this.setPlaceholder(); + } else { + var self = this; + this.opts.initSelection.call(null, this.opts.element, function(selected){ + if (selected !== undefined && selected !== null) { + self.updateSelection(selected); + self.close(); + self.setPlaceholder(); + self.nextSearchTerm = self.opts.nextSearchTerm(selected, self.search.val()); + } + }); + } + }, + + isPlaceholderOptionSelected: function() { + var placeholderOption; + if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered + return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop("selected")) + || (this.opts.element.val() === "") + || (this.opts.element.val() === undefined) + || (this.opts.element.val() === null); + }, + + // single + prepareOpts: function () { + var opts = this.parent.prepareOpts.apply(this, arguments), + self=this; + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + // install the selection initializer + opts.initSelection = function (element, callback) { + var selected = element.find("option").filter(function() { return this.selected && !this.disabled }); + // a single select box always has a value, no need to null check 'selected' + callback(self.optionToData(selected)); + }; + } else if ("data" in opts) { + // install default initSelection when applied to hidden input and data is local + opts.initSelection = opts.initSelection || function (element, callback) { + var id = element.val(); + //search in data by id, storing the actual matching item + var match = null; + opts.query({ + matcher: function(term, text, el){ + var is_match = equal(id, opts.id(el)); + if (is_match) { + match = el; + } + return is_match; + }, + callback: !$.isFunction(callback) ? $.noop : function() { + callback(match); + } + }); + }; + } + + return opts; + }, + + // single + getPlaceholder: function() { + // if a placeholder is specified on a single select without a valid placeholder option ignore it + if (this.select) { + if (this.getPlaceholderOption() === undefined) { + return undefined; + } + } + + return this.parent.getPlaceholder.apply(this, arguments); + }, + + // single + setPlaceholder: function () { + var placeholder = this.getPlaceholder(); + + if (this.isPlaceholderOptionSelected() && placeholder !== undefined) { + + // check for a placeholder option if attached to a select + if (this.select && this.getPlaceholderOption() === undefined) return; + + this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(placeholder)); + + this.selection.addClass("select2-default"); + + this.container.removeClass("select2-allowclear"); + } + }, + + // single + postprocessResults: function (data, initial, noHighlightUpdate) { + var selected = 0, self = this, showSearchInput = true; + + // find the selected element in the result list + + this.findHighlightableChoices().each2(function (i, elm) { + if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) { + selected = i; + return false; + } + }); + + // and highlight it + if (noHighlightUpdate !== false) { + if (initial === true && selected >= 0) { + this.highlight(selected); + } else { + this.highlight(0); + } + } + + // hide the search box if this is the first we got the results and there are enough of them for search + + if (initial === true) { + var min = this.opts.minimumResultsForSearch; + if (min >= 0) { + this.showSearch(countResults(data.results) >= min); + } + } + }, + + // single + showSearch: function(showSearchInput) { + if (this.showSearchInput === showSearchInput) return; + + this.showSearchInput = showSearchInput; + + this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput); + this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput); + //add "select2-with-searchbox" to the container if search box is shown + $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput); + }, + + // single + onSelect: function (data, options) { + + if (!this.triggerSelect(data)) { return; } + + var old = this.opts.element.val(), + oldData = this.data(); + + this.opts.element.val(this.id(data)); + this.updateSelection(data); + + this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data }); + + this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val()); + this.close(); + + if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) { + this.focusser.focus(); + } + + if (!equal(old, this.id(data))) { + this.triggerChange({ added: data, removed: oldData }); + } + }, + + // single + updateSelection: function (data) { + + var container=this.selection.find(".select2-chosen"), formatted, cssClass; + + this.selection.data("select2-data", data); + + container.empty(); + if (data !== null) { + formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup); + } + if (formatted !== undefined) { + container.append(formatted); + } + cssClass=this.opts.formatSelectionCssClass(data, container); + if (cssClass !== undefined) { + container.addClass(cssClass); + } + + this.selection.removeClass("select2-default"); + + if (this.opts.allowClear && this.getPlaceholder() !== undefined) { + this.container.addClass("select2-allowclear"); + } + }, + + // single + val: function () { + var val, + triggerChange = false, + data = null, + self = this, + oldData = this.data(); + + if (arguments.length === 0) { + return this.opts.element.val(); + } + + val = arguments[0]; + + if (arguments.length > 1) { + triggerChange = arguments[1]; + } + + if (this.select) { + this.select + .val(val) + .find("option").filter(function() { return this.selected }).each2(function (i, elm) { + data = self.optionToData(elm); + return false; + }); + this.updateSelection(data); + this.setPlaceholder(); + if (triggerChange) { + this.triggerChange({added: data, removed:oldData}); + } + } else { + // val is an id. !val is true for [undefined,null,'',0] - 0 is legal + if (!val && val !== 0) { + this.clear(triggerChange); + return; + } + if (this.opts.initSelection === undefined) { + throw new Error("cannot call val() if initSelection() is not defined"); + } + this.opts.element.val(val); + this.opts.initSelection(this.opts.element, function(data){ + self.opts.element.val(!data ? "" : self.id(data)); + self.updateSelection(data); + self.setPlaceholder(); + if (triggerChange) { + self.triggerChange({added: data, removed:oldData}); + } + }); + } + }, + + // single + clearSearch: function () { + this.search.val(""); + this.focusser.val(""); + }, + + // single + data: function(value) { + var data, + triggerChange = false; + + if (arguments.length === 0) { + data = this.selection.data("select2-data"); + if (data == undefined) data = null; + return data; + } else { + if (arguments.length > 1) { + triggerChange = arguments[1]; + } + if (!value) { + this.clear(triggerChange); + } else { + data = this.data(); + this.opts.element.val(!value ? "" : this.id(value)); + this.updateSelection(value); + if (triggerChange) { + this.triggerChange({added: value, removed:data}); + } + } + } + } + }); + + MultiSelect2 = clazz(AbstractSelect2, { + + // multi + createContainer: function () { + var container = $(document.createElement("div")).attr({ + "class": "select2-container select2-container-multi" + }).html([ + "<ul class='select2-choices'>", + " <li class='select2-search-field'>", + " <label for='' class='select2-offscreen'></label>", + " <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>", + " </li>", + "</ul>", + "<div class='select2-drop select2-drop-multi select2-display-none'>", + " <ul class='select2-results'>", + " </ul>", + "</div>"].join("")); + return container; + }, + + // multi + prepareOpts: function () { + var opts = this.parent.prepareOpts.apply(this, arguments), + self=this; + + // TODO validate placeholder is a string if specified + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + // install the selection initializer + opts.initSelection = function (element, callback) { + + var data = []; + + element.find("option").filter(function() { return this.selected && !this.disabled }).each2(function (i, elm) { + data.push(self.optionToData(elm)); + }); + callback(data); + }; + } else if ("data" in opts) { + // install default initSelection when applied to hidden input and data is local + opts.initSelection = opts.initSelection || function (element, callback) { + var ids = splitVal(element.val(), opts.separator); + //search in data by array of ids, storing matching items in a list + var matches = []; + opts.query({ + matcher: function(term, text, el){ + var is_match = $.grep(ids, function(id) { + return equal(id, opts.id(el)); + }).length; + if (is_match) { + matches.push(el); + } + return is_match; + }, + callback: !$.isFunction(callback) ? $.noop : function() { + // reorder matches based on the order they appear in the ids array because right now + // they are in the order in which they appear in data array + var ordered = []; + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + for (var j = 0; j < matches.length; j++) { + var match = matches[j]; + if (equal(id, opts.id(match))) { + ordered.push(match); + matches.splice(j, 1); + break; + } + } + } + callback(ordered); + } + }); + }; + } + + return opts; + }, + + // multi + selectChoice: function (choice) { + + var selected = this.container.find(".select2-search-choice-focus"); + if (selected.length && choice && choice[0] == selected[0]) { + + } else { + if (selected.length) { + this.opts.element.trigger("choice-deselected", selected); + } + selected.removeClass("select2-search-choice-focus"); + if (choice && choice.length) { + this.close(); + choice.addClass("select2-search-choice-focus"); + this.opts.element.trigger("choice-selected", choice); + } + } + }, + + // multi + destroy: function() { + $("label[for='" + this.search.attr('id') + "']") + .attr('for', this.opts.element.attr("id")); + this.parent.destroy.apply(this, arguments); + + cleanupJQueryElements.call(this, + "searchContainer", + "selection" + ); + }, + + // multi + initContainer: function () { + + var selector = ".select2-choices", selection; + + this.searchContainer = this.container.find(".select2-search-field"); + this.selection = selection = this.container.find(selector); + + var _this = this; + this.selection.on("click", ".select2-search-choice:not(.select2-locked)", function (e) { + //killEvent(e); + _this.search[0].focus(); + _this.selectChoice($(this)); + }); + + // rewrite labels from original element to focusser + this.search.attr("id", "s2id_autogen"+nextUid()); + + this.search.prev() + .text($("label[for='" + this.opts.element.attr("id") + "']").text()) + .attr('for', this.search.attr('id')); + + this.search.on("input paste", this.bind(function() { + if (!this.isInterfaceEnabled()) return; + if (!this.opened()) { + this.open(); + } + })); + + this.search.attr("tabindex", this.elementTabIndex); + + this.keydowns = 0; + this.search.on("keydown", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + ++this.keydowns; + var selected = selection.find(".select2-search-choice-focus"); + var prev = selected.prev(".select2-search-choice:not(.select2-locked)"); + var next = selected.next(".select2-search-choice:not(.select2-locked)"); + var pos = getCursorInfo(this.search); + + if (selected.length && + (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) { + var selectedChoice = selected; + if (e.which == KEY.LEFT && prev.length) { + selectedChoice = prev; + } + else if (e.which == KEY.RIGHT) { + selectedChoice = next.length ? next : null; + } + else if (e.which === KEY.BACKSPACE) { + if (this.unselect(selected.first())) { + this.search.width(10); + selectedChoice = prev.length ? prev : next; + } + } else if (e.which == KEY.DELETE) { + if (this.unselect(selected.first())) { + this.search.width(10); + selectedChoice = next.length ? next : null; + } + } else if (e.which == KEY.ENTER) { + selectedChoice = null; + } + + this.selectChoice(selectedChoice); + killEvent(e); + if (!selectedChoice || !selectedChoice.length) { + this.open(); + } + return; + } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1) + || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) { + + this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last()); + killEvent(e); + return; + } else { + this.selectChoice(null); + } + + if (this.opened()) { + switch (e.which) { + case KEY.UP: + case KEY.DOWN: + this.moveHighlight((e.which === KEY.UP) ? -1 : 1); + killEvent(e); + return; + case KEY.ENTER: + this.selectHighlighted(); + killEvent(e); + return; + case KEY.TAB: + this.selectHighlighted({noFocus:true}); + this.close(); + return; + case KEY.ESC: + this.cancel(e); + killEvent(e); + return; + } + } + + if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) + || e.which === KEY.BACKSPACE || e.which === KEY.ESC) { + return; + } + + if (e.which === KEY.ENTER) { + if (this.opts.openOnEnter === false) { + return; + } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) { + return; + } + } + + this.open(); + + if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { + // prevent the page from scrolling + killEvent(e); + } + + if (e.which === KEY.ENTER) { + // prevent form from being submitted + killEvent(e); + } + + })); + + this.search.on("keyup", this.bind(function (e) { + this.keydowns = 0; + this.resizeSearch(); + }) + ); + + this.search.on("blur", this.bind(function(e) { + this.container.removeClass("select2-container-active"); + this.search.removeClass("select2-focused"); + this.selectChoice(null); + if (!this.opened()) this.clearSearch(); + e.stopImmediatePropagation(); + this.opts.element.trigger($.Event("select2-blur")); + })); + + this.container.on("click", selector, this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + if ($(e.target).closest(".select2-search-choice").length > 0) { + // clicked inside a select2 search choice, do not open + return; + } + this.selectChoice(null); + this.clearPlaceholder(); + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.open(); + this.focusSearch(); + e.preventDefault(); + })); + + this.container.on("focus", selector, this.bind(function () { + if (!this.isInterfaceEnabled()) return; + if (!this.container.hasClass("select2-container-active")) { + this.opts.element.trigger($.Event("select2-focus")); + } + this.container.addClass("select2-container-active"); + this.dropdown.addClass("select2-drop-active"); + this.clearPlaceholder(); + })); + + this.initContainerWidth(); + this.opts.element.addClass("select2-offscreen"); + + // set the placeholder if necessary + this.clearSearch(); + }, + + // multi + enableInterface: function() { + if (this.parent.enableInterface.apply(this, arguments)) { + this.search.prop("disabled", !this.isInterfaceEnabled()); + } + }, + + // multi + initSelection: function () { + var data; + if (this.opts.element.val() === "" && this.opts.element.text() === "") { + this.updateSelection([]); + this.close(); + // set the placeholder if necessary + this.clearSearch(); + } + if (this.select || this.opts.element.val() !== "") { + var self = this; + this.opts.initSelection.call(null, this.opts.element, function(data){ + if (data !== undefined && data !== null) { + self.updateSelection(data); + self.close(); + // set the placeholder if necessary + self.clearSearch(); + } + }); + } + }, + + // multi + clearSearch: function () { + var placeholder = this.getPlaceholder(), + maxWidth = this.getMaxSearchWidth(); + + if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) { + this.search.val(placeholder).addClass("select2-default"); + // stretch the search box to full width of the container so as much of the placeholder is visible as possible + // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944 + this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width")); + } else { + this.search.val("").width(10); + } + }, + + // multi + clearPlaceholder: function () { + if (this.search.hasClass("select2-default")) { + this.search.val("").removeClass("select2-default"); + } + }, + + // multi + opening: function () { + this.clearPlaceholder(); // should be done before super so placeholder is not used to search + this.resizeSearch(); + + this.parent.opening.apply(this, arguments); + + this.focusSearch(); + + // initializes search's value with nextSearchTerm (if defined by user) + // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter + if(this.search.val() === "") { + if(this.nextSearchTerm != undefined){ + this.search.val(this.nextSearchTerm); + this.search.select(); + } + } + + this.updateResults(true); + if (this.opts.shouldFocusInput(this)) { + this.search.focus(); + } + this.opts.element.trigger($.Event("select2-open")); + }, + + // multi + close: function () { + if (!this.opened()) return; + this.parent.close.apply(this, arguments); + }, + + // multi + focus: function () { + this.close(); + this.search.focus(); + }, + + // multi + isFocused: function () { + return this.search.hasClass("select2-focused"); + }, + + // multi + updateSelection: function (data) { + var ids = [], filtered = [], self = this; + + // filter out duplicates + $(data).each(function () { + if (indexOf(self.id(this), ids) < 0) { + ids.push(self.id(this)); + filtered.push(this); + } + }); + data = filtered; + + this.selection.find(".select2-search-choice").remove(); + $(data).each(function () { + self.addSelectedChoice(this); + }); + self.postprocessResults(); + }, + + // multi + tokenize: function() { + var input = this.search.val(); + input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts); + if (input != null && input != undefined) { + this.search.val(input); + if (input.length > 0) { + this.open(); + } + } + + }, + + // multi + onSelect: function (data, options) { + + if (!this.triggerSelect(data)) { return; } + + this.addSelectedChoice(data); + + this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data }); + + // keep track of the search's value before it gets cleared + this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val()); + + this.clearSearch(); + this.updateResults(); + + if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true); + + if (this.opts.closeOnSelect) { + this.close(); + this.search.width(10); + } else { + if (this.countSelectableResults()>0) { + this.search.width(10); + this.resizeSearch(); + if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) { + // if we reached max selection size repaint the results so choices + // are replaced with the max selection reached message + this.updateResults(true); + } else { + // initializes search's value with nextSearchTerm and update search result + if(this.nextSearchTerm != undefined){ + this.search.val(this.nextSearchTerm); + this.updateResults(); + this.search.select(); + } + } + this.positionDropdown(); + } else { + // if nothing left to select close + this.close(); + this.search.width(10); + } + } + + // since its not possible to select an element that has already been + // added we do not need to check if this is a new element before firing change + this.triggerChange({ added: data }); + + if (!options || !options.noFocus) + this.focusSearch(); + }, + + // multi + cancel: function () { + this.close(); + this.focusSearch(); + }, + + addSelectedChoice: function (data) { + var enableChoice = !data.locked, + enabledItem = $( + "<li class='select2-search-choice'>" + + " <div></div>" + + " <a href='#' class='select2-search-choice-close' tabindex='-1'></a>" + + "</li>"), + disabledItem = $( + "<li class='select2-search-choice select2-locked'>" + + "<div></div>" + + "</li>"); + var choice = enableChoice ? enabledItem : disabledItem, + id = this.id(data), + val = this.getVal(), + formatted, + cssClass; + + formatted=this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup); + if (formatted != undefined) { + choice.find("div").replaceWith("<div>"+formatted+"</div>"); + } + cssClass=this.opts.formatSelectionCssClass(data, choice.find("div")); + if (cssClass != undefined) { + choice.addClass(cssClass); + } + + if(enableChoice){ + choice.find(".select2-search-choice-close") + .on("mousedown", killEvent) + .on("click dblclick", this.bind(function (e) { + if (!this.isInterfaceEnabled()) return; + + this.unselect($(e.target)); + this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); + killEvent(e); + this.close(); + this.focusSearch(); + })).on("focus", this.bind(function () { + if (!this.isInterfaceEnabled()) return; + this.container.addClass("select2-container-active"); + this.dropdown.addClass("select2-drop-active"); + })); + } + + choice.data("select2-data", data); + choice.insertBefore(this.searchContainer); + + val.push(id); + this.setVal(val); + }, + + // multi + unselect: function (selected) { + var val = this.getVal(), + data, + index; + selected = selected.closest(".select2-search-choice"); + + if (selected.length === 0) { + throw "Invalid argument: " + selected + ". Must be .select2-search-choice"; + } + + data = selected.data("select2-data"); + + if (!data) { + // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued + // and invoked on an element already removed + return; + } + + var evt = $.Event("select2-removing"); + evt.val = this.id(data); + evt.choice = data; + this.opts.element.trigger(evt); + + if (evt.isDefaultPrevented()) { + return false; + } + + while((index = indexOf(this.id(data), val)) >= 0) { + val.splice(index, 1); + this.setVal(val); + if (this.select) this.postprocessResults(); + } + + selected.remove(); + + this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data }); + this.triggerChange({ removed: data }); + + return true; + }, + + // multi + postprocessResults: function (data, initial, noHighlightUpdate) { + var val = this.getVal(), + choices = this.results.find(".select2-result"), + compound = this.results.find(".select2-result-with-children"), + self = this; + + choices.each2(function (i, choice) { + var id = self.id(choice.data("select2-data")); + if (indexOf(id, val) >= 0) { + choice.addClass("select2-selected"); + // mark all children of the selected parent as selected + choice.find(".select2-result-selectable").addClass("select2-selected"); + } + }); + + compound.each2(function(i, choice) { + // hide an optgroup if it doesn't have any selectable children + if (!choice.is('.select2-result-selectable') + && choice.find(".select2-result-selectable:not(.select2-selected)").length === 0) { + choice.addClass("select2-selected"); + } + }); + + if (this.highlight() == -1 && noHighlightUpdate !== false){ + self.highlight(0); + } + + //If all results are chosen render formatNoMatches + if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){ + if(!data || data && !data.more && this.results.find(".select2-no-results").length === 0) { + if (checkFormatter(self.opts.formatNoMatches, "formatNoMatches")) { + this.results.append("<li class='select2-no-results'>" + evaluate(self.opts.formatNoMatches, self.search.val()) + "</li>"); + } + } + } + + }, + + // multi + getMaxSearchWidth: function() { + return this.selection.width() - getSideBorderPadding(this.search); + }, + + // multi + resizeSearch: function () { + var minimumWidth, left, maxWidth, containerLeft, searchWidth, + sideBorderPadding = getSideBorderPadding(this.search); + + minimumWidth = measureTextWidth(this.search) + 10; + + left = this.search.offset().left; + + maxWidth = this.selection.width(); + containerLeft = this.selection.offset().left; + + searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding; + + if (searchWidth < minimumWidth) { + searchWidth = maxWidth - sideBorderPadding; + } + + if (searchWidth < 40) { + searchWidth = maxWidth - sideBorderPadding; + } + + if (searchWidth <= 0) { + searchWidth = minimumWidth; + } + + this.search.width(Math.floor(searchWidth)); + }, + + // multi + getVal: function () { + var val; + if (this.select) { + val = this.select.val(); + return val === null ? [] : val; + } else { + val = this.opts.element.val(); + return splitVal(val, this.opts.separator); + } + }, + + // multi + setVal: function (val) { + var unique; + if (this.select) { + this.select.val(val); + } else { + unique = []; + // filter out duplicates + $(val).each(function () { + if (indexOf(this, unique) < 0) unique.push(this); + }); + this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator)); + } + }, + + // multi + buildChangeDetails: function (old, current) { + var current = current.slice(0), + old = old.slice(0); + + // remove intersection from each array + for (var i = 0; i < current.length; i++) { + for (var j = 0; j < old.length; j++) { + if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) { + current.splice(i, 1); + if(i>0){ + i--; + } + old.splice(j, 1); + j--; + } + } + } + + return {added: current, removed: old}; + }, + + + // multi + val: function (val, triggerChange) { + var oldData, self=this; + + if (arguments.length === 0) { + return this.getVal(); + } + + oldData=this.data(); + if (!oldData.length) oldData=[]; + + // val is an id. !val is true for [undefined,null,'',0] - 0 is legal + if (!val && val !== 0) { + this.opts.element.val(""); + this.updateSelection([]); + this.clearSearch(); + if (triggerChange) { + this.triggerChange({added: this.data(), removed: oldData}); + } + return; + } + + // val is a list of ids + this.setVal(val); + + if (this.select) { + this.opts.initSelection(this.select, this.bind(this.updateSelection)); + if (triggerChange) { + this.triggerChange(this.buildChangeDetails(oldData, this.data())); + } + } else { + if (this.opts.initSelection === undefined) { + throw new Error("val() cannot be called if initSelection() is not defined"); + } + + this.opts.initSelection(this.opts.element, function(data){ + var ids=$.map(data, self.id); + self.setVal(ids); + self.updateSelection(data); + self.clearSearch(); + if (triggerChange) { + self.triggerChange(self.buildChangeDetails(oldData, self.data())); + } + }); + } + this.clearSearch(); + }, + + // multi + onSortStart: function() { + if (this.select) { + throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead."); + } + + // collapse search field into 0 width so its container can be collapsed as well + this.search.width(0); + // hide the container + this.searchContainer.hide(); + }, + + // multi + onSortEnd:function() { + + var val=[], self=this; + + // show search and move it to the end of the list + this.searchContainer.show(); + // make sure the search container is the last item in the list + this.searchContainer.appendTo(this.searchContainer.parent()); + // since we collapsed the width in dragStarted, we resize it here + this.resizeSearch(); + + // update selection + this.selection.find(".select2-search-choice").each(function() { + val.push(self.opts.id($(this).data("select2-data"))); + }); + this.setVal(val); + this.triggerChange(); + }, + + // multi + data: function(values, triggerChange) { + var self=this, ids, old; + if (arguments.length === 0) { + return this.selection + .children(".select2-search-choice") + .map(function() { return $(this).data("select2-data"); }) + .get(); + } else { + old = this.data(); + if (!values) { values = []; } + ids = $.map(values, function(e) { return self.opts.id(e); }); + this.setVal(ids); + this.updateSelection(values); + this.clearSearch(); + if (triggerChange) { + this.triggerChange(this.buildChangeDetails(old, this.data())); + } + } + } + }); + + $.fn.select2 = function () { + + var args = Array.prototype.slice.call(arguments, 0), + opts, + select2, + method, value, multiple, + allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"], + valueMethods = ["opened", "isFocused", "container", "dropdown"], + propertyMethods = ["val", "data"], + methodsMap = { search: "externalSearch" }; + + this.each(function () { + if (args.length === 0 || typeof(args[0]) === "object") { + opts = args.length === 0 ? {} : $.extend({}, args[0]); + opts.element = $(this); + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + multiple = opts.element.prop("multiple"); + } else { + multiple = opts.multiple || false; + if ("tags" in opts) {opts.multiple = multiple = true;} + } + + select2 = multiple ? new window.Select2["class"].multi() : new window.Select2["class"].single(); + select2.init(opts); + } else if (typeof(args[0]) === "string") { + + if (indexOf(args[0], allowedMethods) < 0) { + throw "Unknown method: " + args[0]; + } + + value = undefined; + select2 = $(this).data("select2"); + if (select2 === undefined) return; + + method=args[0]; + + if (method === "container") { + value = select2.container; + } else if (method === "dropdown") { + value = select2.dropdown; + } else { + if (methodsMap[method]) method = methodsMap[method]; + + value = select2[method].apply(select2, args.slice(1)); + } + if (indexOf(args[0], valueMethods) >= 0 + || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) { + return false; // abort the iteration, ready to return first matched value + } + } else { + throw "Invalid arguments to select2 plugin: " + args; + } + }); + return (value === undefined) ? this : value; + }; + + // plugin defaults, accessible to users + $.fn.select2.defaults = { + width: "copy", + loadMorePadding: 0, + closeOnSelect: true, + openOnEnter: true, + containerCss: {}, + dropdownCss: {}, + containerCssClass: "", + dropdownCssClass: "", + formatResult: function(result, container, query, escapeMarkup) { + var markup=[]; + markMatch(result.text, query.term, markup, escapeMarkup); + return markup.join(""); + }, + formatSelection: function (data, container, escapeMarkup) { + return data ? escapeMarkup(data.text) : undefined; + }, + sortResults: function (results, container, query) { + return results; + }, + formatResultCssClass: function(data) {return data.css;}, + formatSelectionCssClass: function(data, container) {return undefined;}, + formatMatches: function (matches) { return matches + " results are available, use up and down arrow keys to navigate."; }, + formatNoMatches: function () { return "No matches found"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Loading more results…"; }, + formatSearching: function () { return "Searching…"; }, + minimumResultsForSearch: 0, + minimumInputLength: 0, + maximumInputLength: null, + maximumSelectionSize: 0, + id: function (e) { return e == undefined ? null : e.id; }, + matcher: function(term, text) { + return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0; + }, + separator: ",", + tokenSeparators: [], + tokenizer: defaultTokenizer, + escapeMarkup: defaultEscapeMarkup, + blurOnChange: false, + selectOnBlur: false, + adaptContainerCssClass: function(c) { return c; }, + adaptDropdownCssClass: function(c) { return null; }, + nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; }, + searchInputPlaceholder: '', + createSearchChoicePosition: 'top', + shouldFocusInput: function (instance) { + // Attempt to detect touch devices + var supportsTouchEvents = (('ontouchstart' in window) || + (navigator.msMaxTouchPoints > 0)); + + // Only devices which support touch events should be special cased + if (!supportsTouchEvents) { + return true; + } + + // Never focus the input if search is disabled + if (instance.opts.minimumResultsForSearch < 0) { + return false; + } + + return true; + } + }; + + $.fn.select2.ajaxDefaults = { + transport: $.ajax, + params: { + type: "GET", + cache: false, + dataType: "json" + } + }; + + // exports + window.Select2 = { + query: { + ajax: ajax, + local: local, + tags: tags + }, util: { + debounce: debounce, + markMatch: markMatch, + escapeMarkup: defaultEscapeMarkup, + stripDiacritics: stripDiacritics + }, "class": { + "abstract": AbstractSelect2, + "single": SingleSelect2, + "multi": MultiSelect2 + } + }; + +}(jQuery)); diff --git a/core/js/select2/select2_locale_ar.js b/core/js/select2/select2_locale_ar.js new file mode 100644 index 00000000000..acb33a2f6ad --- /dev/null +++ b/core/js/select2/select2_locale_ar.js @@ -0,0 +1,17 @@ +/** + * Select2 Arabic translation. + * + * Author: Adel KEDJOUR <adel@kedjour.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "لم يتم العثور على مطابقات"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الرجاء إدخال " + n + " على الأكثر"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الرجاء إدخال " + n + " على الأقل "; }, + formatSelectionTooBig: function (limit) { if (n == 1){ return "يمكنك أن تختار إختيار واحد فقط"; } return n == 2 ? "يمكنك أن تختار إختيارين فقط" : "يمكنك أن تختار " + n + " إختيارات فقط"; }, + formatLoadMore: function (pageNumber) { return "تحميل المزيد من النتائج…"; }, + formatSearching: function () { return "البحث…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_bg.js b/core/js/select2/select2_locale_bg.js new file mode 100644 index 00000000000..585d28a2b0b --- /dev/null +++ b/core/js/select2/select2_locale_bg.js @@ -0,0 +1,18 @@ +/** + * Select2 Bulgarian translation. + * + * @author Lubomir Vikev <lubomirvikev@gmail.com> + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Няма намерени съвпадения"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Моля въведете още " + n + " символ" + (n > 1 ? "а" : ""); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Моля въведете с " + n + " по-малко символ" + (n > 1 ? "а" : ""); }, + formatSelectionTooBig: function (limit) { return "Можете да направите до " + limit + (limit > 1 ? " избора" : " избор"); }, + formatLoadMore: function (pageNumber) { return "Зареждат се още…"; }, + formatSearching: function () { return "Търсене…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_ca.js b/core/js/select2/select2_locale_ca.js new file mode 100644 index 00000000000..7e19d3ce966 --- /dev/null +++ b/core/js/select2/select2_locale_ca.js @@ -0,0 +1,17 @@ +/** + * Select2 Catalan translation. + * + * Author: David Planella <david.planella@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "No s'ha trobat cap coincidència"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduïu " + n + " caràcter" + (n == 1 ? "" : "s") + " més"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Introduïu " + n + " caràcter" + (n == 1? "" : "s") + "menys"; }, + formatSelectionTooBig: function (limit) { return "Només podeu seleccionar " + limit + " element" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "S'estan carregant més resultats…"; }, + formatSearching: function () { return "S'està cercant…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_cs.js b/core/js/select2/select2_locale_cs.js new file mode 100644 index 00000000000..376b54a1352 --- /dev/null +++ b/core/js/select2/select2_locale_cs.js @@ -0,0 +1,49 @@ +/** + * Select2 Czech translation. + * + * Author: Michal Marek <ahoj@michal-marek.cz> + * Author - sklonovani: David Vallner <david@vallner.net> + */ +(function ($) { + "use strict"; + // use text for the numbers 2 through 4 + var smallNumbers = { + 2: function(masc) { return (masc ? "dva" : "dvě"); }, + 3: function() { return "tři"; }, + 4: function() { return "čtyři"; } + } + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nenalezeny žádné položky"; }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n == 1) { + return "Prosím zadejte ještě jeden znak"; + } else if (n <= 4) { + return "Prosím zadejte ještě další "+smallNumbers[n](true)+" znaky"; + } else { + return "Prosím zadejte ještě dalších "+n+" znaků"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n == 1) { + return "Prosím zadejte o jeden znak méně"; + } else if (n <= 4) { + return "Prosím zadejte o "+smallNumbers[n](true)+" znaky méně"; + } else { + return "Prosím zadejte o "+n+" znaků méně"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit == 1) { + return "Můžete zvolit jen jednu položku"; + } else if (limit <= 4) { + return "Můžete zvolit maximálně "+smallNumbers[limit](false)+" položky"; + } else { + return "Můžete zvolit maximálně "+limit+" položek"; + } + }, + formatLoadMore: function (pageNumber) { return "Načítají se další výsledky…"; }, + formatSearching: function () { return "Vyhledávání…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_da.js b/core/js/select2/select2_locale_da.js new file mode 100644 index 00000000000..dbce3e1748d --- /dev/null +++ b/core/js/select2/select2_locale_da.js @@ -0,0 +1,17 @@ +/** + * Select2 Danish translation. + * + * Author: Anders Jenbo <anders@jenbo.dk> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Ingen resultater fundet"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; }, + formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); }, + formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; }, + formatSearching: function () { return "Søger…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_de.js b/core/js/select2/select2_locale_de.js new file mode 100644 index 00000000000..93b18e81f85 --- /dev/null +++ b/core/js/select2/select2_locale_de.js @@ -0,0 +1,15 @@ +/** + * Select2 German translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; }, + formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; }, + formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse…"; }, + formatSearching: function () { return "Suche…"; } + }); +})(jQuery);
\ No newline at end of file diff --git a/core/js/select2/select2_locale_el.js b/core/js/select2/select2_locale_el.js new file mode 100644 index 00000000000..e94b02cbc5f --- /dev/null +++ b/core/js/select2/select2_locale_el.js @@ -0,0 +1,17 @@ +/** + * Select2 Greek translation. + * + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n > 1 ? "υς" : "") + " χαρακτήρ" + (n > 1 ? "ες" : "α"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n > 1 ? "ες" : "α"); }, + formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit > 1 ? "α" : "ο"); }, + formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων…"; }, + formatSearching: function () { return "Αναζήτηση…"; } + }); +})(jQuery);
\ No newline at end of file diff --git a/core/js/select2/select2_locale_en.js.template b/core/js/select2/select2_locale_en.js.template new file mode 100644 index 00000000000..f66bcc844db --- /dev/null +++ b/core/js/select2/select2_locale_en.js.template @@ -0,0 +1,18 @@ +/** + * Select2 <Language> translation. + * + * Author: Your Name <your@email> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatMatches: function (matches) { return matches + " results are available, use up and down arrow keys to navigate."; }, + formatNoMatches: function () { return "No matches found"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " more character" + (n == 1 ? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Loading more results…"; }, + formatSearching: function () { return "Searching…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_es.js b/core/js/select2/select2_locale_es.js new file mode 100644 index 00000000000..f2b581791eb --- /dev/null +++ b/core/js/select2/select2_locale_es.js @@ -0,0 +1,15 @@ +/** + * Select2 Spanish translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "No se encontraron resultados"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor, introduzca " + n + " car" + (n == 1? "ácter" : "acteres"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor, elimine " + n + " car" + (n == 1? "ácter" : "acteres"); }, + formatSelectionTooBig: function (limit) { return "Sólo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Cargando más resultados…"; }, + formatSearching: function () { return "Buscando…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_et.js b/core/js/select2/select2_locale_et.js new file mode 100644 index 00000000000..a4045d22df7 --- /dev/null +++ b/core/js/select2/select2_locale_et.js @@ -0,0 +1,17 @@ +/** + * Select2 Estonian translation. + * + * Author: Kuldar Kalvik <kuldar@kalvik.ee> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Tulemused puuduvad"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Sisesta " + n + " täht" + (n == 1 ? "" : "e") + " rohkem"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Sisesta " + n + " täht" + (n == 1? "" : "e") + " vähem"; }, + formatSelectionTooBig: function (limit) { return "Saad vaid " + limit + " tulemus" + (limit == 1 ? "e" : "t") + " valida"; }, + formatLoadMore: function (pageNumber) { return "Laen tulemusi.."; }, + formatSearching: function () { return "Otsin.."; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_eu.js b/core/js/select2/select2_locale_eu.js new file mode 100644 index 00000000000..1da1a709481 --- /dev/null +++ b/core/js/select2/select2_locale_eu.js @@ -0,0 +1,43 @@ +/** + * Select2 Basque translation. + * + * Author: Julen Ruiz Aizpuru <julenx at gmail dot com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { + return "Ez da bat datorrenik aurkitu"; + }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n === 1) { + return "Idatzi karaktere bat gehiago"; + } else { + return "Idatzi " + n + " karaktere gehiago"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n === 1) { + return "Idatzi karaktere bat gutxiago"; + } else { + return "Idatzi " + n + " karaktere gutxiago"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit === 1 ) { + return "Elementu bakarra hauta dezakezu"; + } else { + return limit + " elementu hauta ditzakezu soilik"; + } + }, + formatLoadMore: function (pageNumber) { + return "Emaitza gehiago kargatzen…"; + }, + formatSearching: function () { + return "Bilatzen…"; + } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_fa.js b/core/js/select2/select2_locale_fa.js new file mode 100644 index 00000000000..a9e95af4dba --- /dev/null +++ b/core/js/select2/select2_locale_fa.js @@ -0,0 +1,19 @@ +/** + * Select2 Persian translation. + * + * Author: Ali Choopan <choopan@arsh.co> + * Author: Ebrahim Byagowi <ebrahim@gnu.org> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; }, + formatNoMatches: function () { return "نتیجهای یافت نشد."; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; }, + formatSelectionTooBig: function (limit) { return "شما فقط میتوانید " + limit + " مورد را انتخاب کنید"; }, + formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; }, + formatSearching: function () { return "در حال جستجو…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_fi.js b/core/js/select2/select2_locale_fi.js new file mode 100644 index 00000000000..9bed310f717 --- /dev/null +++ b/core/js/select2/select2_locale_fi.js @@ -0,0 +1,28 @@ +/** + * Select2 Finnish translation + */ +(function ($) { + "use strict"; + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { + return "Ei tuloksia"; + }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + return "Ole hyvä ja anna " + n + " merkkiä lisää"; + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + return "Ole hyvä ja anna " + n + " merkkiä vähemmän"; + }, + formatSelectionTooBig: function (limit) { + return "Voit valita ainoastaan " + limit + " kpl"; + }, + formatLoadMore: function (pageNumber) { + return "Ladataan lisää tuloksia…"; + }, + formatSearching: function () { + return "Etsitään…"; + } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_fr.js b/core/js/select2/select2_locale_fr.js new file mode 100644 index 00000000000..9afda2abdcd --- /dev/null +++ b/core/js/select2/select2_locale_fr.js @@ -0,0 +1,16 @@ +/** + * Select2 French translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; }, + formatNoMatches: function () { return "Aucun résultat trouvé"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Merci de saisir " + n + " caractère" + (n == 1 ? "" : "s") + " de plus"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Merci de supprimer " + n + " caractère" + (n == 1 ? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; }, + formatSearching: function () { return "Recherche en cours…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_gl.js b/core/js/select2/select2_locale_gl.js new file mode 100644 index 00000000000..80326320bf0 --- /dev/null +++ b/core/js/select2/select2_locale_gl.js @@ -0,0 +1,43 @@ +/** + * Select2 Galician translation + * + * Author: Leandro Regueiro <leandro.regueiro@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { + return "Non se atoparon resultados"; + }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n === 1) { + return "Engada un carácter"; + } else { + return "Engada " + n + " caracteres"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n === 1) { + return "Elimine un carácter"; + } else { + return "Elimine " + n + " caracteres"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit === 1 ) { + return "Só pode seleccionar un elemento"; + } else { + return "Só pode seleccionar " + limit + " elementos"; + } + }, + formatLoadMore: function (pageNumber) { + return "Cargando máis resultados…"; + }, + formatSearching: function () { + return "Buscando…"; + } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_he.js b/core/js/select2/select2_locale_he.js new file mode 100644 index 00000000000..00385410804 --- /dev/null +++ b/core/js/select2/select2_locale_he.js @@ -0,0 +1,17 @@ +/** +* Select2 Hebrew translation. +* +* Author: Yakir Sitbon <http://www.yakirs.net/> +*/ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "לא נמצאו התאמות"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; }, + formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; }, + formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות…"; }, + formatSearching: function () { return "מחפש…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_hr.js b/core/js/select2/select2_locale_hr.js new file mode 100644 index 00000000000..c29372524b6 --- /dev/null +++ b/core/js/select2/select2_locale_hr.js @@ -0,0 +1,22 @@ +/** + * Select2 Croatian translation. + * + * @author Edi Modrić <edi.modric@gmail.com> + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nema rezultata"; }, + formatInputTooShort: function (input, min) { return "Unesite još" + character(min - input.length); }, + formatInputTooLong: function (input, max) { return "Unesite" + character(input.length - max) + " manje"; }, + formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; }, + formatLoadMore: function (pageNumber) { return "Učitavanje rezultata…"; }, + formatSearching: function () { return "Pretraga…"; } + }); + + function character (n) { + return " " + n + " znak" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "a" : "" : "ova"); + } +})(jQuery); diff --git a/core/js/select2/select2_locale_hu.js b/core/js/select2/select2_locale_hu.js new file mode 100644 index 00000000000..a8c30881928 --- /dev/null +++ b/core/js/select2/select2_locale_hu.js @@ -0,0 +1,15 @@ +/** + * Select2 Hungarian translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nincs találat."; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " karakterrel több, mint kellene."; }, + formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; }, + formatLoadMore: function (pageNumber) { return "Töltés…"; }, + formatSearching: function () { return "Keresés…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_id.js b/core/js/select2/select2_locale_id.js new file mode 100644 index 00000000000..547454079ba --- /dev/null +++ b/core/js/select2/select2_locale_id.js @@ -0,0 +1,17 @@ +/** + * Select2 Indonesian translation. + * + * Author: Ibrahim Yusuf <ibrahim7usuf@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Tidak ada data yang sesuai"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Masukkan " + n + " huruf lagi" + (n == 1 ? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Hapus " + n + " huruf" + (n == 1 ? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "Anda hanya dapat memilih " + limit + " pilihan" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Mengambil data…"; }, + formatSearching: function () { return "Mencari…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_is.js b/core/js/select2/select2_locale_is.js new file mode 100644 index 00000000000..aecc6cd7194 --- /dev/null +++ b/core/js/select2/select2_locale_is.js @@ -0,0 +1,15 @@ +/** + * Select2 Icelandic translation. + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Ekkert fannst"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n > 1 ? "i" : "") + " í viðbót"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n > 1 ? "i" : ""); }, + formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; }, + formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður…"; }, + formatSearching: function () { return "Leita…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_it.js b/core/js/select2/select2_locale_it.js new file mode 100644 index 00000000000..d4e24de7000 --- /dev/null +++ b/core/js/select2/select2_locale_it.js @@ -0,0 +1,15 @@ +/** + * Select2 Italian translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nessuna corrispondenza trovata"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; }, + formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); }, + formatLoadMore: function (pageNumber) { return "Caricamento in corso…"; }, + formatSearching: function () { return "Ricerca…"; } + }); +})(jQuery);
\ No newline at end of file diff --git a/core/js/select2/select2_locale_ja.js b/core/js/select2/select2_locale_ja.js new file mode 100644 index 00000000000..81106e78a80 --- /dev/null +++ b/core/js/select2/select2_locale_ja.js @@ -0,0 +1,15 @@ +/** + * Select2 Japanese translation. + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "該当なし"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; }, + formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; }, + formatLoadMore: function (pageNumber) { return "読込中・・・"; }, + formatSearching: function () { return "検索中・・・"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_ka.js b/core/js/select2/select2_locale_ka.js new file mode 100644 index 00000000000..366cc2d9c4d --- /dev/null +++ b/core/js/select2/select2_locale_ka.js @@ -0,0 +1,17 @@ +/** + * Select2 Georgian (Kartuli) translation. + * + * Author: Dimitri Kurashvili dimakura@gmail.com + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "ვერ მოიძებნა"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; }, + formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; }, + formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; }, + formatSearching: function () { return "ძებნა…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_ko.js b/core/js/select2/select2_locale_ko.js new file mode 100644 index 00000000000..1a84d21eae6 --- /dev/null +++ b/core/js/select2/select2_locale_ko.js @@ -0,0 +1,17 @@ +/** + * Select2 Korean translation. + * + * @author Swen Mun <longfinfunnel@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "결과 없음"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; }, + formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; }, + formatLoadMore: function (pageNumber) { return "불러오는 중…"; }, + formatSearching: function () { return "검색 중…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_lt.js b/core/js/select2/select2_locale_lt.js new file mode 100644 index 00000000000..2e2f950b00d --- /dev/null +++ b/core/js/select2/select2_locale_lt.js @@ -0,0 +1,24 @@ +/** + * Select2 Lithuanian translation. + * + * @author CRONUS Karmalakas <cronus dot karmalakas at gmail dot com> + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Atitikmenų nerasta"; }, + formatInputTooShort: function (input, min) { return "Įrašykite dar" + character(min - input.length); }, + formatInputTooLong: function (input, max) { return "Pašalinkite" + character(input.length - max); }, + formatSelectionTooBig: function (limit) { + return "Jūs galite pasirinkti tik " + limit + " element" + ((limit%100 > 9 && limit%100 < 21) || limit%10 == 0 ? "ų" : limit%10 > 1 ? "us" : "ą"); + }, + formatLoadMore: function (pageNumber) { return "Kraunama daugiau rezultatų…"; }, + formatSearching: function () { return "Ieškoma…"; } + }); + + function character (n) { + return " " + n + " simbol" + ((n%100 > 9 && n%100 < 21) || n%10 == 0 ? "ių" : n%10 > 1 ? "ius" : "į"); + } +})(jQuery); diff --git a/core/js/select2/select2_locale_lv.js b/core/js/select2/select2_locale_lv.js new file mode 100644 index 00000000000..b300ec770f4 --- /dev/null +++ b/core/js/select2/select2_locale_lv.js @@ -0,0 +1,17 @@ +/** + * Select2 Latvian translation. + * + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Sakritību nav"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Lūdzu ievadiet vēl " + n + " simbol" + (n == 11 ? "us" : n%10 == 1 ? "u" : "us"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Lūdzu ievadiet par " + n + " simbol" + (n == 11 ? "iem" : n%10 == 1 ? "u" : "iem") + " mazāk"; }, + formatSelectionTooBig: function (limit) { return "Jūs varat izvēlēties ne vairāk kā " + limit + " element" + (limit == 11 ? "us" : limit%10 == 1 ? "u" : "us"); }, + formatLoadMore: function (pageNumber) { return "Datu ielāde…"; }, + formatSearching: function () { return "Meklēšana…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_mk.js b/core/js/select2/select2_locale_mk.js new file mode 100644 index 00000000000..513562c51bf --- /dev/null +++ b/core/js/select2/select2_locale_mk.js @@ -0,0 +1,17 @@ +/** + * Select2 Macedonian translation. + * + * Author: Marko Aleksic <psybaron@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Нема пронајдено совпаѓања"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Ве молиме внесете уште " + n + " карактер" + (n == 1 ? "" : "и"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Ве молиме внесете " + n + " помалку карактер" + (n == 1? "" : "и"); }, + formatSelectionTooBig: function (limit) { return "Можете да изберете само " + limit + " ставк" + (limit == 1 ? "а" : "и"); }, + formatLoadMore: function (pageNumber) { return "Вчитување резултати…"; }, + formatSearching: function () { return "Пребарување…"; } + }); +})(jQuery);
\ No newline at end of file diff --git a/core/js/select2/select2_locale_ms.js b/core/js/select2/select2_locale_ms.js new file mode 100644 index 00000000000..262042aab15 --- /dev/null +++ b/core/js/select2/select2_locale_ms.js @@ -0,0 +1,17 @@ +/** + * Select2 Malay translation. + * + * Author: Kepoweran <kepoweran@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Tiada padanan yang ditemui"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; }, + formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; }, + formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan…"; }, + formatSearching: function () { return "Mencari…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_nl.js b/core/js/select2/select2_locale_nl.js new file mode 100644 index 00000000000..5b5c4156ce1 --- /dev/null +++ b/core/js/select2/select2_locale_nl.js @@ -0,0 +1,15 @@ +/** + * Select2 Dutch translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Geen resultaten gevonden"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul " + n + " karakter" + (n == 1? "" : "s") + " meer in"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vul " + n + " karakter" + (n == 1? "" : "s") + " minder in"; }, + formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; }, + formatLoadMore: function (pageNumber) { return "Meer resultaten laden…"; }, + formatSearching: function () { return "Zoeken…"; } + }); +})(jQuery);
\ No newline at end of file diff --git a/core/js/select2/select2_locale_no.js b/core/js/select2/select2_locale_no.js new file mode 100644 index 00000000000..ab61c082a02 --- /dev/null +++ b/core/js/select2/select2_locale_no.js @@ -0,0 +1,18 @@ +/** + * Select2 Norwegian translation. + * + * Author: Torgeir Veimo <torgeir.veimo@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Ingen treff"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vennligst skriv inn " + n + (n>1 ? " flere tegn" : " tegn til"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vennligst fjern " + n + " tegn"; }, + formatSelectionTooBig: function (limit) { return "Du kan velge maks " + limit + " elementer"; }, + formatLoadMore: function (pageNumber) { return "Laster flere resultater…"; }, + formatSearching: function () { return "Søker…"; } + }); +})(jQuery); + diff --git a/core/js/select2/select2_locale_pl.js b/core/js/select2/select2_locale_pl.js new file mode 100644 index 00000000000..75054e76578 --- /dev/null +++ b/core/js/select2/select2_locale_pl.js @@ -0,0 +1,22 @@ +/** + * Select2 Polish translation. + * + * @author Jan Kondratowicz <jan@kondratowicz.pl> + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Brak wyników"; }, + formatInputTooShort: function (input, min) { return "Wpisz jeszcze" + character(min - input.length, "znak", "i"); }, + formatInputTooLong: function (input, max) { return "Wpisana fraza jest za długa o" + character(input.length - max, "znak", "i"); }, + formatSelectionTooBig: function (limit) { return "Możesz zaznaczyć najwyżej" + character(limit, "element", "y"); }, + formatLoadMore: function (pageNumber) { return "Ładowanie wyników…"; }, + formatSearching: function () { return "Szukanie…"; } + }); + + function character (n, word, pluralSuffix) { + return " " + n + " " + word + (n == 1 ? "" : n%10 < 5 && n%10 > 1 && (n%100 < 5 || n%100 > 20) ? pluralSuffix : "ów"); + } +})(jQuery); diff --git a/core/js/select2/select2_locale_pt-BR.js b/core/js/select2/select2_locale_pt-BR.js new file mode 100644 index 00000000000..ac4969acfbb --- /dev/null +++ b/core/js/select2/select2_locale_pt-BR.js @@ -0,0 +1,15 @@ +/** + * Select2 Brazilian Portuguese translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nenhum resultado encontrado"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Digite mais " + n + " caracter" + (n == 1? "" : "es"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); }, + formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Carregando mais resultados…"; }, + formatSearching: function () { return "Buscando…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_pt-PT.js b/core/js/select2/select2_locale_pt-PT.js new file mode 100644 index 00000000000..cced7cf3ec1 --- /dev/null +++ b/core/js/select2/select2_locale_pt-PT.js @@ -0,0 +1,15 @@ +/** + * Select2 Portuguese (Portugal) translation + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nenhum resultado encontrado"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " car" + (n == 1 ? "ácter" : "acteres"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " car" + (n == 1 ? "ácter" : "acteres"); }, + formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "A carregar mais resultados…"; }, + formatSearching: function () { return "A pesquisar…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_ro.js b/core/js/select2/select2_locale_ro.js new file mode 100644 index 00000000000..87eca4cf740 --- /dev/null +++ b/core/js/select2/select2_locale_ro.js @@ -0,0 +1,15 @@ +/** + * Select2 Romanian translation. + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nu a fost găsit nimic"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); }, + formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); }, + formatLoadMore: function (pageNumber) { return "Se încarcă…"; }, + formatSearching: function () { return "Căutare…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_rs.js b/core/js/select2/select2_locale_rs.js new file mode 100644 index 00000000000..300c01bc5e5 --- /dev/null +++ b/core/js/select2/select2_locale_rs.js @@ -0,0 +1,17 @@ +/** + * Select2 Serbian translation. + * + * @author Limon Monte <limon.monte@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Ništa nije pronađeno"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Ukucajte bar još " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Obrišite " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); }, + formatSelectionTooBig: function (limit) { return "Možete izabrati samo " + limit + " stavk" + (limit % 10 == 1 && limit % 100 != 11 ? "u" : (limit % 10 >= 2 && limit % 10 <= 4 && (limit % 100 < 12 || limit % 100 > 14)? "e" : "i")); }, + formatLoadMore: function (pageNumber) { return "Preuzimanje još rezultata…"; }, + formatSearching: function () { return "Pretraga…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_ru.js b/core/js/select2/select2_locale_ru.js new file mode 100644 index 00000000000..0f45ce0dddf --- /dev/null +++ b/core/js/select2/select2_locale_ru.js @@ -0,0 +1,21 @@ +/** + * Select2 Russian translation. + * + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Совпадений не найдено"; }, + formatInputTooShort: function (input, min) { return "Пожалуйста, введите еще" + character(min - input.length); }, + formatInputTooLong: function (input, max) { return "Пожалуйста, введите на" + character(input.length - max) + " меньше"; }, + formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit%10 == 1 && limit%100 != 11 ? "а" : "ов"); }, + formatLoadMore: function (pageNumber) { return "Загрузка данных…"; }, + formatSearching: function () { return "Поиск…"; } + }); + + function character (n) { + return " " + n + " символ" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 20) ? n%10 > 1 ? "a" : "" : "ов"); + } +})(jQuery); diff --git a/core/js/select2/select2_locale_sk.js b/core/js/select2/select2_locale_sk.js new file mode 100644 index 00000000000..772f304aca9 --- /dev/null +++ b/core/js/select2/select2_locale_sk.js @@ -0,0 +1,48 @@ +/** + * Select2 Slovak translation. + * + * Author: David Vallner <david@vallner.net> + */ +(function ($) { + "use strict"; + // use text for the numbers 2 through 4 + var smallNumbers = { + 2: function(masc) { return (masc ? "dva" : "dve"); }, + 3: function() { return "tri"; }, + 4: function() { return "štyri"; } + } + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Nenašli sa žiadne položky"; }, + formatInputTooShort: function (input, min) { + var n = min - input.length; + if (n == 1) { + return "Prosím zadajte ešte jeden znak"; + } else if (n <= 4) { + return "Prosím zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky"; + } else { + return "Prosím zadajte ešte ďalších "+n+" znakov"; + } + }, + formatInputTooLong: function (input, max) { + var n = input.length - max; + if (n == 1) { + return "Prosím zadajte o jeden znak menej"; + } else if (n <= 4) { + return "Prosím zadajte o "+smallNumbers[n](true)+" znaky menej"; + } else { + return "Prosím zadajte o "+n+" znakov menej"; + } + }, + formatSelectionTooBig: function (limit) { + if (limit == 1) { + return "Môžete zvoliť len jednu položku"; + } else if (limit <= 4) { + return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky"; + } else { + return "Môžete zvoliť najviac "+limit+" položiek"; + } + }, + formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky…"; }, + formatSearching: function () { return "Vyhľadávanie…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_sv.js b/core/js/select2/select2_locale_sv.js new file mode 100644 index 00000000000..d611189a593 --- /dev/null +++ b/core/js/select2/select2_locale_sv.js @@ -0,0 +1,17 @@ +/** + * Select2 Swedish translation. + * + * Author: Jens Rantil <jens.rantil@telavox.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Inga träffar"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; }, + formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; }, + formatLoadMore: function (pageNumber) { return "Laddar fler resultat…"; }, + formatSearching: function () { return "Söker…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_th.js b/core/js/select2/select2_locale_th.js new file mode 100644 index 00000000000..df59bdac36d --- /dev/null +++ b/core/js/select2/select2_locale_th.js @@ -0,0 +1,17 @@ +/** + * Select2 Thai translation. + * + * Author: Atsawin Chaowanakritsanakul <joke@nakhon.net> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "ไม่พบข้อมูล"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "โปรดพิมพ์เพิ่มอีก " + n + " ตัวอักษร"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "โปรดลบออก " + n + " ตัวอักษร"; }, + formatSelectionTooBig: function (limit) { return "คุณสามารถเลือกได้ไม่เกิน " + limit + " รายการ"; }, + formatLoadMore: function (pageNumber) { return "กำลังค้นข้อมูลเพิ่ม…"; }, + formatSearching: function () { return "กำลังค้นข้อมูล…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_tr.js b/core/js/select2/select2_locale_tr.js new file mode 100644 index 00000000000..f834dad2b89 --- /dev/null +++ b/core/js/select2/select2_locale_tr.js @@ -0,0 +1,17 @@ +/** + * Select2 Turkish translation. + * + * Author: Salim KAYABAŞI <salim.kayabasi@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Sonuç bulunamadı"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; }, + formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; }, + formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; }, + formatLoadMore: function (pageNumber) { return "Daha fazla…"; }, + formatSearching: function () { return "Aranıyor…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_uk.js b/core/js/select2/select2_locale_uk.js new file mode 100644 index 00000000000..8d31a056080 --- /dev/null +++ b/core/js/select2/select2_locale_uk.js @@ -0,0 +1,23 @@ +/** + * Select2 Ukrainian translation. + * + * @author bigmihail <bigmihail@bigmir.net> + * @author Uriy Efremochkin <efremochkin@uriy.me> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatMatches: function (matches) { return character(matches, "результат") + " знайдено, використовуйте клавіші зі стрілками вверх та вниз для навігації."; }, + formatNoMatches: function () { return "Нічого не знайдено"; }, + formatInputTooShort: function (input, min) { return "Введіть буль ласка ще " + character(min - input.length, "символ"); }, + formatInputTooLong: function (input, max) { return "Введіть буль ласка на " + character(input.length - max, "символ") + " менше"; }, + formatSelectionTooBig: function (limit) { return "Ви можете вибрати лише " + character(limit, "елемент"); }, + formatLoadMore: function (pageNumber) { return "Завантаження даних…"; }, + formatSearching: function () { return "Пошук…"; } + }); + + function character (n, word) { + return n + " " + word + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "и" : "" : "ів"); + } +})(jQuery); diff --git a/core/js/select2/select2_locale_vi.js b/core/js/select2/select2_locale_vi.js new file mode 100644 index 00000000000..5dbc275361f --- /dev/null +++ b/core/js/select2/select2_locale_vi.js @@ -0,0 +1,18 @@ +/** + * Select2 Vietnamese translation. + * + * Author: Long Nguyen <olragon@gmail.com> + */ +(function ($) { + "use strict"; + + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "Không tìm thấy kết quả"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "Vui lòng nhập nhiều hơn " + n + " ký tự" + (n == 1 ? "" : "s"); }, + formatInputTooLong: function (input, max) { var n = input.length - max; return "Vui lòng nhập ít hơn " + n + " ký tự" + (n == 1? "" : "s"); }, + formatSelectionTooBig: function (limit) { return "Chỉ có thể chọn được " + limit + " tùy chọn" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Đang lấy thêm kết quả…"; }, + formatSearching: function () { return "Đang tìm…"; } + }); +})(jQuery); + diff --git a/core/js/select2/select2_locale_zh-CN.js b/core/js/select2/select2_locale_zh-CN.js new file mode 100644 index 00000000000..6add3c52518 --- /dev/null +++ b/core/js/select2/select2_locale_zh-CN.js @@ -0,0 +1,14 @@ +/** + * Select2 Chinese translation + */ +(function ($) { + "use strict"; + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "没有找到匹配项"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";}, + formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";}, + formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; }, + formatLoadMore: function (pageNumber) { return "加载结果中…"; }, + formatSearching: function () { return "搜索中…"; } + }); +})(jQuery); diff --git a/core/js/select2/select2_locale_zh-TW.js b/core/js/select2/select2_locale_zh-TW.js new file mode 100755 index 00000000000..f072381faae --- /dev/null +++ b/core/js/select2/select2_locale_zh-TW.js @@ -0,0 +1,14 @@ +/** + * Select2 Traditional Chinese translation + */ +(function ($) { + "use strict"; + $.extend($.fn.select2.defaults, { + formatNoMatches: function () { return "沒有找到相符的項目"; }, + formatInputTooShort: function (input, min) { var n = min - input.length; return "請再輸入" + n + "個字元";}, + formatInputTooLong: function (input, max) { var n = input.length - max; return "請刪掉" + n + "個字元";}, + formatSelectionTooBig: function (limit) { return "你只能選擇最多" + limit + "項"; }, + formatLoadMore: function (pageNumber) { return "載入中…"; }, + formatSearching: function () { return "搜尋中…"; } + }); +})(jQuery); diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js new file mode 100644 index 00000000000..f351c1b451a --- /dev/null +++ b/core/js/setupchecks.js @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + OC.SetupChecks = { + /** + * Check whether the WebDAV connection works. + * + * @return $.Deferred object resolved with an array of error messages + */ + checkWebDAV: function() { + var deferred = $.Deferred(); + var afterCall = function(xhr) { + var messages = []; + if (xhr.status !== 207 && xhr.status !== 401) { + messages.push( + t('core', 'Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.') + ); + } + deferred.resolve(messages); + }; + + $.ajax({ + type: 'PROPFIND', + url: OC.linkToRemoteBase('webdav'), + data: '<?xml version="1.0"?>' + + '<d:propfind xmlns:d="DAV:">' + + '<d:prop><d:resourcetype/></d:prop>' + + '</d:propfind>', + complete: afterCall + }); + return deferred.promise(); + }, + + /** + * Runs setup checks on the server side + * + * @return $.Deferred object resolved with an array of error messages + */ + checkSetup: function() { + var deferred = $.Deferred(); + var afterCall = function(data, statusText, xhr) { + var messages = []; + if (xhr.status === 200 && data) { + if (!data.serverhasinternetconnection) { + messages.push( + t('core', 'This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.') + ); + } + } else { + messages.push(t('core', 'Error occurred while checking server setup')); + } + deferred.resolve(messages); + }; + + $.ajax({ + type: 'GET', + url: OC.generateUrl('settings/ajax/checksetup') + }).then(afterCall, afterCall); + return deferred.promise(); + } + }; +})(); + diff --git a/core/js/visitortimezone.js b/core/js/visitortimezone.js index 9146e00aade..e6e99ee7e20 100644 --- a/core/js/visitortimezone.js +++ b/core/js/visitortimezone.js @@ -1,6 +1,7 @@ +/* global jstz */ $(document).ready(function () { - var visitortimezone = (-new Date().getTimezoneOffset() / 60); - $('#timezone-offset').val(visitortimezone); + $('#timezone-offset').val((-new Date().getTimezoneOffset() / 60)); + $('#timezone').val(jstz.determine().name()); // only enable the submit button once we are sure that the timezone is set var $loginForm = $('form[name="login"]'); diff --git a/core/l10n/af_ZA.php b/core/l10n/af_ZA.php index 6bdbfe50be2..07281bfaeda 100644 --- a/core/l10n/af_ZA.php +++ b/core/l10n/af_ZA.php @@ -1,12 +1,17 @@ <?php $TRANSLATIONS = array( +"Couldn't send mail to following users: %s " => "Kon nie e-pos aan die volgende gebruikers stuur nie: %s", "Turned on maintenance mode" => "Instandhouding aangeskakel", "Turned off maintenance mode" => "Instandhouding uitgeskakel", +"Updated database" => "Databasis opgedateer", +"Checked database schema update" => "Databasis skema opdatering nagegaan", +"Checked database schema update for apps" => "Databasis skema opdatering nagegaan vir sagteware", +"Updated \"%s\" to %s" => "\"%s\" opgedateer na %s", "No image or file provided" => "Geen prent of lêer voorsien", -"Unknown filetype" => "Onbekende leertipe", +"Unknown filetype" => "Onbekende lêertipe", "No temporary profile picture available, try again" => "Geen tydelike profiel foto beskikbaar nie, probeer weer", "Sunday" => "Sondag", -"Monday" => "Mandag", +"Monday" => "Maandag", "Tuesday" => "Dinsdag", "Wednesday" => "Woensdag", "Thursday" => "Donderdag", @@ -25,16 +30,23 @@ $TRANSLATIONS = array( "November" => "November", "December" => "Desember", "Settings" => "Instellings", +"File" => "Lêer", +"Folder" => "Omslag", +"Image" => "Prent", +"Audio" => "Audio", "Saving..." => "Stoor...", +"I know what I'm doing" => "Ek weet wat ek doen", "Reset password" => "Herstel wagwoord", +"Password can not be changed. Please contact your administrator." => "Wagwoord kan nie verander word nie. Kontak asseblief jou stelsel administrateur.", "No" => "Nee", "Yes" => "Ja", "Choose" => "Kies", "Ok" => "OK", "_{count} file conflict_::_{count} file conflicts_" => array("",""), -"New Files" => "Nuwe leêrs", -"Already existing files" => "Bestaande leêrs", -"Cancel" => "Kanseleer", +"One file conflict" => "Een lêer konflik", +"New Files" => "Nuwe lêers", +"Already existing files" => "Bestaande lêers", +"Cancel" => "Kanselleer", "Continue" => "Gaan voort", "Very weak password" => "Baie swak wagwoord", "Weak password" => "Swak wagwoord", @@ -56,7 +68,7 @@ $TRANSLATIONS = array( "Set expiration date" => "Stel verval datum", "Expiration date" => "Verval datum", "group" => "groep", -"Resharing is not allowed" => "Hernieu deel is nie toegelaat nie ", +"Resharing is not allowed" => "Herdeling is nie toegelaat nie ", "Shared in {item} with {user}" => "Gedeel in {item} met {user}", "Unshare" => "Deel terug neem", "can edit" => "kan wysig", @@ -86,15 +98,14 @@ $TRANSLATIONS = array( "Admin" => "Admin", "Help" => "Hulp", "Access forbidden" => "Toegang verbode", -"Cloud not found" => "Wolk nie gevind", "Security Warning" => "Sekuriteits waarskuwing", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Jou PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)", -"Please update your PHP installation to use %s securely." => "Opdateer asseblief jou PHP instelasie om %s veilig te gebruik", -"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Jou data gids en leers is moontlik toeganklik vanaf die internet omdat die .htaccess leer nie werk nie.", +"Please update your PHP installation to use %s securely." => "Opdateer asseblief jou PHP installasie om %s veilig te gebruik", +"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Jou data gids en lêers is moontlik toeganklik vanaf die internet omdat die .htaccess lêer nie werk nie.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.", "Create an <strong>admin account</strong>" => "Skep `n <strong>admin-rekening</strong>", "Password" => "Wagwoord", -"Data folder" => "Data vouer", +"Data folder" => "Data omslag", "Configure the database" => "Stel databasis op", "Database user" => "Databasis-gebruiker", "Database password" => "Databasis-wagwoord", diff --git a/core/l10n/ar.php b/core/l10n/ar.php index 3f1d2854181..e795c3f1bb8 100644 --- a/core/l10n/ar.php +++ b/core/l10n/ar.php @@ -84,7 +84,6 @@ $TRANSLATIONS = array( "Admin" => "المدير", "Help" => "المساعدة", "Access forbidden" => "التوصّل محظور", -"Cloud not found" => "لم يتم إيجاد", "Security Warning" => "تحذير أمان", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "يرجى تحديث نسخة PHP لاستخدام %s بطريقة آمنة", diff --git a/core/l10n/ast.php b/core/l10n/ast.php index f430928a0e7..87c5bb989d3 100644 --- a/core/l10n/ast.php +++ b/core/l10n/ast.php @@ -139,7 +139,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Fallu al marcar favoritos", "Error unfavoriting" => "Fallu al desmarcar favoritos", "Access forbidden" => "Accesu denegáu", -"Cloud not found" => "Ñube non atopada", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hola, ¿qué hai?\n\nnamái déxanos dicite que %s compartió %s contigo.\nVelu: %s\n\n", "The share will expire on %s." => "La compartición va caducar el %s.", "Cheers!" => "¡Salú!", @@ -182,7 +181,6 @@ $TRANSLATIONS = array( "The following apps will be disabled:" => "Deshabilitaránse les siguientes aplicaciones:", "The theme %s has been disabled." => "Deshabilitóse'l tema %s.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Enantes de siguir, asegúrate de que se fizo una copia de seguridá de la base de datos, la carpeta de configuración y la carpeta de datos.", -"Start update" => "Aniciar anovamientu", -"This ownCloud instance is currently being updated, which may take a while." => "Esta instancia de OwnCloud ta anguaño anovándose, polo que pue tardar un pocoñín." +"Start update" => "Aniciar anovamientu" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php index 9227d6359d6..454d1fed290 100644 --- a/core/l10n/bg_BG.php +++ b/core/l10n/bg_BG.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Грешка при отбелязване за любим.", "Error unfavoriting" => "Грешка при премахване отбелязването за любим.", "Access forbidden" => "Достъпът е забранен", -"Cloud not found" => "Облакът не намерен", +"File not found" => "Файлът не е открит.", +"The specified document has not been found on the server." => "Избраният документ не е намерн на сървъра.", +"You can click here to return to %s." => "Можеш да натиснеш тук, за да се върнеш на %s", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Здрасти,\n\nсамо да те уведомя, че %s сподели %s с теб.\nРазгледай го: %s\n\n", "The share will expire on %s." => "Споделянето ще изтече на %s.", "Cheers!" => "Поздрави!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Моля, увери се, че си направил копия на базата данни, папките с настройки и данни, преди да продължиш.", "Start update" => "Започни обновяването", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "За да избегнеш таймаутове при по-големи инсталации, можеш да изпълниш следните команди в инсталанционната директория:", -"This ownCloud instance is currently being updated, which may take a while." => "В момента този ownCloud се обновява, а това може да отнеме време.", -"This page will refresh itself when the ownCloud instance is available again." => "Тази страница ще опресни автоматично, когато ownCloud е отново на линия" +"This %s instance is currently being updated, which may take a while." => "В момента този %s се обновява, а това може да отнеме време.", +"This page will refresh itself when the %s instance is available again." => "Тази страница ще се опресни автоматично, когато %s е отново на линия." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/bn_BD.php b/core/l10n/bn_BD.php index d219411866d..4c2e5015559 100644 --- a/core/l10n/bn_BD.php +++ b/core/l10n/bn_BD.php @@ -37,9 +37,11 @@ $TRANSLATIONS = array( "Yes" => "হ্যাঁ", "Choose" => "বেছে নিন", "Ok" => "তথাস্তু", -"_{count} file conflict_::_{count} file conflicts_" => array("",""), +"_{count} file conflict_::_{count} file conflicts_" => array("{count} সাংঘর্ষিক ফাইল","{count} সাংঘর্ষিক ফাইল"), +"One file conflict" => "একটি সাংঘর্ষিক ফাইল", "New Files" => "নতুন ফাইল", "Already existing files" => "বিদ্যমান ফাইল", +"Which files do you want to keep?" => "কোন ফাইলগুলো রেখে দিতে চান?", "Cancel" => "বাতিল", "Continue" => "চালিয়ে যাও", "Shared" => "ভাগাভাগিকৃত", @@ -86,7 +88,6 @@ $TRANSLATIONS = array( "Admin" => "প্রশাসন", "Help" => "সহায়িকা", "Access forbidden" => "অধিগমনের অনুমতি নেই", -"Cloud not found" => "ক্লাউড খুঁজে পাওয়া গেল না", "Security Warning" => "নিরাপত্তাজনিত সতর্কতা", "Create an <strong>admin account</strong>" => "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন", "Password" => "কূটশব্দ", diff --git a/core/l10n/ca.php b/core/l10n/ca.php index 05d202f8e18..a617d1c249a 100644 --- a/core/l10n/ca.php +++ b/core/l10n/ca.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Error en posar a preferits", "Error unfavoriting" => "Error en treure de preferits", "Access forbidden" => "Accés prohibit", -"Cloud not found" => "No s'ha trobat el núvol", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n", "The share will expire on %s." => "La compartició venç el %s.", "Cheers!" => "Salut!", @@ -186,7 +185,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "S'ha desactivat el tema %s", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.", "Start update" => "Inicia l'actualització", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. ", -"This ownCloud instance is currently being updated, which may take a while." => "Aquesta instància d'ownCloud s'està actualitzant i podria trigar una estona." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. " ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php index 3ec7ca11354..9b4c9e4b811 100644 --- a/core/l10n/cs_CZ.php +++ b/core/l10n/cs_CZ.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Chyba při označování jako oblíbené", "Error unfavoriting" => "Chyba při odznačování jako oblíbené", "Access forbidden" => "Přístup zakázán", -"Cloud not found" => "Cloud nebyl nalezen", +"File not found" => "Soubor nenalezen", +"The specified document has not been found on the server." => "Vybraný dokument nebyl na serveru nalezen.", +"You can click here to return to %s." => "Kliknout zde pro návrat na %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hej ty tam,\n\njen ti chci dát vědět, že %s sdílel %s s tebou.\nZobraz si to: %s\n\n", "The share will expire on %s." => "Sdílení vyprší %s.", "Cheers!" => "Ať slouží!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Před provedením dalšího kroku se prosím ujistěte, že databáze a konfigurační a datový adresář byly zazálohovány. ", "Start update" => "Spustit aktualizaci", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Abyste zabránili vypršení časového limitu u větších instalací, můžete namísto toho spustit následující příkaz v hlavním adresáři:", -"This ownCloud instance is currently being updated, which may take a while." => "Tato instalace ownCloud je právě aktualizována, může to chvíli trvat.", -"This page will refresh itself when the ownCloud instance is available again." => "Tato stránka se načte automaticky poté, co bude opět dostupná instance ownCloud." +"This %s instance is currently being updated, which may take a while." => "Tato instalace %s je právě aktualizována a to může chvíli trvat.", +"This page will refresh itself when the %s instance is available again." => "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s." ); $PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"; diff --git a/core/l10n/cy_GB.php b/core/l10n/cy_GB.php index 77169ad6960..538ab93aa4b 100644 --- a/core/l10n/cy_GB.php +++ b/core/l10n/cy_GB.php @@ -71,7 +71,6 @@ $TRANSLATIONS = array( "Admin" => "Gweinyddu", "Help" => "Cymorth", "Access forbidden" => "Mynediad wedi'i wahardd", -"Cloud not found" => "Methwyd canfod cwmwl", "Security Warning" => "Rhybudd Diogelwch", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Mae eich fersiwn PHP yn agored i ymosodiad NULL Byte (CVE-2006-7243)", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ", diff --git a/core/l10n/da.php b/core/l10n/da.php index bb25ee16549..4ab07f4c9b4 100644 --- a/core/l10n/da.php +++ b/core/l10n/da.php @@ -38,7 +38,7 @@ $TRANSLATIONS = array( "Image" => "Billede", "Audio" => "Lyd", "Saving..." => "Gemmer...", -"Couldn't send reset email. Please contact your administrator." => "Der opstod et problem under afsending af reset-emailen. Kontakt venligst systemadministratoren.", +"Couldn't send reset email. Please contact your administrator." => "Der opstod et problem under afsending af e-mailen til nulstilling. Kontakt venligst systemadministratoren.", "The link to reset your password has been sent to your email. 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." => "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.", "Your files are encrypted. If you haven't enabled the recovery key, 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?" => "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?", "I know what I'm doing" => "Jeg ved, hvad jeg har gang i", @@ -114,11 +114,11 @@ $TRANSLATIONS = array( "The update was unsuccessful." => "Opdateringen mislykkedes.", "The update was successful. Redirecting you to ownCloud now." => "Opdateringen blev udført korrekt. Du bliver nu viderestillet til ownCloud.", "Couldn't reset password because the token is invalid" => "Kunne ikke nulstille kodeordet, fordi symboludtrykket er ugyldigt", -"Couldn't send reset email. Please make sure your username is correct." => "Der opstod et problem under afsendelse af nulstillings-emailen. Kontroller venligst om dit brugernavnet er korrekt", -"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "Der opstod et problem under afsendelse af nulstillings-emailen. Der ikke er nogen email adresse tilknyttet denne bruger konto. Kontakt venligst systemadministratoren", +"Couldn't send reset email. Please make sure your username is correct." => "Der opstod et problem under afsendelse af nulstillings-e-mailen. Kontroller venligst om dit brugernavnet er korrekt", +"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "Der opstod et problem under afsendelse af nulstillings-e-mailen. Der ikke er nogen email adresse tilknyttet denne bruger konto. Kontakt venligst systemadministratoren", "%s password reset" => "%s adgangskode nulstillet", "Use the following link to reset your password: {link}" => "Anvend følgende link til at nulstille din adgangskode: {link}", -"You will receive a link to reset your password via Email." => "Du vil modtage et link til at nulstille dit kodeord via email.", +"You will receive a link to reset your password via Email." => "Du vil modtage et link til at nulstille dit kodeord via e-mail.", "Username" => "Brugernavn", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" => "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode. HVis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter. Vil du fortsætte?", "Yes, I really want to reset my password now" => "Ja, Jeg ønsker virkelig at nulstille mit kodeord", @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Fejl ved favoritering", "Error unfavoriting" => "Fejl ved fjernelse af favorisering.", "Access forbidden" => "Adgang forbudt", -"Cloud not found" => "Sky ikke fundet", +"File not found" => "Filen blev ikke fundet", +"The specified document has not been found on the server." => "Det angivne dokument blev ikke fundet på serveren.", +"You can click here to return to %s." => "Du kan klikke her for at gå tilbage til %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hej med dig\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\nSe det her: %s\n\n", "The share will expire on %s." => "Delingen vil udløbe om %s.", "Cheers!" => "Hej!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Venligst sikrer dig en backup af databasen, config-mappen og data-mappen inden vi fortsætter.", "Start update" => "Begynd opdatering", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "For at undgå tidsudløb med større installationer, så kan du i stedet køre følgende kommando fra din installationsmappe:", -"This ownCloud instance is currently being updated, which may take a while." => "Opdatere Owncloud, dette kan tage et stykke tid.", -"This page will refresh itself when the ownCloud instance is available again." => "Denne side vil genopfriske sig selv, når ownCloud-instancen er tilgængelig igen." +"This %s instance is currently being updated, which may take a while." => "Denne %s-instans bliver i øjeblikket opdateret, hvilket kan tage et stykke tid.", +"This page will refresh itself when the %s instance is available again." => "Denne side vil genopfriske sig selv, når %s-instancen er tilgængelig igen." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/de.php b/core/l10n/de.php index c9876e313c1..db5e0f42e94 100644 --- a/core/l10n/de.php +++ b/core/l10n/de.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Fehler beim Favorisieren", "Error unfavoriting" => "Fehler beim Entfernen aus den Favoriten", "Access forbidden" => "Zugriff verboten", -"Cloud not found" => "Cloud nicht gefunden", +"File not found" => "Datei nicht gefunden", +"The specified document has not been found on the server." => "Das ausgewählte Dokument wurde auf dem Server nicht gefunden.", +"You can click here to return to %s." => "Du kannst zur Rückkehr zu %s hier klicken.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hallo,\n\nich wollte Dich nur wissen lassen, dass %s %s mit Dir teilt.\nSchaue es Dir an: %s\n\n", "The share will expire on %s." => "Die Freigabe wird am %s ablaufen.", "Cheers!" => "Hallo!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Stelle vor dem Fortsetzen sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurde.", "Start update" => "Aktualisierung starten", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen kannst Du stattdessen den folgenden Befehl in Deinem Installationsverzeichnis ausführen:", -"This ownCloud instance is currently being updated, which may take a while." => "Diese OwnCloud-Instanz wird gerade aktualisiert, was eine Weile dauert.", -"This page will refresh itself when the ownCloud instance is available again." => "Diese Seite aktualisert sich automatisch, wenn die ownCloud-Instanz wieder verfügbar ist." +"This %s instance is currently being updated, which may take a while." => "Diese %s - Instanz wird gerade aktualisiert, was eine Weile dauert.", +"This page will refresh itself when the %s instance is available again." => "Diese Seite aktualisert sich automatisch, wenn die %s - Instanz wieder verfügbar ist." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/de_CH.php b/core/l10n/de_CH.php index 84a48b98e8c..c92cb5a37c7 100644 --- a/core/l10n/de_CH.php +++ b/core/l10n/de_CH.php @@ -81,7 +81,6 @@ $TRANSLATIONS = array( "Admin" => "Administrator", "Help" => "Hilfe", "Access forbidden" => "Zugriff verboten", -"Cloud not found" => "Cloud wurde nicht gefunden", "Security Warning" => "Sicherheitshinweis", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Ihre PHP Version ist durch die NULL Byte Attacke (CVE-2006-7243) angreifbar", "Please update your PHP installation to use %s securely." => "Bitte aktualisieren Sie Ihre PHP-Installation um %s sicher nutzen zu können.", diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php index 0b345a4ec45..962eaeea7aa 100644 --- a/core/l10n/de_DE.php +++ b/core/l10n/de_DE.php @@ -4,11 +4,11 @@ $TRANSLATIONS = array( "Turned on maintenance mode" => "Wartungsmodus eingeschaltet ", "Turned off maintenance mode" => "Wartungsmodus ausgeschaltet", "Updated database" => "Datenbank aktualisiert", -"Checked database schema update" => "Datenbank-Schemenaktualisierung geprüft", -"Checked database schema update for apps" => "Datenbank-Schemenaktualisierung für Apps geprüft", +"Checked database schema update" => "Aktualisierung des Datenbankschemas wurde überprüft", +"Checked database schema update for apps" => "Aktualisierung des Datenbankschemas für Apps wurde überprüft", "Updated \"%s\" to %s" => "»%s« zu %s aktualisiert", "Disabled incompatible apps: %s" => "Deaktivierte inkompatible Apps: %s", -"No image or file provided" => "Weder Bild noch ein Datei wurden zur Verfügung gestellt", +"No image or file provided" => "Weder Bild noch eine Datei wurden zur Verfügung gestellt", "Unknown filetype" => "Unbekannter Dateityp", "Invalid image" => "Ungültiges Bild", "No temporary profile picture available, try again" => "Kein temporäres Profilbild verfügbar, bitte versuchen Sie es nochmal", @@ -39,8 +39,8 @@ $TRANSLATIONS = array( "Audio" => "Audio", "Saving..." => "Speichervorgang …", "Couldn't send reset email. Please contact your administrator." => "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.", -"The link to reset your password has been sent to your email. 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." => "Der Link zum Rücksetzen Ihres Passworts ist an Ihre E-Mail-Adresse geschickt worden. Wenn Sie ihn nicht innerhalb einer vernünftigen Zeit empfängen, prüfen Sie Ihre Spam-Verzeichnisse.<br>Wenn er nicht dort ist, fragen Sie Ihren lokalen Administrator.", -"Your files are encrypted. If you haven't enabled the recovery key, 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?" => "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wiederzubekommen, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?", +"The link to reset your password has been sent to your email. 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." => "Der Link, zum Zurücksetzen Ihres Passwortes, ist an Ihre E-Mail-Adresse geschickt worden. Wenn Sie ihn nicht innerhalb einer vernünftigen Zeit empfangen, überprüfen Sie bitte Ihre Spam-Ordner.<br>Wenn sie nicht dort ist, fragen Sie bitte Ihren lokalen Administrator.", +"Your files are encrypted. If you haven't enabled the recovery key, 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?" => "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?", "I know what I'm doing" => "Ich weiß, was ich mache", "Reset password" => "Passwort zurücksetzen", "Password can not be changed. Please contact your administrator." => "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.", @@ -75,7 +75,7 @@ $TRANSLATIONS = array( "Error while changing permissions" => "Fehler bei der Änderung der Rechte", "Shared with you and the group {group} by {owner}" => "Von {owner} mit Ihnen und der Gruppe {group} geteilt.", "Shared with you by {owner}" => "Von {owner} mit Ihnen geteilt.", -"Share with user or group …" => "Mit Benutzer oder Gruppe teilen ....", +"Share with user or group …" => "Mit Benutzer oder Gruppe teilen …", "Share link" => "Link teilen", "The public link will expire no later than {days} days after it is created" => "Der öffentliche Link wird spätestens nach {days} Tagen, nach Erstellung, ablaufen", "Password protect" => "Passwortschutz", @@ -109,13 +109,13 @@ $TRANSLATIONS = array( "Edit tags" => "Schlagwörter bearbeiten", "Error loading dialog template: {error}" => "Fehler beim Laden der Dialogvorlage: {error}", "No tags selected for deletion." => "Es wurden keine Schlagwörter zum Löschen ausgewählt.", -"Updating {productName} to version {version}, this may take a while." => "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.", +"Updating {productName} to version {version}, this may take a while." => "{productName} wird auf Version {version} aktualisiert. Das könnte eine Weile dauern.", "Please reload the page." => "Bitte laden Sie diese Seite neu.", "The update was unsuccessful." => "Die Aktualisierung war erfolgreich.", "The update was successful. Redirecting you to ownCloud now." => "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.", "Couldn't reset password because the token is invalid" => "Aufgrund eines ungültigen Tokens kann das Passwort nicht zurück gesetzt werden", -"Couldn't send reset email. Please make sure your username is correct." => "E-Mail zum Zurücksetzen kann nicht versendet werden. Stellen Sie sicher, dass Ihr Nutzername korrekt ist.", -"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "E-Mail zum Zurücksetzen kann Aufgrund einer nicht vorhandenen E-Mail Adresse für diesen Nutzernamen nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.", +"Couldn't send reset email. Please make sure your username is correct." => "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stellen Sie sicher, dass Ihr Benutzername richtig ist.", +"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "Die E-Mail, zum Zurücksetzen, kann Aufgrund einer nicht vorhandenen E-Mail-Adresse, für diesen Benutzernamen, nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.", "%s password reset" => "%s-Passwort zurücksetzen", "Use the following link to reset your password: {link}" => "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}", "You will receive a link to reset your password via Email." => "Sie erhalten einen Link per E-Mail, um Ihr Passwort zurückzusetzen.", @@ -125,7 +125,7 @@ $TRANSLATIONS = array( "Reset" => "Zurücksetzen", "New password" => "Neues Passwort", "New Password" => "Neues Passwort", -"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht korrekt funktionieren. Benutzung auf eigenes Risiko!", +"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht richtig funktionieren. Benutzung auf eigenes Risiko!", "For the best results, please consider using a GNU/Linux server instead." => "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.", "Personal" => "Persönlich", "Users" => "Benutzer", @@ -140,8 +140,10 @@ $TRANSLATIONS = array( "Error favoriting" => "Fehler beim Hinzufügen zu den Favoriten", "Error unfavoriting" => "Fehler beim Entfernen aus den Favoriten", "Access forbidden" => "Zugriff verboten", -"Cloud not found" => "Cloud wurde nicht gefunden", -"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hallo,\n\n%s hat %s mit Ihnen geteilt.\nSchauen Sie es sich an: %s\n\n", +"File not found" => "Datei nicht gefunden", +"The specified document has not been found on the server." => "Das ausgewählte Dokument wurde auf dem Server nicht gefunden.", +"You can click here to return to %s." => "Sie können zur Rückkehr zu %s hier klicken.", +"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hallo,\n\n%s hat %s mit Ihnen geteilt.\nAnsehen: %s\n\n", "The share will expire on %s." => "Die Freigabe wird am %s ablaufen.", "Cheers!" => "Noch einen schönen Tag!", "Security Warning" => "Sicherheitshinweis", @@ -160,34 +162,34 @@ $TRANSLATIONS = array( "Database name" => "Datenbank-Name", "Database tablespace" => "Datenbank-Tablespace", "Database host" => "Datenbank-Host", -"SQLite will be used as database. For larger installations we recommend to change this." => "SQLite wird als Datenbank benutzt. Für größere Installationen wird empfohlen, dies zu ändern.", +"SQLite will be used as database. For larger installations we recommend to change this." => "SQLite wird als Datenbank benutzt. Für größere Installationen wird empfohlen, dieses zu ändern.", "Finish setup" => "Installation abschließen", "Finishing …" => "Abschließen ...", -"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Diese Anwendung benötigt ein aktiviertes JavaScript zum korrekten Betrieb. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivieren Sie JavaScript</a> und laden Sie diese Seite neu.", +"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Diese Anwendung benötigt ein aktiviertes JavaScript, um richtig zu funktionieren. Bitte <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivieren Sie JavaScript</a> und laden Sie diese Seite neu.", "%s is available. Get more information on how to update." => "%s ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.", "Log out" => "Abmelden", "Server side authentication failed!" => "Die Legitimierung auf dem Server ist fehlgeschlagen!", "Please contact your administrator." => "Bitte kontaktieren Sie Ihren Administrator.", -"Forgot your password? Reset it!" => "Passwort vergessen? Setzen Sie es zurück!", +"Forgot your password? Reset it!" => "Passwort vergessen? Zurückstellen!", "remember" => "merken", "Log in" => "Einloggen", "Alternative Logins" => "Alternative Logins", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" => "Hallo,<br><br>wir möchten Sie wissen lassen, dass %s <strong>%s</strong> mit Ihnen geteilt hat.<br><a href=\"%s\">Ansehen</a><br><br>", "This ownCloud instance is currently in single user mode." => "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.", -"This means only administrators can use the instance." => "Dies bedeutet, dass diese Instanz nur von Administratoren genutzt werden kann.", +"This means only administrators can use the instance." => "Das bedeutet, dass diese Instanz nur von Administratoren benutzt werden kann.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Kontaktieren Sie Ihren Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.", "Thank you for your patience." => "Vielen Dank für Ihre Geduld.", "You are accessing the server from an untrusted domain." => "Sie greifen von einer nicht vertrauenswürdigen Domain auf den Server zu.", -"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Bitte kontaktieren Sie Ihren Administrator. Wenn Sie aktuell Administrator dieser Instanz sind, konfigurieren Sie bitte die \"trusted_domain\" - Einstellung in config/config.php. Eine Beispielkonfiguration wird unter config/config.sample.php bereit gestellt.", -"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." => "Abhängig von Ihrer Konfiguration können Sie auch als Administrator, zum Vertrauen dieser Domain, den unteren Button verwenden.", +"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Bitte kontaktieren Sie Ihren Administrator. Wenn Sie aktuell Administrator dieser Instanz sind, konfigurieren Sie bitte die »trusted_domain«-Einstellung in config/config.php. Eine Beispielkonfiguration wird unter config/config.sample.php bereit bereitgestellt.", +"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." => "Abhängig von Ihrer Konfiguration, können Sie als Administrator dieser Domain vertrauen, indem Sie den unteren Knopf benutzen.", "Add \"%s\" as trusted domain" => "»%s« als vertrauenswürdige Domain hinzufügen", "%s will be updated to version %s." => "%s wird auf Version %s aktualisiert.", "The following apps will be disabled:" => "Die folgenden Apps werden deaktiviert:", -"The theme %s has been disabled." => "Das Theme %s wurde deaktiviert.", -"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Stellen Sie vor dem Fortsetzen sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurde.", +"The theme %s has been disabled." => "Das Thema %s wurde deaktiviert.", +"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Stellen Sie vor dem Fortsetzen bitte sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurden.", "Start update" => "Aktualisierung starten", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen können Sie stattdessen den folgenden Befehl in Ihrem Installationsverzeichnis ausführen:", -"This ownCloud instance is currently being updated, which may take a while." => "Diese ownCloud-Instanz wird gerade aktualisiert, was eine Weile dauert.", -"This page will refresh itself when the ownCloud instance is available again." => "Diese Seite aktualisert sich automatisch, wenn die ownCloud-Instanz wieder verfügbar ist." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Zur Vermeidung von Zeitüberschreitungen, bei größeren Installationen, können Sie stattdessen den folgenden Befehl, in Ihrem Installationsverzeichnis, ausführen:", +"This %s instance is currently being updated, which may take a while." => "Diese %s - Instanz wird gerade aktualisiert, was eine Weile dauert.", +"This page will refresh itself when the %s instance is available again." => "Diese Seite aktualisert sich automatisch, wenn die %s - Instanz wieder verfügbar ist." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/el.php b/core/l10n/el.php index e9ab78a9721..d6075f65587 100644 --- a/core/l10n/el.php +++ b/core/l10n/el.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Σφάλμα προσθήκης στα αγαπημένα", "Error unfavoriting" => "Σφάλμα αφαίρεσης από τα αγαπημένα", "Access forbidden" => "Δεν επιτρέπεται η πρόσβαση", -"Cloud not found" => "Δεν βρέθηκε νέφος", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Γειά χαρά,\n\nαπλά σας ενημερώνω πως ο %s μοιράστηκε το %s με εσάς.\nΔείτε το: %s\n\n", "The share will expire on %s." => "Ο διαμοιρασμός θα λήξει σε %s.", "Cheers!" => "Χαιρετισμούς!", @@ -163,6 +162,7 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Η SQLIte θα χρησιμοποιηθεί ως βάση δεδομένων. Για μεγαλύτερες εγκαταστάσεις σας συνιστούμε να το αλλάξετε.", "Finish setup" => "Ολοκλήρωση εγκατάστασης", "Finishing …" => "Ολοκλήρωση...", +"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Αυτή η εφαρμογή απαιτεί JavaScript για τη σωστή λειτουργία. Παρακαλώ <a href=\"http://enable-javascript.com/\" target=\"_blank\">ενεργοποιήστε τη JavaScript</a> και επαναφορτώστε τη σελίδα.", "%s is available. Get more information on how to update." => "%s είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες στο πώς να αναβαθμίσετε.", "Log out" => "Αποσύνδεση", "Server side authentication failed!" => "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", @@ -186,6 +186,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Παρακαλώ βεβαιωθείτε ότι έχουν ληψθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.", "Start update" => "Έναρξη ενημέρωσης", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Για να αποφύγετε τη λήξη χρόνου με μεγαλύτερες εγκαταστάσεις, μπορείτε αντί αυτού να τρέξετε την ακόλουθη εντολή από τον κατάλογο αρχείων εφαρμογών:", -"This ownCloud instance is currently being updated, which may take a while." => "Αυτή η εγκατάσταση ownCloud ενημερώνεται, το οποίο μπορεί να πάρει κάποιο χρόνο." +"This %s instance is currently being updated, which may take a while." => "Αυτή %s η εγκατάσταση είναι υπό ενημέρωση, η οποία μπορεί να πάρει κάποιο χρόνο.", +"This page will refresh itself when the %s instance is available again." => "Αυτή η σελίδα θα ανανεωθεί από μόνη της όταν η %s εγκατάσταση είναι διαθέσιμη ξανά." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php index 8894ccb5927..03b48abe943 100644 --- a/core/l10n/en_GB.php +++ b/core/l10n/en_GB.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Error favouriting", "Error unfavoriting" => "Error unfavouriting", "Access forbidden" => "Access denied", -"Cloud not found" => "Cloud not found", +"File not found" => "File not found", +"The specified document has not been found on the server." => "The specified document has not been found on the server.", +"You can click here to return to %s." => "You can click here to return to %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n", "The share will expire on %s." => "The share will expire on %s.", "Cheers!" => "Cheers!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Please make sure that the database, the config folder and the data folder have been backed up before proceeding.", "Start update" => "Start update", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:", -"This ownCloud instance is currently being updated, which may take a while." => "This ownCloud instance is currently being updated, which may take a while.", -"This page will refresh itself when the ownCloud instance is available again." => "This page will refresh itself when the ownCloud instance is available again." +"This %s instance is currently being updated, which may take a while." => "This %s instance is currently being updated, which may take a while.", +"This page will refresh itself when the %s instance is available again." => "This page will refresh itself when the %s instance is available again." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/eo.php b/core/l10n/eo.php index 59bc44327be..38930c0f9ad 100644 --- a/core/l10n/eo.php +++ b/core/l10n/eo.php @@ -101,7 +101,6 @@ $TRANSLATIONS = array( "Error tagging" => "Eraris etikedado", "Error untagging" => "Eraris maletikedado", "Access forbidden" => "Aliro estas malpermesata", -"Cloud not found" => "La nubo ne estas trovita", "Security Warning" => "Sekureca averto", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Via PHP versio estas sendefenda je la NULL bajto atako (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Bonvolu ĝisdatigi vian PHP-instalon por uzi %s sekure.", diff --git a/core/l10n/es.php b/core/l10n/es.php index ec9595fafae..1603e1c865b 100644 --- a/core/l10n/es.php +++ b/core/l10n/es.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Error al marcar como favorito", "Error unfavoriting" => "Error al quitar como favorito", "Access forbidden" => "Acceso denegado", -"Cloud not found" => "No se encuentra la nube", +"File not found" => "Archivo no encontrado", +"The specified document has not been found on the server." => "El documento indicado no se ha encontrado en el servidor.", +"You can click here to return to %s." => "Puede hacer clic aquí para volver a %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hola:\n\nTan solo queremos informarte que %s compartió %s contigo.\nMíralo aquí: %s\n\n", "The share will expire on %s." => "El objeto dejará de ser compartido el %s.", "Cheers!" => "¡Saludos!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Antes de proceder, asegúrese de que se haya hecho un respaldo de la base de datos, la carpeta de configuración y la carpeta de datos.", "Start update" => "Iniciar actualización", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Para evitar tiempos de espera en grandes instalaciones, en su lugar puede ejecutar el siguiente comando desde el directorio de instalación:", -"This ownCloud instance is currently being updated, which may take a while." => "Esta versión de owncloud se está actualizando, esto puede demorar un tiempo.", -"This page will refresh itself when the ownCloud instance is available again." => "Esta página se recargará cuando la instalación de ownCloud vuelva a estar disponible." +"This %s instance is currently being updated, which may take a while." => "Está instancia %s está siendo actualizada, lo que puede llevar un tiempo.", +"This page will refresh itself when the %s instance is available again." => "La página se refrescará por sí misma cuando la instancia %s vuelva a estar disponible." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php index cbc54822270..93c8817ff1d 100644 --- a/core/l10n/es_AR.php +++ b/core/l10n/es_AR.php @@ -118,7 +118,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Error al favorecer", "Error unfavoriting" => "Error al desfavorecer", "Access forbidden" => "Acceso prohibido", -"Cloud not found" => "No se encontró ownCloud", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "¡Hola!\n\nsólo te quería decir que %s acaba de compartir %s contigo.\nVerlo: %s\n\n", "The share will expire on %s." => "El compartir expirará en %s.", "Cheers!" => "¡Saludos!", @@ -148,7 +147,6 @@ $TRANSLATIONS = array( "This ownCloud instance is currently in single user mode." => "Esta instancia de ownCloud está en modo de usuario único.", "This means only administrators can use the instance." => "Esto significa que solo administradores pueden usar esta instancia.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Contacte su administrador de sistema si este mensaje persiste o aparece inesperadamente.", -"Thank you for your patience." => "Gracias por su paciencia.", -"This ownCloud instance is currently being updated, which may take a while." => "Esta instancia de ownClod está siendo actualizada, puede tardar un momento." +"Thank you for your patience." => "Gracias por su paciencia." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/es_MX.php b/core/l10n/es_MX.php index 08b08549fbb..82f7f8ff8c4 100644 --- a/core/l10n/es_MX.php +++ b/core/l10n/es_MX.php @@ -111,7 +111,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Error al marcar como favorito", "Error unfavoriting" => "Error al quitar como favorito", "Access forbidden" => "Acceso denegado", -"Cloud not found" => "No se encuentra la nube", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hola:\n\nTan solo queremos informarte que %s compartió %s contigo.\nMíralo aquí: %s\n\n", "The share will expire on %s." => "El objeto dejará de ser compartido el %s.", "Cheers!" => "¡Saludos!", @@ -141,7 +140,6 @@ $TRANSLATIONS = array( "This ownCloud instance is currently in single user mode." => "Esta instalación de ownCloud se encuentra en modo de usuario único.", "This means only administrators can use the instance." => "Esto quiere decir que solo un administrador puede usarla.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Contacte con su administrador de sistemas si este mensaje persiste o aparece de forma inesperada.", -"Thank you for your patience." => "Gracias por su paciencia.", -"This ownCloud instance is currently being updated, which may take a while." => "Esta versión de ownCloud se está actualizando, esto puede demorar un tiempo." +"Thank you for your patience." => "Gracias por su paciencia." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php index 640e5cd0100..e9c38e01b51 100644 --- a/core/l10n/et_EE.php +++ b/core/l10n/et_EE.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Viga lemmikuks lisamisel", "Error unfavoriting" => "Viga lemmikutest eemaldamisel", "Access forbidden" => "Ligipääs on keelatud", -"Cloud not found" => "Pilve ei leitud", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Tere,\n\n%s jagas sulle välja %s.\nVaata siit: %s\n\n", "The share will expire on %s." => "Jagamine aegub %s.", "Cheers!" => "Terekest!", @@ -186,7 +185,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "Teema %s on keelatud.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Enne jätkamist veendu, et andmebaas, seadete ning andmete kataloog on varundatud.", "Start update" => "Käivita uuendus", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Suurtel saitidel aegumise vältimiseks võid sa paigalduskaustas käivitada järgmise käsu:", -"This ownCloud instance is currently being updated, which may take a while." => "Seda ownCloud instantsi hetkel uuendatakse, võib võtta veidi aega." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Suurtel saitidel aegumise vältimiseks võid sa paigalduskaustas käivitada järgmise käsu:" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/eu.php b/core/l10n/eu.php index ca4a5e086e4..d5aad3a5f9e 100644 --- a/core/l10n/eu.php +++ b/core/l10n/eu.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Errorea gogokoetara gehitzerakoan", "Error unfavoriting" => "Errorea gogokoetatik kentzerakoan", "Access forbidden" => "Sarrera debekatuta", -"Cloud not found" => "Ez da hodeia aurkitu", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n", "The share will expire on %s." => "Elkarbanaketa %s-n iraungiko da.", "Cheers!" => "Ongi izan!", @@ -185,7 +184,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "%s gaia desgaitu da.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Ekin aurretik egiazta ezazu datu basearen, ezarpenen karpetaren eta datuen karpetaren babeskopia duzula.", "Start update" => "Hasi eguneraketa", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Instalazio handien itxarote-denbora saihesteko, ondoko komandoa exekuta dezakezu instalazio direktoriotik:", -"This ownCloud instance is currently being updated, which may take a while." => "ownCloud instantzia hau eguneratzen ari da, honek denbora har dezake." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Instalazio handien itxarote-denbora saihesteko, ondoko komandoa exekuta dezakezu instalazio direktoriotik:" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/fa.php b/core/l10n/fa.php index e78b69f3569..b04e32e4eeb 100644 --- a/core/l10n/fa.php +++ b/core/l10n/fa.php @@ -121,7 +121,6 @@ $TRANSLATIONS = array( "Error favoriting" => "خطا هنگام افزودن به موارد محبوب", "Error unfavoriting" => "خطا هنگام حذف از موارد محبوب", "Access forbidden" => "اجازه دسترسی به مناطق ممنوعه را ندارید", -"Cloud not found" => "پیدا نشد", "Cheers!" => "سلامتی!", "Security Warning" => "اخطار امنیتی", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "نسخه ی PHP شما در برابر حملات NULL Byte آسیب پذیر است.(CVE-2006-7243)", diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php index bb715107e2c..8feccedbba0 100644 --- a/core/l10n/fi_FI.php +++ b/core/l10n/fi_FI.php @@ -139,7 +139,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Suosituksen kirjoitusvirhe", "Error unfavoriting" => "Suosituksen poisto virhe", "Access forbidden" => "Pääsy estetty", -"Cloud not found" => "Pilveä ei löydy", +"File not found" => "Tiedostoa ei löytynyt", +"The specified document has not been found on the server." => "Määritettyä asiakirjaa ei löytynyt palvelimelta.", +"You can click here to return to %s." => "Napsauta tästä palataksesi %siin.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hei sinä!\n\n%s jakoi kohteen %s kanssasi.\nTutustu siihen: %s\n\n", "The share will expire on %s." => "Jakaminen päättyy %s.", "Cheers!" => "Kippis!", @@ -186,7 +188,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Varmista ennen jatkamista, että tietokanta, asetuskansio ja datakansio on varmuuskopioitu.", "Start update" => "Käynnistä päivitys", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Välttääksesi aikakatkaisuja suurikokoisten asennusten kanssa, voit suorittaa vaihtoehtoisesti seuraavan komennon asennushakemistossa:", -"This ownCloud instance is currently being updated, which may take a while." => "Tätä ownCloud-asennusta päivitetään parhaillaan, siinä saattaa kestää hetki.", -"This page will refresh itself when the ownCloud instance is available again." => "Tämä sivu päivittää itsensä, kun kyseinen ownCloud on jälleen käytettävissä." +"This %s instance is currently being updated, which may take a while." => "Tätä %s-asennusta päivitetään parhaillaan, päivityksessä saattaa kestää hetki.", +"This page will refresh itself when the %s instance is available again." => "Tämä sivu päivittää itsensä, kun %s on jälleen käytettävissä." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/fr.php b/core/l10n/fr.php index fc67001904c..493f26f2d47 100644 --- a/core/l10n/fr.php +++ b/core/l10n/fr.php @@ -5,6 +5,8 @@ $TRANSLATIONS = array( "Turned off maintenance mode" => "Basculé en mode production (non maintenance)", "Updated database" => "Base de données mise à jour", "Checked database schema update" => "Mise à jour du schéma de la base de données vérifiée", +"Checked database schema update for apps" => "La mise à jour du schéma de la base de données pour les applications a été vérifiée", +"Updated \"%s\" to %s" => "Mise à jour de \"%s\" à %s", "Disabled incompatible apps: %s" => "Applications incompatibles désactivées: %s", "No image or file provided" => "Aucune image ou fichier fourni", "Unknown filetype" => "Type de fichier inconnu", @@ -138,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Erreur lors de la mise en favori", "Error unfavoriting" => "Erreur lors de la suppression des favoris", "Access forbidden" => "Accès interdit", -"Cloud not found" => "Introuvable", +"File not found" => "Fichier non trouvé", +"The specified document has not been found on the server." => "Le document spécifié n'a pu être trouvé sur le serveur.", +"You can click here to return to %s." => "Vous pouvez cliquer ici pour retourner à %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nConsultez-le : %s\n", "The share will expire on %s." => "Le partage expirera le %s.", "Cheers!" => "À bientôt !", @@ -161,6 +165,7 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "SQLite va être utilisée comme base de donnée. Pour des installations plus volumineuse, nous vous conseillons de changer ce réglage.", "Finish setup" => "Terminer l'installation", "Finishing …" => "En cours de finalisation...", +"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Cette application nécessite JavaScript pour fonctionner correctement. Veuillez <a href=\"http://enable-javascript.com/\" target=\"_blank\">activer JavaScript</a> puis charger à nouveau cette page.", "%s is available. Get more information on how to update." => "%s est disponible. Obtenez plus d'informations sur la façon de mettre à jour.", "Log out" => "Se déconnecter", "Server side authentication failed!" => "L'authentification côté serveur a échoué !", @@ -176,12 +181,15 @@ $TRANSLATIONS = array( "Thank you for your patience." => "Merci de votre patience.", "You are accessing the server from an untrusted domain." => "Vous accédez au serveur à partir d'un domaine non-approuvé.", "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Veuillez contacter votre administrateur. Si vous être l'administrateur de cette instance, il faut configurer la variable \"trusted_domain\" dans le fichier config/config.php. Un exemple de configuration est fournit dans le fichier config/config.sample.php.", +"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." => "En fonction de votre configuration, en tant qu'administrateur vous pouvez également utiliser le bouton ci-dessous pour faire confiance à ce domaine.", +"Add \"%s\" as trusted domain" => "Ajouter \"%s\" comme domaine de confiance", "%s will be updated to version %s." => "%s sera mis à jour vers la version %s.", "The following apps will be disabled:" => "Les applications suivantes seront désactivées :", "The theme %s has been disabled." => "Le thème %s a été désactivé.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Veuillez vous assurer qu'une copie de sauvegarde de la base de données, du dossier de configuration et du dossier de données a été réalisée avant le commencement de la procédure.", "Start update" => "Démarrer la mise à jour.", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Afin d'éviter les délais d'interruption avec les installations de plus grande ampleur, vous pouvez plutôt exécuter la commande suivante depuis le répertoire d'installation :", -"This ownCloud instance is currently being updated, which may take a while." => "Cette instance d'ownCloud est en cours de mise à jour, cela peut prendre du temps." +"This %s instance is currently being updated, which may take a while." => "Cette instance de %s est en cours de mise à jour, cela peut prendre du temps.", +"This page will refresh itself when the %s instance is available again." => "Cette page se rafraîchira d'elle-même lorsque l'instance %s sera à nouveau disponible." ); $PLURAL_FORMS = "nplurals=2; plural=(n > 1);"; diff --git a/core/l10n/gl.php b/core/l10n/gl.php index 11ccf6bfe00..abb15a70fac 100644 --- a/core/l10n/gl.php +++ b/core/l10n/gl.php @@ -138,7 +138,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Produciuse un erro ao marcar como favorito", "Error unfavoriting" => "Produciuse un erro ao desmarcar como favorito", "Access forbidden" => "Acceso denegado", -"Cloud not found" => "Nube non atopada", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Ola,\n\nsó facerlle saber que %s compartiu %s con vostede.\nVéxao en: %s\n\n", "The share will expire on %s." => "Esta compartición caduca o %s.", "Cheers!" => "Saúdos!", @@ -181,7 +180,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "O tema %s foi desactivado.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Asegúrese de ter feito unha copia de seguranza da base de datos, do cartafol de configuración e do cartafol de datos, antes de proceder.", "Start update" => "Iniciar a actualización", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Para evitar tempos de espera nas instalacións grandes, no seu lugar pode executar a seguinte orde desde o directorio de instalación:", -"This ownCloud instance is currently being updated, which may take a while." => "Esta instancia do ownCloud está actualizandose neste momento, pode levarlle un chisco." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Para evitar tempos de espera nas instalacións grandes, no seu lugar pode executar a seguinte orde desde o directorio de instalación:" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/he.php b/core/l10n/he.php index 0cc44614349..a19d1f258d9 100644 --- a/core/l10n/he.php +++ b/core/l10n/he.php @@ -75,7 +75,6 @@ $TRANSLATIONS = array( "Admin" => "מנהל", "Help" => "עזרה", "Access forbidden" => "הגישה נחסמה", -"Cloud not found" => "ענן לא נמצא", "Security Warning" => "אזהרת אבטחה", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "גרסת ה־PHP פגיעה בפני התקפת בית NULL/ריק (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "נא לעדכן את התקנת ה-PHP שלך כדי להשתמש ב-%s בצורה מאובטחת.", diff --git a/core/l10n/hi.php b/core/l10n/hi.php index 0311dd34ab5..ef81f978aa3 100644 --- a/core/l10n/hi.php +++ b/core/l10n/hi.php @@ -37,7 +37,6 @@ $TRANSLATIONS = array( "Users" => "उपयोगकर्ता", "Apps" => "Apps", "Help" => "सहयोग", -"Cloud not found" => "क्लौड नहीं मिला ", "Security Warning" => "सुरक्षा चेतावनी ", "Create an <strong>admin account</strong>" => "व्यवस्थापक खाता बनाएँ", "Password" => "पासवर्ड", diff --git a/core/l10n/hr.php b/core/l10n/hr.php index 4ace0937cd4..8cfcc57c2cc 100644 --- a/core/l10n/hr.php +++ b/core/l10n/hr.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Pogrešno dodavanje u favorite", "Error unfavoriting" => "Pogrešno uklanjanje iz favorita", "Access forbidden" => "Pristup zabranjen", -"Cloud not found" => "Oblak nije pronađen", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hej, \n\nsamo vam javljamo da je %s podijelio %s s vama.\nPogledajte ga: %s\n\n", "The share will expire on %s." => "Podijeljeni resurs će isteći na %s.", "Cheers!" => "Cheers!", @@ -186,7 +185,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "Tema %s je onemogućena", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Prije nego li nastavite, molimo osigurajte da su baza podataka, mapa konfiguracije i mapaza podatke sigurnosno kopirani.", "Start update" => "Započnite ažuriranje", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Da biste izbjegli vremensko prekoračenje s većim instalacijama, možete pokrenutisljedeću naredbu iz svoga instalacijskog direktorija:", -"This ownCloud instance is currently being updated, which may take a while." => "Ova ownCloud instanca se upravo ažurira, što može potrajati neko vrijeme." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Da biste izbjegli vremensko prekoračenje s većim instalacijama, možete pokrenutisljedeću naredbu iz svoga instalacijskog direktorija:" ); $PLURAL_FORMS = "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"; diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php index 4a08c865fe8..50c4efef4f5 100644 --- a/core/l10n/hu_HU.php +++ b/core/l10n/hu_HU.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Hiba a kedvencekhez adáskor", "Error unfavoriting" => "Hiba a kedvencekből törléskor", "Access forbidden" => "A hozzáférés nem engedélyezett", -"Cloud not found" => "A felhő nem található", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Üdv!\\n\n\\n\nÉrtesítjük, hogy %s megosztotta Önnel a következőt: %s.\\n\nItt lehet megnézni: %s\\n\n\\n", "The share will expire on %s." => "A megosztás lejár ekkor %s", "Cheers!" => "Üdv.", @@ -185,7 +184,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "Ez a smink: %s letiltásra került.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Kérjük gondoskodjon róla, hogy elmentse az adatbázist, a konfigurációs mappa és az adatamappa tartalmát, mielőtt folytatja.", "Start update" => "A frissítés megkezdése", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Nagyobb telepítések esetén úgy kerülhetők el az időtúllépések, ha inkább a következő parancsot adja ki a telepítési alkönyvtárban:", -"This ownCloud instance is currently being updated, which may take a while." => "Az ownCloud frissítés elkezdődött, ez eltarthat egy ideig." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Nagyobb telepítések esetén úgy kerülhetők el az időtúllépések, ha inkább a következő parancsot adja ki a telepítési alkönyvtárban:" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/ia.php b/core/l10n/ia.php index 2e84854f586..be244b04828 100644 --- a/core/l10n/ia.php +++ b/core/l10n/ia.php @@ -107,7 +107,6 @@ $TRANSLATIONS = array( "Error loading tags" => "Error quando on cargava etiquettas", "Tag already exists" => "Etiquetta ja existe", "Access forbidden" => "Accesso prohibite", -"Cloud not found" => "Nube non trovate", "The share will expire on %s." => "Le compartir expirara le %s.", "Cheers!" => "Acclamationes!", "Security Warning" => "Aviso de securitate", diff --git a/core/l10n/id.php b/core/l10n/id.php index ab5f19d1e6d..fa202c02761 100644 --- a/core/l10n/id.php +++ b/core/l10n/id.php @@ -120,7 +120,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Galat saat memberikan sebagai favorit", "Error unfavoriting" => "Galat saat menghapus sebagai favorit", "Access forbidden" => "Akses ditolak", -"Cloud not found" => "Cloud tidak ditemukan", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hai,\n\nhanya supaya anda tahu bahwa %s membagikan %s dengan anda.\nLihat: %s\n\n", "The share will expire on %s." => "Pembagian akan berakhir pada %s.", "Cheers!" => "Horee!", @@ -151,7 +150,6 @@ $TRANSLATIONS = array( "This ownCloud instance is currently in single user mode." => "ownCloud ini sedang dalam mode pengguna tunggal.", "This means only administrators can use the instance." => "Ini berarti hanya administrator yang dapat menggunakan ownCloud.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Hubungi administrator sistem anda jika pesan ini terus muncul atau muncul tiba-tiba.", -"Thank you for your patience." => "Terima kasih atas kesabaran anda.", -"This ownCloud instance is currently being updated, which may take a while." => "ownCloud ini sedang diperbarui, yang mungkin memakan waktu cukup lama." +"Thank you for your patience." => "Terima kasih atas kesabaran anda." ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/core/l10n/is.php b/core/l10n/is.php index b1095a49bfb..cec7226680d 100644 --- a/core/l10n/is.php +++ b/core/l10n/is.php @@ -70,7 +70,6 @@ $TRANSLATIONS = array( "Admin" => "Stjórnun", "Help" => "Hjálp", "Access forbidden" => "Aðgangur bannaður", -"Cloud not found" => "Ský finnst ekki", "Security Warning" => "Öryggis aðvörun", "Create an <strong>admin account</strong>" => "Útbúa <strong>vefstjóra aðgang</strong>", "Password" => "Lykilorð", diff --git a/core/l10n/it.php b/core/l10n/it.php index c00209148a9..f8643717afb 100644 --- a/core/l10n/it.php +++ b/core/l10n/it.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Errore di creazione dei preferiti", "Error unfavoriting" => "Errore di rimozione dai preferiti", "Access forbidden" => "Accesso negato", -"Cloud not found" => "Nuvola non trovata", +"File not found" => "File non trovato", +"The specified document has not been found on the server." => "Il documento specificato non è stato trovato sul server.", +"You can click here to return to %s." => "Puoi fare clic qui per tornare a %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Ciao,\n\nvolevo informarti che %s ha condiviso %s con te.\nVedi: %s\n\n", "The share will expire on %s." => "La condivisione scadrà il %s.", "Cheers!" => "Saluti!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Assicurati di aver creato una copia di sicurezza del database, della cartella config e della cartella data prima di procedere. ", "Start update" => "Avvia l'aggiornamento", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Per evitare timeout con installazioni di grandi dimensioni, puoi eseguire il comando che segue dalla cartella di installazione:", -"This ownCloud instance is currently being updated, which may take a while." => "Questa istanza di ownCloud è in fase di aggiornamento, potrebbe richiedere del tempo.", -"This page will refresh itself when the ownCloud instance is available again." => "Questa pagina si aggiornerà quando l'istanza di ownCloud sarà nuovamente disponibile." +"This %s instance is currently being updated, which may take a while." => "Questa istanza di %s è in fase di aggiornamento, potrebbe richiedere del tempo.", +"This page will refresh itself when the %s instance is available again." => "Questa pagina si aggiornerà quando l'istanza di %s sarà nuovamente disponibile." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/ja.php b/core/l10n/ja.php index 4c9c1f00cd0..93337b39183 100644 --- a/core/l10n/ja.php +++ b/core/l10n/ja.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "お気に入りに追加エラー", "Error unfavoriting" => "お気に入りから削除エラー", "Access forbidden" => "アクセスが禁止されています", -"Cloud not found" => "見つかりません", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "こんにちは、\n\n%s があなたと %s を共有したことをお知らせします。\nそれを表示: %s\n", "The share will expire on %s." => "共有は %s で有効期限が切れます。", "Cheers!" => "それでは!", @@ -186,8 +185,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "テーマ %s が無効になっています。", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "データベースを確認してください。実行前にconfigフォルダーとdataフォルダーをバックアップします。", "Start update" => "アップデートを開始", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "大規模なサイトの場合、ブラウザーがタイムアウトする可能性がある為、インストールディレクトリで次のコマンドを実行しても構いません。", -"This ownCloud instance is currently being updated, which may take a while." => "このownCloudインスタンスは現在アップデート中のため、しばらく時間がかかります。", -"This page will refresh itself when the ownCloud instance is available again." => "この画面は、ownCloud サーバーが再起動後、自動的に更新されます。" +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "大規模なサイトの場合、ブラウザーがタイムアウトする可能性がある為、インストールディレクトリで次のコマンドを実行しても構いません。" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/core/l10n/ka_GE.php b/core/l10n/ka_GE.php index 31201abb898..4f0a2a64c2a 100644 --- a/core/l10n/ka_GE.php +++ b/core/l10n/ka_GE.php @@ -73,7 +73,6 @@ $TRANSLATIONS = array( "Admin" => "ადმინისტრატორი", "Help" => "დახმარება", "Access forbidden" => "წვდომა აკრძალულია", -"Cloud not found" => "ღრუბელი არ არსებობს", "Security Warning" => "უსაფრთხოების გაფრთხილება", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "თქვენი PHP ვერსია შეიცავს საფრთხეს NULL Byte შეტევებისთვის (CVE-2006-7243)", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.", diff --git a/core/l10n/km.php b/core/l10n/km.php index c2da871a113..b1f099b14e5 100644 --- a/core/l10n/km.php +++ b/core/l10n/km.php @@ -80,7 +80,6 @@ $TRANSLATIONS = array( "Admin" => "អ្នកគ្រប់គ្រង", "Help" => "ជំនួយ", "Access forbidden" => "បានហាមឃាត់ការចូល", -"Cloud not found" => "រកមិនឃើញ Cloud", "Security Warning" => "បម្រាមសុវត្ថិភាព", "Create an <strong>admin account</strong>" => "បង្កើត<strong>គណនីអភិបាល</strong>", "Password" => "ពាក្យសម្ងាត់", diff --git a/core/l10n/ko.php b/core/l10n/ko.php index 5ef15937c39..724eaf720de 100644 --- a/core/l10n/ko.php +++ b/core/l10n/ko.php @@ -122,7 +122,6 @@ $TRANSLATIONS = array( "Error favoriting" => "즐겨찾기 추가 오류", "Error unfavoriting" => "즐겨찾기 삭제 오류", "Access forbidden" => "접근 금지됨", -"Cloud not found" => "클라우드를 찾을 수 없습니다", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "안녕하세요,\n\n%s 님이 %s을(를) 공유하였음을 알려 드립니다.\n보기 링크: %s\n\n", "The share will expire on %s." => "이 공유는 %s 까지 유지됩니다.", "Cheers!" => "감사합니다!", @@ -156,7 +155,6 @@ $TRANSLATIONS = array( "This means only administrators can use the instance." => "현재 시스템 관리자만 인스턴스를 사용할 수 있습니다.", "Contact your system administrator if this message persists or appeared unexpectedly." => "이 메시지가 계속 표시되거나, 예상하지 못하였을 때 표시된다면 시스템 관리자에게 연락하십시오", "Thank you for your patience." => "기다려 주셔서 감사합니다.", -"Start update" => "업데이트 시작", -"This ownCloud instance is currently being updated, which may take a while." => "ownCloud 인스턴스가 현재 업데이트 중입니다. 잠시만 기다려 주십시오." +"Start update" => "업데이트 시작" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/core/l10n/ku_IQ.php b/core/l10n/ku_IQ.php index 775fdab1f95..d188db0dab6 100644 --- a/core/l10n/ku_IQ.php +++ b/core/l10n/ku_IQ.php @@ -18,7 +18,6 @@ $TRANSLATIONS = array( "Apps" => "بهرنامهكان", "Admin" => "بهڕێوهبهری سهرهكی", "Help" => "یارمەتی", -"Cloud not found" => "هیچ نهدۆزرایهوه", "Password" => "وشەی تێپەربو", "Data folder" => "زانیاری فۆڵدهر", "Database user" => "بهكارهێنهری داتابهیس", diff --git a/core/l10n/lb.php b/core/l10n/lb.php index 24f8850f12a..e448a2b500d 100644 --- a/core/l10n/lb.php +++ b/core/l10n/lb.php @@ -94,7 +94,6 @@ $TRANSLATIONS = array( "Error tagging" => "Fehler beim Taggen", "Error untagging" => "Fehler beim Tag läschen", "Access forbidden" => "Zougrëff net erlaabt", -"Cloud not found" => "Cloud net fonnt", "Cheers!" => "Prost!", "Security Warning" => "Sécherheets-Warnung", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Deng PHP-Versioun ass verwonnbar duerch d'NULL-Byte-Attack (CVE-2006-7243)", diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php index 8479412251f..63b1e79b1c9 100644 --- a/core/l10n/lt_LT.php +++ b/core/l10n/lt_LT.php @@ -111,7 +111,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Klaida įtraukiant į mėgstamus.", "Error unfavoriting" => "Klaida pašalinant iš mėgstamų.", "Access forbidden" => "Priėjimas draudžiamas", -"Cloud not found" => "Negalima rasti", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Labas,\n\nInformuojame, kad %s pasidalino su Jumis %s.\nPažiūrėti tai: %s\n", "The share will expire on %s." => "Bendrinimo laikas baigsis %s.", "Cheers!" => "Sveikinimai!", @@ -141,7 +140,6 @@ $TRANSLATIONS = array( "This ownCloud instance is currently in single user mode." => "Ši ownCloud sistema yra vieno naudotojo veiksenoje.", "This means only administrators can use the instance." => "Tai reiškia, kad tik administratorius gali naudotis sistema.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Susisiekite su savo sistemos administratoriumi jei šis pranešimas nedingsta arba jei jis pasirodė netikėtai.", -"Thank you for your patience." => "Dėkojame už jūsų kantrumą.", -"This ownCloud instance is currently being updated, which may take a while." => "Šiuo metu vyksta ownCloud atnaujinamas, tai gali šiek tiek užtrukti." +"Thank you for your patience." => "Dėkojame už jūsų kantrumą." ); $PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/core/l10n/lv.php b/core/l10n/lv.php index 166ecf80370..a8705461341 100644 --- a/core/l10n/lv.php +++ b/core/l10n/lv.php @@ -76,7 +76,6 @@ $TRANSLATIONS = array( "Admin" => "Administratori", "Help" => "Palīdzība", "Access forbidden" => "Pieeja ir liegta", -"Cloud not found" => "Mākonis netika atrasts", "Security Warning" => "Brīdinājums par drošību", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Jūsu PHP ir ievainojamība pret NULL Byte uzbrukumiem (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Lūdzu atjauniniet PHP instalāciju lai varētu droši izmantot %s.", diff --git a/core/l10n/mk.php b/core/l10n/mk.php index 2bb23498939..ed41f264605 100644 --- a/core/l10n/mk.php +++ b/core/l10n/mk.php @@ -102,7 +102,6 @@ $TRANSLATIONS = array( "Error untagging" => "Грешка при отстранување на таговите", "Error favoriting" => "Грешка при ", "Access forbidden" => "Забранет пристап", -"Cloud not found" => "Облакот не е најден", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Здраво,\n\nСамо да ве известам дека %s shared %s with you.\nView it: %s\n\n", "Cheers!" => "Поздрав!", "Security Warning" => "Безбедносно предупредување", @@ -126,7 +125,6 @@ $TRANSLATIONS = array( "Log in" => "Најава", "Alternative Logins" => "Алтернативни најавувања", "Contact your system administrator if this message persists or appeared unexpectedly." => "Контактирајте го вашиот систем администратор до колку оваа порака продолжи да се појавува или пак се појавува ненадејно.", -"Thank you for your patience." => "Благодариме на вашето трпение.", -"This ownCloud instance is currently being updated, which may take a while." => "Оваа инстанца на ownCloud во моментов се надградува, што може малку да потрае." +"Thank you for your patience." => "Благодариме на вашето трпение." ); $PLURAL_FORMS = "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"; diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php index 8eb766614a8..414b190fe6c 100644 --- a/core/l10n/ms_MY.php +++ b/core/l10n/ms_MY.php @@ -46,7 +46,6 @@ $TRANSLATIONS = array( "Admin" => "Admin", "Help" => "Bantuan", "Access forbidden" => "Larangan akses", -"Cloud not found" => "Awan tidak dijumpai", "Security Warning" => "Amaran keselamatan", "Create an <strong>admin account</strong>" => "buat <strong>akaun admin</strong>", "Password" => "Kata laluan", diff --git a/core/l10n/my_MM.php b/core/l10n/my_MM.php index d6a6632ecfc..eec76317284 100644 --- a/core/l10n/my_MM.php +++ b/core/l10n/my_MM.php @@ -33,7 +33,6 @@ $TRANSLATIONS = array( "Apps" => "Apps", "Admin" => "အက်ဒမင်", "Help" => "အကူအညီ", -"Cloud not found" => "မတွေ့ရှိမိပါ", "Security Warning" => "လုံခြုံရေးသတိပေးချက်", "Create an <strong>admin account</strong>" => "<strong>အက်ဒမင်အကောင့်</strong>တစ်ခုဖန်တီးမည်", "Password" => "စကားဝှက်", diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php index 9e158586c18..5a63105390f 100644 --- a/core/l10n/nb_NO.php +++ b/core/l10n/nb_NO.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Feil ved favorittmerking", "Error unfavoriting" => "Feil ved fjerning av favorittmerking", "Access forbidden" => "Tilgang nektet", -"Cloud not found" => "Sky ikke funnet", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hei,\n\nDette er en beskjed om at %s delte %s med deg.\nVis den: %s\n\n", "The share will expire on %s." => "Delingen vil opphøre %s.", "Cheers!" => "Ha det!", @@ -185,7 +184,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "Temaet %s har blitt deaktivert.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Forsikre deg om at databasen, config-mappen og datamappen er blitt sikkerhetskopiert før du fortsetter.", "Start update" => "Start oppdatering", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "For å unngå tidsavbrudd ved store installasjoner, kan du i stedet kjøre følgende kommando fra installasjonsmappen:", -"This ownCloud instance is currently being updated, which may take a while." => "Denne ownCloud-instansen oppdateres for øyeblikket, noe som kan ta litt tid." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "For å unngå tidsavbrudd ved store installasjoner, kan du i stedet kjøre følgende kommando fra installasjonsmappen:" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/nl.php b/core/l10n/nl.php index 27ab446f8c7..e864ad7d11a 100644 --- a/core/l10n/nl.php +++ b/core/l10n/nl.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Fout bij favoriet maken", "Error unfavoriting" => "Fout bij verwijderen favorietstatus", "Access forbidden" => "Toegang verboden", -"Cloud not found" => "Cloud niet gevonden", +"File not found" => "Bestand niet gevonden", +"The specified document has not been found on the server." => "Het opgegeven document is niet gevonden op deze server.", +"You can click here to return to %s." => "Klik hier om terug te keren naar %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hallo,\n\n%s deelt %s met u.\nBekijk het hier: %s\n\n", "The share will expire on %s." => "De share vervalt op %s.", "Cheers!" => "Proficiat!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Let erop dat de database, de config map en de data map zijn gebackupped voordat u verder gaat.", "Start update" => "Begin de update", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Om time-outs tijdens grotere installaties te voorkomen, kunt u in plaats hiervan de volgende opdracht geven vanaf uw installatiedirectory:", -"This ownCloud instance is currently being updated, which may take a while." => "Deze ownCloud dienst wordt nu bijgewerkt, dat kan even duren.", -"This page will refresh itself when the ownCloud instance is available again." => "Deze pagina ververst zichzelf als deze ownCloud weer beschikbaar is." +"This %s instance is currently being updated, which may take a while." => "Deze %s-installatie wordt momenteel geüpdatet. Dat kan enige tijd duren.", +"This page will refresh itself when the %s instance is available again." => "Deze pagina wordt ververst als de %s-installatie weer beschikbaar is." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php index d51e750f3ed..82c0c0ec851 100644 --- a/core/l10n/nn_NO.php +++ b/core/l10n/nn_NO.php @@ -99,7 +99,6 @@ $TRANSLATIONS = array( "Admin" => "Admin", "Help" => "Hjelp", "Access forbidden" => "Tilgang forbudt", -"Cloud not found" => "Fann ikkje skyen", "Security Warning" => "Tryggleiksåtvaring", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "PHP-utgåva di er sårbar for NULL-byteåtaket (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Ver venleg og oppdater PHP-installasjonen din til å brukar %s trygt.", diff --git a/core/l10n/oc.php b/core/l10n/oc.php index 42ea079ec96..d785441ee28 100644 --- a/core/l10n/oc.php +++ b/core/l10n/oc.php @@ -60,7 +60,6 @@ $TRANSLATIONS = array( "Admin" => "Admin", "Help" => "Ajuda", "Access forbidden" => "Acces enebit", -"Cloud not found" => "Nívol pas trobada", "Security Warning" => "Avertiment de securitat", "Create an <strong>admin account</strong>" => "Crea un <strong>compte admin</strong>", "Password" => "Senhal", diff --git a/core/l10n/pl.php b/core/l10n/pl.php index b2192b6fb9c..e257af67a46 100644 --- a/core/l10n/pl.php +++ b/core/l10n/pl.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Błąd podczas dodawania do ulubionch", "Error unfavoriting" => "Błąd przy usuwaniu z ulubionych", "Access forbidden" => "Dostęp zabroniony", -"Cloud not found" => "Nie odnaleziono chmury", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Witaj,\n\ntylko informuję, że %s współdzieli z Tobą %s.\nZobacz tutaj: %s\n\n", "The share will expire on %s." => "Ten zasób wygaśnie %s", "Cheers!" => "Pozdrawiam!", @@ -163,6 +162,7 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Jako baza danych zostanie użyty SQLite. Dla większych instalacji doradzamy zmianę na inną.", "Finish setup" => "Zakończ konfigurowanie", "Finishing …" => "Kończę ...", +"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę <a href=\"http://enable-javascript.com/\" target=\"_blank\">włącz JavaScript</a> i przeładuj stronę.", "%s is available. Get more information on how to update." => "%s jest dostępna. Dowiedz się więcej na temat aktualizacji.", "Log out" => "Wyloguj", "Server side authentication failed!" => "Uwierzytelnianie po stronie serwera nie powiodło się!", @@ -185,7 +185,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "Motyw %s został wyłączony.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Proszę się upewnić, że baza danych, folder konfiguracji oraz folder danych zostały zarchiwizowane przed przejściem dalej.", "Start update" => "Rozpocznij aktualizację", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Aby uniknąć timeout-ów przy większych instalacjach, możesz zamiast tego uruchomić następującą komendę w katalogu Twojej instalacji:", -"This ownCloud instance is currently being updated, which may take a while." => "Ta instalacja ownCloud jest w tej chwili aktualizowana, co może chwilę potrwać" +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Aby uniknąć timeout-ów przy większych instalacjach, możesz zamiast tego uruchomić następującą komendę w katalogu Twojej instalacji:" ); $PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php index 2bcd2e785cd..b4c6a3f9f83 100644 --- a/core/l10n/pt_BR.php +++ b/core/l10n/pt_BR.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Erro colocando nos favoritos", "Error unfavoriting" => "Erro retirando do favoritos", "Access forbidden" => "Acesso proibido", -"Cloud not found" => "Cloud não encontrado", +"File not found" => "Arquivo não encontrado", +"The specified document has not been found on the server." => "O documento especificado não foi encontrado no servidor.", +"You can click here to return to %s." => "Você pode clicar aqui para retornar para %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Olá,\n\ngostaria que você soubesse que %s compartilhou %s com você.\nVeja isto: %s\n\n", "The share will expire on %s." => "O compartilhamento irá expirar em %s.", "Cheers!" => "Saúde!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Por favor, certifique-se de que o banco de dados, a pasta config e a pasta de dados foram copiados antes de prosseguir.", "Start update" => "Iniciar atualização", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Para evitar tempos de espera com instalações maiores, você pode em vez disso executar o seguinte comando a partir do diretório de instalação:", -"This ownCloud instance is currently being updated, which may take a while." => "Esta instância do ownCloud está sendo atualizada, o que pode demorar um pouco.", -"This page will refresh itself when the ownCloud instance is available again." => "Esta página será atualizada automaticamente quando ownCloud estiver novamente disponível." +"This %s instance is currently being updated, which may take a while." => "Esta instância %s está sendo atualizada, o que pode demorar um pouco.", +"This page will refresh itself when the %s instance is available again." => "Esta página será atualizada automaticamente quando esta instância %s estiver disponível novamente." ); $PLURAL_FORMS = "nplurals=2; plural=(n > 1);"; diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php index 9b674a5f72c..568499ab2f4 100644 --- a/core/l10n/pt_PT.php +++ b/core/l10n/pt_PT.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Erro a definir como favorito", "Error unfavoriting" => "Erro a remover como favorito", "Access forbidden" => "Acesso interdito", -"Cloud not found" => "Cloud nao encontrada", +"File not found" => "Ficheiro não encontrado", +"The specified document has not been found on the server." => "O documento especificado não foi encontrado no servidor.", +"You can click here to return to %s." => "Pode clicar aqui para retornar para %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Olá,\n\napenas para informar que %s partilhou »%s« consigo.\nConsulte aqui: %s\n", "The share will expire on %s." => "Esta partilha vai expirar em %s.", "Cheers!" => "Parabéns!", @@ -187,6 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Por favor garanta a cópia de segurança da base de dados e das pastas 'config' e 'data' antes de prosseguir.", "Start update" => "Iniciar atualização", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Para evitar tempos de espera com instalações maiores, você pode em vez disso, executar o seguinte comando a partir do diretório de instalação:", -"This ownCloud instance is currently being updated, which may take a while." => "Esta instância do ownCloud está a ser actualizada, poderá demorar algum tempo." +"This %s instance is currently being updated, which may take a while." => "Esta instância %s está actualmente a ser actualizada, poderá demorar algum tempo.", +"This page will refresh itself when the %s instance is available again." => "Esta página irá ser recarregada novamente quando a instância %s ficar novamente disponível." ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/ro.php b/core/l10n/ro.php index fe717125d06..d4245a4b916 100644 --- a/core/l10n/ro.php +++ b/core/l10n/ro.php @@ -108,7 +108,6 @@ $TRANSLATIONS = array( "Admin" => "Administrator", "Help" => "Ajutor", "Access forbidden" => "Acces restricționat", -"Cloud not found" => "Nu s-a găsit", "The share will expire on %s." => "Partajarea va expira în data de %s.", "Security Warning" => "Avertisment de securitate", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Versiunea dvs. PHP este vulnerabilă la un atac cu un octet NULL (CVE-2006-7243)", diff --git a/core/l10n/ru.php b/core/l10n/ru.php index b72e84c4b00..ec4026038ba 100644 --- a/core/l10n/ru.php +++ b/core/l10n/ru.php @@ -140,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Ошибка размещения в любимых", "Error unfavoriting" => "Ошибка удаления из любимых", "Access forbidden" => "Доступ запрещён", -"Cloud not found" => "Облако не найдено", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Здравствуйте,\n\n%s предоставил Вам доступ к %s.\nПосмотреть: %s\n\n", "The share will expire on %s." => "Доступ будет закрыт %s", "Cheers!" => "Удачи!", @@ -186,7 +185,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "Тема %s была отключена.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Пожалуйста, перед тем, как продолжить, убедитесь в том, что вы сделали резервную копию базы данных, директории конфигурации и директории с данными.", "Start update" => "Запустить обновление", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Чтобы избежать задержек при больших объёмах, вы можете выполнить следующую команду в директории установки:", -"This ownCloud instance is currently being updated, which may take a while." => "Производится обновление ownCloud, это может занять некоторое время." +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Чтобы избежать задержек при больших объёмах, вы можете выполнить следующую команду в директории установки:" ); $PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php index e0763d7a924..57de60748e9 100644 --- a/core/l10n/si_LK.php +++ b/core/l10n/si_LK.php @@ -57,7 +57,6 @@ $TRANSLATIONS = array( "Admin" => "පරිපාලක", "Help" => "උදව්", "Access forbidden" => "ඇතුල් වීම තහනම්", -"Cloud not found" => "සොයා ගත නොහැක", "Security Warning" => "ආරක්ෂක නිවේදනයක්", "Password" => "මුර පදය", "Data folder" => "දත්ත ෆෝල්ඩරය", diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php index 800b908e3fd..5a67d253142 100644 --- a/core/l10n/sk_SK.php +++ b/core/l10n/sk_SK.php @@ -5,6 +5,8 @@ $TRANSLATIONS = array( "Turned off maintenance mode" => "Mód údržby e vypnutý", "Updated database" => "Databáza je aktualizovaná", "Checked database schema update" => "Skontrolovať aktualizáciu schémy databázy", +"Checked database schema update for apps" => "Aktualizácia schémy databázy aplikácií bola overená", +"Updated \"%s\" to %s" => "Aktualizované \"%s\" na %s", "Disabled incompatible apps: %s" => "Zakázané nekompatibilné aplikácie: %s", "No image or file provided" => "Obrázok alebo súbor nebol zadaný", "Unknown filetype" => "Neznámy typ súboru", @@ -138,7 +140,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Chyba pri pridaní do obľúbených", "Error unfavoriting" => "Chyba pri odobratí z obľúbených", "Access forbidden" => "Prístup odmietnutý", -"Cloud not found" => "Nenájdené", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Dobrý deň,\n\nPoužívateľ %s zdieľa s vami súbor, alebo priečinok s názvom %s.\nPre zobrazenie kliknite na túto linku: %s\n", "The share will expire on %s." => "Zdieľanie vyprší %s.", "Cheers!" => "Pekný deň!", @@ -176,11 +177,11 @@ $TRANSLATIONS = array( "Thank you for your patience." => "Ďakujeme za Vašu trpezlivosť.", "You are accessing the server from an untrusted domain." => "Pristupujete na server v nedôveryhodnej doméne.", "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Kontaktujte administrátora. Ak ste administrátorom tejto inštancie, nakonfigurujte správne nastavenie \"trusted_domain\" v config/config.php. Vzorová konfigurácia je uvedená v config/config.sample.php.", +"Add \"%s\" as trusted domain" => "Pridať \"%s\" ako dôveryhodnú doménu", "%s will be updated to version %s." => "%s bude zaktualizovaný na verziu %s.", "The following apps will be disabled:" => "Tieto aplikácie budú zakázané:", "The theme %s has been disabled." => "Téma %s bola zakázaná.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Pred vykonaním ďalšieho kroku sa presvedčte, že databáza, konfiguračný a dátový priečinok sú zazálohované.", -"Start update" => "Spustiť aktualizáciu", -"This ownCloud instance is currently being updated, which may take a while." => "Táto inštancia ownCloud sa práve aktualizuje, čo môže nejaký čas trvať." +"Start update" => "Spustiť aktualizáciu" ); $PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"; diff --git a/core/l10n/sl.php b/core/l10n/sl.php index c298386605c..424146e6953 100644 --- a/core/l10n/sl.php +++ b/core/l10n/sl.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Napaka označevanja priljubljenosti", "Error unfavoriting" => "Napaka odstranjevanja oznake priljubljenosti", "Access forbidden" => "Dostop je prepovedan", -"Cloud not found" => "Oblaka ni mogoče najti", +"File not found" => "Datoteke ni mogoče najti", +"The specified document has not been found on the server." => "Določenega dokumenta na strežniku ni mogoče najti.", +"You can click here to return to %s." => "S klikom na povezavo boste vrnjeni na %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Pozdravljeni,\n\noseba %s vam je omogočila souporabo %s.\nVir si lahko ogledate: %s\n\n", "The share will expire on %s." => "Povezava souporabe bo potekla %s.", "Cheers!" => "Na zdravje!", @@ -163,6 +165,7 @@ $TRANSLATIONS = array( "SQLite will be used as database. For larger installations we recommend to change this." => "Za podatkovno zbirko bo uporabljen SQLite. Za večje zbirke je priporočljivo to zamenjati.", "Finish setup" => "Končaj nastavitev", "Finishing …" => "Poteka zaključevanje opravila ...", +"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Program zahteva podporo JavaScript za pravilno delovanje. Omogočite <a href=\"http://enable-javascript.com/\" target=\"_blank\">JavaScript</a> in ponovno osvežite stran.", "%s is available. Get more information on how to update." => "%s je na voljo. Pridobite več podrobnosti za posodobitev.", "Log out" => "Odjava", "Server side authentication failed!" => "Overitev s strežnika je spodletela!", @@ -186,6 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Pred nadaljevanjem se prepričajte se, da je ustvarjena varnostna kopija podatkovne zbirke, nastavitvenih datotek in podatkovne mape.", "Start update" => "Začni posodobitev", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Za razreševanje časovnih zahtev večjih namestitev lahko uporabite ukaz iz namestitvene mape:", -"This ownCloud instance is currently being updated, which may take a while." => "Nastavitev oblaka ownCloud se trenutno posodablja. Opravilo je lahko dolgotrajno ..." +"This %s instance is currently being updated, which may take a while." => "Povezava %s se posodablja. Opravilo je lahko dolgotrajno.", +"This page will refresh itself when the %s instance is available again." => "Stran bo osvežena ko bo %s spet na voljo." ); $PLURAL_FORMS = "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"; diff --git a/core/l10n/sq.php b/core/l10n/sq.php index 654d991d6d5..355398db074 100644 --- a/core/l10n/sq.php +++ b/core/l10n/sq.php @@ -78,7 +78,6 @@ $TRANSLATIONS = array( "Admin" => "Admin", "Help" => "Ndihmë", "Access forbidden" => "Ndalohet hyrja", -"Cloud not found" => "Cloud-i nuk u gjet", "Security Warning" => "Paralajmërim sigurie", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Versioni juaj i PHP-së është i cënueshëm nga sulmi NULL Byte (CVE-2006-7243)", "Please update your PHP installation to use %s securely." => "Ju lutem azhurnoni instalimin tuaj të PHP-së që të përdorni %s -in në mënyrë të sigurt.", diff --git a/core/l10n/sr.php b/core/l10n/sr.php index fb315967707..8a4cf7050c9 100644 --- a/core/l10n/sr.php +++ b/core/l10n/sr.php @@ -68,7 +68,6 @@ $TRANSLATIONS = array( "Admin" => "Администратор", "Help" => "Помоћ", "Access forbidden" => "Забрањен приступ", -"Cloud not found" => "Облак није нађен", "Security Warning" => "Сигурносно упозорење", "Create an <strong>admin account</strong>" => "Направи <strong>административни налог</strong>", "Password" => "Лозинка", diff --git a/core/l10n/sr@latin.php b/core/l10n/sr@latin.php index 6bcaaa3320d..28009eccb0d 100644 --- a/core/l10n/sr@latin.php +++ b/core/l10n/sr@latin.php @@ -79,7 +79,6 @@ $TRANSLATIONS = array( "Admin" => "Adninistracija", "Help" => "Pomoć", "Access forbidden" => "Pristup zabranjen", -"Cloud not found" => "Oblak nije nađen", "Security Warning" => "Bezbednosno upozorenje", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Vaša PHP verzija je ranjiva na ", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.", diff --git a/core/l10n/sv.php b/core/l10n/sv.php index 413b3a16bfe..18eb4a15bf2 100644 --- a/core/l10n/sv.php +++ b/core/l10n/sv.php @@ -137,7 +137,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Fel favorisering", "Error unfavoriting" => "Fel av favorisering ", "Access forbidden" => "Åtkomst förbjuden", -"Cloud not found" => "Hittade inget moln", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hej där!,\n\nVi vill bara meddela att %s delade %s med dig.\nTitta på den här: %s\n\n", "The share will expire on %s." => "Utdelningen kommer att upphöra %s.", "Cheers!" => "Ha de fint!", @@ -179,7 +178,6 @@ $TRANSLATIONS = array( "The following apps will be disabled:" => "Följande appar kommer att inaktiveras:", "The theme %s has been disabled." => "Temat %s har blivit inaktiverat.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Vänligen säkerställ att en säkerhetskopia har gjorts av databasen, konfigurations- och datamappen innan du fortsätter.", -"Start update" => "Starta uppdateringen", -"This ownCloud instance is currently being updated, which may take a while." => "Denna ownCloud instans håller på att uppdatera, vilket kan ta ett tag." +"Start update" => "Starta uppdateringen" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/ta_LK.php b/core/l10n/ta_LK.php index ac613efaac2..30262c1fbf8 100644 --- a/core/l10n/ta_LK.php +++ b/core/l10n/ta_LK.php @@ -65,7 +65,6 @@ $TRANSLATIONS = array( "Admin" => "நிர்வாகம்", "Help" => "உதவி", "Access forbidden" => "அணுக தடை", -"Cloud not found" => "Cloud காணப்படவில்லை", "Security Warning" => "பாதுகாப்பு எச்சரிக்கை", "Create an <strong>admin account</strong>" => "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக", "Password" => "கடவுச்சொல்", diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php index f4cee72b4f4..c27fbe4c335 100644 --- a/core/l10n/th_TH.php +++ b/core/l10n/th_TH.php @@ -74,7 +74,6 @@ $TRANSLATIONS = array( "Admin" => "ผู้ดูแล", "Help" => "ช่วยเหลือ", "Access forbidden" => "การเข้าถึงถูกหวงห้าม", -"Cloud not found" => "ไม่พบ Cloud", "Security Warning" => "คำเตือนเกี่ยวกับความปลอดภัย", "Create an <strong>admin account</strong>" => "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>", "Password" => "รหัสผ่าน", diff --git a/core/l10n/tr.php b/core/l10n/tr.php index 918b83ec2e6..8605ed5f58f 100644 --- a/core/l10n/tr.php +++ b/core/l10n/tr.php @@ -140,7 +140,9 @@ $TRANSLATIONS = array( "Error favoriting" => "Beğenilirken hata", "Error unfavoriting" => "Beğeniden kaldırılırken hata", "Access forbidden" => "Erişim yasak", -"Cloud not found" => "Bulut bulunamadı", +"File not found" => "Dosya bulunamadı", +"The specified document has not been found on the server." => "Belirtilen dosya sunucuda bulunamadı.", +"You can click here to return to %s." => "%s ana sayfasına dönmek için buraya tıklayabilirsiniz.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Merhaba,\n\nSadece %s sizinle %s paylaşımını yaptığını bildiriyoruz.\nBuradan bakabilirsiniz: %s\n\n", "The share will expire on %s." => "Bu paylaşım %s tarihinde sona erecek.", "Cheers!" => "Hoşça kalın!", @@ -187,7 +189,7 @@ $TRANSLATIONS = array( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Devam etmeden önce lütfen veritabanının, yapılandırma ve veri klasörlerinin yedeklenmiş olduğundan emin olun.", "Start update" => "Güncellemeyi başlat", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Daha büyük kurulumlarda zaman aşımlarının önüne geçmek için, kurulum dizininizden aşağıdaki komutu da çalıştırabilirsiniz:", -"This ownCloud instance is currently being updated, which may take a while." => "Bu ownCloud örneği şu anda güncelleniyor, bu biraz zaman alabilir.", -"This page will refresh itself when the ownCloud instance is available again." => "Bu sayfa, ownCloud örneği tekrar kullanılabilir olduğunda kendini yenileyecektir." +"This %s instance is currently being updated, which may take a while." => "Bu %s örneği şu anda güncelleniyor, bu biraz zaman alabilir.", +"This page will refresh itself when the %s instance is available again." => "Bu sayfa, %s örneği tekrar kullanılabilir olduğunda kendini yenileyecektir." ); $PLURAL_FORMS = "nplurals=2; plural=(n > 1);"; diff --git a/core/l10n/uk.php b/core/l10n/uk.php index 990644d0728..b29ff9a99b9 100644 --- a/core/l10n/uk.php +++ b/core/l10n/uk.php @@ -117,7 +117,6 @@ $TRANSLATIONS = array( "Error favoriting" => "Помилка позначення улюблених", "Error unfavoriting" => "Помилка зняття позначки улюблених", "Access forbidden" => "Доступ заборонено", -"Cloud not found" => "Cloud не знайдено", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Агов,\n\nпросто щоб ви знали, що %s поділився %s з вами.\nПодивіться: %s\n\n", "The share will expire on %s." => "Доступ до спільних даних вичерпається %s.", "Cheers!" => "Будьмо!", @@ -148,7 +147,6 @@ $TRANSLATIONS = array( "This ownCloud instance is currently in single user mode." => "Цей екземпляр OwnCloud зараз працює в монопольному режимі одного користувача", "This means only administrators can use the instance." => "Це означає, що лише адміністратори можуть використовувати цей екземпляр.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Зверніться до системного адміністратора, якщо це повідомлення зберігається або з'являєтья несподівано.", -"Thank you for your patience." => "Дякуємо за ваше терпіння.", -"This ownCloud instance is currently being updated, which may take a while." => "Цей ownCloud зараз оновлюється, це може тривати певний час." +"Thank you for your patience." => "Дякуємо за ваше терпіння." ); $PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/core/l10n/ur_PK.php b/core/l10n/ur_PK.php index 3ba7bdeb4ef..fa7fcbcf6db 100644 --- a/core/l10n/ur_PK.php +++ b/core/l10n/ur_PK.php @@ -99,7 +99,6 @@ $TRANSLATIONS = array( "Admin" => "ایڈمن", "Help" => "مدد", "Access forbidden" => "رسائ منقطع ہے", -"Cloud not found" => "کلوڈ موجود نہہں", "Cheers!" => "واہ!", "Security Warning" => "حفاظتی انتباہ", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "آپ کا پی ایچ پی ورین نل بائٹ کے حملے کے خطرے سے دوچار ہے (CVE-2006-7243)", diff --git a/core/l10n/vi.php b/core/l10n/vi.php index 65f863d3113..255cff617d5 100644 --- a/core/l10n/vi.php +++ b/core/l10n/vi.php @@ -109,7 +109,6 @@ $TRANSLATIONS = array( "Error tagging" => "Lỗi gắn thẻ", "Error untagging" => "Lỗi không gắn thẻ", "Access forbidden" => "Truy cập bị cấm", -"Cloud not found" => "Không tìm thấy Clound", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Xin chào,\n\nbáo cho bạn biết rằng %s đã chia sẽ %s với bạn.\nXem nó: %s\n\n", "The share will expire on %s." => "Chia sẻ này sẽ hết hiệu lực vào %s.", "Cheers!" => "Chúc mừng!", @@ -139,7 +138,6 @@ $TRANSLATIONS = array( "This ownCloud instance is currently in single user mode." => "OwnCloud trong trường hợp này đang ở chế độ người dùng duy nhất.", "This means only administrators can use the instance." => "Điều này có nghĩa chỉ có người quản trị có thể sử dụng trong trường hợp này.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Liên hệ với người quản trị nếu lỗi này vẫn tồn tại hoặc xuất hiện bất ngờ.", -"Thank you for your patience." => "Cảm ơn sự kiên nhẫn của bạn.", -"This ownCloud instance is currently being updated, which may take a while." => "Phiên bản ownCloud này hiện đang được cập nhật, có thể sẽ mất một ít thời gian." +"Thank you for your patience." => "Cảm ơn sự kiên nhẫn của bạn." ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php index edd9eb3eeac..17516bff955 100644 --- a/core/l10n/zh_CN.php +++ b/core/l10n/zh_CN.php @@ -138,7 +138,6 @@ $TRANSLATIONS = array( "Error favoriting" => "收藏时出错", "Error unfavoriting" => "删除收藏时出错", "Access forbidden" => "访问禁止", -"Cloud not found" => "未找到云", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "嗨、你好,\n\n只想让你知道 %s 分享了 %s 给你。\n现在查看: %s\n", "The share will expire on %s." => "此分享将在 %s 过期。", "Cheers!" => "干杯!", @@ -179,7 +178,6 @@ $TRANSLATIONS = array( "The following apps will be disabled:" => "以下应用将会被禁用:", "The theme %s has been disabled." => "%s 主题已被禁用。", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "在继续之前,请确认数据库、配置文件夹和数据文件夹已经备份。", -"Start update" => "开始更新", -"This ownCloud instance is currently being updated, which may take a while." => "当前ownCloud实例正在更新,可能需要一段时间。" +"Start update" => "开始更新" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/core/l10n/zh_HK.php b/core/l10n/zh_HK.php index 59b7632ee46..45a52a3ca0f 100644 --- a/core/l10n/zh_HK.php +++ b/core/l10n/zh_HK.php @@ -66,7 +66,6 @@ $TRANSLATIONS = array( "Apps" => "軟件", "Admin" => "管理", "Help" => "幫助", -"Cloud not found" => "未找到Cloud", "Create an <strong>admin account</strong>" => "建立管理員帳戶", "Password" => "密碼", "Configure the database" => "設定資料庫", diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php index eaecdeb1fe3..6c50dc097f0 100644 --- a/core/l10n/zh_TW.php +++ b/core/l10n/zh_TW.php @@ -139,7 +139,6 @@ $TRANSLATIONS = array( "Error favoriting" => "加入最愛時出錯", "Error unfavoriting" => "從最愛移除出錯", "Access forbidden" => "存取被拒", -"Cloud not found" => "找不到網頁", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "嗨,\n\n%s 和你分享了 %s ,到這裡看它:%s\n", "The share will expire on %s." => "這個分享將會於 %s 過期", "Cheers!" => "太棒了!", @@ -184,7 +183,6 @@ $TRANSLATIONS = array( "The theme %s has been disabled." => "主題 %s 已經被停用", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "在繼續之前,請備份資料庫、config 目錄及資料目錄", "Start update" => "開始升級", -"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "在大型安裝上,為了避免升級請求逾時,你也可以在安裝目錄執行下列指令:", -"This ownCloud instance is currently being updated, which may take a while." => "ownCloud 正在升級,請稍待一會。" +"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "在大型安裝上,為了避免升級請求逾時,你也可以在安裝目錄執行下列指令:" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/core/register_command.php b/core/register_command.php index b02988bbdd8..aaf10d946b2 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -12,7 +12,7 @@ $repair = new \OC\Repair(\OC\Repair::getRepairSteps()); $application->add(new OC\Core\Command\Status); $application->add(new OC\Core\Command\Db\GenerateChangeScript()); $application->add(new OC\Core\Command\Db\ConvertType(OC_Config::getObject(), new \OC\DB\ConnectionFactory())); -$application->add(new OC\Core\Command\Upgrade()); +$application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Maintenance\SingleUser()); $application->add(new OC\Core\Command\Maintenance\Mode(OC_Config::getObject())); $application->add(new OC\Core\Command\App\Disable()); diff --git a/core/routes.php b/core/routes.php index fac67f23175..a9d5387bc14 100644 --- a/core/routes.php +++ b/core/routes.php @@ -20,9 +20,6 @@ $application->registerRoutes($this, array('routes' => array( // Post installation check /** @var $this OCP\Route\IRouter */ -$this->create('post_setup_check', '/post-setup-check') - ->action('OC_Setup', 'postSetupCheck'); - // Core ajax actions // Search $this->create('search_ajax_search', '/search/ajax/search.php') diff --git a/core/setup/controller.php b/core/setup/controller.php index 5da94e83ccc..02226ad9e42 100644 --- a/core/setup/controller.php +++ b/core/setup/controller.php @@ -22,12 +22,10 @@ class Controller { if(count($e) > 0) { $options = array_merge($opts, $post, $errors); $this->display($options); - } - else { + } else { $this->finishSetup(); } - } - else { + } else { $options = array_merge($opts, $post); $this->display($options); } @@ -53,8 +51,7 @@ class Controller { } public function finishSetup() { - header( 'Location: '.\OC_Helper::linkToRoute( 'post_setup_check' )); - exit(); + \OC_Util::redirectToDefaultPage(); } public function loadAutoConfig($post) { diff --git a/core/templates/404.php b/core/templates/404.php index bf1e03e6bc9..90912844ef9 100644 --- a/core/templates/404.php +++ b/core/templates/404.php @@ -1,4 +1,6 @@ <?php +/** @var $_ array */ +/** @var $l OC_L10N */ if(!isset($_)) {//also provide standalone error page require_once '../../lib/base.php'; @@ -12,8 +14,9 @@ if(!isset($_)) {//also provide standalone error page <?php else: ?> <ul> <li class="error"> - <?php p($l->t( 'Cloud not found' )); ?><br/> - <p class='hint'><?php if(isset($_['file'])) p($_['file'])?></p> + <?php p($l->t('File not found')); ?><br/> + <p class="hint"><?php p($l->t('The specified document has not been found on the server.')); ?></p> + <p class="hint"><a href="<?php p(OC_Helper::linkTo('', 'index.php')) ?>"><?php p($l->t('You can click here to return to %s.', array($theme->getName()))); ?></a></p> </li> </ul> <?php endif; ?> diff --git a/core/templates/login.php b/core/templates/login.php index 819010c5485..ad9db14bac1 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -1,4 +1,5 @@ <?php /** @var $l OC_L10N */ ?> +<?php script('core', 'jstz') ?> <!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]--> <form method="post" name="login"> @@ -47,6 +48,7 @@ <label for="remember_login"><?php p($l->t('remember')); ?></label> <?php endif; ?> <input type="hidden" name="timezone-offset" id="timezone-offset"/> + <input type="hidden" name="timezone" id="timezone"/> <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" /> <input type="submit" id="submit" class="login primary" value="<?php p($l->t('Log in')); ?>" disabled="disabled"/> </fieldset> |