PK֋Zx%%/Doctrine/Inflector/LanguageInflectorFactory.phpnuW+AsingularRulesets[] = $this->getSingularRuleset(); $this->pluralRulesets[] = $this->getPluralRuleset(); } final public function build(): Inflector { return new Inflector( new CachedWordInflector(new RulesetInflector( ...$this->singularRulesets )), new CachedWordInflector(new RulesetInflector( ...$this->pluralRulesets )) ); } final public function withSingularRules(?Ruleset $singularRules, bool $reset = false): LanguageInflectorFactory { if ($reset) { $this->singularRulesets = []; } if ($singularRules instanceof Ruleset) { array_unshift($this->singularRulesets, $singularRules); } return $this; } final public function withPluralRules(?Ruleset $pluralRules, bool $reset = false): LanguageInflectorFactory { if ($reset) { $this->pluralRulesets = []; } if ($pluralRules instanceof Ruleset) { array_unshift($this->pluralRulesets, $pluralRules); } return $this; } abstract protected function getSingularRuleset(): Ruleset; abstract protected function getPluralRuleset(): Ruleset; } PK֋Z0202 Doctrine/Inflector/Inflector.phpnuW+A 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'Ae', 'Æ' => 'Ae', 'Å' => 'Aa', 'æ' => 'a', 'Ç' => 'C', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'Oe', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'Ue', 'Ý' => 'Y', 'ß' => 'ss', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'ae', 'å' => 'aa', 'ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'oe', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'ue', 'ý' => 'y', 'ÿ' => 'y', 'Ā' => 'A', 'ā' => 'a', 'Ă' => 'A', 'ă' => 'a', 'Ą' => 'A', 'ą' => 'a', 'Ć' => 'C', 'ć' => 'c', 'Ĉ' => 'C', 'ĉ' => 'c', 'Ċ' => 'C', 'ċ' => 'c', 'Č' => 'C', 'č' => 'c', 'Ď' => 'D', 'ď' => 'd', 'Đ' => 'D', 'đ' => 'd', 'Ē' => 'E', 'ē' => 'e', 'Ĕ' => 'E', 'ĕ' => 'e', 'Ė' => 'E', 'ė' => 'e', 'Ę' => 'E', 'ę' => 'e', 'Ě' => 'E', 'ě' => 'e', 'Ĝ' => 'G', 'ĝ' => 'g', 'Ğ' => 'G', 'ğ' => 'g', 'Ġ' => 'G', 'ġ' => 'g', 'Ģ' => 'G', 'ģ' => 'g', 'Ĥ' => 'H', 'ĥ' => 'h', 'Ħ' => 'H', 'ħ' => 'h', 'Ĩ' => 'I', 'ĩ' => 'i', 'Ī' => 'I', 'ī' => 'i', 'Ĭ' => 'I', 'ĭ' => 'i', 'Į' => 'I', 'į' => 'i', 'İ' => 'I', 'ı' => 'i', 'IJ' => 'IJ', 'ij' => 'ij', 'Ĵ' => 'J', 'ĵ' => 'j', 'Ķ' => 'K', 'ķ' => 'k', 'ĸ' => 'k', 'Ĺ' => 'L', 'ĺ' => 'l', 'Ļ' => 'L', 'ļ' => 'l', 'Ľ' => 'L', 'ľ' => 'l', 'Ŀ' => 'L', 'ŀ' => 'l', 'Ł' => 'L', 'ł' => 'l', 'Ń' => 'N', 'ń' => 'n', 'Ņ' => 'N', 'ņ' => 'n', 'Ň' => 'N', 'ň' => 'n', 'ʼn' => 'N', 'Ŋ' => 'n', 'ŋ' => 'N', 'Ō' => 'O', 'ō' => 'o', 'Ŏ' => 'O', 'ŏ' => 'o', 'Ő' => 'O', 'ő' => 'o', 'Œ' => 'OE', 'œ' => 'oe', 'Ø' => 'O', 'ø' => 'o', 'Ŕ' => 'R', 'ŕ' => 'r', 'Ŗ' => 'R', 'ŗ' => 'r', 'Ř' => 'R', 'ř' => 'r', 'Ś' => 'S', 'ś' => 's', 'Ŝ' => 'S', 'ŝ' => 's', 'Ş' => 'S', 'ş' => 's', 'Š' => 'S', 'š' => 's', 'Ţ' => 'T', 'ţ' => 't', 'Ť' => 'T', 'ť' => 't', 'Ŧ' => 'T', 'ŧ' => 't', 'Ũ' => 'U', 'ũ' => 'u', 'Ū' => 'U', 'ū' => 'u', 'Ŭ' => 'U', 'ŭ' => 'u', 'Ů' => 'U', 'ů' => 'u', 'Ű' => 'U', 'ű' => 'u', 'Ų' => 'U', 'ų' => 'u', 'Ŵ' => 'W', 'ŵ' => 'w', 'Ŷ' => 'Y', 'ŷ' => 'y', 'Ÿ' => 'Y', 'Ź' => 'Z', 'ź' => 'z', 'Ż' => 'Z', 'ż' => 'z', 'Ž' => 'Z', 'ž' => 'z', 'ſ' => 's', '€' => 'E', '£' => '', ]; /** @var WordInflector */ private $singularizer; /** @var WordInflector */ private $pluralizer; public function __construct(WordInflector $singularizer, WordInflector $pluralizer) { $this->singularizer = $singularizer; $this->pluralizer = $pluralizer; } /** * Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'. */ public function tableize(string $word): string { $tableized = preg_replace('~(?<=\\w)([A-Z])~u', '_$1', $word); if ($tableized === null) { throw new RuntimeException(sprintf( 'preg_replace returned null for value "%s"', $word )); } return mb_strtolower($tableized); } /** * Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'. */ public function classify(string $word): string { return str_replace([' ', '_', '-'], '', ucwords($word, ' _-')); } /** * Camelizes a word. This uses the classify() method and turns the first character to lowercase. */ public function camelize(string $word): string { return lcfirst($this->classify($word)); } /** * Uppercases words with configurable delimiters between words. * * Takes a string and capitalizes all of the words, like PHP's built-in * ucwords function. This extends that behavior, however, by allowing the * word delimiters to be configured, rather than only separating on * whitespace. * * Here is an example: * * capitalize($string); * // Top-O-The-Morning To All_of_you! * * echo $inflector->capitalize($string, '-_ '); * // Top-O-The-Morning To All_Of_You! * ?> * * * @param string $string The string to operate on. * @param string $delimiters A list of word separators. * * @return string The string with all delimiter-separated words capitalized. */ public function capitalize(string $string, string $delimiters = " \n\t\r\0\x0B-"): string { return ucwords($string, $delimiters); } /** * Checks if the given string seems like it has utf8 characters in it. * * @param string $string The string to check for utf8 characters in. */ public function seemsUtf8(string $string): bool { for ($i = 0; $i < strlen($string); $i++) { if (ord($string[$i]) < 0x80) { continue; // 0bbbbbbb } if ((ord($string[$i]) & 0xE0) === 0xC0) { $n = 1; // 110bbbbb } elseif ((ord($string[$i]) & 0xF0) === 0xE0) { $n = 2; // 1110bbbb } elseif ((ord($string[$i]) & 0xF8) === 0xF0) { $n = 3; // 11110bbb } elseif ((ord($string[$i]) & 0xFC) === 0xF8) { $n = 4; // 111110bb } elseif ((ord($string[$i]) & 0xFE) === 0xFC) { $n = 5; // 1111110b } else { return false; // Does not match any model } for ($j = 0; $j < $n; $j++) { // n bytes matching 10bbbbbb follow ? if (++$i === strlen($string) || ((ord($string[$i]) & 0xC0) !== 0x80)) { return false; } } } return true; } /** * Remove any illegal characters, accents, etc. * * @param string $string String to unaccent * * @return string Unaccented string */ public function unaccent(string $string): string { if (preg_match('/[\x80-\xff]/', $string) === false) { return $string; } if ($this->seemsUtf8($string)) { $string = strtr($string, self::ACCENTED_CHARACTERS); } else { $characters = []; // Assume ISO-8859-1 if not UTF-8 $characters['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158) . chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194) . chr(195) . chr(196) . chr(197) . chr(199) . chr(200) . chr(201) . chr(202) . chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210) . chr(211) . chr(212) . chr(213) . chr(214) . chr(216) . chr(217) . chr(218) . chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227) . chr(228) . chr(229) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235) . chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243) . chr(244) . chr(245) . chr(246) . chr(248) . chr(249) . chr(250) . chr(251) . chr(252) . chr(253) . chr(255); $characters['out'] = 'EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy'; $string = strtr($string, $characters['in'], $characters['out']); $doubleChars = []; $doubleChars['in'] = [ chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254), ]; $doubleChars['out'] = ['OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th']; $string = str_replace($doubleChars['in'], $doubleChars['out'], $string); } return $string; } /** * Convert any passed string to a url friendly string. * Converts 'My first blog post' to 'my-first-blog-post' * * @param string $string String to urlize. * * @return string Urlized string. */ public function urlize(string $string): string { // Remove all non url friendly characters with the unaccent function $unaccented = $this->unaccent($string); if (function_exists('mb_strtolower')) { $lowered = mb_strtolower($unaccented); } else { $lowered = strtolower($unaccented); } $replacements = [ '/\W/' => ' ', '/([A-Z]+)([A-Z][a-z])/' => '\1_\2', '/([a-z\d])([A-Z])/' => '\1_\2', '/[^A-Z^a-z^0-9^\/]+/' => '-', ]; $urlized = $lowered; foreach ($replacements as $pattern => $replacement) { $replaced = preg_replace($pattern, $replacement, $urlized); if ($replaced === null) { throw new RuntimeException(sprintf( 'preg_replace returned null for value "%s"', $urlized )); } $urlized = $replaced; } return trim($urlized, '-'); } /** * Returns a word in singular form. * * @param string $word The word in plural form. * * @return string The word in singular form. */ public function singularize(string $word): string { return $this->singularizer->inflect($word); } /** * Returns a word in plural form. * * @param string $word The word in singular form. * * @return string The word in plural form. */ public function pluralize(string $word): string { return $this->pluralizer->inflect($word); } } PK֋Z]9@q'Doctrine/Inflector/InflectorFactory.phpnuW+Arulesets = array_merge([$ruleset], $rulesets); } public function inflect(string $word): string { if ($word === '') { return ''; } foreach ($this->rulesets as $ruleset) { if ($ruleset->getUninflected()->matches($word)) { return $word; } $inflected = $ruleset->getIrregular()->inflect($word); if ($inflected !== $word) { return $inflected; } $inflected = $ruleset->getRegular()->inflect($word); if ($inflected !== $word) { return $inflected; } } return $word; } } PK֋ZI(Doctrine/Inflector/NoopWordInflector.phpnuW+AwordInflector = $wordInflector; } public function inflect(string $word): string { return $this->cache[$word] ?? $this->cache[$word] = $this->wordInflector->inflect($word); } } PK֋Zv掸%Doctrine/Inflector/Rules/Patterns.phpnuW+Apatterns = $patterns; $patterns = array_map(static function (Pattern $pattern): string { return $pattern->getPattern(); }, $this->patterns); $this->regex = '/^(?:' . implode('|', $patterns) . ')$/i'; } public function matches(string $word): bool { return preg_match($this->regex, $word, $regs) === 1; } } PK֋Z'+Doctrine/Inflector/Rules/Transformation.phpnuW+Apattern = $pattern; $this->replacement = $replacement; } public function getPattern(): Pattern { return $this->pattern; } public function getReplacement(): string { return $this->replacement; } public function inflect(string $word): string { return (string) preg_replace($this->pattern->getRegex(), $this->replacement, $word); } } PK֋Z͕990Doctrine/Inflector/Rules/Spanish/Inflectible.phpnuW+AgetFlippedSubstitutions() ); } public static function getPluralRuleset(): Ruleset { return new Ruleset( new Transformations(...Inflectible::getPlural()), new Patterns(...Uninflected::getPlural()), new Substitutions(...Inflectible::getIrregular()) ); } } PK֋ZfP  $Doctrine/Inflector/Rules/Ruleset.phpnuW+Aregular = $regular; $this->uninflected = $uninflected; $this->irregular = $irregular; } public function getRegular(): Transformations { return $this->regular; } public function getUninflected(): Patterns { return $this->uninflected; } public function getIrregular(): Substitutions { return $this->irregular; } } PK֋Z)Doctrine/Inflector/Rules/Substitution.phpnuW+Afrom = $from; $this->to = $to; } public function getFrom(): Word { return $this->from; } public function getTo(): Word { return $this->to; } } PK֋Z@Yo3Doctrine/Inflector/Rules/Portuguese/Inflectible.phpnuW+AgetFlippedSubstitutions() ); } public static function getPluralRuleset(): Ruleset { return new Ruleset( new Transformations(...Inflectible::getPlural()), new Patterns(...Uninflected::getPlural()), new Substitutions(...Inflectible::getIrregular()) ); } } PK֋ZKHW&&!Doctrine/Inflector/Rules/Word.phpnuW+Aword = $word; } public function getWord(): string { return $this->word; } } PK֋ZJ0Doctrine/Inflector/Rules/Turkish/Inflectible.phpnuW+AYεgg0Doctrine/Inflector/Rules/Turkish/Uninflected.phpnuW+AgetFlippedSubstitutions() ); } public static function getPluralRuleset(): Ruleset { return new Ruleset( new Transformations(...Inflectible::getPlural()), new Patterns(...Uninflected::getPlural()), new Substitutions(...Inflectible::getIrregular()) ); } } PK֋Za_$Doctrine/Inflector/Rules/Pattern.phpnuW+Apattern = $pattern; if (isset($this->pattern[0]) && $this->pattern[0] === '/') { $this->regex = $this->pattern; } else { $this->regex = '/' . $this->pattern . '/i'; } } public function getPattern(): string { return $this->pattern; } public function getRegex(): string { return $this->regex; } public function matches(string $word): bool { return preg_match($this->getRegex(), $word) === 1; } } PK֋Zm\\*Doctrine/Inflector/Rules/Substitutions.phpnuW+Asubstitutions[$substitution->getFrom()->getWord()] = $substitution; } } public function getFlippedSubstitutions(): Substitutions { $substitutions = []; foreach ($this->substitutions as $substitution) { $substitutions[] = new Substitution( $substitution->getTo(), $substitution->getFrom() ); } return new Substitutions(...$substitutions); } public function inflect(string $word): string { $lowerWord = strtolower($word); if (isset($this->substitutions[$lowerWord])) { $firstLetterUppercase = $lowerWord[0] !== $word[0]; $toWord = $this->substitutions[$lowerWord]->getTo()->getWord(); if ($firstLetterUppercase) { return strtoupper($toWord[0]) . substr($toWord, 1); } return $toWord; } return $word; } } PK֋ZyXVV/Doctrine/Inflector/Rules/French/Inflectible.phpnuW+AgetFlippedSubstitutions() ); } public static function getPluralRuleset(): Ruleset { return new Ruleset( new Transformations(...Inflectible::getPlural()), new Patterns(...Uninflected::getPlural()), new Substitutions(...Inflectible::getIrregular()) ); } } PK֋Z{<8Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.phpnuW+AgetFlippedSubstitutions() ); } public static function getPluralRuleset(): Ruleset { return new Ruleset( new Transformations(...Inflectible::getPlural()), new Patterns(...Uninflected::getPlural()), new Substitutions(...Inflectible::getIrregular()) ); } } PK֋Zfy_._.0Doctrine/Inflector/Rules/English/Inflectible.phpnuW+AgetFlippedSubstitutions() ); } public static function getPluralRuleset(): Ruleset { return new Ruleset( new Transformations(...Inflectible::getPlural()), new Patterns(...Uninflected::getPlural()), new Substitutions(...Inflectible::getIrregular()) ); } } PK֋Zh%AS,Doctrine/Inflector/Rules/Transformations.phpnuW+Atransformations = $transformations; } public function inflect(string $word): string { foreach ($this->transformations as $transformation) { if ($transformation->getPattern()->matches($word)) { return $transformation->inflect($word); } } return $word; } } PK֋Z##l$Doctrine/Inflector/WordInflector.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s folder. ' . 'You will need to create this folder and grant it read/write/execute permissions (0777) ' . 'for the All-in-One WP Migration plugin to function properly.', AI1WM_PLUGIN_NAME ), AI1WM_STORAGE_PATH ) ?>

PK'Z_oview/main/contact-support.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'ZH=( ( view/main/multisite-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

PK'Zbbview/main/admin-head.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'Z홑""view/main/translate.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'Z<'u\aaview/main/backups.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } printf( ' %d', ( $count === 0 ? 'ai1wm-menu-hide' : null ), sprintf( _n( 'You have %d backup', 'You have %d backups', $count, AI1WM_PLUGIN_NAME ), $count ), $count ); PK'Z;%view/main/backups-htaccess-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_BACKUPS_HTACCESS ) ?>

PK'ZAFE&view/main/backups-webconfig-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_BACKUPS_WEBCONFIG ) ?>

PK'Zê&view/main/backups-index-php-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_BACKUPS_INDEX_PHP ) ?>

PK'ZGR'view/main/storage-index-html-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_STORAGE_INDEX_HTML ) ?>

PK'ZDj,view/main/missing-role-capability-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

Technical details', AI1WM_PLUGIN_NAME ); ?>

PK'Zb 'view/main/wordpress-htaccess-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_WORDPRESS_HTACCESS ) ?>

PK'Z"|'view/main/backups-index-html-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_BACKUPS_INDEX_HTML ) ?>

PK'ZE&view/main/storage-index-php-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_STORAGE_INDEX_PHP ) ?>

PK'ZV'view/main/backups-robots-txt-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s file. ' . 'Try to change permissions of the parent folder or send us an email at ' . 'support@servmask.com for assistance.', AI1WM_PLUGIN_NAME ), AI1WM_BACKUPS_ROBOTS_TXT ) ?>

PK'Zǖview/main/whats-new.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } printf( ' ', __( 'Notification', AI1WM_PLUGIN_NAME ) ); PK'ZG|_!view/main/backups-path-notice.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s folder. ' . 'You will need to create this folder and grant it read/write/execute permissions (0777) ' . 'for the All-in-One WP Migration plugin to function properly.', AI1WM_PLUGIN_NAME ), AI1WM_BACKUPS_PATH ) ?>

PK'Z1_{ view/import/done.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } if ( $should_reset_permalinks ) { _e( '» Permalinks are set to default. Why? (opens a new window)
' . '» Optionally, review the plugin. (opens a new window)', AI1WM_PLUGIN_NAME ); } else { printf( __( '» Save permalinks structure. (opens a new window)
' . '» Optionally, review the plugin. (opens a new window)', AI1WM_PLUGIN_NAME ), admin_url( 'options-permalink.php#submit' ) ); } PK'Z.L view/import/oxygen.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } if ( $should_reset_permalinks ) { _e( '» Permalinks are set to default. Why? (opens a new window)
' . '» Re-sign Oxygen Builder shortcodes. (opens a new window)
' . '» Optionally, review the plugin. (opens a new window)', AI1WM_PLUGIN_NAME ); } else { printf( __( '» Save permalinks structure. (opens a new window)
' . '» Re-sign Oxygen Builder shortcodes. (opens a new window)
' . '» Optionally, review the plugin. (opens a new window)', AI1WM_PLUGIN_NAME ), admin_url( 'options-permalink.php#submit' ) ); } PK'Z8|5view/import/button-url.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> URL PK'Z6( ( view/import/index.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

PK'Z;~view/import/button-dropbox.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Dropbox PK'Zu{view/import/button-ftp.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> FTP PK'Z`view/import/button-onedrive.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> OneDrive PK'Z0EC C "view/import/import-permissions.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
Site could not be imported' . '

Please make sure that storage directory %s has read and write permissions.

' . '

Technical details

', AI1WM_PLUGIN_NAME ), AI1WM_STORAGE_PATH ); ?>
PK'Z{5view/import/button-box.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Box PK'Z2view/import/button-file.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'Zi#view/import/button-digitalocean.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> DigitalOcean PK'Z 7view/import/button-glacier.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Amazon Glacier PK'Z9 I view/import/avada.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } if ( $should_reset_permalinks ) { print( __( '» Permalinks are set to default. Why? (opens a new window)
', AI1WM_PLUGIN_NAME ) ); } else { printf( __( '» Save permalinks structure. (opens a new window)
', AI1WM_PLUGIN_NAME ), admin_url( 'options-permalink.php#submit' ) ); } if ( ai1wm_validate_plugin_basename( 'oxygen/functions.php' ) ) { print( __( '» Re-sign Oxygen Builder shortcodes. (opens a new window)
', AI1WM_PLUGIN_NAME ) ); } print( __( '» Reset Avada Fusion Builder cache. (opens a new window)
', AI1WM_PLUGIN_NAME ) ); print( __( '» Optionally, review the plugin. (opens a new window)', AI1WM_PLUGIN_NAME ) ); PK'ZBDview/import/button-pcloud.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> pCloud PK'Z73%view/import/button-gcloud-storage.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Google Cloud PK'Zذview/import/button-gdrive.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Google Drive PK'Z0 view/import/button-s3-client.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> S3 Client PK'Z Zview/import/button-s3.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Amazon S3 PK'ZuFview/import/button-webdav.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> WebDAV PK'Z>view/import/button-mega.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Mega PK'Z]T/ / view/import/import-buttons.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>


PK'Zview/import/button-b2.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Backblaze B2 PK'Z4  view/import/pro.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

%s.', AI1WM_PLUGIN_NAME ), esc_html( ai1wm_size_format( wp_max_upload_size() ) ) ); ?>

PK'Zi|$view/import/button-azure-storage.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Azure Storage PK'Z1cview/updater/error.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'ZՅview/updater/update.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
PK'Zview/updater/check.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'Z+KR R view/updater/modal.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
. PK'Zӎ view/whats-new/index.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
01/17/2023
Premium: Exclude database tables from exported files
With this new feature, you now have even more control over your migration process. You can choose to leave out any unnecessary or sensitive data, resulting in smaller, more manageable export files. This can be especially useful for users who have a large amount of data, and want to avoid hitting server limits during the migration process.

Using the feature is easy: simply select the tables you want to exclude from the export page and the plugin will take care of the rest.

Whether you're migrating a website to a new host, transferring data between sites, or creating a backup, All-in-One WP Migration's new table exclusion feature has got you covered. Try it out today and see the difference it makes!
PK'Z|  view/backups/backups-list.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>




PK'Zɱe view/backups/index.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
PK'Zq7΍C C $view/backups/backups-permissions.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
Site could not be restored' . '

Please make sure that storage directory %s has read and write permissions.

' . '

Technical details

', AI1WM_PLUGIN_NAME ), AI1WM_BACKUPS_PATH ); ?>
PK'Zgp0 0 view/assets/img/ajax-loader.gifnuW+AGIF89a˶ղѤ444$$$MMMlllSSSdddCCCEEE000! NETSCAPE2.0!Created with ajaxload.info! ,@pH b$Ĩtx@$W@e8>S-k\'<\0f4` /yXg{w Q o X h Dd aeTyvkyBVevCpyCyFpQpGpPCpHpͫpIppJe ֝XϧepX%䀪ia6Ž'_S$jtEYI6-&(5f 1dx%OmmFaYQ$"-EYE2 I=jԄ#V7/H"EmF(a$ܗ ! ,@pH|$0 P ĨTqp*X, "ө-o]"abKGD pHYs B(xtIMEUIDATx^{x\e?s23^ 6IAE(&GڦM2EUQd vJHQ**тizc1T*U+s/?Qg ozEFyxdWg+҃h!GK |zEz Znv]cQx< M'6 W`>4uH&,w\bzy5GTxБjk$FUMqUd׿m>P茚$О|_0!>DV?$"j>P,MloRrǀj5Bc9<]MoxߊWV?l:¨ @}:(Bl0@AKoqa7fHp1*'՚y4`N5UU"кf<om4Q[gXbƙp*w"5mzCŨ@\LxRKf DZZsEG,ٮZT^=Yi SgmyW]1،@!WOaviҳX<\0Mc0SCWLZZ>"3L2"ii  տT.L 5ϫJD|ao8ZZfŘO$? s^k;M-quz1W죱> Ћ=;o;SEg~QK~d=ol !bm!w~ gem*1 ^%y}u^]e"y vueL16Pt-SJԾ|^]NS 2xe䫊d^􌗷Q @5mB8 1v^PqQt e-m7p{l:~QUʨ ƣL-4,l?  CZSkFM=(*ۦ8#|ϛ*<"-ekk>ؚ5÷pyqE-ia ߌ!S?q.sp'CWu|>@WOGydbHTjj9ugI(v㞛[{s+<L7\צ M ЊͧzK 骊㑪XF21$_2xcU͋\e)Fo3 JNySbXw/& +1-ȖBkQ$N[Etkmo,Z *"|Ct)қ OzMoBoAˉ=o9>@\}Z0SɅ7MzVҔr?Τ_tb/Di KWVsn @E޲e'e&P M+VS2}<@Th_+;٭|⥽,Yrm_$BJD'wv[&Оrz~B_ 0m;?z5[&l&IA$g7fn[|di t+% @]W}lksgՎRo@UU=O y@_kkBb.2qr@T}Hg*4>D΄.eƇ<)w@ stש2dVk/Y^ȜIM̤kl@;DsgM;PKA^U7~x8Ϝ7L-w$W|&9gl- 3, US=ҕ4Pl?0~  w >WȬGk*A ֌_V4S]3C JQ8qٲ9W3Lq*d*s+4#cL?}Լ(XtS2\@n-;h:r =Jʲߥy Y}T(W4y8s<]G/6!'zJ&=KEd="M9e4󂈜cj9p->n^q3s|2M)Fc:T]ݮ} $3nʗM Dbf}=;;>m}|d8OwZpyDU!A{~ϡ1_w[0ݳ+ʊba࿁'z)o헡s X_|7_>EXdȸ=x߱}=GA @sOX?'ȵh!!|ia}uCD6=St,# kk7F[ (i`-%Es0AFq?;@{eO\nED}՗gx b1눣&}Qo5QUfol_.$*ZoxQ`CJ?JF**}3UXoj]cC4_$ ZEпr;ͫhA"QJw"3456䫶ɐ頒ȸ 6 yBл/`)y0]hAPWu! @,+9l'[Qy]/Y/s<-\iŊ wfǶOPSsર`~]2l<MpKM >e/稛]*zx GxJZa+`ͭ5 eseu5P1X,yZM 3_ {`otB*d7ULJ}mo|ʴxVMޕ5;KE [  ^߾B*|(`mX'T, PGs"y:"׊r#ArOCHy[ۧzp]덍WhfkԬ6kԬz|`eRISp.I|ml0[,)+ļļ|z:uvEBDݧȩ#IklV_ĕ̴XFe&mCE227)*[X5,6gIpԹcmĴB5IDATxI0 D<C@˙ԗM%zSBCB;`Hͯ1|y0]iܝ( !B{WQUV(.J9cBZcӒxirUnQK !B@\oh z8mt7XkU<,bu 5ܦ|B! ܧ2@iBIsnhtyEbh cֻ sש-B!jA`*t|Ot潦\bXaIW%K یc;-]!⟁~utw4B6"ݻg f5w_$~>SgU{m,t`R !B;ѰKb%4zeb(3J%hK\͡e;t{3Z?V9c8g ]ϪS}TMrB!> >Sjn]BQ {p$*>k bopM˙~3CZ~j$:nqGpv Hv!B[ˇ{!C8HXԎ٩d1vc3qOF]؏tsNɺgk;T{&{CXzC]!pt}d}vRSs/jdnhmL>׷o?u~[(ՁԶ} a G3'rR礐ZWz V yUP5jE s0 ϑ-sq6rkZE^!v:RPїF}+J9WOghml U׬<_spM//>i Nv~},q:iqmmvdV쩇VB!>G?CH7Q4e='y~yړ5^T%/H_- y/"fА3Q{$WԽ/Y+c+ R! zx˓o8*3#K]?"MBrcx˛q*ώʠį>SzL3?v=[W (Do5B!Bᙞ'uZֳ̡Q1S(r뺞Y0Q]qrq@m{{+s\őYUε59-;-8@!B[3[80Blu/ga_8%g#/9e<%qytk{0e\ j+o'e|aH_\oX+.37 ?Vh~.{v!B;7,n]+;[~+E.=mԮTY͠5e|4SwGJ8B$"+YJ"_9ݎj:fo=vZooB! ^,-ZճۺvNosujymHͧ9qYnQYfK;ł- tITjmNii  keB!>.>B}GA㔈ycg&4_,3CXNW[w0ށ:]\q[VEL9eڑ9L1MLB!- @fomlVi鵥P g[!7nֲ ec(>z%)&荣:R{% 4SuY %w)V-cM^dw{tJ. HMY Iù礈=;F1`\JdfK'U=M~j#_AxY]T+4`_!Eڋ ۧ=tУa~~3!7E\\ꉹt՝1Ǡdgܝy!kz=uܹ"E[o7[fkдג '{KrzJMP-z@?_ء:Eh&sF?WIK &xti_!b17Đ KGt52t1^iao ';M>= &w?,QQ/3&+ S@݊ZS"|G{ «} KMb.k 5\\rqsq?Yw"nT~FQTy'Z8n"]KA^`YR]Y) @+0o-$ ^Di >fH3! ?N=:unpjO/vޫ͊![P3L*O~?~ AbnjQ8j H7Qf : 5n`3=$a c7?) 5ϩ:G+}.nsYZNUΞHظ斉^wgXfܳ?jAL̜X#5Cr =SdZGh⪸{LZǍIQ\?ɞ .Un{z9T2Yݷs8ͨ&|oЬZ:c4fIY F;Oꩲ$g߲CS/ 9~[a{q'h~}t#ύ\[ǽ^l%SvhW}^xdrvqۏBdtp41NwAG G42F*wp`C>27}5"YÎ=LׄNzDNe7Yan+ZNVquo;%n\#:`UwZ*@jb;8UFmaLvA8wb{Ybud{ = 6,;oЃP&ek5ͺăgPN֞wMͣO6mA^6Ė`µes&{O۴'GM m60AXlX$To[}p.S_|WLW'l/k=BCvA26UfAN]Td]xBώc$9n,3v&%l֘\b->rB%!֣/@yaKg y 60v&֯7Nz( «z,2L 3YOgMu*o ?NK슻#"y4,q> 4\ O`ZHgFJ'9\t;,2m%,֦/j:}x>*~M4[͑a+gΐ_uL$$`:Ŧ}_@+^]gq/r{W&Dka[)~ET$.e[f;1C/Mht!>+C( S/B:{L)}ir( fє:NhqbӬ2YX?Ek!7cEv'N#/SibnOd;ݦ~׬2Kaϋ2LNMW;:.pEbT\9ftV 0>'77ڒk+&ˮHx2JWY֬0g-&_v{BO&G #C^{Pzh4ckn؊_4͞iaƧ!iNW Ր GMP +:e`gߦj]'0CE{TpMq[>ON}K 98'VwHۘ^򼗥K\Du`am(eOb(vZFW7 H"Gp S;nya7FRC%}`v?FCOƧ<c1h]ڃ5\wa"d$To2~+I59F枬_:eh B%Swl0hqc 0 XjUǓ=u6 meDxmlxB~⠒cRq/uɀLN୓H \ K*+ f$=!We-PxYk7 &Q"mu}ٖ^?1b8T/TSR2`X}']"cRn>z;.3xdhw$en؃iULyљJh.B0 hlP&QQtD:Ym7G Y2Gu9WcwĞRL)U75UQ | o$_vԔs)90-̹]ͶpRqٻ:$W累0 c¯Y٣>&00{foMZw٥= &Hcw9%ԍ;QMz2yF^RkeK+aO'Izr-&i&ഌc@ƒ^A\1xʝ6^R\\*LtL$A{h/ǴHw|`zKa񛋥ϥH?4Yf-?0b#e3^S_*T1/%}(]eyMvg[A?WODFwd~U=j8z~6 x ,*gh=2L0m;2..hK|Gek`>up%8VA)s}">i{06锡WfgnjaƧc8cIxZb+h rux"BUOrJ53eНO,͏1|cdr_ܱ~yW |$u245>dNzaDIjFAƴ{͋jG"e:7hVt8JF@oۄn$mC5%8TTM|ý싷6 Hl3t5N{S0 㷐;WJvB +>׽a< +M0D" P/ yba$Mk|9mTLҵ3TY{`o<2 xJdZ֣7>Tr0=J+/R!0CIoE7\ubnk-9k^w,F.'/#ze0 IHS #ǃ'ex׏z%xru&1G{ʰmӭT4nn/c/oD7UPx*a dh('Yr5:0 ?Bj PpƎG-?, X CحdpA'1a~3Pr'M ^mi䞡eHϠa|crb ɏ>D\0J6fMϏN~6p7%Ų1,|F̌1gp! oG ^& 2AvnY$^ {칽^~`xI8 n#1Ƽz-iAoޕhu?5)9ELA)!,*7u[ D e?ufl#NNqƘI;6qMTc̛2&\cY}9\sɘ'O ,R<+yu?#r]jdoQ Innսi.w(vu&g*;c1݀Q-<5%rݘPl<JΫv;蔉ۯn&5(4.J]1Zc ǢOQLj8cZcagV$kp cNr&`)!:x_RMT֡K-jDEu Tr"cycb>GOt(#T7c>33dW_aXg1^iwT]:nԔ9dD>p{0XKۉnc{jeOF2u.׭Zki!K( Q̄"N6GJ& j̳} '8^X.;~%8}Yؒh1FG0L.JQ[ײmçI{93ݛGMV] aF;ې un,%]%<粇PZcH^s u*ޏVS?CȋHQ֔}- ޑD7b[< wFxF\cLujf`vqLh]cG ޙo pPPEiкX\PB>>.y-ο}:n&2H1cj˳n}y5/]YtQ?gI){մgR.Wd]RWOHBCepc Kb%ĘGM-v':Ve!_Z*4Tsj}J~ԯsX`X1|!$Y8 ea1O0XCikAM$G=NiQ"ݠ$=i3o'M1ƘoؠR)gWcKQ#*ll9Y km mB2|М^> 1O9<5$/#Gs L9NK&+"nE6vؗcGiċz2uGkH)[[e= ?WfaQb$}L='_ ?Rz)1_4ykJwb*NؘgQd=q۾5,̌4jFZCE娗U8ǚ2H6I*š]B~9y|[jK13TP)ۻPu?GL"#/n$bL^f|Q"1 # .wcx]ҘR!1¼>W]&t)\\ڹY7gƼ-9|Rl 3mh.y031h]DzmlIv2Fpr eLS*s-imK.\%)^#{#O ֛vwX p2W/nɘ؞BWFkSu/E޻ݓh>SL$szS8D p:K X*M3ؕB׻ku3܊jnRsbK%>Ż2O0)pMl'Y.CQ,zC7X);F߀ofHmG]Ԣ=do I-{7(b 0Ym1%Y`|e{Gޔy2pi5\3;XnyܝϵsF{{L\%MLj/ʔ;:2|T]{=g"YR/ q|"+<~L^9cӻKQn=q&n$`[J6)֬s14qA뽵H"63Ґt y:u-^= @ 'Q3;t.=9cmy1GOI1OʧL5R׃o޴zg3v=F-DrN* dTK]j[@AR&\7.m8]:wCy 7wѹ\lSJ, &r\N }{ZG'S7LS1,WVabIPZ&5t=FѾOp?C.{J*v"{Bu1Dz 10PpՌQE7K]=SCsއ{S6|dzuw\}Pe1dڹhEYUiOԠ:[JFQ.Λ93O rTJ-XU8t‹' ѕUWp.ͥ{Q|*~ Y-sqW_ȜxnqLm;p#j15\)sr >2>"9[t21o5|Nc2X`Ǻc٧V?15歆?V}"f)=kR :O{K!$xSnUo2/(E+dK;~w)}AKbc]ҩz2ʘRL:@)r}%tpӧ9w/pבCRצ]ǖ[=E>2;^a^{?A PXrͩX&ӛ&б֨Q}dܯ)r6f'kW\orcdwԺn˿v:|oּLMs${ig=51+[SXSXrHŽ[wk:ӤojsFU;cKeXZ?c?螏Zd=e~F&Q֮`C 3{r ͜G|zVTww^[{g KN6?}NLF2{FGzn2BO̾Ssuyb1'i:ӷ}&_=~?5K=׸&GֈW,3 X)?QY{]gz^RG>ɬ{.2G)bcixn'vG}MoMS$%3+S+H}Q>bGT*q9+#~dyɹKj10 BΠ_sķ,LjB?Z5gq:\ԧ9-*c0ϥ7vy{ޗZ[}1p*u= r_̸~_ǒgTztst꽫 p0}H0ʤzgٗYQOw:ed{uu;z m{L=c C^~)ur|ʆ{{~ؼvx[Qyբ"9du} /F~_՞V(M)ҫWuN/FNɬߴ>+sN ֱ*VoQ=7Fޒ}lxc 伤\QLuGyqM"#/9ҙ~$؞I2[ }7uG^uLou>$wA3 뒔޺LNzY>ꃄר־{u}aViqiG1Wlv k>3)f׫$e.dޕy2uv˯~mWt%jcYsLu#1ƷiW3.{w!#oj !By!|ݖkܳgkйP{*=Q_gzp*|#Zx|=*oGs~FvK8V҆6N`3CѪ#?@TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU8a Ip>g:VCQEKH*j&e L#9]]] 0[w ?A@4q;tX3.LjwNb.,*D&@e <>X@t2ЅE|n5)y~mO4 ;@\[Jk=꺮\Rz9B{vo:UqEumV`ZNJRۇV]~us ʌ퇞[)^%oeĴSu-^|})B&d8Mx[XjSn/Tݟ_(wxEcD5^,ţ>{`&| :f޼W iB0n}oK2+Ob)'WtOSRԽޗiU}}Xffmn*c%-n؞5S/ڽTwi?_HخI,C>Ve/k+[: YZN{)}{ v}e dR˕7 1JJ?;[ !?/Z,$+(W f &g0 N6`$g'Euuivȴ3Saw!H !?K!W Hk2^^3ªW˒Lpβ58T0~~W]!.)xBH_+ <(CZ#9{dT#Ff(޹R]w!B!.\H]3} wEY`ŃڰL,ObF!.&#;ٗ}Fo3`/u:RVө5`n3 W݅B!@H-FPGp|N^k߭FZo< v[z9[c`f%ҡBe}Yd/y@fP"|8W(Z7PL@b}kxo2|!B!4/RFwj}zm3>H-j<[̇nK29<2xD[y;gݟܽ!B!ĵf!>0~![KH1tݛ!7nyh{!aY}k;!><{zC!Bƴ?N ༌^cj45 < sҽ9ﺦ*B! [= 臘PO+dƎ{~y T`ӎ?rj5sP8mwj'yO !mB3#s;섓Q.N鎣PbFe̚ᰴܭ0nA7zfZÖY3K !B].m/{{ l/i~R҂һl=GkfY9}Ķ;;[b'B!3]H\Gı2lsc GϚa(Y% ~é ޑ{gT?G/ !_ie$p2k,ęR~a{+rͺϜ=:{#V!B\=ȥvζ'KLGF2 vvge{]f{;w;5£yK#n T>7B!ĕ]H]FiG?V8{(m6gy9AogvwG3Höϩ~bw!Bq4e;XR-Դ(\TާӇ/_~~y͛oaIQkqake f][;;y3$݅?;{( Q? ,$J V n#Y e,lbf?`6kelRZKdC11<}ĝۑ U9)72#β{2!.B!VǏ T n•e򬰃SdVjDi1|hǍPp$Nׯ3 ̽uGC}70c|Hp>ꎅNuIuN_ !B~s~)m9 ُq0s5DŽՁqoPp/+Vidq Tw}13իLsSۑ%w$ሙ75bF!B {92cv+=gyTGcRms2x75^!I`Flu̫!3,;r{t0A۳D/\_TB!Ċv<x.ȝ>-Fq.uʴnS9 *coR''6ݼ=uɃcLZ]&]!B{ TN*ڗ-^Jݽ >+KuZ{Ctʘs |7V*zl2%iUc^wJ:wB=쩺9U!B:F?r7V=24aZǡ}[ۇ8 S~.D&-ilngg;ljuĊ;ҙ#]0sꑽ{B!~9=^IeBr|[}_k{pko4CΞx%wE*|,,Dwl$6̜V.B!.G ~y3 =;d>ۥ5O~;iL aZj}mnoX/cNsBYrgNGָ<ypϩ#B!? mQk{E5ņr4>2kԲީd6{=uvٳmcc2\u:=$|(ݣ@&Ta{j4~Mϩ !B~,33yVC ,\8\FRǨcdX k[K}s3x{ηً{/|z9CeOK4OT!\ȔAHѐxgɤ3B!r=2v6Tevh;ݬ g?eggkk[߾߿3yJzi$!.̶d{8墳s@=vTnEW#B!_,zd!I=2^?sO<!LN3n/~\>_!B!4#+GoR~ m7vs#Cm_vm?ڞIFv (33uL-])q`H!LM]?M' Swz{h;B!+;{?l)lxk=#f;@?p f۟sJf),Ġ{S}KfьUE vk]!BBk;>E l?~$Zr0~#2j~/Ak7_I>oe3%cufAw_&1+G͝dupTkZݐ)?ļƘB3b=B!BL{VwU2G}}5So52̬+:*=26>'fșmzn>7s6Mг;3f'iN?Iٝ)ƻ{{_97B!?`4ڞ'սZ~"=Gƕ)k32gtNuIҞd#0Gu7DINuk:^ SGc*X:4Q]w!BqΆ;Tk}J v,m?/ހsw?|֎Vkd%#Z'zAucnFݻ]w2%^}+Mt|~ !Bn;OL7RkZɥ#2h;=hghՈO!p'({{T2;zQ]w!B;{qaGd{%ԭQ7,Xf%I{vIh;鞪/1qzȶ;ӵ=~\9/B!wKTZntuG5۷ۭ ##cPAA_g9{g eT3\IsbiX=;͝zU^pwOmFw榻 lB! q]wyk{Kaݵh?ƗPp32lW7RMFjv#N "h;Sø =vI1ʠְ#TO\fB!lcF^$_P񩓲-1Now YhQ} j7ngdx#.#x݋zNsddZ1S[۝,.kݭR.B!~G1Akv}#U5(lGk7;|Da_ QRY=H軿 undu't݇eQ.S /s勯#B!Į㌌Υ|"32If.Ljip %góQYԝNn3Bs NhVɻeIw+i58]!Blj~#gWjQdo-mmA]_n;vNiPyCr;bi=UW- clўiC ;͝DY/w˔>CڛLzNU!Bt9ɥld|}iD5 S׺3fd8؎@cA=k ]2drPvM0qg6n2`';VX5{zZVjw\| '?zbB!N%`c٬h!FZqL8O-Qc>Է} [!Pr~Gß]/W̝gݳAw sυ#C#Ⱥ_?|B!!d=?EorjÜlԘ!@Ԥ^22EKۿ"~!k;;su}δ/S{uP~vvy: u݅B!{lh_Em7w0>Nd헪XνKgv!yY;Xn Ύkx#"0!3;j^/&f&C؝>>?)3Pvef뜪B!͹Anp_12s\BU\Z ;xyg7_#2HpY5yv=\Fս;w25Ny'7~JxR;W;3M5bF!?!OE5[L*}ʗ-M͝K<v;aj_wr=Ya 9L vT0=Woxܟ[rGfnŞ{nGs]!Bs 4Tw%$Ï1z>)LKsS϶Nj߻W-"2vΑ"n힐YT&d}xtlU=~Y5EۃsCQݳm%{{@`/i5 zB!WGu|^dޛljdv92=/ԣ>wt۽Վ>ųex*EƉ]pOvee fu{rmWW;^ՙXm1UtݥB!ڣj%*y{Rޕ˖(v6=#c~v*mG=^{kcOw<^ݏFw{'F݋O&Ģ;}m?=vde[(lGL&?=n2ڸ < _k>Wᝳ=-3f`PwQ5RsN_eCog}Ƽ;uawfݯ~s@!BY\LB$-{?Xnc۫LFdEKH܁92il|۶oܴ'zۘca>md*TPw;՝Yw9ҡʗ;T"'SgM !B\ۍs2`1[ϦڞO*vΌLΩ!"ǵ#מOhjǾkU=|U,n#p5ϩʱ[^ ^^̝Y|UlwTwV1f \6uu@!Bc\ʼnԚiG7j<bNfqcP*ɸ9=AQLDjlspEm͛~N5u̠i;͝Y8aƖtLduOTYeTC]C1B!^'myTd8v]c軿č|X=vDw' ΎgYy{Oچw.l;uB!Q2I;c촗_0=Dln^rs MKwn7gZZq:;n[.b,Uf#}w] ̔I w);2,ԃm 9w;Hhsfѐ캿 !waS`i`7I:ڱtv t[,w!s3͓fk5 fgݕ|8c^9v_%3BqtmwvjZV5+AÝ~ .v?e4YABF?7RcSiIїT {\1CjaMeEu״Jfʬ .Ύ{s_hζ)w,r>/:uc1*d=nܖFtI;As l*ryxڮdTzpGoǔ;tY#=ZY7SXFRm]tY{ ODS{}JE}Q<>푔, P{uMwc1ƘWwv9 C!pĢ}7XvjZ AD&=wumW%mW]\"Λ+vuKEjfu:wÐ{<*ۮ:7 n`m> C~Vwc1ƘW]O8Xvj{ǓQe%LP`p,sԿ=2I10P ʵo sq;RcM娒sO0vT0:JsqL;gG fRvi;0*3zCe<0c1;^4"s/U+ uwN784m4_l=?m=).iRJHvOCUZ ~d"W/t{k-(;ʃ~LRjYhƛSarY(;ؾ's cAVi#s?|c1|OUҮeʍ($wAԺxs*>Jm`ۇVF&p&j"3ܝ ^ww?{Y5:UNg'DRHEVYo[ef\ѭ2ulT/c17c!#.@OxuY./wGo;o]}PD?<;DHFI.wfr߼k_Lp)]:jcۥfV3:jFoU(.`i:=v^c1f߁}! LS] Vi0ӒvoCݖ{I*Z.ߗԽb'9fٻdb}oMP"[2Qh0wUfstMwc1Ƙ=͞'a9™]<}o Ok{Kso9%ʶkID&S:뇕GZO朌' ;==1אch)9-vKn1|F_ibP8:ou];Խ޾TڮR'~;;J}xhb_@JT\C֤Y3;1kƋvFۓmϲTvZ{/p'  xFOi>6k@}'orv?w v)*.=02#o稙2 zMmW}ͣ)]!i\x3Ȍ%fZu0}϶%FPjc}>ឿ mW^^"y)uQ #,{%'( tR܋,AA<#sF+vڗiI,6w3LU=;^SKZ $w<*NCk])Lۙ83t~ȱQ%0;ףUmזq`o Yz!ukfl}iNeͿxAA<}aܻ#@o/{Zv .7"ҺNQ钭Ѝ.9՝nT=w.k|`fC|%dxs4w'Hnvi{t=ce}v, ̵n΀L5l ugVm?5m/&4w-  g!+bK;7w.UWhqEjAFT]]wD܇f s[L݉\.-a* 7>\ߙ;22ݑl wٺ9/jLv ;*;2Iߦi2^CdrS  Lʘwq/GjY-w(;J6gA;M ] w,y;sL5a}s7YwRwiRHY̱EWgd|]Y}nz# QbMnGqg` 3X;}v7)pLF@=O  x`$t{rcݯi̸RxXb]mw{yr۩#!Mc=ia>7ݴ^1>ΥKG zMSvP1nʞKcvcxXÝ/ڱ"2Ȝ;mBݦ3AANJ;'oWكψ4w9{rUK|H;]MwMs2rw-uW^F'Mco;ww]kp%mm@-*TFdloGdP:eNB24vDgvgvvT7>;kG,^AAc9N3+-2 v®5A",UKmi[niq/:LeS*C_2ZܦT ݔѿ^iun5wvxඏ8Dʞ!$(CnuEo~AA옏NrhbȝA;5v:J8wrގ-$NuUG˸SrWT)~սoUw7g:y`{fjESR5ܕm22, hvH ?^{b2vBug}&%C/֞yZAAkeӹ~Eu,X;ܝ8&:MUR\z)B2tx,VmCݫ܌zuχ\b݆blꥻDzW vwHuGHK?DF{>ȁZ, v ;6֜f;lϳW}^AAK$}}|YK͝s/MwtY7Uru8l[5D]JݓzOI`<ޮe!QvNhڮyv $B2Y mϥ]CΗQU󣁄 }$22k{~%o'|AA쒏;S.xq {FݯY s9nLq;i<:zsjDy]/˶[H}r,(C[!kn}oΰ4v }sNLc}Xf  -AΏiIԽ7jk;8mݸ_O  -vz \Ni?J_,Qmu;;YY\g.F.뮃fY2{g]pfiȌO1٫rdghg }+cdAޱQv@y͡S71lKo\rwq']{AAPĽӃ;J; 2e[nQw{k>̝X]n8w7]?ec-!΄ 3&.u˘+0ʺX@=Zٮ (LY(v+V5V bV#: 'R9Bf03NsZn践}jd _5~܃  vgʷܿ88e%s/U.e7]g&2z&iSwӖ3( .~M|VR p3t۟eǓax>׮?}kv.yع\ۛ"4ng!5ݡGԾE'z%@7ZXb2AA;惔@7~rwS%[(xɻuɻ5kBYIj񨈉լLc'?±l'vX,Cjި&v Kw>Q5KomGi^;݆0.hw\i7W׺U2v ܃  vɻ},>z/|Q 2_|\F;xuq/P# sk;ԝ^cR&xJaӮnꎋݚ/RwdfMÝڮEuJ&ݱ u2Y5^}{LYM] vvzY)Ϟz*GT^Pwʆk.m_Ul$N7Պ$;Ȫ('Bw@F6+N%MŐiS"ibR İ "8R &LXn!l+~n|ν-?  e>?yz,HuFԽsi"Twй:0f}%[()Vkt)Rw^S%*3dƏ"kH;ZfXy{W-.u5K8z%v&sYѪ[}i,  )z}g@= I{>-;j]ޮdnsi};g;La|m!?nk;RU׽Ѹ뮾;,Kbf}j'Z˶k2iαR d(faѡV\ܤn^(rN|ߨ- .y=P{a,  )fpG>99Y?y$seϝL#>{E  lLu/;_< 1awܱw y*j[].mǾr@)i0cq.ms$f  ^4Yb>Q`5}7uYmipDNeji}.f xerݧj*ߑq:nCۓ1:Wަj}fkWIr#}Cif9] Ql^Z;jJɶq2|82mGP~}OAA-vuRt92/sɐίIݧs8d3w,F^=z:Gl#*{`Nu:'~.b:p"~|IUwoxu'ʺsIV(cC5h9aiU/[2iO wGWv+/Hvj{w!%S 5:Ҭ*2eoD= ڐck!r7wۘݻi]e{{@eo'>YP-ũ͓8=;3ޙjlj턽'b<06aw YɼKSf潆u.0&_wۉnHML3)Qc_n;(vxHq1.>u)ή`jHi2v OAA\SIO(ܥONw/2uIͽ%|o}X--.sP$F1}ɓϲ[ݥu3u{<48FMwUەk>kv5!j"r.OokhoJzO>u.ZJW%eLkWWZxӞaSeshG`& Z:@ǽ{}܀c-L̺ 30K݆Cr ۓ阮;pgO9ܽpLsǙ=K>^Uj@fftOlʖ!{ǶRkذJ%Z{mҞqy6ۻI2궳 ^jn {J]'k%aDJ괣sǽUiY:t캧XAA|T w4Y]IRwx; MwupMu-Cϗ`pNއ/}NoǍa.oHp1V;757.sRdRi$f;Kf?~k'A2E><2eG02ޓE U#CIrdpzk-n :;~a0Zids7Ⱥ/AA]orӒ32Bl}џ[=hV4  iM*_Cml|`F!Tm/'w.A?+ m3Uu4Sdhe^*:?2* >@-s%>+nR=}$b]noN;ZRd v1mUXnsd|}&G.cOΌƷsNT굯/1;D.ne!w\ڟAAuPW *+ fw[@]w`vUdpGxS7(g޾<2w9  ]}3uu)1ÂymOG-ejIg;\?i;h^onm*nR^ہGMǢKX1ZP-ֹڂ-Շt  ^~2Sm#"':<W= 3ex;-k2wOGϡmz;_Ku(>4qjS;DΞfvWqS <ot y'WVVc_ :;s#Z#R얐1kΛGlXYH7g!ܣ[lG~,;ݎE^LC3INoף!cS-}oQmvnxsG  ʩd/Vr2,ܝ-wuQw̗(M]w&f4ge0}XwOpg&Mxg)(q`e0>lDn͐ڎQ9|u?[{wXv"  b*ӖqwT|OPqdJOni<=iouQwi4jp<;Suu@}U!#ʔB+wޖQ}Χ6vl v}&(-#2;ilYݬ%k/fd4LIv+؎ ;ɻ>zx@澅@kÉ  ;fܩ28LproVj?oZ7p>HMT~ >ĐF]AqUb[1u\}hso:_ݱi)GIvl,у`û,mY"Tc^VjIkzR^f⫵9;؂.wjA5taȸ2S^`c LPϝ _Vo~^ 0'Mi{3ʬ,(AΈq s;'OvO˩JMwkI0ܲnuv~vv6Gƍ蒵صfniK=b(j{KuW1wc3wzv{u֛ԽC!  ^ܧr_Jڞz v/2Zg͎{g oWPF#eNrctkxg@^9/ht&j:.Ed3qs.gOaݱz駶{ƨٮ.Em_z;gWS- S|U֎p歝y^۹Ojs42i;NW4  \}Sd<eT;ŗT){{_78mv w[f:IiN How%oΌxL2wJ\ur}2כ\] %켤ر+6]mR}`["u]dvh:6\b-K=ssܓ;[{񁜞JA막  j\4UFʹ336roRʓz{] f dߟc6V9;`Nug}kș3 yl:ؤGyepîj[]QW>}Mow,l0&ӱM.:nj;q.,?R|l|Aؓv; 5y1kONuC*Jk$s bEkJv2_  !O!6D5ƚ?ÐH~>s wu^Ύ:OL},;[t*n޾EyO}#PPwQ}@kOe۱:ync^;/.ǩq5!堞7ܡսUz;^x܈]2CFDR23ҨgF}J7wC_fSdX!zUňvLs5i:!Ui>##/Fdʅ^P_.m+6)|5ط2s_pzmja ΋! vz{t܃  WqOoz*tW}w^4Uf6uǵ‡[|duꝓmoHy;՝mw.Hrwhx8;JҞϖGG w6oh;6QS:lg- ҫs9Z*Y;.l=O`Í.a):~X{0ok oۿEdWW  #^)ܡTuu-*~MtKk%Ywd t&SG4Wo[=~*o޾89摪vSw&Cr .܅ow݋Qntr{g?lp;_H;ͺvG ?i|t#cwuxFc-1(sUC۱hᎎ;}6=;^IoJAApTLpPR{xFz51}/t&So݃>p޿|{b*3U9E)3ŝsv+-l sxJOzt'XuܞOMvj//YBGun!u7vjXct%u3Kn{Z٩~F )gmX\p-gq  Z^Viý]+PwDsg{r66Jɛ7Xbviiǩegv?y{JʠMh; ?iƻ:`CA{0p =z:LpvH?"ՏOthztT~,۹pciMdR~̢dۡ䊸ߘUŸp"  ;9xFelΔAMf[u9kc+eM.ff7_v5AΒ+i6]ގz sS%yY#{Sr{>C;#2\Em_ k;n,af _[Vͼ]yi5܉2ΆMUo32$AAFVFa|\!h 1iBffa!zHT("E.:JFVF-XXX~>sdl"woqxyo|QJ-6XsݱzO))(Nkhξ{1A*OTe7x6Q&XnP֝iy-w]u=-U]HH]״UI{4o΂YnG]KƤx;0w75ɝM*'Covۚ:Q  &b=?{5{{] wG~h!IVtq* spOy*Ip/F4w,l8wi &@x6Ӂ?*o:Qy55ڵ͘Xβ`wo QDl ;l&JX_FEGRƬISv}y;`cj;mB#*AAp̸/Y݇epq;>dk]9nφʰΧk&x|w?D½L"*;)ߞ&3o/9깧|as"/}=eoO(,#U ˦VNx5G6KCݵGអk7?'f_;Kگ:/̦?ŋDT& ܆=]dB̵sCs=VTCeZYYbnJFu:|3gWVXdv\w} {9n\ ;T:'dP#ݔMmvuۿ?+i7i_Pu}o{f,mvm0nv;Oә`̐ί˩AADe½~{W=N۽wk7qWS?ރl밯y3wX[;MA>$ؙ,ԩyG=w{nG.rL->E.Neذ%Y{moC)YY|=#N=;Xsޮ 2IU[veRO}6?"_G ^t܃  n=˸d W~h>zcܭ`}(;a$6_]-wYvWv`ܧl_šVv{ag.A .i;nȠI-=G᏾8پmS#s^ǝnD_үl/mO}v^x@ۣAAp;+ u \q1'{~y-7+E3)tjK>Miཝ;Jnp $22v]~1ŧ0Q0k׋Pvڙmٮ2k $2sC=C.ޏPۼT3p>:7a# Y;J^!5##o{A;;tqL:=U wyt].{v~]den>\pv)'Ep"ӧpLkjjF8e<2TPvfd2vIVHlnSyyF]Se팤{gk{g\u%n._g;\n/ohz'R,J;>~LA:K2vp[ǝW 8n"3%N$8OLOΆ;~;$U٫CrWRUZ;6ܜ^Ef)%yHҞ2|^ ,;rN[] ,v3"K.ڮ ]X+{H^TXΎf|55AA/++\Mvss2E~MTziՍ^f|oU~lih  F#UN{7mw}wHUn7qO/xû*@)nsuN[{X Wv>RWj8]X0b=]ݍ~9yizO(Ȳ{^Nteٺ&p(;HIAA7qSgտ9]JصQdk05c3;Vo5~u MGp ݐVTcj:ҍ.k/ಗRXZRvZM%ڨW%uMS. z'dPs m#khUz;ڰ@t,nOum3mW)vq|躯EeAA7K΃Sm$vI|yI]w K<ʖv{+2&ll>,%eN \rvw13Mua9) 7;} T|ΒCe(1^m7kYI*Oc|[h7y;r/vnڮ92lWKdj+*  62JW~G͑ig2aV߹pii3UƄE7͆j:8i0sGVfHƁ L[}A/mDžҢO e,9J}vmʶϿMaG e Fj^}f{JK?mWD:?7Y1)/۱RƽяE:% %losr{wRQR;Z#hmsh;pWEu(&ӹjH dI;ўm6]J  0<r|5׻4Ux~dIܛ(Hگ9V>;4^m57~ wOCxaP}awgLޕAiN؉7wֻ]WfmE7}`)5A}Ӛm^"cij:臶TvI6<trz4o~  ɓsrÎ'uܫKe߱HL}onQ%7j3u.{Tw?2^ZenގݣUv~h}j;1L:p ; _ILym¸Qbi I]TVCCP[fS08bƏEŅb-HFB] hhKZ(Ru\Gk%u֕ǼԽd;/ȽĽ>hhh{AbڥKI32\|]:pD9S* _Jqxu6bdAp ^Nm }(`1ΛN2wQ;67/N(*S\xL_ ,.N.CqG{}:]7uo'u㒽cc 7-45 ]lݶdk'Y9b oSғelSO33gϞV )S[~K.i1&xwVTjAAJ4=zwe,gΤ έ;+h guܗ L1'BOTݮ㗊Tu5{vܑij6K#"ep.Hv:;Lm,FݿJf: ;1'YK|@&;Վ O,vͱgNN^%tmҕ 󲿎$= 4QTqS_U1X9)aQvFۧ u%˝c}"h:RuaPt X&@w~]1-U*k34/;=+twX{;UN܁VɴvnGn';lilqQq>NZXD7G{5mDuG=e{[TGcLAs㞒1wWA%zj#( H \>mQ3qu7yh;Oejpb=ˎ{s5sW`mwjvn]w,9`.4ֽޡ梅v^]vi;22o922얳dOsۓ/UԥcڮP; KkqO[J0Rd~&M躷J uϭ\] ql?=IAAph9e;iGܮ`}Qv6܋e;dyNw/kdqyu?yũϺwY^vx; Nwwt3m3۹H޾R܂?t;Vf326vV]OeCSߒkI7,Nqɋ^LpTH][Dǝ+}ǽ%II+4wqjsGMW*ՔnG25&wtYxO^Y^fb^+X`D)>kWߥ}i %ۡ]vYۅ:[*4p׈WHgf&)ysxdZF!Z'`6 ে.AAM_'h3xguQL'3Z>﹌m;(2*Sn}wfӥ+cyq]~)\whv,Ff{}ݤ+3s2sWݴ3ݳqgYu /:fzvmf5+ejOL{~-;Ze-'c&K>ORo)  1>GL 35Eel:K w$e_IQ~*̽%s7mgwLÍ5g-AAh yt5U&W"̺3쮎;@?x=ʸY_DƝuxIk' :6IwyΈX4`]4cf_ꮱ]˖{27UUXˍvAQNꬰ߬@A)%e TwؒIdp@m58F>N;hV{,rmSCg'!I︓l7-'AAHqϩ޸tJŰ|LBv,SQ1S9/ueA__wZ};^P=Y^jMxy;vURwm*x=~No_YJXD.Ξ#G˥)۾~TK /ܟv E[^I=}嗿(NYe2q^NU}6h;7طt#Pn  n8trA~U*8c5,IcիެsE{w3ZmCڷq=_pH2YН & ;7AkM]v{v5 eٜ>ubBfcmO ݟ:g ?t]NߖmO޳E@[2(nVIXܦ6wAApn)|;Tq&}1;r3loFc@>Z/Jۋ(㮆{B`[-pL>f^SKBAѱB9vo QL7R@!Nۯc(Tv4QCaV^۳"/W{m/I*nގ{q 㮬LfڷS[OxSAA𿠎{! o|zs||-U;2JYޮSPg')~>+F)w1|NLuP5R8:CX;h ,>r|l\`BcW1'Cy8 Y0a҆}W^}侯_Ǝ;t۲p?L~1&x{K k3~G7AA70[ 3XO>N*cÐB6XF>+®EF١eԸ}[vXna{a;q*2#s3PwT厙;vS$WFww;=ov{eU݇!ߴ럷mG`;b#1Gzx%ϰ~~svtʸg yQ~AA?aQv+z:7iAiǺ '츯VWW84F_A}+~F0T1@3.; Tr;;ܹyXqہwv;+/g?+inA6oھ0:.Δܽ7Y{h=uG(q/MIEn*Ľ渣|}~ޝM[INO q  PTwǫMګk$M95͝(~$|9uWp^+*}l> +/6rmStT1@9a$sLv-.c5֕x\!/je5k dnW_f;g_ZПlvG;vFj*GR}vF!ngZ)*sQuϸlI;KhAAaQ1qG})__7u8ޭJSHɌZÝwX^=.v}uiGbAfL+v&4H;ej}w5{/`G@%/vήܚom9CšiGiڱnǟFykd':/90\Mvx:֭LY{Gj{ܥ ;0fEElJ@Xt!EX)]XH袋BA0],t¥Gx{؉*io*;1qGn SUFB#9, qͩAAαUe<&'S=:q9J] qф'wEݭ^@\={aGf] tg]TmG~DzvwmBsܜ{=7^yC/#R .|G-$:2Z~vY%/_׬ݏ_sk*Ck:XɁkO̟ AAPܓs}U=Lu?P6̓0jt *b{žSw*lHΗyu]5w; CQsOVVWVV];Sa*Pۮ#MQ?i ڎ xiw>)uH;vqOK7ZΓS5ri;]d#}6}3I  Ӣ4ۙPj}9 ob{*2#;#f{+fɊbz4&lJCev[ڵ)s?:iVewSީL/c;OIy{*loߏ7H{j~_rk[Xn)  8 n)βwKl..}w3WODc_UN .L2T];}ucF9k8ͽ2"wEsI)+$]Enly~Ҭkud|CF]Evi;Yrk,q'i׽+qǛXGV/?9u]w<&5 i~F0wǽ7AABicK)rYeZŒZ2md b{X[9(l~we4zrT)`D4w{]M@}J^feG}q"iRV8nߜTZeڽ j[n^ܕEV^3g?{v~3ܟ~;~| hDnvAFL  8%AFqyj+Y$r!+xq3qOݏiS罺g,JE;͝mF2wwh;.ڷܙsX2w-j_L.R8kW·);Sm.B[;nz,yo =yϝ>(r'v2>ㇱ]q{[xϟ+DAApCg:FYk9b>,ߕ6pO/ئ)rwd4bϽ ?rvM^Q]s/?p"hFBsgAJZ/ ٙc)khݚvqK%ߣNLjwa떴Kڞbn4֓{A@u5R  w}UcxxjYﶮc:ɹ0pKܕ3Vg۱ 0];k?B,rhmrJ+ro q~![O/NG MQgZENa,oNwH!<\Si5]>5 Ҽ7AA0n3pOܗקbM_V+7oR.Zނ?7ƫ2]u'J.{+sgBqcMi{!״A .M Ued*k ԕ֚kK}kh#pvsw2kv;?O{I-^zMwEogHѼv?`xwoC݃  n g^9:juTYFehX颳 kF'17'iPOC݃  n Te@HqL2-l2yTM\*pUw`ݶKGk0x^4 s.CUP[{emBʰϯ;%,3Ν}"<]vk(l3R N$~(w8orW?w殢 ܱ9u|0AApg qETq{7nt kT׈+lz;bxT߹7D;fޞΫYee*(r/^TyJSܓ4Gb/ۈ*vT]:l)ud^vG;2 )Fw:2dSw޴1v~;R7AAw.UQ7H|P1J&| b* E[PmAkPTZ  OP8QlAAQё:R#\Dmv$F\υs3+30rk{%;8H|(%dM%c)S@^.W F y;VSj8ɐwm;hxsg+J 9Sm;Iܙ>.}x;걷{m4UÅٮ%/o>q'K%e籩 )gmtJq5W cenSU^  ࢹRvgWWMs !fxwZ2LܭV }s/B*ȤDWd|.vlm_{I;3wvʎ;1<ؿ=;WWOg=tJw!*AAu\[*F'Ucci~?Kw{>cM%qǎ|*^䕆reCoi*20wmOuX*ˠ+c%4]عV"zr䶺b \{"#|e{Rs%{Sҿwp{N?t_oFa& B;wx NUQkŰ1Si,N͝y|:_T6=E/m.]YCJy]v6u{jc +0v,D ɮ̝;9]r_jHWq;l.h:2O؇J2Nځ$~XۇHMun]5\Ʒ+XV0Vw,{W]AA\WRaOVez8 R[X[{>Us^K;cL|0ձTj7/F)>Z.J Ϛ{j<&t/Cbڢks%1Lun5wX4 +z#\v&´ݼ}TqMIt#j믛so;W~OXCMieK _]AA\_wA^19cUZ.a{hpC|L7iت61bTG_ĽT8sfɐDhVn]tv*]NaՕ*s2ܨVHm`K*Iosbst BZ՚&ٟiw8,#o}u"= 8=HeU1wS u/Kr7{6W34bVB3~pfjϯϽ<:SUq?yM&FSU|;2+]e3NeWFS 2DHUкnru߱=Yc{mwii!Azs. _Xx*mܟJ˴=︳Nu.k.  .9uDchTj)lA+r{N܋:QfȺAOfVjpF/!S.f칽oFoWxE(rg]S9^DYrWޣʨ-d?:W z?dGfx0 }/j^mڅy;^;G B]L۩۩ݮwE_& by4]4Tt9Cߘło^zͣRt1릾^>uiHK=3g1beJ}MnPMC!Ӳ#T9YFfwڝ#Vrk B];*,cJ ڇ:2vH?qh.!,iO =xmk|vNso/smx _ s  8n<;ܑRw.MDk{?muJ}r6F{/{v9R,.Wyp ^͠SSiv2ovy*#w&ڟ:";U!,swx|*]5wL*Mjpڱ6v-6v10Kvܮԧ츰E>.o?ƝN]O)UaAAwZ;}*L+KSkSύ3cܥVRrqX?tw7O 3nyqJtLK<]4J܅f3q8<Biܝ?w2r;Ru[;w@tagvUeگ>L5y"n#8{2G߱eAA93R**?XGkd $KeWm]c$(w6(SK]7R٭jqp*Wl™PO&MtN'3q&wQc^ZIe粒{;?iLr6Re'%n0;k4 Ǵ:2r3Vd27*c{NSf7<^૩jJȊ:GPwLJ۝#qo|YAApމ{?[8f;izk}UkKS r;LճzŽ{o gbx]T P{nOբ%wve$JܓuxA3wsw2aWΞ;3n ߑq…*qǥq"?8=[ eCN'ax Ya~m  8oFJR4&8y/O”LWx35цVI? -xVe^9YaOfFP;9L{ |f]?Ò+w rM~˽INrwe[5NvTQwq}%gv?o VՏzg.vl $oVpdʋ+l`dY0v<2AAW:i`sj/0wdlgsmM}:UyF?]U%kaк>Og$PxXgOFk3;]?n\AAsμ]ck]Wa;FqV;1N,4Ayzl^;~Уf~;7\4˽"Wk+S%BwGm |3ʨӋH2w(i!ud 7H[IE?;/~^A*oRޯCwam9A׮|%  5U1}V8.Qr/O`{j zkW{e4>RSeװ2Nś;fҎL %w+#]%t*z꾣O^5ojxmw-ӏZ:]܇K|O[ݝuL3 +mO~AAܧʌhggݑ7zYRJc׵VyjwrcN3)~wxYzL!L,ːNfUo˟ɺ'҅;ovpr$}ϧGi\|ìݴގ_AAsNN&x-o5`v?3ܥV9KNHhwpqW;s[O9?u/r!f`.,G>\8rO훻fBh/qh66ۇ:2|OmqV+臨Ojk>vߔΚ w$;vj2a{A3>ONZXɖ2RF[2-Mvjgm527޹ZF)\~y6eUߝw|vܑ]^%g9;.ne}~2=1fQ ۇ?r x Jܿ0ˇ3vdt|/ؙ&RGx#lg=}kcU B*r%"~!EϘh**Z‹JR]0j]T + E6`gp?,u''9Mj߹7Iv?0 0!t.pO Cɒ8Vǐ rsbƾT_ c˗\U=_1n܅><wF_bn{V͝Mp;'0;ȩ2ʷ+r;=+2Jܹ1:K?j0jNjHر%[>qîŝlJ5,fm;츿DZ2T!W:Ohv]3!@G-"T넏;ĝkk2H=UwqBk S7Svvud.aa#N\T4e>Jq5{E}/-J|w/UDt_m}Z|{*QWF]']'^ʱ2e ܕIAW&ܧrFiϡA~(23+rM&%:vT/DѝΎ ՞'PYU0 0 CTNd !J 2"W%u? }Tm#FIGZʕ4){~2ėל)YnG2( JoqsJq2F?}pwh;CqisjW{j;.UW0Iבv~撸 h:2x"Ck'l[U0 0 CQ_G.|\?}SʏU_D1uNL}|ܬoC[b+mT6rQ)kOZx>:S `]?rw`ۻ;,]veiKnHΑCO][/Rޜ0wM:@ $q殑2b<3Q֎}*syaawAUvCuW:,O 24Rȵb pWQM3Wr(0gv;TQCSivN{1,:Ն:oT rbݗe"L]}O?{?ۯ_7)Q`w=)mG.Ezq;o#Ckܭ*caq*fQFw^dT8iy*Ssqj9^|[bXT^MXw9ɴsgDt#姺JPMM0o'w/Lܣ{**Tc.tǺ>ؑX᳧4αĽ_C'@. J v=vd&AL?}0 0 (8Z'RqWLTP*ς۬Ze_~Q3/"aG*}yyjByHsTOefh_;$P來߄۽>6W&Ur8H7:"'~̝fz2J:σHw-%^Ut8vXu ?GFޙ#_Lt76U0 0 h <:!0S-t^kʡ[ޞma 59=]GήTKcSSsQ-\ i >՚nNy_uގ 'kݪLU1r:`yZ.oq7!yy#,7vvsXwwͩ*38=l8qߒ:`~ >@ۅ;ji]!L/qaaG2n$ DwS|mfg܇AEYs;Si<\8xX-ƠpC˳ըHuFUJ=ԽO''.LL`;=l0H;9FܛK0](qG.C?wԩf|3>>Gǿd~ک9J]U~R(LUc_ږ:6۹!U>q7 0 8Z.qf6׬P(1Mw{.URcAQǤH'Qv\-:Nu$[uiZӑ̝w 읷FSMf+Jw+m&^ }U*ONN9a~O4wQsR~%g^\[;{oǁvܷ!pw{hKw׺AIzWUč~ tuq7 0 8"F^q<.lU;n,`[\#\ s6V\}.Q׮x5/5e_Sz{ ~s{p2㮱2` <1U |܁ݪ2aa⌗v@ڥ&oݡƕ?o<2?SFbbUsIإ;S0`@9No+ Al1Q:d7'ͩ2wYv6){o~@jh3o|92y;3,{q'tv~Eowʮq36vupi nN<0 0 縿fݍwSD^,ՙW*n;=+Oi0,5|fӝ7C߮93vuÖކٸk {z /j;^S /XwMǰ[naABk5y&Av*Z(kߔ'Y-Wf랣_12Um8}U+˷&nLX4]~:JԐAgJXzR)\57Rf=IlM%L*:WqW^\os/ɀdd8"|o'ȥq:~7M(woSJ2}%o ALaaG==ʦLRVՔ;2&|z1v?Qmi^/ݩWG,4x`qux\x[MFLDŽ92"A|4!Ni?N̨]Tvp;N{*Ľ{'0kdЕ٩uOeWX!:>Ηê?teTsqN`N?)|xg|d,ۡ^l΅K epaaqd0UF ʤ")KRwO8} f*q\d\6Me ٚ$c0hjJ7 *i RwZITqR^uSYTeNϏ&q8HYoۏ=q N z{O> ۅMF`̙Ox;^::];Vυsܕ{uw~ @]v頛5_JowyakUō:Q#cuweDHU .b%#i%"|W`**VB iE&G_|{^wSїﹳwnž}<{d2mBƽl;JwҹxR-Js;{+ w+؎UZrƉ"2{=!Ż ߐ3!x-yL]"H$ e#+ÐCr]-7ޔ2ϲrܷ6 ܍:BRWm@>*fܽ5 =qץB2vLlOH WdU%eL&d2}]?ӘAL?uߒVKݻjIwI)Z-REs\>.gؽx&s6W32*bҁ[qvLb[lY 2m~$s[Fհy18OfɶL&d2QḫǽYyLqh}OΖӨqug>uRZ n?H,c.)S=Μ%%eHnb>Ѣctwvw< ="Uf2p+ڛJhC]2v\Ͱ̖SU#[ak92ǷAl6?P~k*.dx>)ޑo~1L&d2A~sD]:>MN^wEu#^O^IJجG=q ߧh~X/GV:.Vxp FsgNfwl.a:ḇ;wH 0KI2k|G-e_ _/uQŕ=-mo@;f\qhqQ}ܝ,w]22ܥḷ])Ͽt;!Qv;={m#.R߄wܷTmN v_r\ a$wI;Rvy8qWosL&d2LHN9aEhw]%ϵb.&UtNFԹKu3ٱs,?,-†mc@NdixKe2Il3Bwjї%3~.j*A!+Y].o]tiIn4ǫrf-;2rܥD g/{C[({K =v-zL&d2mλqg(p!b~~-m{<}j[' Z.2~0ri*}&f{GP*}2eT |`9%1xNY=3O&{2ܽνd,qps2:ɑʈܝ\{۷)ͦ,9pJk;si"Kw bw]S"T(,1wJ茬bw;_g*'}q&<8\;$'q{v鍨4Č{㮌&PS$0 $ߝQ_r;AN~r}um}}Uu׃P;qw 0㎐{#)3ElZe0O-l;+Ayv?ld2L&f7k*,~}a!%Ѣwܙ;$\w5,3 b;?zת1=Er>'eg`ב"wc|Άfq׿!vgpl*v:Όq_9=2[qeܕ/]&2?BNfKlWWA?vVqѝW9pÎܿwӥ= ']MvȘL&d2mLʸJru NZlܿbU0~57.9?gqNNin!p;(vׯ+dZ/:7]sC_^~d2L&i3,b1]D H;s9t7}.q螩ʝǘb=5r1| x=߸geywo8hǴu[P,w.E[@->dQ+n@ܾ-v9m0w J~3˫B={OٹgcX䩻[ɡ8 4 ?90bGvt7CvǽZU}FQ'we܁T|'ty!C˫Q8}j6.ǝ6|Xsru%v 0ck2G p/(r?ԹjMkc&d2L7tۋ?qtޙ$M'gJtp¤1]G{{kbi2ֻ%/JRL|ݩI=ig*n2qr+uq+Cx_s/E%ݷ}ƽ<9U}ڛL) =cv;}waKLʌw qY[[?EUco aI.~IQq{GVBi}L&d2QdK~n\{ޝ1\uSt/ιH!qWJͰ+m}I}y8yrj1;% ]9wLݤQ % ݛE !Tϐ;ȝG"ΨL*y2ߑq9t`x ܗW$ǀ>ULb2{>jFe^hF"]_q~oT&e wƿ:ݩV's_/`RM&d2[U]*bg;w|QJZ,M󹣏 DsL$pdfrg~y2W,8=cKdᴼ8&C2%=ۺcw9xO=+ h;ۥ[`RjDeq㮈ϸ]'0)A:]CݷA>.!#gG>H}me+2gSGeu*8ApWݳ;F{5$\۷9n2߹~쮥`ԃ/[d2L&+)sMrv~gBi.+~G4Sg~ͩl$DL\,eS S<w^idוvTu8}a=*Ao/42t=~s*/ }ĝ4v)̬\ࠥKK{?3N520צqodݕH&O7SBǝԽ-]2r5\"#iOq_|ymV{PSld2L&qN$nwg)&8Hpbw`>WFB)nLE*)xM`ߒVvz|B3~Lӡz }"_:1AVyq{.n`;:ǝSiR+ٮ;^ti 2{\/4Fejo8Mu9qYu{))s>zQE/*]4d2L&%oەf{?~fegw_*[|*cC{SPǃCT;u]y_+_gLrhA,!,< h2uxP _0!t7J)Ze3*R:)l_>pw l7%Yj/={_[>}'r>~ ^O߻|VnGVV~YnI ̭ʌܜ hgd8(݌3zۃc2L&dyE16ꘙgy"`ю$# A&6&ET. F* Vѩb J.u9;sl羹I4OqWTpFQ>dH3%\veK(wj*^*ltOh+-V*Ev| e  T96Bg8Gy7yܳVP{e{{ۑAߐҎvR>-vfOʁ=2]In:{&} [C<@{BT`~{ 3n wd2LQHWpFerKVųxyWBLc+WRd sqq/ewJU$-y|wDtSRfLuԎ>_l=:pgYb&;!WS!U nG{:v0帿Wx}3cvw؍7C؀Yqhg#S;!Eeq =CTK-Yd2L&WRԎZe t'v9'p4IVMo#ʳbB,ݻYƿa^G_6}-XPl\p8~(wP>B\95r'jo*P*ì̾Ngǽ]*#e7eLC\t2YA~Ǚ/pmZe:P-2"ʸ_'nm¿L{ۑQ!Ĕd2L&STPTF=g~; {/}@bԬh`a<D!g6Aܼ$ rcކG;-u< o`!wr<k!u@wfwMFxҤ㾬b؜ɸqgraÝ 6Xb;%` [Ct2T9;"o9Qݍ㮪z:>SʶwsM&d2z# Zed{>e)kƒ7>HTZ}vpY&]Z"yM+q:.;cˆ$tB2x 2WfO'E~zܿסqN_Û4?qA七?-mNUw6> 1S2Wj#}n<݃2ܣݩ%wM"d2L&SOTx3 %S{pN`sUJPplv4K4'e7U% I]z"2zD5,)_+㾷]ɓSOy};L '0ͳ\ڟ+>I/5|Tr(u;w_9Ch:rvޖs4ṘC {dsr:(p}kUf^uԇPGx+hwd2L^Hwf|]{PAΙ 5~Vt5jq`?h߶a`,]NEJDzctcW]?{_''`7"rGjnӑr7qG2!Ee#nq2: 2_\ I9̸fhƽoO~o _G_o=ޜ ÝIVy7T a8acP̸R{SNyh?gen2L&;]&=8>t;"v9MFOXԦvWFUőjeN^?ܒ*v ;h0,ڹn5>ʻ-^F֜MK(nY`d|=3(Nt1Ab/07-zqm~ l?}2zC7`{'(EHĎaaEenS=*]v;ăOL&d2Dڜ^4Ȍ"wv/Kpd;]g2 9Yǖ2U;L\bf]kpNw yRܗ=.$&jys(ͩʰV&A{ /{lk;<#R^6Sɪ>:цmǽ+Ω-N}n:2ܳB=P:~Opbd2L&SUxS=,16HН.Uf6@6B&}'ns%m5q]Q ;^-?]eeDl_(mCb8IqV]p|p}%/ ;ea@ex;g$rw iۇB2J~=<7k&d2L=Ťr к3ܛcO;]v)2:{cI|@|НH!q`$pגcx>nǤ2H!rUikxpL&d2L=Qa;nN-)y|10% l2[<;P+{g\IvH ze21de>/VK8Uψ#V2`bezyFeNe\~{qgخS2Xro:QYviD}護)㮨Lp5[4a r'#: qWv5ځxn2L&US}:63y*3&{$J"?T^3#{Oݗ|W FAOߡe4|_1 Ygsno|rj5;wq;Owvܦ;_nN%F׵nʀ䑜i=8+?ݾ#j{%>R=˸_r<"v9YtyP;ޑmǠNr;On2L&#ZdeʠSg)A<"vw{@\ݳ욹Y>QJd}| |Z~ajbcَNsW5k 5< Dpn wL&n6p7L&d cqg=-CL'sn=ʦIR}s.-NFgwKJ=ZOYu_O.WV&<=8sjAvwZeg_iQƽܻ`GI`{q7UwGf{ HIYg"cj!y2q׏ĥ?^_ ܩoHg #=|DiJ;;ҿCND_nwwOL&d2Ff82%f>&p@4qpfl,43{_u`cB͹!g$qrfa{ڡ=θ ޣ9PR䮨Zˏ 4pW=Vwzv宐; OvJpoP2 (Cqfe.^h|w0R5wf7naqpgt΄: %Y%I\e^ )>WZA1RD]Y>c%]$)Ÿc[t`uJ`|yDÌ JHK]w"Cۦ"e2qYcHO|w:AK|KX{(wqâRF'B1;8xsNoǛblv9#˸aaGqmS7Ӽa8Nݻ>Ω8qs2ei#@r4W#]N`Mq'Oഐ wݭ}As}nKmqE|F=r܋ũ>,NQMq{BKOckTH'΅l>]ja w!t܃ūj=uxby9'*enGe:0 0 8#Lǝ;zǎ;un4^C&14=vjWo5gxifWJIݱag"9-2=P N4۝ ũ\6 T );x(^ 4g-o_>+(pfdDF\ٗg}TqYW%$bɧd,~A.d wo` w0 03pTR$ȸcT\X;9GY+ݗ`AmמKH^Mks8iD٩|m*fKo Pv<"~qYQTf{%tÝS/Swuqxh_:v/'gr܃ũz*xsTU!`c 1 0 8\~^S 2lu{I#5ixEef3tJ/ GmW-~w]{$=WUiI,S8ώ tQrWV{3h;2XzS۵(\MV^0?uUdwd RiA'pt1򜌋ʼsaaqHϼrǽBǝF;b%? ɇ6d{\[]ٻ/зN1~ U.6IN}2Ό煗~e*&vMKb㾒oD}%KrT0{ /+jen D,w_de$؁.3u~׍}sjlV}lOhbq"#<0SSCo+f3.]QǮw0 0^r\ǝ}wgSaj?ayHnXQZ:tyј7P5 ݟڛ;Y3uSlfMtγN*T$=P,NIgq "rw_~23#qG1k7K~Tu&e'Y ZeT+[e ..]Bݐ.5!=qܺT=,|d]?R:+974rס. n0aa2۽lnFܑnO]P wL}TxRin=l1u%1towjq2rٽEĊ\:2! q_>d}0eRE3qũ=W=85:u~Uj෇8p?l^;q͋@ &eB/vUOu; s"lWTw0 0Af}Yn|zO;]@Y3B]G/76RA...ݮLsd)wdql.?j6Xk )+1{xU:w!]CLX8ky-r!晝2*ܕ[ijv 9Wx˝c;e;TB߸sHrO:z]*o,x#Z*ýqS 0 0No-22ʼVfe:e 4tϸ5m{{0ffU/W3f!7zKwZ̰i:ӍIhE}FkF3S _O '۞xʽpܷ=3PU)} j/_*wYE{s*4@[(r#Ţ ˜77E㳻~&~N^ļ3d wvw0 0@ R!1CpEǽ2Ŭ5zVBJD̺77&v*mO`L J{u{4>E}oN#PO? "n_n?jWp֤S(ݩ۹q*=wDܝ.ǽ'%/ ql?Vp%4Q;2Ged.PE}w/ 38 YJj'Kc^Sk0 0 f;,ǽ~M^> ɨf Hr]$~SqmA-l̵fg-^-ijZoSjk ,w:R0ߙ~g7|/jѪݳt;Zr;nq W\=XZ|:0*8~`q꡺)_yr`Aj;`>^l 'J5+]vV@Snajq]!wQ3=͐d$3Q:V;1ڸ 1OqS4m.Su^m2֭vn6X:jmW9dshS4[af' kUֶ3*:HũAmD"*s3;R2?R{Ed-}PM |L~c,zŔ{qq}{HqwQ3ǝIrT8vUBrqBl;~}]ae=w}dU-bwѝvvԎYnSM&d2f)Kc*;ښ=RXFDSK akk_.:xGQ=uGΰ: e̍Yw?=c⳸&VZBrB2qS#]T!rr%.N|]+6`d]; w-Ne݅:q~`^deX.zO5_z;z:4c;{q ޫ^ՏV;c~ZG(.YLAIu|w9ڂI2r܃:Hq/w娸^Kt۝ã:]//FU*\0.H'x"&~(#PVi2L&4S]$e8Nn?>ڪ+)= ݐ m㐝 r´ / iuߟ0J>$*^5VQwQnT֑ێ7Ar?>C=q߮;#fnk/UNuHD9A*\ *#C)#su}vB>M0Nj,(/EatQ0u(;ConjχTY˸L&d2DW\3X]ނq~L;]QO9 9_b%p+s/Ųf[8It:MAO՚6itDh2 !_k)j~KLT* lIvg:S wH$e;]ua!yjec8l]ҲBƝ;.@/8} r2X;v4hw~-*c2L&4:U[[kȳ_lO$w( &5h>I]/<ݓ/I~$77U^ܜ&w蠲`\\{{\݈6ڐ cf7,2o}o-qT&rRAkS:H#+sG93p(.\X׼ )2:HyhO>: \x;'m}qd2L&5 p}gR}g{ի<&dr$CFg3hpb=/'5ɻKʥv&wK8n^nFi܅ E)?;]q'+)V%p{M@@q|0NCǝS3:&ex,UNzy̚;w*(oZ^wvN;'8Kӎ q7L&d^[?AW@^>vS 3Q.yc}†I";_`aWI3-TD޽6=y>>^9 ,Ӊ?-s_l; N2ݫNգ;w]-NχBy8[Y""w2o<@lgEŎz#p9lM.Rg2hץǩ> 3#CrgLc;)Ewd2L n4O!/stӱG&stW=_ *pv\u{*V@FL9@[fzW UݍnRw3Vcԍ%,m/\zDc|Yvzq;}):P;d!Sdܷvd_Cx]kSCբV&̸t\#ꓼl]} xG:1}L8y C2|NMSVi2L&4 1*n_/9܏t߯'@w{flbszԹPK#L/=͔;ՓZ}j(y)['=M7쥛cswx:Pw'_Hb;Ukmq'Vqh5q7N }ʸ5(29<Ϙn5.8;ou&3;lh] v=\ZvLp`1#}oGTd2L&iU;_2{5y7|2$w8@DeDY 7]OOqsV"{O5/(v+q:%[8>te}$M Ow`+VZh/rGͱ]amʴ˳SqqCeO;~%{*=퟿yIP8:/|ƽ;^𙯂 jsǽ =|aq[nN)w4L&df/8r7X:x1T c:S_ خM40'f`Tf<#q"4dClOCU~&9CtΩ減L&d2޹FRQ(hB+NfH4$>GZ""5Hq pl' %f2t.t'xw2>DžwnW'Qppf&&qGK;]n2/=6%f\MKkwVv,l/=Z#FǙ ۩כl5Js0N#S[H͙/5q*^LAΌw\)|-T\7wЫuVfqθI-w-N;<B>pZWG8t0aǝ\WCۘ{r7vCÍ2 v\yr8P( BΟGpƇ!D2hT]9wf϶Z;mwaqݞُYѽjH\GHqN@v9wp n tnuɝZ~;xyߺNM{Ea\deCŖkT{G2)qjVcqj( Bs]p:nS{Wn{Ae;OZ 7W86+=$[񙊞9lw+kH < #7!pRZWQfeYo?Q䎻Eeq>q DBwpqpo?d U 27]%)w\܅RcՎA;w3>-췊+!\H^mcԩ 12~^i*vPYձp=+MS$;ɝ!wq_箜;wރ\vrR/> a"R_-.v]$$YS0HʤRp;=.;pcqj( BsR35s@bgΩݑ Sx<[kT鹯D7?^I'ιzi^q3° opTǰViUH}9aU]qp[t3ϝ*>/Z>L; wfe.{}g}vpo0=qAA<&_ )jO]QO+f4}(n%CC2MrQP( BfrEdmS=?1O@hq;C~'r[I=XUrDwf2o9vB.?&:x􅼇}nm.QQdệBP(N@=87l7f8N 9Lbuu4!oSv-'ܡu-R5vY۩εӿWY`)J%nN NcȝV<.D d|ZCTSũjTwkܯ{$ϸ/Q eq^`foh/Z]xrrؾbΣv}a?2^;цd(S{ Ԏ;wsuFƢr& B_3up]]S$w{>ּ&aη~ Da:>Q«mu .$npݧ-lW,cl$z(l^.83}v^1Q=Fy>/NLSugUB}:uNM7`*q:mb;Nn{fxq_XsŋZݻ뮹ɓ2l&7w?<%b p&͓pp]Ԏa{1Vsp^^{( B.S'-2ɕ}~.S26BEZA۽՞eKDscef6\wݑAԝ2*fB2MσȹM*nyL+|83s%n·Z|*a:f{<_v+xhF7`~6`2.Z2ܽ]0!*=rAP=T]q_&8W.NNtu毽v;ӞoNjd{dH습Ngr w\72o*}MnM_P( Б]alO@? ͺn^?V[HnYGG/Clݧ-(>knjZ\rY134?0F{2.R1Y+ uױ,W|ď@NKS 㾎ũtSƝS1<^A !qfB}v ]'>3wuR kyCK҅y:}nK%I"һ;+ިpofmy*S-w>(= BOfI.\C)0soݛ11j'DvS'q=ꮸeI+0tvV AGZ<.S܆fc1+̮v<8/G+}2帓Z:T'W휘qWJ{S`=lP( B1Kś?[Kv!Uq37 wWWQ;$ѝ[RKSʺvoNڽT P=vU6l+#Y? f7~24PLV7_9|82$ܕqwq23xv†}㴴Qo[ݳ4'VG]]rlacUM&]JhW^W_pwQF} w}brghmH$ԨV5$LZi&YNdЖă4U偦x  ku3=-*!kϞDzAAAAAAA]29$-/fN$+|`7]fW#Q u83LdEw ӆs1t>F3mmw:ﶟ]ґhGyf"ߟU(?Q"j?cN]K-')?*Cvo/wݏwZPPPPPPP_8!U8}~xdC&R ?u.l/ dvnFR?x3jJr_c^,w_Q SO\M=d9L@<@aw,ðL`-+ NJE&ocScwzܭ wKnװͩ7qVV¤VV۫ZƶNN^zk>3hJ{e{v7xѠ]؎;{I;2#ݏv?,k( :RlY{8s\M}T·uoD۱fX^/xzSg~U68vԉwIx$v bHK\fRVI}*w9)qɩld; w6!rOnwNt2 `]whA^ vNv ϫJ5W‡qׯn|UoTW_m#e2$w r?w?3Ef9AAAAAAAGK6l(linyN>1 7[2̡e|mS]s来j^'+0? irv{cW24N,^Ք UnfLъܕ9B]]^1 mNrZ-+^{:VpﮔGKqU*AJ^}{Dw %fH,(C5:e8X.ǝMKw;bbc9n"iH t :J#fX7b2-jOC1}?eZ ][;]w]{go/T1 ɤP<0^%Q2q1ިweܟT䮌6BC2ܭ*;TwqWTfT-:Y~FF?52El@V3p_=qd}RĻpF;=aABanvYrۇr[n;vONMz;:8&{̀AAAAAAA$.+{KfVL -24'/Ui^*4QuWnNϴeܥ78dk$6u+ޮ{k wFe)>Xrݯ f]MWK-<-(((((((gv܏vW6!;wb;=lW} {MQ\J+:dZ3k%!w;af-cs̾^'xw+gy)=ʸLp/pnqS912^0]Y@KV^+F9deK3]c塁R L_Uݫwܕqkc.":Dut7܉NmH;OeakdnƞoƃױViW!BΥɯm'Cܾ%nW#ݟݪ!ȺԩSDweSw֒'Տoz=8{=?̸G3~Eeqo(ΈerTtͩid[TWw8UP2yVkcC & r@q{!N^TNd,fO;nw+%#> E l7"cv{zz( kڕ: ;!=vroܞ喯Q;ˍ{MrcUd麫bfjv/DxM%_qN9Aq7>A'0-hFeHq_1rEi)VOw\eȐƻrȲSśJ5+5De+OR62ox;$ꞔUݝ$bw;4UC2Tng4!Y93.dl݃%d,!IWJGfKܓz?xdqdm⚡;\i;ɝ ML-tݗr_rtjTy kPȫEesrxwj}pcj߈޴ gͩu27eߨ̠ȝαP.XdO g ;93ۭuCyeL*^O2RhkdFkwxh3[oOۑI^KeuAvmNU]&83mLf7 ;Ǿ;봠]b/Gl?,w$ffm#v葍[8nr;L6αVf"3mA,u_RS`g.etckٍ |c^>{ɘsboVA>鸝Sqӵ7.]|vոVƢ2~1Orv?(dm-2rn]2쎬n*3L-*59q7`Hە]{>9uCw3===۩؍4KlKfݯ|QLP.)ͩ{N`AGe.ܟ2|Bq+:\Mdz3Ex=!A=ds^ǽl.Y 9݈[]Ul+sR2Bj銙v[!h?_t Wg{]qh"Kd'["T$ 7k5{{I麃o qvf6 {=.q3N栥9n{k_ضk~ziAީLso3ڜdmNn,w9~{{'w$fj.FqXy=ъ&2b&<*l?;'*J4]1W41; |uAjJ?9{2MX"/upO1M0;C=((((((h?=9GR]b&?w: p?w*;ΉECE2;/@wEeCB+t6e !{#t:H*Cl'+Ό.]2L ~9]*cBoqjMFft6VPib {T񫪏q`Oa{Jʬ|ԭ"w'A+c|t5W|pJs"+|vMЬv67>K<T]?>~lW#vbhU@;Svt/ݖ]@22OboTGGv=n e7v g j` VU^ O6chiK ^|FdRG9g2r_euV;7YhZϵ9ϸpWv˸k(tܟ{NzA$k C}=EM̸#^t\{fh֔8q%q7nW]+jR~;vߜP 1@vB{c1=2=H~oSq{Vxn;gJh Su.zT{'V*GTUV*x؛ʓS=]~ vA79$Rm"o}{28Qf2 i>Lzm>-Ӱ3֑ஐշscF.rK.xǵ+*8v{4_ݧ̴} p«=sOZ\?;ا8;'rN<4A]kLs''iq"1dB(0ȤV$2Ad'%Rx%xpBH<4xOo K<|vTTpO? RfhzY`;$n۞3ȼiڿ$Dweep'tB트ӱ-m[2\g|?#2Ë_ATܼ0< V{L Kk)/!xM*kzndz)8V K^ɳxlbƝ2NUdw펻.`bz'.=!T_?vy0)wǝk6=T WR;.O 2>FVLjWI=:̻S&x5777sxLZ;`^ow ?X^~J t) w}̌YP>0j©?꟡ %4.6nDmoBE{ɫ9p,r^$q̹4 K)- a+ke$Eh!uNнWqDefLKNqʐ幫ǝu|H-λ NwtSp+v,l*ө. aavv:ARaɽZHt]ʹCf:{;Bu׵,cY*W[*DeqW$wγw}ܮ1a2iCܷM= r07]?fP|{&8ZfD;j˻vޜ: 9&-Z].Mϸc2ێN{@@X{nA;sc/#z+xd®4.pwם>}<|vl^C4KƝ*hPWqLu}mwR^ѝT-Qs\3=#* \:v9uy.b38@k%0hտpj./_dMQuUA\reTeyq Tb߷ϱz.[.s8xyEeT~*P=̴?6MkOd0bnDFNwߞnc|'Q]JY}zz u:[ˏ[0'v~1&ϩu|̺GEEEEEEew lȸ;_%.P{ϤYwd`cݗ`Ȩ\w9b9w;V ]@ %-kc^Qf;LD<3{V̔]{. dG6<sP;2ժC݌;]:ոcb *sgܭWƽ^:8 Uq'~|,p;$r5iH !f ^ h-wcVML88 *#Y8u/nm-,Cpux(;6̸yW7{TTTTTT9N fRv>gQ75 Eez&z)IȘ#0c avLr[r5v:Wp 3AܓT% *2b=%użz |<ؼn|m_I-wdq%eh2p2_{xsıc"w?*moeex*z;0 T}x)Y7ͩۗn/i8[BǽKQRhz|]\ppoqb{e+ z]Yw9{[{ DEEEEEEU縿X-toC ?dNӃ~0OKt ] E_Q Ϫa8gYwS%{1<#pW,* Bg/. Q`YY~C;C,ULV /2 @ ݞNj|sp?l2qw9wSp?f CǽFzKn@.ft_q3pvoCz,xA: W/ۙqHբ{7׎! }lzv zcj955S /,l^84~LٽVOfr)2#}2GEEEEEEp)]ŵO3{iW8 Knm'VFv&fa{KD菓L̄i*t?R,}l?# ns `8]e op;/)&usD#\޴Nhǰ_n`u߿4[Jq;f܃S!&+:уq[/ṋKӢ?q2͸b;=,KխKxw}wp\ y7 @n w &;0{8?1<=****** {o)Nxaݩmn˧2~)$О9U0r(.C}1׉Mqf7 Z}3ve{rأ xеT dsPZdq B/N}2;wBӬErg=qAt0QG'yǖu,^=r_7p]99DKk4+cu&>99U% ϸO~}[ejVR;&9JE~Y2^ l/~ޘ%wK#|q4Cn;كphb&eh7 C?Ll2힐q݃a8^خLvLi=a=S5vW Y fV,>HYwӺ]Z/<lRWx8{b{/b5q* c~i 9#v/$@_@`˛ 2GqV*9 p 䎌{ฏqw2?A`WXݶƬtl.kR=X͸3!c^;]O%X|^)'wIs{q7\75`.wT->Ev'ؽ{=eF&=*****։}'wf+@?Ǒo_Kz=݆;wܡUvtx)Ux^fsyEYҋUʴA˳TA24NǽQvnTT@髫a;$,v+frsDݩ<ZUSUƸ {p8u3Yu^.a4\0w~w}Wǝx)`E:RhWӍ>L::7[ 5:!7Iu+2w1>T?BTTTTTT$DAdFcNgva25:U>x͏{.tݧ'VƒMٱ]ov3ejEM;ǝú998;өa`zTJKx*qP͏>ӭm^s$-~;d1ՠ]ԎZ6t/ݩef+i;p*è'rv]RaNMeW A)tMC]n ׮X<R&eqW- UƳ2A1e:H*@W<3OBym{.r/EeV?-] ϝ$vR C'=*c1wm@;^cx">сO{I0^wn/G>nCދ'DEEEEEEbT^f:mx /hת=+vHbGo> }{gxhsx {`;S !Y]V1S|nim㮨̹ vr+g㮨e㮷>[;ƒCiWYpdHg) ggs3.;Zel[_ lBqڣ2kDp?bΧvuQ&p1q2Z$շ."KFvvȓ2$2;ua*N6c ) i: z7mnjLm׽dd(%d=P`X&utѭ>j.eHԍx;}Z!؁ç\BYßCvkrǡV{=@;Or𽜒:4mVCr^u莰;3&"3(é; =.dZr~'*tDGT/(.Q"\UYQX,s>Ϟ[6HY+] wܝ:8>g{lqujKAcXޝXdkkUŝ*8PT X VAT Z͋DAm)ZEJ"ZhES'Q[VUpo/鱊kI:ۧ]w[^@FfIN{,` `7Mv݂g;r ;i^/e2ȸvtry8 M|geAT1Bk|^ڭ׽tjwO} US뮬; ;=E|O=CL9qywk8ܮ" *Cp[k .xV(-%E吺R K} <)n;n ̌x$5lJՒmveF}=S]pmr#ߎ 4͈);6:W@ws]c+# k2E+uP;zY$eCno_Y[ZᎈfDžu;>ln_aپ{rlo;kr6" VY(?­d^R o,Q1rHDO^eNUFejXEeY;Cٛ}MΩ*D;ż&pΑ8@$x@;0 j:Ev0$9 t!io;U.njsѡ]=.9}7KO<#wơ퓶?UCໆݐlrlɧx:!'S ?/d鈻sXYA` {k)d<=R^z9əLyaxDmbKqw= o׋ !ΔSEy"߷ iYXg-)SqO9$wwmN~Vc ,w L7 8{ wI2v71pۥֻ{nkT5ýp;^T4P6_БuӸ莊%uoih f'%XO򰨨)<0|{uh!x[jH2fta▄\;P#vBv,vOʤeO; o={ID ݽr*3Q 6ѥF=ߧfʆS&(<24xFAߑȯφPSU:Ȳ 9 :Hոz;=+JF0\%y]$At}?Тw=:] r"2\v-JpGƽԴ )=xZ] }٧d/NYK;Wk:Otlǚ@Q;FG0EEEEEEPDe88ީfGM,5hFvo4 p܂pztvD12u]ܭ;RKckv[evolr;f侗4x[,lj\q' %vջU۳DwQQ {bwɡM=.vRd}nQ.u u$5EeuwVȸW6}joB6#l;}۝v[A^jR(+N}lTVwNSu=fP;Frnz:35^WtS^v򳑥ɻÓq]"CUF0q:9ʰKݢ2BKb>dsW~ǝvbƔaKme O8՝Y|x~?m݊63jw ǭfR~'Pcn~;%jm-#E=*****cNVTs;A;ЊI?}eS~نil:(_|CU>jwn]x mT5jWb2qS~t>gB_3$CCf4L6 =GZ)5kūY# f3-c]BE6Y>sQ}踳eq k{Qb;8\p Nn! _9&8y䅐!ccFz p'kUNU\dw09%rŖvW<ޖ 3Iؽg6:]x+Na~4nN:bGgLo ޟHK}cJvD>nޞmm#F?B)"3e ݱ4=;a`f^7\fwL}%uin^0ݵ)rrא:J+ftvCG07tVKpE\u`s2g2tܽ Ru* 3V&帋ڵ9U$wʤb2b{/^瓤PT@PT?-O$.n+ܽ=핬vyswMr(na%m;FL⻛SA;:j `sj67 #ձ}3 oת鯴`:~GT]rw|K2tQ0!=1{m\-*vd1:Su.x_V ußӗ<=};9_u*lV!0UZ9錻^ʝ==?Dc0 }Wg᧍! SܙL#eVwܫs×-m; tfv!+(Jx젹h_|dGۦ w_O(>ez8X svP~Zۘ_?ؽܩ/Yăܮ ɽqwll=lI$ va֝;2*8s2랄ݳȺMwTp*LU{eNαG:IOut+U#(|ОS))(nN]nܮLaL踓MJABjxHNLXC]7[R閻e,wRr{xe*$=؟e2`w  ڱv5%t,Rw\w]2]tū a>),*x@/A{xԒ]:ԁ穻0 wr;w9?߯l)ӎ;H}ov S v!k_TJ=L*=6 3Sr(G%+G];нk^k]phx}IǩZOϕg&xY渫T&poKgq'srs*=C>;(dwvu+TPFnSw>2օ.reОԸ'~;FqVvoL_e\$N{m:3DwJt.ĭc{q% 4SvEۣON::ғತ56ʬ9Pk~?~?̳nڏuۻjߎO؎I6J?)hB؝2v'ku+ ݳܦup^*fݕ􄞙w{co<\Ae<[ vCnnhp?:LqW{ɨLprjT芯~һ.vtT&<-b s^gOšVq 1n;^p.fu&SOnJНϼ ԟLݧԈfG wʈa;/M p차#O92uL}NrGua:󨓖'&|$w⹰]6kf~LΡvq;L5aQQQQQQQKLlwn#]kMIҗ&x1|ܑb{߆T)09c'_M wGVc `] =dwGpy f]^.#/dyw^څAnO` 8uJuۇnw2\1܀V1s9CryLm5rz=۽.j:ʨ2:)v1HV;OR:&}_'tdx-@v^R{;Mۉ݉;,);Ak婗u9_=ldHwrT'X:ȨN9unÄ "`NGe~zo r;~B?ڗjv7>~MU.j Ct1t$煮,ލ1KقFΉս Lmw)ᖻa<C =32Zʗ!+ux,e2d6m/ۙ gXUYOBTf=9d1]E.)Nr zܕqN];\+ufG⦆x;oͩcZ94S{r;kқ1R7] w|OeYK +0SrTj݁+|| K_d{HӗLrn~?o;^qWɌ{tܣs]=)s@qv~? ;ǖI? dpldܧ]WhlWݝ19 MڤQ=f^#oJ!&cju^[9=}olsืZrG NE-~y!fg(Abs9~9z S}=d q,R۹/L>qT:K`:;ܕo759x'.>fU;dTW~auʪݧvXtv.CKۡ wXݽv!Yx!x롇:Č{TTTTTԁ68e+ ^?rmnF*a(m8oY҇ݭy{c Lno3vԑ6߇Π2jfdJ o2ȸks3Nr :ȋqa!A;2ʵw+u)sf>hۿ ]2_A]w$/pYXl{Sjdb΂wݡvow+Ec#szc.L7ܭsͳw^{_' wKcrl:0:`{j m2$ZVc-.v_?̀ lmHjd])vvvv'] }+ z. \t3v3wSq^?>>{6,㮓Sup*eq܅_-`"ݖNOWϓV}mһ#p?Of?wko*۝Dw+J7%cQfȪq3..#touR`f#㢱T!t>Hp7ԟq)ӮZo23X u'[|ˣ!)uzz895(((((KfM6b* ֦u'}l8o<]+~Cqvo(1êexa8woD\6A͑JL',ПyUCѴ\el*p_}]ՐqeN}Ъ?N [xv~ δ05L#)S)r/X6Z2veePmNգCRDqlj<+cn)C+^Wێ-yw9;û]Eu*2H/#/ ȝoX}mf0#"!pM2)#s1E)oz,wݝ-8AAAAAAG\WZr ={̐R+SQ RvR/nGu-Rpkؗ;\ek wlґ;f}R*I˝Lw /ny.RF2|M7^*7@p\#|[W%ǟ'w +4wP2%7iwALrop~;Lݢ|w .| tlǠ,AM-95n]wn){w*Dt'/yL? 8x 3 vw8꘶^_?ڧx7:vlr2AAAAAAG\HP&2N$7l~vgbԮ`~!B2=/-=]wuDjӌ?OeIr/h8t/6 dK{tǍ.^JkdK 68TnLfE64];&er߬L.$ ~v!ܗT㮨L [Rʝ2,ޣ!G.zkqv{n).jzӑn.mKKvjn~Rs&5hgR2fv{'UwW<Erg`nqMQ?|U]"x;Z[Fd}K,.=wHup2QǔNVI{פ:܃l;q۸hYv7$FF_G'>~Dw,L ^l1ްObmT/'I)~<{\wYjNB†p#j;Kt62RBw5T @.UoS w|/# U /OSIiN{Qn2Lyv -*ȽQTi/Sw_yNʀ+=;oci=RQFenNc־1"1U b׭ѝk*ng fVCrc:PЉ'֑,*p]Ӎx ?9yϿC{PPPPPEg{N/՟۸(lOp #3 3}SlgydVp#[v\\IX1voxסϐۗ-:;4:Q.rϭڥݍڵm:qUFQOڥD>;=R^pצ2z-T' rd{ёPͧOr]IE2ڜwEe,~9հNϸhCʶgM{ h5|)wۙlWPJMyIn2󜽎˚& }$B0so9w_Kocїjmӝ\ßrAgCD?U88nwԠzV)'َ"4湓{qZCpUȓ1ednzc|8g;B!bpG{9Mv.۽A;3^a;yLR;~qߵ1:d)Aٽ}qq Uk~K"]w8lq{SQNnO/~3 [QkmVuwws n;ݨۧCQ&ezʢ>{ЭO;||=oR-QQrHm9zǿm닦N'\2iڄ~vl0_@c005dٝOp :bbn]k]]lCw]Sr!|vwEj!w|F.- V6 =qgTmNM9DlSwLպCfZb1w%U|R4Dn;5O:MtsNNMY}Q{Š!7wşMJ;_vzܿ"{'sbFw=/<'cASOy_NN5qp_Asd/_ 1 \HsiAQZ2 OC}͉J|qSc2 /TûOq :ZBFu-Lka.v~Pna;.3_o‰}۟obݔ2ʸv>=; p'؟? $f 9 ޣwcRF$KM;~wNJCEelvLWya`LwO?rμ ErzܭU}$wCWa:Q+K\V52"n޺SӊI*>ܐf;ٜwGۑq7p;~>uCb=&oF_jULa;gdW]1t>۷p1I(TB4 yDo^bZfNh' wgLCtDy1/]H.lqt嵸xNyۏazd"j|]X]d-wixL-⾡RZo{.nDv4Տ\].˽u窜{f =U"S  މD)M!1pr&T#w|v ,w{W踗qonsrekq-ڜj'>/#qqڹ _iHmCCKo\m22Z7jO:=UY0q/fVf'c"3Uyg.+3;RsC=TK$C7A A t@`*^R!<kv(~e;G}˽na]=2wb~.jWTƅܻ^ ;*f0t&2K^NՇvZ8o8491ΰ{E:x]؎Ez }wN@7rIAAAAAAAQ8 n?91)1)C]S퐝QNw 9;;}_Sc'>wZ"wr;QlPB\53f5FSTw H1Lb"Y-啩TI_c3lY؞p7R gA">gmTq묅ܑBlg]I w+γ!Lw*nv/ReRqq?*vHfoe7=y\iԮ{|w<*ckeXbv^G.jǢr!{#p13^~g67񷿹T;ֺ&ozMN'IAAAAAAA-v_øqnOb,%%l' mu>Sw:.0 }uyՑ{w}^#/C|nTb R2$!*ij";t7ȅ+o'oUȽSWX)#r{9w]quDwb;wVx~-y;p܏V2|اw̸d/l4 =rWVq{s:iDƻ exUyܥ}EL}Z~0*#LݞxO\1u_AAAAAA%~Y`{q; iC7;b{d_rnW{ݽ}lc侌q;2?<ȏ<ͨL9 2"wKWvorc89w,u;z ?kGD|=esh7R.[+Q+I[!REe{sdVf+w;6=jw v8ۆTa6救~l~6]m]]/́]XvArcjSpv{ pWҝF9xA]lԚ<2vxnRުvmT|v j5@ܥk{noHà'RNd7 nؽ3toԣ>qǏ-&e ݹ^씺cHw:esܱY@ĽVcJfn؞v^-g2T9+rFn.=ʸ;nW_r?y=渋}v"~1&Ldtⱻ,wS/|\?;ȫ8ы:v1%DMjfDEÄYB/Sf4R; PTh1]hd,E-ETFQYFI{7W<} j|3^~|OTCvQ;Ҁ;ق2wjuK:d;=އ:fC,oQȽ+1#nWTfٔn VktrQaoO+ >+FK@Eꝓp^uOxs,}??ŵ6~wե14J4r[o p;|xےwp{viC;-nZZx65ʸ2$wʒ( Q鍪(u 73};r1TRKI0_ď=ja+37v^ TFͩ.)c,wQN{;qwR@*d`P\ Dv.Lclou w2_>n;mDR]#z=a009];Fݗ|ݲ20t:}ʐ`_d~;˺+0sY'DEEEEEEE̮ps|nB(?>NIi=iC&xפ$O3ݓlw۝o/q! ZrgP<]%!k(+-p2p*ZU+LיYů3nipeۡѩr}jJgSwe,NÝwIsڵ(-smwvG}|{8Z&K:Jǝ'>ⷶ޿ {x1AXK5p" Ei1մ7KLOB8J}C^^;66\sLQQQQQQ]x柸ܳ ]Fe2ߴ@="uѺ+y|I4gѝ"&@|(W{݅&*>S6A[jܓ}Q nE_wʯroiqGR&M}#wS7q Ĥ 2x,~79Tv>dNw.½KMWY.5$nOp;vx\E#y+TӅ.ZU{u_ w2VIOwC2۸ۇg=WYWAvLҍ?Ft:nub2xr@7p.M}pd8\c[~'ExO&06FIօ.Zij0ܡඇiBs}-ǝAwX>0]+2xk0*S;Oxږ>@0 p/ p4>O]}gkS{.2 wTPvݜJ˝†}ܧ&/~8!_D]e޷>Нe4o^%ەQa~5 w˸1h/ xݻZ8*.'`AZ ~kmvM H%{9m|ihkCLQQQQQQǫt,5_^b=ԟ[ -Zmϭ^Xw.0w pO>=zɲf螊=f0S[qsYX`TE9;veQmwYwWW:?q_f{~%1TkffP7.Gw渏BvOv1=a=uͩMj qZ-#g{mVH{ R;Kn}I>)fǓM:=P9q63cDfA}}*}ڞrcXٿechenPf= =gcaYs󄨨MvQD-B^  {50vΰ aCvNUخwKprv&`Z6Z@SAhM/[h, cE>횚w;J]A͓W\feȍviwEeqw- 9R`Gz;0l7Y8hR?HeB'F6{dH/-wqxݿ$؁F׆]# 7pv ; wE"4NϝKCCrݿ9턨I'cyߎ"u<5ԜwMY˝T1=mn]O6I6IxAns"3XlSpyณUA;2bzx7n)U-ܛű2K5FّiG+ٱD?,w9ުATƸf<4Fe<t ADen[VDifݕ gc'j c8ʸۃ㾟#W}fNaیv$yь^iN5W[yjbR 4 wab0 Gq J!o|>v:t951s ZJC6[G;`{n~;D~o~c0 1 ]ʵfnxkCPutn% mXϛ~SdvtMx)Ru;u,_ݗ[Nx߻Av=zOh(2#lڅy UFeHxrɘᎤLp'A rç)0.ý 7m\f/ 5 ۉA˄TqS^tX5X* qcgn0(0cvskSl8Y.rKڸooy13r<#XWki]f22 lD&/R1MϿG6˘Z(%)vh;$/yrIzm,૯77A}_1'\wk@idJC>FDCsrQ$']P {AwV +al AXHWQUݎIzښʐݫt#kF).yөdwݺC&aC^>{"=<mHq_p }5b -t @"wF]VFЮ29~mp?/5=ץ@*32I}HOyvI,=m&Gl33Eof>{)J#qԘŮkkOpe^ϡC:ըE;GΥKv_*A>}R7ݽRgwv XvEuRZT(y혴1$va;D=?؝t]n"C-TȨLvܴ{>=ӯDfo; wP;k྇w:踟=QѵY;d&WkҞ{}4/NjG^évfєѵَ1mh;=O4r܅][葷wu Enq {,Qvu}UW쮙e}ĭ攰􌀮GP|A)R#^dz'maUB!03/QQQQQQd= rw_Ɍ˼'yXƿw fEۓݐ'sJEe]oG~{2"6cn^Cݸ]Rjf ;"sK- BwR;iZw =ww'hS Rw^5p^;ir/Uލ:;{ BXLw: _QQLR L0X栢2qW;H'(wqVvB5avzHwaz~znkwd ˉZ\蠻Syw#QFnk\mnpPƇp?Fk?09M+|:dj^w}dTkx*t w="'a{t'U3ΨFR]F&{ 5_ݎGdv`z-G|#_<{x-ϽAwS-;TlQ-;]š3vao1c;=t"Ϧa^:Ʈk=jz]{T&{;!wuyw12,]éri+*.^lھvx/O'3/WcaS7.]nCXSQX|r:F%Ӽq4EIi v<е?Aݒ7dϤ٨c[ "g*OuGwv#3l}?^op ʰ2O?22;3vW~;fu)L亇Gsu#S}!ެ"^`1^ Pd0kܗ̄Е.=9u%2W@v>pL=^v,u~{G2}'r؞".w5Bzw/aju=̯܇ؽeC.+Α ٦3; ݏbJž릺RE*aUo SĽQN,QQQQQQp̉@ yJQYt.=u[j5m2Qc,\~~#駟>'#/104%Y-,6Q^Bw;ǴeB8HmyW!*Sħ>T,4IShèXUwO)*cIN =v82lnNew^̄ϵl.] {ηčո V7^kԎYS`{=!eGssfz޶ko"*N\`*=+0)l]!7q QQQQQQQ"^}/w}FX$}^)2٭;E>Hn{Lnr ^zȄvO, `;m_~Wr?}|/nr7LϜRJK]vEpٞO_Sa90۝.l~op N.,,]^^J̈MLglw Q ji Mw4vGMw W2U*I}b{}w9'Uu6ྏ>?mSVn^KwHNZ'e&ua=$l5/lW#Nu2۱O;ld=lS}~پGڿ[F\i"Nw2 \q#V8`vdt=!{cY !=p<Hn;ɨ݈:܉J+~]2IduO kPvO~ٸvv R~ p;2<>.^Xh5ۂwy5;Iw.-`;ݨ=ewmδ;.a*Lw8TH!Y/q_ OrSISqpjP 2:AJ`3*sSʤvRl\]a;df{xJD}7f2[cs˻CNt͙׍ lhU-Reay+n#wV߷OsZTmY'q{)*****ߔZK/#l5x7ݕtX$gM;;u|r{ov{_2\jڍgH&}2B2\w;hYUL Ondz݋9SfmU;7>SB}Xf @ǽuB85Cwm&EePஐW1ͷ{$ѺfrLvQq{k=V=V^{m2vgs2X([Ϲ`5 [|~֫5n aGf7]7ZP'q5n4>4sĮQQQQQQN={z.]8Y_^z/?g3G>#du{yxRec2#$;{gy^Ȓ Ժ2+aY Y (/)pRYuĊ% C$v oȅ7Kys齮=sΌlէ|- ժ6|0/I-0->3vdsֱ=OH0,stOJJJJJuot-;o;moཻy 9K`2;Zka"@鄏?AN].yr'˷_~3[CmA % 0НNh"3(V$"3 ĥ#wUuO=:'c;z ?#q>9ʌҰ2pvKFF*#p';\9Щa, u{1`;F1jov ]A!܎L}m|Z1hUGBbIMVʉ_s(h5po[GI{K-m'w8[4?hQcn1v!/KJJJJJJtmm7/'WF ӘvYdvvpG2 @'6%Yoݩuellk2cݍxjA] nnOw< ;+dgOO9:ՙAEe vq;t,\:~$);֛ЁT}K sRwS{^DeC{8OYvfe乛n2l?CO :' zONaYp5(#c"ڋ"s@wzNݾLݼrWk+ڹ*=oAvx} >ߜw(|*'bs{ܓ{[{};,Vw1|G-JÜZrnH$5l 6fI|?G"wN0O@F;3g aKbwSKkݙB3+#wSLеO.YƝEpa#TtrWR&^JtގnP{M~CJӮ72#Qu=[!h5KĮD/1Q xT.#md=B?9]6rL&; l V6mqjm%Qct2]uBua^Q< -? ԫ bSwC?￿@ϲNLwl3x&YwuNյ]#t$}2{A۷/Yg6K9rW\fYwc1/xGh34yy0Xx l3̰>R;"*2ݵAU=Dyw%N-={2#p,wмwuwfT2HHl+Mg&XoPI]0b+#2Hn/Kiwb;1Df9 wLq콷+!잵KBQ {آmJ7K`Cjg7Gyt平B۽];]D/N4+Wdm?&w] ǽ{&Feg}x]7Bp" w3ܭA!4r?N,)Gǝ+^g[4#c`{O܄ Rϳsc[_GE4vP{;7}ɵ,#w;PXuf `;2p?xi?95>;v.jq {16e%ҋTV;v2{/#w5TL$rO'~)kKJJJJ]]-WeK@"O}|.q1\bF s{ϵ}/CElLz絛jo9 4vTP07>V殬 F;Н: t5̠M5d@ŨZShnQR!K4hsLRRRRRkZjo9{_L3C}Ye;mw>3זrשbβ`w@1r[dyep٪E?ˣz,:!ھt?2h# rcn .tgԽϩvQJq(6;+f踣 kZ }d. r̬֟<:չ T)T:HX]{EZƽgy8;4}VF !>7rKFA9lX;O662r2Υf[Aőډawҋ?8(1涯H˽^Iԣ!*}|N>.p'vn.c}&q eT&r$ݛ!jۙHp!kY =:t{mGHF؎ّ\IP;5yџGA?{/_C2%?:]N湫39=^1n[y} Q;R24d?!^쾧/C_yII)䞔F7r[@^ʤ{2 ŸlwwA5Y=فGGN5}Kr;V)8w @sn̔s2u!~LYwMxY.v_njuJ7qzN{}G{cx+ZS;>̛Sum* h0NT/CvXWsܥ|}".I͵yԮ6~Jӽn/G&wR=Lq/ k=Fvb>T v9_v]oO+Eۛ>2h=[}Jܫ+mj*Owc( Iqp;I $m{RRRҟ&eZ/ ѽP2N}7VbfndZaw93pG]?qbr^Kzb{)y}a;ƐJa+]aw;؎! ɜuN>~$;A}r=3Gq'4fܯs_5SA7~:O4we+YvTqG"#gkS?qnF?VllE@C{}gs0 2Ԏ> /KBwQ3Qc BjWvNO2վSi cEe,+3U8V1]莕gS)%eXXݩv6qs2T^|IJJJJJ$pHn}gms\+$ݫLw=o0 gfʛשj6r'Jḻibw鱹xrٜ 6_ʩT yxx\\v3lNt{xHSԺ3 SG@Us ˣ jr ܾ4\BWJpx#AS)dQrKoY;Hyv:4 ;KT${}ޣ{7mCliy#j Ilד!Lmv`{^y ̉Z !fw;߂19DiL9XoIw̴wmdvgv >28X;"Y'`='$2o96פLRRRRspQ/sG]~2/xW\Jp akhp|WmO~ջ7ɶvw/=odwGSq8*}BuT_w HK%ywCuT;;`wW ޶TQ_ืK%1?.`㎴EeB?HhdSgȝЎM%Ҡt]Wt*&dNt#-"jQR'nd΢+aHvCvW"?*#]m׊wdH67} [\^^;U~ma;].~O@izw7RzBq]'Q2۝`a1tOat25)))ԍ+e_nBt5[@,~~cҒ!NbwwZcw/& ZxwGfN}pdőKԞ*UՒO̐11\1N3+2#_|)ݨ|L0<;2IN} NƮ2JtܧéqgHe܏rWT=Q!+Fݓ;nDr'[9KL&ph26bWHb"f;nme(ޭQ$$~;;7:+fZZ&S$o⋧>،5m@W&}^jׄf-ݰ]Ԏ2d'Fc_IIIIN.!N;AmL}= /uw.:f2,/UTO 03W~#;ǣΨ9}wS7fsnn f2܇ޮ_|5&e3 [Mn0@rwrhfǻ&0CTFTpGlle珛Nl2 }2` T︻)^Y1;HpTD.5'Ѓ@({/,v"5mVd]c0aWEd % qFw۲ڻ w>`{k!r{Q5ivNUuZP=ȔpbA:C}dp"U;v[_nj/erOJJJJJtA[#~9NReQ>{Ozdȝ{W9¥b3%wnxTy H8#3>'eܞeݸ ܉ض/9xzvN=:}w4Z3,S.qׅL83ʛS>A&h/j*Ìeaۭ{;nǀΌnN}X؞9ߑv!F}fo׿9Ul]l$ˁvOd{?Sva{}^/6ȸ +rS4mǒqL<+Uo%o+BFa$͐cxQ^w45/RDrվ+$(? jǽGA=;3q/ {>nfUyj2hBL4U9YC]IC c}WG!% w5%RM1w/|T_$²h!Hخ=٤JDE{l7~wr'RE A,.Kcy]&%%%%%?RT QU~%۶ Buw3Ōa?rj9d>NfA>^KbGJ{hƊ+o"enOX^NtN)!2K݁h*,qTETQqEƝCOwo3}|Ly^m pz=q'ǸLp[ 2͂M"ϩWvp;v?m `d-ɽ.>w[oGnqPѴ;v!M]v;k3=fܮ]b|!#ǝ (dvy+dý*e`{ZB&\ijwkgU߷- È liw$yj9]ρݱ[V&MaJ:3KMJJJ}Io~O ey Iwk0Mw얉Aг??}ThbVT s3Bz7鵽glGGZZYWuo Z+^w]Ih~a=OD[\˼ 2,ڡrytϣgU?~<0t*,22w9) Xƽ9 7v_}˙vuRǯKȢ" !13=96m؎<*ڑ e97_*n!xE{Qo)t=dLg\-~bgAWx'c6K8t5,^Pmsyl7rʎ>2fyx|94)?QĔ@rW?nR NB*ǩ5Mژv~'Y_`edj{5vמGg͢lgFtPܳ,yﺇ{J_Fy~"里{ ʡcwj9+EpoqTXƝq}3LtjaX.] H؎e-*ӷqeeq{nwL0%pϣ{zyt%Dw$h9j7ϣR"rߠNm,.HʟH=݇e,#s"Ù+ Gr"1$dUŝKgVu!{Egc>N$dDžE bv+7F!IJJJJJtyǝ쾿.Q-ݩgab TgL&Ԥ"3b$f|Iq'6LO3awH}r]j2dYv~s0ݍL#u1˝&h격o~wH{>e$q;:4"Ok!wviiQWMǽBU˜Z.Ρ۱zrc*ӺqAt2^.#s횳,wGun;.j Z.tߵkzemgv&F&?!vvN ާ7vх# sa{QQ{J!X&˜ RG'b]m#cHpv;b4%tk߰I;F2`v (ۮ  l*uKpS+GGY?ȓPNu s_h8M5ScfR:ѝe>s5<~:yd3CہTA;6LH]cFF+rw3|R&P{..tɒWf=]v͜Bvg֝fgaBh=w{SQy fO 2M8wN-Gǽ%qGA#!+-(c}|W,9Ed|] hc{rϩJ~y'rbD/1]/'Rp7ۋ*q!E?'Ǫbq_)d3HB]84X3'i)<ю;hwt ^ZBq;P?/I}eI(7ݓ;vݣ>| fEtHZT۱Bpܟ}l$w~v`Cl̀WUvy7's]e4Wel} V&Rijwy׆={֧n~\AjHAK }>>6.:09 Qv Q.ԣ>,wpj0C=s{@=-wz#]{_.N TaE@F-qgv-mϮI(eذ>-tG䮧.N'ߝHգ^iGAɠb`;~q~f /ع_:^qr)v_DU}<*rg=L/cHb@v;v&ehsYڙosZ3`CrCǞRF".lgkHRcgv!*%nGڛ[nR7xmym`VYw򍁙xN?vkЎMi2hn.W۹m9>qL*-OkCհgݱ=rf`uiC?T'ܛHpqpT|h)] Kh2%;e]er]dT&dZl%ohN.l/jHV޳.dd,wpݴyM FΣJEed cFFN-KhLPl;l"3v~"vW Ebdž.?} Wp7_sDRauBlxfyj鞔TS_Zsut[sȳNi,~~ qDفǞwYw~=&fY j1{Gt۱3ڜVeܹ{+J2ٟDwgve7tw[,wȠ.yL\)fl~l ..4*ٻN̳{Q.Aq+)>t`]Qj ]!#Em*dϫI5 j ]Dw-t,fݭ#RaKQ{ Nн22+d c2&pؾg4@kTG9)~<y]K^Q>nv7'e^{L**߱;~U '%%%%%/:ΎU˰t5(~ ]~vc>iF`!#O'&k4bV|߱QCuaCvɍSU m涻L6a{}ZkKx_sYN#wezHP?!TuSD}$K+h^/q.w8ҍQwu6KD2>x~rWݨ{K4k`;/vFd`ybgI|=u?n1 O㛀LawEwCv҉sBl vXΐ va>~Pz7H֖]]@KZC6bnqu~RDڍ/H%⨝E(vسRL&d"IdRRR#F ul/Re]!tivg fLwr{$wEO/oβ$Uvp;toεL{tGZ\wD}Б;Za.fdP.ฏ2*4JWuk*}2=?FU3NSSON=);Н;˄LQwQw,#w,tiq*ur<}ŚH7m~.3tKƳuUp v`IB\;HJ^Uj+D*?/`vPj7%dG3\C=R>|EdjT{iEsg ѽ~1ȽVZ]=M2M?Z uuqӅ،A_T)ĹL£O ?fIN]Edv4}vo؅ziwpB'd&OTS[wM.nc浿_*os6 esgVˏ>ϸ ;$r TBtKpDwB8ĨeADp8Zv^%|9^fF79Eu6 NHŃB2)&͎U.*e~VSkdl@wR%S`w;6=l%si؅Uu݋<.·1G"S:OPUr{%`Ev^? dQya(= r.=kۮFXp3}j!`;܇h?pDRaDjRRR_ ^s5uTfؘtgb&C/8v?Kawk*GlGD㱦Y3?ϷϸL-xgm5+Ol^n7>neΨ̃W27e+1z;zQKȸ3TS#+Oƭq'~+*33*Cǝ_=2ick QVr!0 a62vɽpb}#Kx>J}ˢ#N;n Ә։!1r5mpq܎ص#Ū^\/Ng;>mFjI'R\ ] g%Nd! *F2l )i΂|Avnp)B%۵XDn w OLTSCIIIIAx5 QU ΐj[Ϝc~vE}j3qnǼs3=w>p!wnNkZzON\?2x3r~{k54\ zȝa5WC/.]ӂ؝} XsyD qoS=>fe*Tw{/Q3H.&L>*ݠH掀A΍˴ӵ s2.wo>K {G_2r9q:ˠ鵥lnA?"p2ȀdD- սqǎ n{gj?bvB2DyrC#Cm [\Uxԍll;މ#HJ:,nd'%%%ȝ`-!<=Aw evΐ,V}}yt[ۨS%f,0A ;Jvcu*m[trWRA;i{mKnA:ם܎o)$epoPw`br=gR QA VLrali屦 ~owKۚz5;A/9j'OB>^\~Lv]Σ2nv`vã{#XWqex?vsoMᎄqdA0ô#vNٚ#x-+nf?pW9X$kqċ{|bJfo?}.rqoi3&lQ.4[?.Dlߍ CCxl*] m~Kc@X,qeݭ;޽TqߧE2,ӌSEdaró?ZS=~@UnveesqV%;ro0%#jo=|xpkOOpxޥҏ\+ˋNU?,F򈽓1ސ|_)8,{|O2{̽2\>&r;],aC=$ۿ6bZsw W}Ki$eqfOws+ՠ{Lwl&eÒゕ\ } ,;F>_ ޫ>/l/`=mןDvm[ۿ'0u"Sh8vw"5 _oa!F0%KIIIIۤq9;A1@ؔQ\$;K;v\3@#+vjmJTYX!،LM~L!qL^;#p1~6qyHʄ }b¢28t*A*Gwu$qzY_zѰzHuN\wݥ]VaO`]e. Mc滈ApKsU.nCh-{tݡ_C1NnϴRx1wlxXd vQ?NخOѺ BoSѻ@uldq84;5)zRRRv鲏yq9`XwS}m7Xdݯ)$ ƩLX\&$m 1Mt?cd%?4j{ڵg wgOoY&Cre}en"{l3P;? }NxtTEuoAU2s9FePhr\i̕܈ϔ<:x_tܻᷯINKt܁x;q;2|Gȸ!6Ջ҅ _l_rawYT^AR^f'U=kZw39`-vGw-nc=ɘ]kW^_݃. q&f;|n" ߝ莨;a;ٽU\&NS{~,@rݎ7jYɘq0IO^Uw>qRTƘ⦆N6-jHg1nlv;]yf2LW2 ޫ SeN|Ee^:j,w^M۽)N L<{c,nؾOdG.()F:ev |G]Rvz4s)))) _& cdz\ ;2" `vw ͘ݏS -f\]NY`C'㫼I&0*+DܶpYܲ쮸 ֗@wQ6CrBll!۝Ywe o5{u/ hϕcR~m%7}e'rO݆Իܙr/ܕpG\+e]e"S.wy(yl [v{]cHAvR>;[@΁ΰ R;TʺSOMkE; wՀbݎi{:{ea/Ω 5Nu ȌCzM~t*7]^Bwd趗icvn^;aD. ]wf"YY DZBen;JTƚB]ހ'r*{>AJ 'a2q䮷aR>U!wk9hAiǁ7OT=q]a-n4ScĞRTM1\t~C`&Ffv܅iK' ȽL$#g ݟӭyܟA&0eb<@ߎmgLlw WX۹NcUtOK#Ntn2nՎ /Uxj9.3b+뤸V9U\ZxŅ/X`WǴ;d3"?ݍS,^AdC >)f]ܾEZM!)SFi|(j[: l\F >HϝYw;;^+܉+|T vm'W)N-Lnk 7-.>nP3RIF}8֊MGO JJJJJJJ6a)2sdpmFwt!{+Pv_D_wtvX W-tϸv8'>ڝSt9|ZEe=$yB򲘌6Ȏka0>h2=3d\wX--\pXtYߌ_Ozt ǝNq0]$?w@ݼv^8ϊX"Wq;^RIgd EfzXHEuVRRRRRRҶ-t v+B28Jӝz Tbq)|2Y^NvAU9]g˹djh?mY0?Վri,䞝*]%eLwך:mcqcDƙvx37kW+.CpzZ0# qO>r_]gEK і{/ +S'+@pwnb?w[rT_7[u:Ҥ(iHeטgB2Գ&5r行<:t_Q @n;/t +};tPvIhNr^(XHGavQ <X>2ԗ\vjR&8gdxx]O ڝَA8pɜv\Q'%%%%%mtr_ +}W>@d+R"CuT5fXɘ=o7yLՅ3Nt,XNq;]S?WCzv}NfTkDw.Ϸ5B-AXf9ΦfOBm[C;; IYv=㞍)-]Ut!YXT@ ަy3:cy-5u@urecztgwycwTȝ>&^|5)`%3QTc]p1##2j~goﶏgXC2Lƻ~֒1r?pYIIIIIII% b:x u?<[rƕ _\_KqriꚽW;$AVfElЌEAԼ\ZFn?p߸yvesj~Z@[Gfd9wG]r7nGwQt7fpQ+v9ԈB#AV%f.>lN]; <=߁q3ޗ[l\pj#3ܙMeVl3|xL"$˸T3Bl'ֵms{ ۳A{/#_lAwe mM{Z ̀E"WLX=5tGԑ=3vYQ1ѝ{5xVBHؽ`"WMKKs;oV_#2c yYffd򬤤m2ߏ283_tMsR+5 Ozc{r =TItTDw{i!%sMx~;|l_:ǩPZ?tHY @,oaCvIF?c6";f!U2\!*(e k5K>|-z:Ĵn313ܺ29݋\\^n!0${"^ybnX,3 Н~;RW.u ʸF@l>]8}K몁{TDwI=YQd;3⮁;Az ߦpMFrάL]$8t0) U3z‘W].)kUJf Rp/؊nv&v磭zcƏan&]ResW`T۷㵋,Yڝ=DlǺkǕOT*O,pDGܟ4T{Hd~`'*8zA݅\u~[:rAA?Kea{7.$#}=T;Uk Ir=_ aԵ]tokkcasz<79pAqI<[*sOGiq'rW3HN޷;TTK7vv(2wE6ka;K1xH$92i[Ccm">Ftl iAwCcY{T ,܌vhwZJ4QlN]fq47v;-͹bq3Q UooJJJJJJJ>iӝ$;_w.rY~}7ɧb\Y~xt_x*cMc9U>>ܿG/6>~})=l TO]2QU~$vb; *"SFHt[ցXլ, Ø:F PFbv#q't è3l9NŮ`ZJ;н{< )f2^f E cFv3F[F@;:CZ}OgӍ@Xz֓Q{$wut N'\5ćMHdHb="q*b{pM` R5l'QgvOb' wvlvKS1 g%%%%%%%m<1U讻os/wekrs4ܗsW]GQwCwP{tN˝Ev|4!>Mv_||} u #06e#nn{3Sׂ.9ؾJjMn.}e>өXzzm?yWW䡎9N"2?J=| !N-aڥn{| AZ}O6nw]ڳ2f}~{v#uq{xB `P'<[{,w7ӘlS0P0qk|zNe~t}h/pDdX.^dNb1r7YX܅e.uQY7މ{E)w{4:5)))))i{uA#.cά;=UN5e@_e\e܎̕;pʺuW_h[dt?p5;7>k?`6Oݡ|Knm m7Ca]md==sGǬ22eͳ gGF`p W-wp;yDrֶeu?tbLSi3ͱE=wML}mP9MǝSGY|2I$vds*{UvdտEcS﹝/ͣ3_.nc#m-r_"i l…:].t t'ݩvw_$*㧨cgPJǘt 5F 5h'22  v+|qMZyTn^=)))))i[uvRf{9E>\ex荀 _sSU;AnȍៗOeoDwWl,*2TIip{Drv"/q1VNvQ{[ ms_m!mK/e\wR E N tދY=rj;Kv$;Kfs2;CH7dQcoBHTnln#c'RJB,B2uvk"}kjKNpμ 9cT&7g o-r [d)RGvGם~;x#q`~o]oF;?s7f?̕ɸ#%sy ? v\8l#R/*[pG̯X=jꀀYk*,xp_rI~8#>79ؘ͍6W[`b Lﶫ*!XEfA %9I9;wIX(=#/?pEe\@=nQ/p%n7jGAYfU{W;h:JUQrLIȻvNk;T9"#3ִdRe-HjLCFHMv{,mmGF.o汽 uf*2tYIIIIIIIퟁ DrWN);]wԺCuFftDvt lw˺AU ez1vQZb؝!Nָ!^ǀѕ)dDv?s|Oeݳ:L6/bev:=Ѓ Q 2**S=ˤN,wbܯݎxEw!`aw݅8E@wSŒN3vƲkNĜ,r& 8U5n׎ghP;]pp;8!Nhrwy4WwNl;h^r?OJNDžZw}4[Vh u&s0WBw9!^"܍ۅʸ"N=;[ mBF. -#nSn{;]{tQ6Tu=49 4?} hL=ڇ&?9<w3ݩ~݉A~abf1;^Rgd3Rk}dȄ .,/l_#-% 8}w`~vx8ʑLK? CT=}An?n~дe+hm꾽G|Q.КqGmZFnn v"0y$o9 F2Bnԃ5MDϤ}ё2y"бt&sN0X̒XxXLd/p]Ϲ{~¼^Zuz/|vef;#2*AT$w$ǝ}Į7'IeihCAdDfKpK94T wvU&;O tU/Y \eRkHY 2rkAT DicIe-#WvCOaULtOT"!Bb,zfWdF;evTs'RHh;m2m'R>Z>(+[3t ^He.2x_nԱ6}硝vCfy`FYw5kN{{5lY{rF 9o"Ed!s9RwHwݹ1!9]Do]wj6lŰ!Gh-zl/lWIǙՖ!yq1)Sʸ{Rs_QYAn_an7%ez$t!èjuEZTMdf>-hWORѕS3YYYYYYG7>2>thR(Gwc?ц"c#iXz }R-fߍsrz[yu-07/mv!SO] s(O.n2ۉfWݢ$d;u;Tz(LEswt3Ev;^"Y>!*@, G2 ;X>Mg0]ǝwSUwўN f򄌟Fex^za{TUC,#i2;ķȓ[aSTЪ6ZTܗ=>DMfE"T[yg's=11C1:O(#s/T'ÁԢ`sPR1?j=w@pUO;Mw=SqwΨ Ca^f3 ?)nMf`g0PuθB.~'2!re9:N> N22{߻<`Ǭ;݊ZvwrwtlTMS^KJluSW{ݡf ۍQSbwW%nݾtdv, vO+:1^le^QV_0+Cd2]!)Ne>h5;[NM~qEEr+0 N\_M!nSzrЛIjOfvhzsv.Ap"}߭0zw1lZ^fŌ_fUT[>/QA5{A'O?E1jk˻{r鶻.xt RK n,ݍ-G,hR:M|$d=+++++0qGYX-䮬]DfN^ Ogz;5uHeuN*A6,zsxRTd~7,2R9ݟhͩ]rvnj޳o R2f`*tQw"KȮP+XtmIIpǗ\J wo쿮_gR.rn2Ͻ LCWN2^T'ևoDv]P@wR-#AMJRx l=3΃ָ}IY%FVIw:G+# e211:Jn~Cx-~OLɁ)9nܼ /N{%-v~$7dN<`77Iպ~qdeeeeee]n;B$wfeDwrmw|ᜪYǗ_s6y޵ 7T[sh? ]`ogRS>c}M:̘~ޭO_Xgwwx)vssv;էS\lGU>lnޭ% cAtux;te_{.y=p;WRK_1w])>r G-B=Ea@\l5]3p?9`:v]:cV@[}{ItWkHTibpܗܿA-n̜cTݭ5{ٺ};*vL{sםcd*euߐ|3LjK@e}ˍOުK p omANff!\R Vn%R+|+V{<^tv"Y‹W@wr*Pk+<*hW34ɸݒ2(pw`3Y;{< eH[Cfrf.ZDi`wnLh ;*݈YM(;_@XQQS,Wרi5fM.tHJ}1Hܥ˗KG<뮨]T+WZb ^sܧvsWdnuk#s׏`&:v_Iw5!7'] %`]؎K{^i h4v$VδLQ'˰KTp ExcgS*:G>KmȮ$v{s+Q6b专D-BfWGa;ތK޹Ano4tn;v迬e`3ȝ;/w>:R G"EjUhNv5rյ*}K*QLF6w wna;ʾ8iɏIK Sc(qMg>]o8رsZ&+++++&ܗk1P^.tt *{!N]t>~={.3v{tݟM no;fѝ^tݯuh쮰{07*=JNV_;l;kWm߲-u^*5555 ;mKpI«pNL,DwAݥ! *r_Q)]Yϸ IJ(V.jrGvotcOɽU.hSO݇WYM=(nyFDWK&:~aK\2e_F]+Zdw9Eq;ȝ: 9ָGgǑkS}doȠBQlu;f^|IpW:z-nG'tw}_Cw"; xk p'Gͳz%{jy< }ػuk*vcw???C?ڠsPw5)N:Cf;[i{QN ɐ׽fCTYhWޠVIUA{ (.[h\.%3F; yRr(D+.}BC{TarQ;vdv[C Nlo;7{.Qv"ȣ̪!Va,ϖe~}iW{徬y-ӓVv!wyL@T&a{H4XMԎBv.I5ɦO.llC!R1 =RBIwR;tvSX_wDfb!-*c~>9 8ʉLKq&镏يއS_wգ |Ω-{wllG ].\rh5 e'RW[;=%^<'@Tȹ@ UTݫufg $RIZx ;/k134/)uWvr;M k NvTqM;iU"wkj^;/7܋* dw˝;fAʙ'lGn`/Z 4>@z;YƺAvg$ 斂.ӝT)S w{YIwdo{)5!8l6+Gk? Bx7%&d2)nyut4؉XC{tCv{Zqȸcjiۑ90s{*[w<̾ߐAd3XrmGtgj^?3NiGՙ|n{}l_[3 'S 缛}FZ wB2ϦUn㮻.u`>6v }usܫU.-2].>!y?7jS61H f\!OhCٱ۱<+S"Wq7\!]% ok xҀ'gY7~#8<;KK}vw.7qû{41QѝoI!gI(݃n侉Q#i7j6kIvu+=:klyvZWtUdu_,H'e!qSv@0ޗBwc#F1ݍk_ YDb-yݥRƽh*-AXvR;.Cw8Uvygq=t zWȽ۷62M%R2ئkmfF'SB^w۪q'W y٭ō;Jn;ݴAXҥK7UStgmR%pg1+è S丌a}ČD=#CEro.ex3ES~ekSa;M C"DZː^O2xBDF٩W:*l_50~xy@wqf &fqg*/|ﮟ_6AtgvDžwqdH[""G굀9αrx Bv2).Or+^dc'Z}jT)(%"B*y_=>+uԇhF5n*Jv,"mvs۹9 lWƽ)nWl܎U" >npKY4 p/Av布4W䠮*H1urY 6Z ۱,24?Mt)jY'|DܝM32Oɰ̎*t ܆rnlztVQov&}gu=%-tt Xre+tB*{!,w{62P2J7w1'LVVVVVQEַ #KF ~o ;3KꁙE?sښӃTuG"$e }F)-lǢbG pͽ6G+;!~{I;MF9U\w}nu _*p;F2Ѩgww'p*~p: :Ecoe߹s'R0K!;Bt2N;6EDŽ7cu_w#Mx .Tu_ۮ3)}(t78QwEf}*]H ݺ?}yNjp#Gz.2vor *,}mHj3M4di2;fC1PpQ6=5YYYYYYGl]!v~rrO<>ZǬ;_pu+D 9\s?Ƚ;CWtW`;3(OT&?iw4v|}G=O,}DF;tQ 4*8=j>lאTJ^ۡ)PXbDU{޻]߉ܰedx{ %;]w5f ;r,&#ýcv,rx=Y\w"l/J侧ɱT/(;f+%ϸwKtۯ3ϼV0/˝oݣ&wAwAdiINQQbwnO79z[m )`_Dhgq_`D QoY ct+@;~9<^x{[Q%(㠦9ՖteBŐLB1.`\Cf aB\_%">Ig={gdz:wgN` |H$tg֝Yh< e]1{?nCK v?|14} ݗ? )溣ٵ+n;0?|m?TOtOwC?#>N;/%K H%vFdX 5R%jG)~=L S, lzvv c*xu;ޓ25yhOsc;x;;j5NZy*gz "w 䓗xG_N'W${AGy Jθ?<׎.ݑ'mdO5*tEn_(jLb6Ej\M!o32YYYYYY陬t-~뷀nY{` CwITv'FMh:$t߭;u?:;YܩNA<׶K[.eڧVtGmw#f3D=;w޼_v/Lw,%dz(4B2ըV}=nǢx$(c46ېV qz۹1!÷GD]G)06 帣=*OIng Of:ޜv" }Oѱ}5ڎVjww]e#c1Ýw66e?!2 tHtW;zHt+9jziݾv{ݝw:aj;pݧ92GcvN|k+;Ӯ2i乄r!gS{*;Am,% 'Hfb;{ޯd ~oٵ~jllZML9a_JHmb cMv7rӤ1 (&c*.\RacYOfW 5NVCnvZ"] ogRFavX]G\u6Q]wL-(SctꆔٮN}$c2ڬmkr%r28r2O^~Xp5WfV|jI I/k BȨ=E\6vXmsdΣr)M]NR]Iss ۽4Sڃz`T.dx;-yaqCw;;p鹣C=ed\i~hLe5ީ8ʌl{!}I2v{bw1Cv"3@q;^5xn;Engp8zQ;ܾvw B;W@FAxDvl'wSnپC;;J W]FOc)i$jwJ6;E/j,ȆM踏'- wB.}G7r1jiNθ7{WrѢ.[CΎ^;AѬx,Ui ^qv>iqҢK]Î]ƽ_D]{wdeeeeekmݍn:(H#/#2 9U~\v($DPuGZ6`f+#⾢c!K`]w;Cc3ݝQ උ\:Jcn^-!)3r"`we~uGw-0f{8@>DuF@v{;i}X%1݉} y]ٹ]'ժq.|^Żt.qOij\ ĨLr.݀=h[#!wN' niv7rlH3*81Ηn`m#l RJ&rBse|c+X/5{{VVVVVRgʸww=͠;:u U+;9I۝eN&jb^|BE}Gw!/#۝;5]NxWyw8ke9%l'ڭVm(5OF̞G՛f;^Εch۵9#@tTsx,]~Q Dm|"&QY->c>7}rw=:?y2 \qI*3O^~{x4]Iʴroviz$YQu'kv\D]WcJcKd~ o7szkHVPRomE g[ZBCKZW[J_MfJ Q"x,9垕݁2۝owwrzt- Q x`+@>DG]cc˖WlHjɺ#쮬]w!3\xqr*efY豱{pMrOvN5l_~* Knjh{ڡ;l%d| ^!!$ۿTN@D[7lN׋|v" z 1zanUQZ׹:C wo>,6&f ;3Sv;؎̚pϨ tý Q#h,veyYUmֺfbe<=Q9k˨ E1nv>je+$.ݴ$llQW٪[Tf;_Lxq2;+ΡE]aw,s6pH0_awe4ѽ29SYP0ߗ\eSa*~SQԽ㙐ugԝNxTlrg%l|K}mE]2ި= nG5 _)EdXXFjG٘x$fFN@a ݩ/ 4ʞ= fEdX-$]<;ݛ%1{5;n #}xdۻ FUarVξ1ܕs!ap:Ww~s0ρ Ah-[]a;n{0-JQ'+ھUK|4GvTEF?oI>}nNSeݛu ;ηtݓu lt)^$nG+t)]]1]Ob:0սa[R`˺.336afm;=w,|KDenh;b2 }-}= ԮEΥzr%*ޮ,N-222m@]]v5$v >ҰPZkFpK8∛^D78M];qbY6ZK}J/1P@`;O ];UFw:s܍ݷo;'0ދ푒a=]CKP cvmo;C.݊Eu< f{!Ӌim?fٽYrױ\Ci.NbsV&+++++h)*Mtg ݋ oG%CN ݛ2t?ӟ_ݢ2w);2B*>$]t3>5anvGݍ}-a{ȷKߧ ؑ!c}jje,ۉt%'MQJbgKGrllGEK^> {fq "wnv+vfG`dCnHodr}MKYG,5tofcS:]h%tkQj5h$2õ'/ULn1Ui$2+,s2uĎ.V ~iݟ:fRJ&RWegv,i{ͮ$۹Z&s޼;Se<ȬNj{N<0\$ \w`NrWne*b~{F 'wc`w8=:֟N>䶿!rg##l7v}jTQ^, 4 wl)lUНEuK K岳Ъŏ[4 tu%b{sMDwq:u{!b 5#]9ܔ{qy2HʬY,>]ggCXt;iu]S={X܊84ipw.x=b}{Lnj :xuO]^DS^CqoۙP!d~^/q:N.tTe`oGUߊY 13QѫW'wH'dYsuwr1|/>=aB]Et3l3z=QdeDv91:zsC֯!(QT92_|Jlv{vmDVU=nUno􏌤# !nfR##L77c 3HOԎG15Pݜ::-}'vF J Qcu$wr3 w(q\qTV˙Sq-0KXl5"jHA88*\ =Y^l/ޏNcgVdf]er^&+++++9N N{l,Nvy{@wwRu_$r>t%dxѽxPbNsKD(f"x:ˌvR]v;>v|v}ܾ~Aog %M ;*V}LHL>r^_^ywvyTqDбI)9/|7?^GSCi~2U]w9 8f䷓G6qw˝]lv4 Gu>]2ݽ w##qGl/B굘%#Ўb0$c]^H\{j/*| ;b]vNRjVVVVVֿN^LT<2,GwM< t7=́Nϝ(eBwDf<p (Fgg=0331Βl;wJCiȈMS> oݛ^q!=xst^F mݦ5ʹgGUk!QjfEpܙpOgHlNR UW k w$euOQfRf>޿tkoop=YBw Mw׍@d+/elIn]*JN˖k/͑ ?:fdn@.b]vj\kAݹ=^T]z$)s`̭lw4Ofeeeee3p_<^]㞖Wy䞦׻k ݏSL\w'w4on;Gur?x3ێ0f}nC|-'Vm!B2*S;`<6R*TXѢ֕ :fPePU~&YYYYYYTMZ]ؾ琵k^vpT1^eS$wc>ҴhKVCJOlDNp?R֊I<}cؽqv'KoPiΤ;5n ?kiS"ww; W09m{~ _~ԑ} *⑙O\˝c㎌4hmF*qo7*q"){oyЀ9"wME j;&˰ӭn-ȝ% 2&HN]0S=TЎn/ǰ\ѭvB@V;hWf>j %u 鿫sk:P394ܮb`{ᗮ})~7UY`F>ᷩ:[6cnoe(#i<뎰,ΟWp{q'O:}E=tch,vv]$1%!ױM݇IX'nG;! ݦoݩ] .TWkd\$|>y&0;Wz#fC6fqpwyY1kSѸq)mDwT[;6eki$OܗMnQSl t?fR\gCS`r+w%mLm51(&QTu6 V_\L~k7a:sDwi8kFn؎pv]e|.dObP{wiڵ_5C3>:o;3Pq%S!8]GKcI+5= Nz]~2{Y ەL>p{kԝԎNtt.hF=Ao@u6H:uA2]>=,Chl5T} T3no&R8:tUoejW5b߄"n:7;uVqG_)|X;w@#!fܧÃ]é#*, tܣΜKXm: Sf(DQ3v;I5Hl{tIΤ4-"s8QN9kFZ%}oѽ!*vj.nvf{VVVVV?IMNnɽY^Fqyyag魕܃랲uT<<=-p/ !v} iYwww{챇`]s'IZ?f;kedrhƇ&F(}èdLpo`*AF5J["f`7v3.MCi{pjSv}CL42$vw}A 5Kt9:*xPu= vG{`0ԮErL>WgRۮۖgR$; Q>g#m~0"=F\Քϰ]j8Te[V#}YYYYw濽MQWT!TU-)iN/SyoT1ƋTb!<<!G⏰^wj}ι3Dz>IIṣo9k9.x@ZYw2qL@-fy*=wj$ްfN.?^nՍ ̀k4ZMyWw2a;ܟ{n#b;K܎vן6\GI涋.3vG˝YaI'xcKV}ۯgCj d|_@QS!^xPt_ tweepv-(ɝ{iב?KX`u;%ɚqU(3A(b2|,>U%fޱbgXRƶ+1T320+cd(ý(tUᕩy|mc#zm`5s'AߍҴ9+ծ>&ȧ2IIIIII9ؾeZ~_6m+=uu j/bb-8q%fNNʺElFӁ''v} p[1Y>(vk }{uuoz c缂 = 0.wulJ wߢ=R;OHf;ȆTmd v,PGQzqYz9Ȏ}G$Sv|CܝYrtfX 9 ׶@HeYUQwVUa:;n،˳%Nog2HݯGi/šډGlL=~3cEĺceMcpggRѫ?et\\)uI%]VNMJJJJJwڃ[nխ[o{}nՌuOp6$K09J Ȃ2 d_灙֫徿)&7.Oy\؃E?e cٮmvadCgzv::lI`>feq"JKJv?n'׳bFFxU@v@Z)·6229)'Nf_Zȸ9Up $w.Rs{vW);ٕ:S4#nWT"gSeƗJF=`vrvN8lH&fuFU@w ja;RL4۫22#~Rv۽5za^vŀLu奔DAvJmpwK%dt'AYskjr=Gwsy`fIIIIIIo$#sRCr.60n?T$wR;]!=/ݯS}2}Y\F#fu'6v_uݭI72 ݛ,څ~lǺAbDl #۞&yw&#U+8UDw5~t'f&{`[H}8,.$;q?|L 7 ^p'Pw^;XOvyFdGQy_ 1wd^sb=Zː{ riLwʘ.y^{ vw[!q336J&7ۉ ˖bG l/4jVMl%b/d"|ؗvZ39:IMWxSeN~ fQu؎ Ქds=^nw; ݨFĂ3WF P0hIQ s6Ufn{w}XDtNiԦڽi`Vzurٹ|~6Rh/]IwfL KN>EpQ< #ĭ+{T|ML0ѝ,?v{%rkSH渷l<(OMGU+B.I dv:vbPy܎łn wǽ`}z7q[}Fvw>[ݩܷn6ҋW*݊9w=̆xZt/\䑙hB0Y)Np{LhL3{Y^+dvَ|?bʅ?v]NjN {vN=wAU]Rp֖Nقն<9^F@C&'%%%%%q߾MM [k^IJ{m&ܝ_oOdi{̜@ 'TNo,|A}Jigu܏OGżLy.rg`i(Q .Bqr`[}OD{-rs8b&w pc}Юߦw+.z~쁛6]+챦jV 9Pqݩ>&('.r'IRL팰SG۹p>;Y?wF. 7ơ#x]˟ы;KemIؾGvN;iQXwsܯร Ee dL EnV͔4ݙq_AkFXF9{p*+"渫M5»KYw֐qf]Ԏ0[ݩ|jXPs;.h̵ [i/Q}J'%%%%%~XSst_jYGpG}r[e0r5d&=:= v?"8LDẃ'+ {_oeӹׯEܴ*MY-NMUwecМYv$c\#F2wP{XMa2&;]NEp4ٲ9`1-#z/ }0GFgOgqIE ݹԇ7XlDZ?߁;G}݆obhw{grʸNEX`vs J*y!wN) %Km SKr'/[T+G=$wԟ%݉7{ι,˒+xxhglWKjHkd;'eS+_$238tǐv0xFF)+PW]?oGN\wmw8x#o6dd$Wl̶ړN;uݧ.poiCVH/qN;{dvx ߓQ3'~Я7{ǎ7,/sGm`)q{}+r]_2͊`lǂF25 ; ُSC*p,!ngPNǽ-+8Lh=cheVUj@wUcj$x&ەvѝf{Ėڱpgi,h\ ,sGr'Κ~q].to_9U .*y; w dv5:OjaG%t6k ]RdjJ]Nb2KtnTfkd;=Fd,HT]NyV22n[ChH.}Z+ϸ]3ٝ{o{,ȝZ_ڸTϮ3uUeWܛ3jw}`d@ý1%#r主n;Z^*Q;uC{Xᮃ*e#`lHRR$nn0?!н~Β^6}N>N;95#ߞƐwjA8f2I!F<[{e#,p8xWUXjSu AWHV@Ȫ:Rç"R@&b{ KX{%V$w-nUjiuv":ܐ:=G`TBzFƽ`r}ۏ8lf w@;Bvo=5ͅLJJJJJTxU7wcύ]qރ^}V_ݿSc7TFB^b`wcp#wECt`/^"}sK~;t(]/NsjΠ tor sܝܩrȽ/=n^q٦i}}]e܁LɠG$ Q5aWl?^4ܵT:(!LV1qlCx@w6Tfந L9\FdLcMCFB-V q.)+70=:{;'gZܾ;.OEAw乻DʼGt'#=ۥG<0Sk`]KpcDƳ18TAu-GzEd*؎ήLf7강y>#ZmJaT斟nB67; EaJ)4>'Î]tS3'nXBV̾x1Cg=^D=w]8kYf@;{TV>X5 f܍۩l-,xv7&Z%2r9R?z/=#؎w^$X' ;F' ܇I/sDZ|Mͩ:>ArxYpδ3CpnJw:sk~aDHCwLo8t&J@G9@n7:f7[N׽Jc)2#vl 05F1۫|Q;sl{C=sq/sgSenNsݡtYz^v4`&))))) {+Gf1a/-ca٫>Q km%5W}G=QxDԝlwwݕKu~C1d:6gOV kuL֡]4r*vvn90XI4ffk]},,wBiюez9m!%8g}v[:fa/uRI;R؎̓aKz-w;^9[)Ñ3ޝAsY i]wh뎕iF 2ʕGaSa;4LwNʆvVFe,ά; c݅UʸtΫ,w.GxT` S2hWoGEYHFtUt׋ݩ^ 櫛Я鄜.(ezvn@f3TN7vW]]TnIIIIIISt[{GFfgFػDDlc~ʼn{;2撘)?;6LGlڣН ( 3.t,wThSݱ)kl8]_lXܸk}e-Zx$we}@w9_Apnݴ-㮨4F:䶻.W6jBZY.j_OyXL2ğv=Ya*MiOtTafdQoK}AW  a&Esw=Dex32c.X7]w qrワSeQz@t8I{٬vd w:U=/3TНY<$^aBƨ=^DZRcݼQz;jWzGÃoٚn!4+R!@5] xE.(;-4;*]YDڙ.RMJJJJJԩd|iGJg3*S[?4r xEf4bsu'SnN&7pНn8em (Nlg̝!c٦*-.!Z9N_~|ɧː܏b wΫgV rmg6$lҍpWoj˰;*F5 >Lk; m u\h;a9apQ;ǹsv9Ksо{};=һ3nKbwa;lQ ElQ$vx3ܗ.~' r(|f@uT(K/1մ^hHՏb&NtCdn_yd{,-(;XFEW4zC* W4UfܩP;~eOڅ,j3^/lm{b@Tfzz}NiLW ܕ//H;dO  KR=0󂸝2Oq'C'd{{TWDw)-Cr?{ӪyX>̀ݩpc힕ornЯKbĽK^jSWj'4voHUav;y^Ht}9ҡc /${sj'@>Z/Lpݮ{o/۩i,gA10"Eȸ|܁՗ DNdN]k2v[])!oN ARns=g) F;\J<"_סT K7NSgE!Ee,`v7U ~;;W%niv&s>d"IIIIIIA;N54\ r[I;7TrokއQjqc5r},09#ȾN'gʳÄ]*񐂝뎽YDJms}oNs޼ 2#Q˸r'KHN9%7q}:>SQQtZ(?BCtȵwh]՞=:9rй=rr4J}B_{c@w )8+.r^r˽ԆNwLi{qxo/wӹǬ3|lȕ t}#'2 ܙ֎؂w;ohGKrUy]~=;%T(]edsḯlwb9-l8}%]osrw׭,z6"?X=$Lׇ1>Nݭv7U%}eD~ӝCe Vc7h+^ПrIIIIIYpܯl=㞮:̝6>ꁙ+wb{o#喻MQ9 !% Dndun_:OOX*Nc|9a`>7)9Q>_}Ӧj`c/:cO0*  u?ES=35˸ݛT 1"s;K>Q>Q59d?{v!.۹dכ b';*䖻|h+jHuV/ȱ]!$)wtDeѱ*d9K>JƩ]xPe`ƞ!4ٲ~IIIIIIIБW9w wN8_\;f::*]k}{C;JR>R89<:uD}MmLq۶7~$ =л;"渃qGv.ZKY\rjf;vvW.|ҕ?SqLM#[tBj>FƯ8N\S#N1*M4=*8k]Sr߉OфIIIIII~Twga#+0*ջ}/*չM7Fȝ,BR6hGQm; QاFUdbB~ft>՝"w|7w:Zʰ9uEXq'rYɝ 45% ݙog5El9ݽ&"k6;ߣ2힉Mbaq9k&ZTY[~S ͩ} "~yTe=(cQ4pMdQ@2N *.l矪«a􎛌AŰ{k8wܯ$w\,2=4~Tc{e/S|mhc1mlgb{Rp[Qs`ݻS1ne_j՛Tm:ڃI'&%%%%jzdKKZ&e*>nGxd~D[kWWg9=Eݙ:w{[O䎡Q`K>2K ꎔ<3A=Mq- u\lVݓ=(g;g0e!zf#̌UV'u#0uņdn `5]ia>=31|^Ꮪ#xȋ3ڞmG=ܜiܙ܎;2T*:lyLC/iNl )TSᲣrH`sE:\xZJbw"|cҒ|Y_TdݩN (nmGn;`X<np=fG -so(Ќ_S#8LF"1{hH^bޝw,Kpl.ΞSJMIIIII]GiW&3N_zsd:^ڤYcFm{GN?kpH'НaogXws픡uw߽u+؝gn},w kgSty)HiRv/ٱ\ Ee-OHeC'-7QW Qav̑!:$wO[^lE-T~NN]{n#)׌pO<.5v2}3g_Nn2v,„2w 3ʄߋ 2IIIIIYZN0juWgxקg@=k}gkK+p5]“ K9(.tlH7c*Ĝ;\.+Njާ?ف rT;sUEeq;q'5@8cU(YK}fdNea2Q!nRw*Rv,ed{v]^5_wzBwP;A< mSe|LNpzs޽c>TzS~H wzrgÛ <|2A.;˻SXsedIjNv7;,,s̽V?H쮋碂ڡ^~+GuZp݅G7L}PL1ݗqggѝ( her!^=8_;2#HiDnkZ :zAt'۷(>#ܱ}gaaNi;K ۹p@8k)6.]K7=]9'q <>)wb1.S=&ejwNIœt|jIQw>y=z҆%x^7pcvݝ]xinrP"ww_޺ tvguv]!,(rcRedD+&۹$Q{1@C݀ψCIo|;?l%X]0`;FOcf; ќq24Zs FOƫm '#'}}/J"~>UؔY3 !7 2uQ9[z.UA{zT7S#NBwxw;?ǣF{1.Fv*׮׎hoz2$ۡ"D &{Њxs=;vϸ{, c]WȄT}}s2δ{:)))))ih#J=x1hs{;7$&9GҵKKf!C? }$};h)f݅5p_YvBN,́$oA1{yh5zG?ˍvT^{:!k퐨΅DR̹;;I oN=\t.j㘸]G,ipû;# 7" !@\sgZ.xG3d2}R|fSwX"A.Q>XS1's܁ssbwLwad(gs-};Mw(Kvɬv[HpA{Tm1ٮ 22Nzr)ox{b&LU.  8Ȉ麊 ێH|2~y=))))i5iNןi)`_wm\kݩr خNkg7lnaA].و Cv%f<^ISḓs{Gp̜a|7wmk2nn/MY 2˽i!N˽^Fw*#p'wp{p;[ā(.l3nSu[ ӆ-1Cw})'wy"w ZB gaa{v1YC[Ua2$w#zަ =N\~Ҏ’Ar* z*nVD;^%׽os-GѐIIIIIA>L}zS%Y^|uSuޞp$*~٫FO7M>BLQ7ky_G2p|=Nv`wgwqS5ޗ >]bb;vP;nf#&}olΝG>0esdPӸ2˝CWCoCOJr3*3`;/'lRsQܣ^k5 WQw_KfKeah莲pqGTܧ5XF؎=Է2^rxi܁(ުW]trg!rg& s=GُZݵ]mqf{7;rY{(gq]tys/qLEYXqu22[41bw/fݭ/:Dp望IRtAeLxܻN˽eg -(1<6;~e(8Ƚ![>7 ݿy#d=`oNm_ iV2W1*# gL3Abj̸pW"3,3mOF7z|Нb;]i}Ѧ z v™L HF_Emcg*3[Tf>NeefНPƻ2loRF+:Of;\tE>WCq~XMf=dGEz\n!>p8<1NF=FD~ w`ŧ~ ?XeXe~0EnT#~ y~xqE(很Ts=ww$6~U7݃ΏMHEoQyAN]C66~G`"MDT=n0?d{N|L^ )،Tdk8J\l|eskKAt=Id!Wr܏v|:sLIΧ[, :oЭ>]{ft Զ3X۴6DeQ)YT>]-z#"cnUP!.nwlc#΁I `ܡgV'ۡ35Xn__Th'enᮓS6ۊw>֛~} -8wdzqΐ 8}s֝Jޜzw|@wJf?Urcd`rBe莤 ͩ&6< n;t+J?8T̲w={4`jH=V A!&K嬮 w~MQz̹g~.r;qenPzO;7ATէJޘI{RRRR_q;:] :j˰URΠ=[2zףL@{ׁ]g^YɭyM?/zWPFg2Yb  BEk_tҵqA>w^vǝ]Ntyhd;}d¸vyڃvwdpWFaomcof)03TM{8]n m/4ޯ'?}wݴDЎ=¬ͤ?c:T*;o]J#nMYYfC&%%%%u(}_1TU 9gķh-չλ1^Ʀ2%s܆a;v;$۝3 ݱ)ʄo7 \]2=* ͩs*ǂ*T3,(mOnW xC*_{WC*Y΢IYKENªrmv)k&jrymmiZ&;Bs'W{*čyxNNu=wQEeq'+~;>R%e:;Մ2X$wDe>Fsj۳Lrېw{+!C]J%q 6i{н)c׾B/*7.ߺƂ4&H1rȩ}n9CvT0lHѻ6b򈓺SrIa <2ctg'^̯w!Mskøu٨0]1ev63 ;f#v7HBH\_h hD[kJH14;sfeON,z&& ySDw$fꈬ#y/W BV~q9_N?@vc@wHg}mZTA:Ũ6nfTFYwq;osupء5f{寑=zͻS٬>!u Z9VTԭ5 n 0^RDjwɇDBܵ9չ㮻K |WQo}OA7ܳc**(]wK W-v,KB(FY0 UgSYq{51NrSHʨ S yS_,t`;g2X#wCkܼIdcQ@\3\TUHFs"iMFn Cg9=lMS}ǚ黋퐜P&Eݵ/Uܞw9njBvr2;oI]Ri\}U<,ued6p%WRLw;kiWWrH(m'P;jCՒ1Zq]Qo7aAƽe 0y}[ڜ 9`rF,}SIpgWbvFQmNj+*9R V !r<Ȱ}>sgT>5`a{*2dwS7{=dKªC A~,m~[0mz Hr<"gNF+nwA?0CVfS} J݁6Uf<.3}͇֥LRRRRҾ(87-2oOM!/cqMjgs.#c _ u?bwjfjvLIvwNK.1lwp5˸oYfTFRY;. .G #2T\{<|%F4Zv !{6-qn߶ְE4L4Y=@poawEeB!$ͩ|sD Y &d5{qw~[oWu쐞̷v~j~t*P}J=ܫvd_U̸p6 j[ji;ˌ[L;uBIAT=_pjDJ/<:,St3j?ț7h={|ʠZˢ2D=5W zd 2vD>F -S}'%f=ทCɩ*߸>MtűN\ӏ_<2]_t>aSz^ wOH&sA L'K1쮴;ݜw~ܦJvNU6DO?] w q5+t܅Ȁڥnnqw'{_7Rpۿt7GGpg-Ā{ dPp$Wc#ZvpjKutTȸjk u?{;.ι]22ݵ?U]vpzo 2w4LUL eX({y8}#;<d M-IT̚bVF2~|IGG[oTXv #)gGFCK82ձ֨aT'eda}h\viwd+sL[__:)))))i6D :77ݲsW&}@b{@ʄw;*bwچݗ;|Pn%3_;}wkgNtz3Nrqs+L`LQ2)NZ ^lƐ ~:k&z>r ܾhL-]OH]9 j*M9u2!GcT&]QmNeV:dQNǝM{T늤nQkLGCf$& ˝2:emTL-ǝoWa]^ͪ,;%rez(jc{9v#w5u.?`cY.)o Ro^ڞSC=nr_ mhD9B\&P]7˹n+q]n>A#@x#15>ߓdJJJJJڷDǝ>`np6n}d_(ai.ށO tۢz2wojF$3[ 2t҅ wۧ܎R[aVfֲ2;ƽV&ęKf~J4Uwj/lLlT2TȄhwR&7P&C|(3*PooIa [`ͩ$Ibʌ1Ml)#+e|sB#u)a˰GBܚ0 Bƽ bè^7322ڽÝ1wUB ݍ]mr3lO2^ )]s)}-b0qvB-ܐ6mO}>Gl͏q^aꇣ]SHJŐڑwgR3s;qIIIIItpQH}G_,铼|&dro6ǽV@z;Wvy3kHw"KۦNk~%pܻRܮSfmW(,ȩ}Y- cB@X=dvN.A q=!9?淏 ^&M3#vo [eZ6: *ޠI1cTFY;ۜz;奐çxVm9`ƝDqe܎a\ <¡.t01 5rU.nVv8U)f҆osj~Avr{B2v;GzćwG6q*2ȸNL?w_㢃0NYRLTO3IIIIIrpt܏Np1}gZ"+BsOdOО(Ɉ q;_]A?b?僚F-CW 3ͅreo.6))d۝#ͨded+*S>ڵv)Auem%z}Zp;f~Q}-RǽqTA6ʸ`sֈTU帗6yL5=vU@Ȇ%0a{,*C}fd>22ܑqoɩIJ[nǧwȭSjh3>&{܍MtܹBH&et}?/9moHlTg-띌KaZ5+mҌR[=lsjHRq=qEk>wLsfhkF&%o$=))))ifK؉zq[v5?A]L/:0qKݰ]/=~ gbq{\wjT&;]Orv?ԭ[*ch`沰b9wee_&Hn  Bù=l- vh3#i̒nDŽWi[MZՀ+K5peȺ7Z5Tbopܵ`6`qW݊T&{͹VɩjQqq_{v|sw;"*SA9<{EC. &eeRoppܒ{;2A1~w#6Ɨס=3=ιjw,Rȸ^FTGPC.F^y*!-[ch{;bھ{EGN:0{RRRR>~L:M{!>p~&Imos7rEw;Χ3^"8qS% C`Py>fH|-K"yp xnjsyv [b]~lрt]C_Ho{:Z*j+KsCN^L/`ǽ*wܹ=<8UMCl;uq{<91wʬonQkr'2+SaiC}8wsr2*#rl0wL ݕrykS_bJ+6XE8s-HYKo ks'ZCcܝ ;(;9{'XTҥ;/aBH;V^v]Dv\0a0ͻ/)))))B;//踿;K?۝[؟ r߱0x"}]p ]2^ ~rVC cBw Yug1 @wn^y_.~#ͅ U!vO?E_H.mHlNn/;WydRk@BwAzy\= }ܱ\?apF> =<.}>@tnaV>Getr qRV0)侺B' wmN`Zำ~6W0yt`2qnj.]>%ΥA9ݏ Iex֒ιt]: ps ^&|0k=1vǽr2 D2c%?u9;> (+;-)랔}vR9%;?Cv?̓)].[;TW\q7 ޥ_;˾y`}I+?d;[3\wq2.t=tYg.sϞ=`vؼkaHRr=Fh 9h#|ngLySdz5'h .6&@ڜ ?4h=5A[;TkSqs*pҞ!+Cn& & TjĪU̸S3p܁tk|c+[`ہY.p 1eWv,wYWq;W.Etkdv^Z!]KWU} ێPN}EeE;ɿGP;_y5$#qk~*fBT&82;7)-+9xd -luO^Q㾌 uGs}G;Xv//fU1>I;v38Vrʗ%|e_77#fg׻QvkgFfKi[s\{ WT2аL N㝆;uvljWrB8{Ój)y;@!zqkLɩ{wmNUW}lLܞJ^n(f}㌵XV ]ut9TSv;GFjHwfƳZrǬLHGZ1$1A+##RuZS#׷ u\:HM\=Z4},mvoP]_hg{nqO_SMJJJJ_뺃םi>=;f+VI=p?묭]G2q=^ubyУ]-HXLbװb];vɆqPf^669Koj@~5Zcp#Bf`'}dٲ&YvMs܁!*íV&+,Se,w q;GeP+S6Zf>H3ͩrǃqg z/YMv'wd0fiTTR}q?-wGP!5#;!&M_S0ܽiFdb\F׻չxGe:zeb-sws՗˸wp_k/nYĝnDvqa~_RRRRRT)7Uh}}ןt%Jʐ]ng0ނn=f?bz)Bas͗uY9p\p5rr?r]o?n? =tϑ;].;=v9_,GlWFқFQbƸ}wN,T-E|46m ڦ^֟Օ V òȨ M3CddfwreJwpTK(*#]ZF>:۫؞ r !-خ#w7qo gtt*2@TfdDwnM/2窌{rg;S2r_R}GM@'WF)?U2 3##l ms3mk9R;v2c4S혼"T?e3|LAbRwcT;ݗ;qLuC]q'sBNwj{g1'e8Ϫ Rȝ"ϊ2EǝĮk2X## 破݉:z\<#S]1#zR3l\ Y~Uu{/p]358V&*f)gwgɩrO1ٓ鹳Z;Tw<85xq=i7zo;]=貹5WU3@׍ޟW^&ST;Ĵ~0]]fHj*NrF V{ INN_q- 7,A,8[ddXLޱlvNO .Q +**Alw*C2v"wJ b;W,aC-mSkM7FĴEk_ik,!I#K DxhkD;ߙ'{~wV-qݻVUp,wzS:F7mmͽ 6ނ my?lsܻ6Ώ>`wp;i#ϨR&q/򬌰=Xrܽ[ºQg-AWR)ulw*";aݟQ.;ݨk/YC//"Q"3eqpN(i|VZ!w `ف˸ۺL\r鸿dQ'ȸor򴙞&h>?1 _hΊRǝTt T*z›{MpW 2z“!iEa:^^\KSctyn O-$w?\WwmoUTBHr;Idڅj=0{v~HW'BrdJ;~{9jg}~?丷$f}?:7ܾ}զ2A;1{+W\r9sp^wۓ;Č;|KV s>yx~V<_GGz󼓮~Utܳ=iQ`Mbƪ݅ѽ]t80ے*4vv@CmK#32tqaTM[i &gqqz kfܱ೽ K׮ˣ2ʸc(3IqrfV7&uWg%Wdv a}:r+*@.]̇I5hOQAb woӦ,waI fwAN*w` sEf;uJiOd[Wjt4&I{Y" Jz܋j#ָ{p# 晀{|/b_B^w~a8~UO.rʕ+H>s3q2Gef 4p1GLG<sgq:;_\TGwtY]yw6&=@J` Qivv+mGdsم܏JpoPXs)}9ďOa{T-z,&z2\;-s=3ڞꕐXX)A*r_(*ͩʸWNRq7ÝY #LmcrR2kܵAٝ59=鎴 Jvߘ5E6޳C\OČ[qYӅG6lwM,q'ǿxΰ=n'f|u| /2o73TȔ$fR=k=qrʕ$9p 9wn8 38T~C̿ɸ}v[lwe fwg?=C}j3/M-u AqVzW#TK7n>|r>U+j\iC,*]" Q[S-)sVA>L3ٛ23v\1tTNlaiWNEwv .@}qUb;/EК܅sX5}2N״ANpxamGtQv:1au-^:ZU$uwۧ۹)Rz>S؞ZɩGwNδA=zxG0KT3yƄϬuZ<+W\/rp LQ[ܗg9tsj2>Qlmm)sdFeh}?̟t= V%(:6{XF1;~*&. ?v}4C7S 7lYKNoY½\(}* S;V .Epq *Tz`rܹ9Uu2f݁blTNc0SSV{q #{%$gzR?1l߾ܾRP&wqyӆO[bƝ[eX)ìww7ܵE1q3&}):)3YlO% cJ0 _gP>8D:}ӑOmɺl>nN5=;foyTոJA>f8>B=NdrSl')/{Kwѻʕ+W\c̸csƜwc}~^#/oONW2=}ǮMu0#r6̜%3Ew3ik[2AH'}'[؞ =221mjs&;4U>2شc&r Ei_6pɕ|wmwwȴ20{uh*vAFeZIeExh9IC$ ,mena=<+=ɸ{Tn;]~쇳t-Evu;72+=5'wvkԮ6H`~ZC{B1Nvrw IoR\;0F3*HݴxFzdllApdS;թ=p:p{$Lczޢo{ɀ7-4܍_Erʕ A *1HT9~.r?YTl< /m Q mo1;!#v*  <$[Cɘtr1Mڐ*fBo/W{=6BqK@sp;"6DJ*kGXPi6`j >BhЃ,X{@we9h7JHfB;]2g{{o.;%o1JeVJ_l^'w9vv`;24P6=p{#v RwY˽rN=vkRi:RGlCN>M]_Hn׍+BccpI3aNT`wqo9;;@;JKs{Uww܇-";1\XƙL7gsʕ+_i2o_cp_ͩ^dqܟ܂>hEV˼qiT(4i3e2 ݣQ`q'_m1Lإ`gNjq0#sg׆6Snk ' BMX쎬,ۤNt_݀ޑAL]n]>w:7'.f=4^eTƸZq .pUBw|AImͷO1ANZYr }Q2ٝ0;{VNt7hǂ4SݞhKJe.1rC~(FeҌwqaڕOH]G]P]Ho. 5K{D~3tiq7ǝ٫dܥP+:;zwSfmG/^J?dKr*o~" AwT'o8)wsʕ+]q#*33ͩZW]I=c%fܙerؠ trR-s`?w~Q7p1?_c݆ Br[kV8 /҉ tb RZe09kI딞=<;, *aU$\TaJ^hpQ8]%w}ӌk0)Ì;ȉ3qO{jԃ/g j='av(Y=5ݥ_T(>Zn4Ɩ~>I,j߯O_Nt2~{ sQ fv&>na ə{wUUÞ,r68v\r֮#vǝByܥOwrG)$e~q:߰ 㾳MUy| 35`&uGs{@L`_mbcin[?aPf\+LgD 28/sQ=_5FZe<:U~AquQw\q7lT Ю;1xBRy⸃q#XfQQfY\ w2;h[f#.^A*-CÝ.lNÝr:L܌yK-r3mC1SIŐ~=o*S 5&Z}ݪ+KӈIvv I:wCg<72vKj.H iݒ2 $Ȯ䱙 'frʕ+X2_Ӗq>n4p:qc(--[LA<7wʀ?ǽ?.[1#ΩLtމ.W0z=+Ikezdi= a;d#NfY,pW#JczW˃z:|o`*?wWx}5pw^;z{|H\rܡ"Ge1=k w˵ y@/Iq+\fTFup{}sj73qw}w=JJSqsr@IJ2LMvLee+b)!/ǁUv 7])=YOxzShi{i(X {ۗ ݚ$9^Az܋ `j<3/G)!JE ;nv.I v1_+W\rWe$ 7~"2r7zn hJ8^@LÊ?ƶHwo;(Y=7ʷZ-NםuuwlIobDF =Ȑ؇x|{i zT ( w&da<"3R+5=^fzwO^Pb$w p`/cTjwv;Va{AɩvRl :;|I'[}qvzeܹ9ܮVI*v'p~,wsW$nEv(vrNngNmM4.[0 "kFvhJ3 acۿ}QԸ+58o'ۿh+oD :H˸jU\(%QK?ps|qlτ(#yHFl &̻6 &>lQhyyJuϕ+W\U=:Hܯjtaܯ-Fe],l#1r@Xǻ/~^w*?} t㺿'bh׺H zE~;gf;2,u6|xՑQn a;d0.jgrko ܑ) I\_{ ײ} zE=`'e?KbTfw#wոݩu0{Uu;,q]ˠ 7w /]0a\i(?|Ծ89:HeKeop瘌2>]XҤ vJv!來^{SVHjdn4 GyqKt{,&~m`_dƓ鉪hl_L/8ZjfzERklK1nCn7.&ʘ߾s:fDzH(>pxR2wM^\iqV,N|*}`wɕ+W\&#}ֹ͍e8?_V<8<RHt oK>}A=jdqL*nH'wvVgS=8Kӊwf۽Gc A=2sW1㕦f{+R" =,k^7f58Vy32*n2ʈ[Q۵q/Z=y]=;o黓y'3%JyTf wʸ2Tc0##-p{Ϩ pSz.!>HX̼D/pŏw?#|GJuuw:wU}$d\F;v^=( I߱20of;Gf U浻^g2vjJO\^ h08J+șK܈J|'9">{\v> G`3#C(7xܜzwa=s.HGkg`*XΡ%{ܹSո~*O`LR^!+*i;ETFIV9I71Xx w -w66z3* tܵ9{S!`raL_4}GAy膭:r#9cL^ m#Ϟۘ[$#tC i䘞i"spqΕ{ۅwa7l{-:Ϡd̃O.4 ,D devbLs-2 1Qwp{'fvvj9mm򳟾Rk3749u~r*fFr!r;C/!㎈;gܗM!VFTEngT~;se!;wʢ2&;踫 2 In~*6,vi;^; #UtU[ MB{=ߪi/hh;sAYjLo˫EITp w He^ihT @ώSXM^XyN 9++R ˘^%W\roi?>00cwׁoki@m̯gey2}ܠJpE?rQ<=uǗݏw[CmnU3vgÌmR.UtgL8-8ٔL0ܣNHR=KK z$wErZT(#Wj1P- @Dj9 M/]`9u+ ׳iI=GNlt )+*3KHϟ㲌f;s4׺N+To)hs )ATz.7NNU8~I(rPV;oOUV3 rVXu7܅^vv%`Tp6zz/Tko'.;vJl_Yz c !+1fFp tI{^ܜ{j'/ޗHYnwO(cFv׽nR,c&vXAK\rslYSL~Ee/oޘOe' ٗ-<-}[sl3{CnŝG]Xq]T׽,=s ۤngN* 9[⅌a{Aw-aa;Ql uXcΨ lAۨLhx=g wz:s$S]w`;ԊʰhM5)|WQ&hFȌ=R"2 tHzvLϸqO 2h[6C;X_C g[e&ǽdNRV0Nz}p V1nGg KorտݹGh\MO7Ysڤr*UGejrܵp-q 9讧 Ceuޥl0qiiTJ32Bw SIĬ ؝+!]ϫ=8tNM[enqwr'9f]䮈;4&b[eI9;4N2%ېZOC1j}f;V^up;Eý yvEwFKP~C (WAv6}<9Źݣ2D8pеvrxHw~Q%(z1c;(^9"s_*]Yo-ߥ+W\C㮨U9uqavyPr1wzL'qo%ta&pn9_@w0Ap>uzqVAFt㺛v;g۞T 0.DMRRAb{uRVm&+E88uu`0o".+4To|c c{%h,蘱N[A:1.b:VڱDĒHbJ!X" wDpoޙ;~< %D 0DLBl1kW <#9Q;減6oMe99~&nT{v_1={Jw zvd#woMawʄ=ܣ1ii;$]!15%^V &ߧg4ojc%hکqNFwont:RI<ï.=3]*^ Q;2?dz}M6*LYxkL>y[ܹZ=IVW+W\7:S'CqߏQ2f܏}Ȓ2fGp21O͝.㾇\t?>n~]Ư^#Y M}ގRtEu?T=<=fܣe@=22(%CQ8f.=c2P;խฯΟ4 p_=gLYU`8T `s+;37zݾ3iXd=tg$: ig$}29^*S w,!ogL}`PRpG0qhƌ; K Kuz6vwIjvڮf"2`:e`ۗM| 9/<p#U$3mL%҈u NVY:zfހ.Ō;ͩڳ;Ի~d53]2nc}$d}u{$fKN\WX7"v8ҠN-Bvi\rʕvoNC,*suedܯO׭]Gfe} Gx\w;eoݟfw ' %.rŐL;ӝxq b;32Ӯ&[S#D=P{ wPz$*?rT\q/{"=aC,)cĮnmʨ]^Vqp6&~z'IR3ᨰ$ݳtXZe*SqONŜIBLL=pkkNp:؝^Tc{gg,7oH"Ǫ,LC·"ӥtv\K6OA|m}FcRRܾl`d{}s*n"ڵ@=8w_ӽZ;eA?]=z+vTE2y=W\rOOqr* ej⸷{?^"%wT˨YPU;RE=Qq|b/uŀ; Gm? f)+ޮK˙=nPդŜbv{R"gJrց\)Ynϲv$H-ްQ۫qo $⾔mOt)0=n U*ABt'넥eeTkϿzϸ^sİvRÆ;]2D2+ލwr;&7G.\.W.Lœ2Xtq}L[BwA:=qWv~'w]|.b25kM$z}[/%2SIT&̴Bz  eSZ#Euayբ׏00FK"dc*'`u@+W\rdS/F[psr7{pb]MYZ砅#v}^`AW̄ͯ{8Vg-Q~oz/-wQR۽ѥdɪu[}@oyz%c_O#,t@dY?EvGJ[v,- eɩw毞gUq'c60a'ui]RƝZvIXz{ͩ4 -.j7|pӖ2*vSYTF;{\q 2LqړkKoBnF%3;fi[)4ׅvV+p\v {!7"uB h/JX@ÑX^$ϛ!sʕ+AO0*~mG0FeF?Yd=b</:wvW֝莎,zfwԮSa_b;r^zFs S;#CUK[$rqT;dT?ݽ*uʜS)*s9EgBy %)p3)*#jqMvFܱ`f{89k3*ͩj/ǽ8JFѸ )3츋q T_e6rWPޢ2#>;lxi lW]JMJ>ۭgz81W)C]KW; }#^9׍:=)='f;.TQhMwޠԱ:H;NeLpV] e܇`2lOUf;;=u'n(_:9)*!we=>k˽ +9ۢZMڪ:}$J!Y|&4'G1pV*Bi{&jlC6:ͱ ߙ%:q' ܭM`wJDO3tx/X] &_ʷs~T оRN{[NxIarrϕ+W\euÇ6v~'ྈ +S y}ɾr׺>4tOLkC\g!+S0vߓஓ;=XQ^)eB ]܎d:>]rx2鄂?N k[pOajBpk)ޮU& QT[ q߫ nw$[|JTT+a]H%":-vL& [cbT9E sP}W Tq/{ƝM >wUn~{/A&tuvċ}:Dn{XFzڵZ( C̸Wr5샨\ Hネ=xC@F^+׾V# om5&݋\r_ ~K^Onj{2 wrϐ`uEI;}"0CݏX8ttu.>?`݈;BAN[%z ]Q?{`wU>_Ivݮ5R|sWʼnZ}W%k|7=we۵!MJ1Iǝ(== $pn_ɩؚu \ƒw(932>Rpܛ;w'wpTLq/ }w\^M)"wS+ 1n-S#$Tqz%g~ NGݝ_ݎtJ~⸗]ֽ(WIRsSY4W>D!*Ñ{ฏ o|XLdFmGwv2\'m]"$n6mjrʕ+WVrsb >3Ze !3yH҃>h+K^ -x qedw&If_7nj6Aw>$;}Ƿ סRŕn_\a$>wߜJCtW39ZSSK=CF=P~2B>33?JNBl׊ ^%QF.ɢ 3+S,^rʕ+vy ;6gs"|nF!:<5+vlxW{;Z$nؿ n|ݡ~V+w*@/C83ǠkpRe)ۅ!uJ5"<]7?SWEpZb`;O%s1F-,s0&Y!.}n3ZN2?uQ˦lxs*!  jMw|l>eT0)*C]UFvNr;;ѝ;N]ȾiކNnogZeHԷtN]AzX]Dc{udrWsܿbTݟTrq?ZMP>Uw:;Pգ22ܑ\yAT$SWƎV{q@pĹ[3nHQ? /$ͱk@I? ^툶po*O!b;}y IoܟZ-\rJྣ;o0rq=Ois14'n?};SU}Ypro Je8K>q}\h3΃ z13K.m,sj[9<۞k%^Mv]|Ib%$'aVhPv$ Ҷ%UwLeT;~{TkJe-HU2;|}0*})ʤ.=RՀxᢴ J4ܡGe\}&AT$Brܥ{BT2 ʸQ;43ܽTƸ}<9JJՈyw+bw]}0/ȯLR%NQп,wANK+;"sM++3vǽ踏xd1*Gj$q-qFyi?.K.vIFfN7NkLloڑu ;'W>C\r_]?r 4*SCT="(1{}?yTSU}h6 ڽpDZ K(#G ]~aGX0ܩÎ=\'w|yXB?Qdvvd: lH-څ)c~Bvrv6 ѝdqjܛ=*CI;lVWi5nj9mz\{_%QmKQΌsJZu>2po xzw%eˬh >w\tgU⮠7G^MLĄ_~Tfc0maG*B2 ɪj&n^.h7`~ٻ+W\rwmE8ϢR76ۣ />E/NNETdWK܍*  ~0{bub駟.ջzvbw;교&'29Sg6o2>^ ȸ8+hdv}!_%v.{0SK#äaf2tNpͩ^9Sb > НS qsj[2BpW2qoN`oGT1/\*a@cయt`植NG&ln{؝ Ӑ{@vQ|s 7Gz~7]LcEƿ.X$D= Cynwl^4cHDžkrϕ+W\).dܟۄ޾zzrj:d882Z?kc O4qn/`?'[ݛ-A^hKq+ 6<}/][cT.թlH]:5 cBh=uvƬ֦kSir?O%ods"*3"fwn׍@`c2'3㮘;6Ȗ^q/]'0%hVƝ!p 5^TL.KIT"SEm\޲>\w%)`J )gNN[E/MVA't*#h7neDFtw7*FceٍJp/ʝ& QmN3I#sڕ~SEr ) xLRrg3n n;QjATqb5@򺃑ZΩ3ON/YTfpAGɽ 2 K1#X#Me e+ pvɸ}`->D=ݽUElbN&3S-){199\y5 tϒ_)o#FcĨvH(̴F99}ڜ*_EdΝ_%c:Q)y$'G1-E1L/zǔێT;O\a#C҆TdU#r錣>B *T2**#*n57qA7*.ݙ]r;?_yi Nlo~ݾvyvX:n㫈ogv5L}F^L:S8Cs۳ Kvj'Y.^,Y>h]WI\T$V&X|iAg$ʻwNY|)7="l;6J  ZFMoorTsg8'3VqM 9?~>&ކ KS"w:<~QcbNR .NqOuk#rHUϊqݜʅ;2SI<:Qwj9B~Sypܹ/Urqߨ玻 @(Y}>n?nd21*#={\NǹF3^ec~TYٮ9UR;ԁ'b$~/?سG@{Q *T)ʠ}7*bRfh;<.{oO;3+n]dR9̥u)u8tc.nO]#L-_eeq xp Nz$勯~{O0P9S;UoշtS۠9ԓn)Vb3֘!HіNMw̠!:5{B 3s`^VW!}0%Cζ"˝MNߔ*fPg܁w{SQ+)VJڜ r2r1=qӲ2ve&ܫ5Qԣ}}0 %mqo\H=v{ql|mxWYr\aD7h+ΣS3 ś C 7#Ls;7x2xr57V ԯ=6M}nùR@E`wj_F- omGd! Gr|<54z;/8}X÷"Gn%qXB *HVqnN]{#]"˝2!ѝT niogxocZ `o!nY婭Y,}f`YEAgU\θqM}rA91!kO`D&xꔀձ]vH0^) 6Mcj`M1-XTO폂 cVZ!7Lli"bGeSx}#60Y;wXc;1 wM5\=wjq_Q:ܩd_oǤLܜC#C9-m9UOsƻy\Ow{?0ۧ))wI\y8r90VOЍlsn#C!] q7vM NvNofv??Y`7פTYPsPλʌCܵx[ŨyeqoT p\Q[as*.=fgVnAtߡe}-2X\Α[dy0)2!c0*}q 2tn6d&5~+kQ݃2vwܗII{H1̡s;HeR!<\*>Oy%Y3p薓I`>Sj>˸2Yv9QZ~VA_IvSǸLvz>O;S 8cGvu휤v>6oLf{(mTD4k^b;|}>23Gߕ㯻ʳ^/B *_M- SphEgͩ_ztUj792qޗ37F] ]njm^>2 F]p_$,u=@yܯ8܎RmoYwt)OzaiC͜;`V'#j{*wgC%fMMᕯT\"~QB[q1"31'3G)vk2vX9thGE0ռUf)o6=>ӣ2渓C})wǽdpU#Wէap'SڜZUTyA{qJwz=r C`$$nInNM^w~繁3.u=wY&s7Ar- q̱\;6sMADY}ez|F j=2nN;<& C{ds)=DEbJc9NgYNXN-ٞ^jNv `NfcJc^D *T*`]'>q/:3G"gErԴ!y,ȴ܇y"p.c]_Tacԕ\wW]o~el FeX*s B gIw+oG~?xgl'#Y'Nms؝ ^+5^Ay`!lAUv=Y9'.xku22r3 .|{3o5ma2R%w%W㡤dߗNl.`7 <*5d+O÷p]AvA63*;5 Rpcݧk+&n ;&M;u*)'2ܳ]Ȑe ݡkw(8r߶:H{# A0ÑV u9K~.DܧUS NqO.7n$lb^×qWƝ34Bf1G8yzh`2C2YP9hGYwȩ#ݨ':$nw݇ 'c[q-7H'VPB :싻Y{v:>F}g&߄7;M<ڱb`)f~#-qFe'.pSvl7]At84<^vYg޸u|ֆ1L;grWS`BN>@LMTᬷM{juZ /%eL_Tq ;|¦姯WK|Gw޹jYԎGCc{Iިӣ2;nqapx>6:9Մ؎Gmp?dw @N >E}ss!^h[ Z=l~zo]sSp>Vߛ{vLwܫNqCǽKL%{ k:z r#O=iX ){"IE[uLe]n=F9麁{ |3Yߩq// NT< 1S+ÅE5B -KN,^;'k=b5%>l:C㎨`q߫Uw4uq:w-+;kiEef*I)X5A.Hg!w+zZA =!' L~g玻 m wܙ {uz=s߷:Hy];=)ݨGݳ*.ǝ򰌴ĥ&镑q۽f2we44qf=/]ؾl'~ESedپ;ii"׮+?wn;cqxu/TPB&z;3-tOf CbnRtj/?5yD=`0ctnV5vgTG꬯_4tWڙ? n' ߓT?yo}&/`{ͩw*1eܓXR1rgwJqgKL@U} P٬MiΤM9?[%CI2(hdAŒuh];$<r1\$s)Jc̎Lq߯!wָ&zuues4dܥ/e%{ǣ2q./W^i=ʰTF2cI}R]2\6-~T3T%w:wܓDQ OGL 긤RMwA*kO7 ܯ_%Y݃래٧v}НQ7{qr2yT밋'R_OHe@f-!)LLٞH~O\b;&= TɽO!V;ֳ*TP{sn/.Wr0ޠ~2Cc̸#'CƆe$I{χ `%͕@w>#5 _(}sOߎJ¬&]w4tGk:HlieGf u"gɸ=8ۅ v<6X8pVU3*WBpl qW;1NWʻMmoZe*nrRNtjI桢>yh Av,\g.}:feq_VT_qowV }{9 pu9#9<:***ClW;2&=wX·,Kڤ{.A6U*Nndt+k/YK;LpB]?l"2xw?rr<'tshsA`s)ucˏ=PB tEeZq'|qo;[qp#OqK\" LΌfAZe;>G)+Fj^2?t>ܫG:s9\b9IX67u ܕq6Hpo'K@z|ؽMn/4+'xiď#L_5pVC Y] woZLI; 0#;T'x}i2l**͸0A>`cy np%]<~,*ӑB)qwY[uH2AqZ;X7-ϸTpx^=@ ܻq?fUo `<*ȿR;ʢ2Oj{ Q.e΋d e#$~}~(V?}JkNBkɨQYھ Ho(##lg}:w۫P{DF.]"sJL|v6*.;_7֍E{B ;'-}˻S%9 NC:\aR;-g6 wԸů{vriM5k틣[DXcY +ÄY=2-we4ݮP:ZEeGA#i㶶ʓꥥ%`;C3<)lGŚw80=%ݽYRë Ɲvy};O`T)rM:2ܕqq΁X֮*v̩BrG2ǝlW{s!)垎ko*.r]bP3ɩ+c*a{ qw q?&qΪFMMў \vHxZlzJOnAOjA(=Q-"wb}E4*Hs!-G]4R2 ɰGFNCGv!Gjcow2r7^⣚Lxa *Tпc-n?94Fo0p?/e&e0P߃_O# ݩ\rZeFqlꌵΔ=8Wm8{"̄g^pϽ -.n u&9倖as LgM;{@w iv{r#I@o`ػGW&Jʀs0S-C&Pk|럩K$6az x 9 K|``A wtLwN>8{ƽf9<*cSxL5MeC4nu`K2~QB=d9ecY jO 1AB^*[eUo[VF{_>=ɌmN>g=|sZe63j|L:[_{)]c.gtSٳH mwp3/|08^ ڣ()av+l'=d{&c./Ald>_ya *TпC-@-}E wAg杌$g^/wʌ/@]n$(p#!)q/¥^I3weĨ2MC-; ;{8;džzzCpB5(Pm/6ˋg:}WwsўC<ḣUFwwl:~ ґd;PLȤ VxS]›XQ*ki$>jfR<{Rd!'+Lsw J`jGl7ǽT 2n;z`TFYͩ\PLʈ݁@@,>DIn!{SSea #S2%ߚm۵9u~_xvoNub!w**.jZsJ&#Ȩo[uG֟r5ǁ%8~9q';|åcLs۬v2oﳗ먥i2;RF|sQ/ &G@w^:(Q 24G%cLB 7 {];a7/e1J7\'qo 8Zp!r:V!ڳu=oO/G`XE&]oN뎻df[+ awcml7냨&;#uev?*jY RÍ6b*, ݥl)ipo{bMn];sMv :ฃkGU%)ϸڥ:wbHk-).r,2ts=ACΝAJeTOdI-vʄ7sd}wܮ2x3>pt3oF5ǽ6Z9mtw?H58 >ǰ hw^?LNQbVv;_w3ߎ7Q{fxnnJWlϢO܍Ծ7ڞQ?jI͕_(zJd4; w~^uj=9 *T?ӉC(ΐ2HXխE Bٳ} ^P:7}Ok禢fz[}J7YM᧟}6ez,1&uƝmgG 7 ߮.R&/ڜ-̸bL.f/pGb^n,+ݨjCR:vKp[LV{%1TЌSq-^*ˎ-;F36fAָߪR%Ԕk8i):"w*\kE8rWRfJ22nNe))C+wUIP3 ?Đ'Ojs[!atFer]ooU /u' >j T3ͩo_s 1#sylܧW฿_%&VsuSu? 1)8mKfؐjN ۣOj4zY>K@jdNF.{?i[-3Vqo{B ~q:C/GI/B"_œ9CW[ʹc ܷl;o XF/{IW䎝 N}阱; Oo{yt]Yf/:afEq'Om:{$wowbǢN2`sʈp i E;~ΤܽW"SEwFR6olـێۆ;W&۵ 5vji< Ҡ]}:^U':YbCTu~JKKb;x,WrUwp̤<6UnA`C$'{w>tĮ+;)ָ:~w72NVwԧ5$ss;d2o 2qrfCu\S{ 0ھ gpO^ǝ#:yʈyf32~ lGc;/zfٱ!UvNK;Q=n1X[ dwYEQ]hS; 7R`ZA *{qENwV훚FAb2=E %H!ڲ:DvX$b qC.$߷P+{δ;;J>}Y㊸Sc2(GvvKIsQVsAPFV=Iah^oXȜv{ܙvR;vY=vbguPѩvnjS }c{s*w{(8eBCvG::pɜO8vrw۝*sS>eT^\6H$B}ug;A6+aDX},Bǝǽ=f܋,/BJ'2+f{v p\-2lQ3]CRھ0w%l)'\rqۥ=gq|kAvz} ~_ל2-- _c`B9e3,:_Zxc5:^|2&}G^ A@79M8שOAGVW yRxJ:ȀQ Ulg hGeSI,U{ΨL"Gy^FuR;2ʀ:9Uu S{pS1r@f>@j$q3(a{$wfq,q)iTf@ݢ2io{UuCr/Z,@CЕ{=#Zz+ lYۘt)2=PwDen+cdz'uV>9)v; wR2vFf sulogqO6|)Nr/Ԁ`ĉ4ϋ{bsrϕ+W\Apk[`{Oo ^S }ZZzVj}R 3<=GZ׽ssXh7f'| (ܼ&vq_=8׶vSp޷^3P]Rg'19pt$Uu8\i%)ftJ*n@vi])PwJK̷nf{@wh@tSSl>rʸO;~ ѽ* Sms*fw~Ft߽fF;5NOrcp3r/3Sc;f8kCC̭^84sWa6AfQ|)Ό;Ap9)CX~;Uv%]𥡢WP>Rlto W ;wN0o؟Ad4}Z1ȱnט'ۗ찥PرG.ŋA: Hb;OĈs-;dNӽ9%W\rއͩڹ7Kw4#B&hUw!\0poQ+(aRQ8Lݢ k;W^Sb=H7깦~gS:9kj׃?!\-Ϫs2NoPƝw ӄ;p:2P;AYuL䵋mvW ݹ]خ; u''fgE!*.;U)a<=vigqS;Ƣ2&^qG}WZo~v;ve#C]Y/qxL"v⹩ yӭhsQ܎Ia:s&-Kqs*}!) YS8qW;;9Y}/-`y~y4DbTX7#Sz64xGG]9STs1#~Rj'*ÖBFJR;}D*!n^c{v(?b,(ڎw;vs٥E_Gx)"vʕ+W\O7p&=s.ZIעn?:I۝7+]#=.&Ƽw(?7O^L;spS}ʤ271XޟD`wf|Ve+ϣqTއHQOu݊Rs Pn!JSW$pGD)ξQ&eN OdB7r׍\tBju TH=skqrB$UP]U2mS9( ;/;+iHb]-p1 LʴuFQSqs*3ǽo/{̦WOW8}6*Nbɝ"cpc&='uE#X[ej;2i=e0͋*с,*&iF>Gw>nECo i`їL ې:oRc";%ܵ9[eܣ/ ȤvDʶ>f{h"G-2v.XԵڵ(Ӑmw?m+y, FlC2R\rZGڡ=.{@[r;HG!2C]yYYs({O_wN️}qu9u8O\ .w^.IP{tHN1 pߜp%_fabn:>˸>er S߃} tٯgRb<~www PvAkDwNQ{F)^YLX(lkꅝl#1x N;^y _/=nN=w}.n;o`Le; NNU 蹗-(%mMzoY弲ͩ~aM3;P*2 w?@q/&OqGTYT2ͨʸ`TT:1#{wedtB걽2ۃb$-qM_tvcd$wb2.dd~Rn̎x֒dv `SGdY"]w.mJj?ȝioNɕNɕ+֫7::=}w?y|SJ[邶wn9!"@ޱݲ`jKT̸yqDt~h-o f;u^q#d>oO7ӥܗ1ƽUF/9=NpPtp \L}S"[ې p(>+j {{AREN]>G`{UꂬN]G0n)w;Ƚ ΓS-^ 'zƽrXW^dgWZq S; *}eܽVToqw{4a$].4AH0T;qs; =<1*qd.]ۿKeNvףd{zda7`11;&wl M3rAŖbf=jCv\`. Hx"2aC%۽ݩ]o%dXȋ#6?ڢids";Ol=$Xc; =i>2p}\Yc\N5pNp?}=+y7&e,r:f'3^3?@phP~6Z_}N;k϶-\xov?]gٿx k;@=@w]--=]s^:p[{z3^_s}YB9U%ŃwPQ`/jehr QX]3S_\o^e]v;. !xAƠ2fTF̮V]v숷۱K~f*&mLէwޒ _Ԁ#þqդtBۗqgT픟D'U=j M\k㵀Job>H@cg<2(*",w$~yPj渷܇/T؎[522w\wxlw ĢNWב3vAǨL,qC?p (v}ޣ6H'!l >36TRrnvK`?q;]1,#223h׎Ydwe,-S.>pJ\CFP۞oȕ,Q;NG-s63d ]rFKsfo 49{tߺY1)eS'fY~_l_˓XXo?ϋvrԏ=-8gv_-r~~kiX Hx739f es2Q>L `ǦZgoNM#3RG{`&EڝLji86uP/ iBu'нʵY|>ǴV:'Jw{EwAzݰ-Mԑq{W'Sjwl]x[&Uƴ CL:I2A܋2Nn]eT Ek>irwoQPFuAc}ӣ22r9YEe&-::f].nTnn{+$ǝ⪛\rg|o2{l\B)vA;أ$*m_%hvIot]87:GGgnHeBbcܐZLjts%uq2 D牙\e\9V'ӽy^z3bn;46JT7rʸXf?*w됼1%pg}a8kVs Vs?dx}$w猡;$\uuwYa]%|6Kr0qYeyBܜ8_D[Y #^lPfF)N.oS(3Lw1nvN3)ݡб]g[d w&R=2M2ݭrEQA̠!y!dG0TVav$rZvVnjee:F$N qH]&ͩSqwp?o8:tܱ;'}?}$-9F 1vȽCU wʨ2٦n7nNswEeN*ܳͩ%Ep #r'tLE&d'V7S@"wp(*QsrCLyT&3S/1PY#!5b;=l`a{ON={w|ThkٓG1l^ςE"9maer/khoduVoϕ֞}`7j+ӥ;]G^9]Gk sfߔ΂M2@vU /FC/ǭwe|0\ b7ge ܭU ܜz}tK׶>Ǭ f;v;^B\b?n 9PZq1>:_0(}e{q@;FyqF6 ܆NoL渏\jDCΝI"t/jALӎ%62i[ep'cY?9 OUӢ2cnsHZf8LT>&O;S⴨L渗ivΞ8 pzܳ:HNw ܶqkh񠌭ԸtEqWZeb} S(.N2mn8ێKvCvL.~7mH7ߑہwwm2|w*`Bv?Du-ߢ]6XR{#2%Л˭ʶ ރ~zЦpR4v|c?ߞp^(|\w\ s5`Qz R;yG0ק^GڨJRI+@k j?T ڿ?qGᩉ:8<7ӊp;b2[3txUѻ[Zn]+%w:/+޵Qkr7=I{܇sQw(T\p L*LCN>lLRs_*%Kq7h.]yb{UWdq?OSq%qmU2TRݞ5-S-x'pr* gU)n#c$};{K>8H禆{ˏ2nhqby\^N p܇o7͸_YnC Q'b2DžAyR30#=phh@ǝmB$ n^̆T7I)kWLm1xZܚQ^vJ<琲"H1)>{0]__JοM5cR#c+ORWn;_++Ð{!\3Zyx?킜s{:u_OowA7-ߨB[[3b`oъe fzr!BsiƽxadqQWtܷ0gZ!NŌn`*nDT>jo^?bYIE;^w>HPC蠹w_\*dnŠw?>xPSMؘ2wϷ)+Ì; IgڎTw ᬥc1a;Y(e}Cju8*WPܒ*^GѢsYD.pL;TFHWYN\WV7:;j}Gk$y&eNhUS.f'ٛվXLs<@}`{[%$Y{GI)eoV22t‹Â3 \dpsk+GK4-+c\WC"waJR!w_ Sew&"񖛙aLSMv WVL%s/n*@jvJ^#@ 5Ew"Ì ?C2N\NG^ #*c)D)~2STiHFXiv7L%;ɝ><MpW]ᎻA]߅Jp = GU 1et-qc~BDk[z q ]e 5ݩv8ڐGRk[*t{'b2y4wIϸ?d>N3r)Qȯq_=t8fฏFL6.rO=5Fdb؝Nx"DLc*XpNq.v{/22.a;'!szԪ4H Hͧ)~apƬB|^,ՇI!{pwddڻά̲gq{]/qIkw2t5qvߐhn璌+*#2<ฯ]Ϋ9Q9,*ST4fC0)Jr#K"!e/D|Q; D%sp_'2`.jǺI CH[{T1߹#3@{d"G;iILr8/ogRuʸo$+Pݹ\<ݩp؁( wnJхZr*o3oq9lr1oL}Vwq[<02NL5loE*w{ 3a #9>j;鸗q'sWLͩvfF`6$eazX%u={w7^,Zק=vQ{p'K=;!J7Ws wdew6ǽߞv{>r;*+!nFS$e8D&I 6IqPp'qݢ2p?Zn;[eS;=r,RXO_Vm'R;UNH}#%¸]˫d\pgQv+l_҆ԈLs4Ďiw|*k->R\뺀p;oEyL\Dw |ұP+1nu븠P a1kGP!LUd1@2-#n+cn6i!W)pg;;Mz].n:Gvߝzq{2ڜS\\師.t' GD܉oᮠ zCY4jͩq'k.vqq, "{塪q{w.+.fyB* B]w{{mp?) +C<* cNN_:c~#ʻH1 p͐q_+aGe0ICO_JTn+evi;9sNU7!TY2rQxʤ8~e~c(#:U;FH20D$ME J&\Ją  s…?Z{9sΩͲHqsq:U9#FxFp$Yn.,ܓAy)Ijqr 0q`{;'ːG9cN;;Fv[3\j{3uq`p(NwaC[dlb0tvkۃ}zls1^޲~?rZ\Z"+/YnL홵}*$%ydRfKWS1dN? o,ΒBm#wj7hةeh.;ݍa9OۿLR%.9Ev.qυOKz ia|GsM;MGv'Jw2q#}?uN};$pԝ4W6ۊ~G_!pQq4zc 'I{û[fsva{{q0)O3dw\ThQunTQlдn^]sove wf q"%[r"rgrm9nqw=U1CT9eQ=no\0zC.e[4w7io0$`{w-Rj;*땚ݓ 3uSeTܧw;2m)۩/}c>c{è*dR_$RNϙb靖Sv?5ՙΏtCLKoGsxa6m7M'P T*tMx͌o/V71çUieml\*ԅ1;J%w]a?!ZCrsLN[d+E}b%-%5Z=2|5ޒ#v5Imv>5Q_ҦTdEh˙#55"I6JLm2,ar (C}O^E<.s@o3 ~ŻBǼgoh;@mXodq?٦0}}t[Rls{6tOU+_lawKq>ʀ$kQΟ[eY-D}vr%/"G;hqxK('TO1Ɓ32Md`=2vl7:^^Ey |(ŝSaT>)brK_BO|2~qWT43]2E G]s2ᢚUz{vf)|Ob9u ;2Qq\cԲ));nmn2> p/5*]zfSmC*Ri2Dd?+ '\߈vۛ2?m$b%T*;!5頶G.w^R;ZYVJڐ*k{tS`gJn{Ri9 nj+C^a' z[f)wxرW!2rp?}u|<rp;1:BCˎm&SL2c@{&2=?K 7q? 92*2q ~%;Jg@I]2. qݻ/0 +4_r~W:#=lHK^sY' ۲vļ3v6|^Cv|(Yl$+1k+yfn(Qv`q{Bng%HW^љ9ar/t_8 %#GWW_{;L*jY<~#ކnJ=#|Z6MAhS{?P_ 6%wtLƻD ߞY3|FuܩOKq7n$(d{!!U9Rw$wN;uU!휾7U3R;` &v5wGf,wP)cLG" vyܱ` {&``Vy+r{5늻IBheE 9u0y9l9p{ܛ,H[v98uM^Y '=AҰDqqW(ʘ.t,N}?F9msj-rws##n2]C6^[ďBخSk-eeJ9^O*nKfn_fKy?1uOrqc{۽R2hK&1KlKF3 kŃd!55ߓ;^/ [S唩O:u\9׿S@m3]/0G{hXPܽ7'kz=:|Twx`Cewuny<˧3Kp?pECw Ryhrd w;AċmD<<wR%J*=gۛ.vІT`hp9e]^Q!o3{Q i(GQHKo:nT!*`ѝN;FVnEIc+ls{y_$wCo! Vp i,q;$*v d8CT1RЮfӨq*;}[=,+}˘n^JWJqg͍SYJ)jh.7 /\eNM,6ɈZiZe%(+PKq_6'< _Hb51GB;q߆l2"`kSvMR'N9N~Qi&oXb)Pm}Ί>SlOh(=鸼:uB9 ߔW^njuB^ 0)8a2c#꿺^+m#S7;aO=2w6N}pQ7`A;['Vx/\5)E $%p7%Ux0] l$jġMM,4l(W=p{BjW%ͽd{Tܟsɝ Yܹ:{7Mk ooa2k;TL]{ƚ>J}bbRoV,%U} X/_xWPܿLeJ-j):.kE,fcD]Nd-2OlW%CC}kxH\NXnLl_rlg ]r2jQr{^BT1u?ÔW^Nm_#G/ T ?' qN5w|te!pAcwDmet_\.js51}eN}L*x9;"[n}m5S >w/I=G[6QqU‰frceUܣ Fnbd4;gD]SX^lG\f7VFHdw73`3c@wYtwku><8A{z"}h'U=sjϜvNaXGik4X(#]v!ы4 xCswoNŰM0.&hq7TԵyۥ[L< p?uچcNmW\ӆ9xdhjw6X{܃= lGp КSt.M@rO21=LNnv F$dکݰf(,]vpdzpۉR[(=!NYJm'&Cz;&wLvIpWk+C[jx]W^^q{%G_ޣhn'o+ ]~+}=1Ƨt\7N+O?FKP=ra'|Hn7݌4GUFKRCdsR ,ҹ}y8/0}oMG`㥆oM0}*n1Uڐ.]JܐC]Юv}216li*P튀jjkj|qyuKvȸ̞`+üSKW!;C޺wD.fԁ\+gW@}G A|?6zh8HؖO?>4`:_i(qPx(Paqo_]ɴ/qv)̭z,Uh5*#qҺ"wz25P+,Rhթ=va{lj >R.N55WyxnȒQ$݉vTSg$Fn_wngsԉ-v;RWC4T)ftY>{mNɽ .t;>:9Mz2&Z9?3 ;]ŻlD)S([#u;IArgN xojH^.ېcɘ]o uNEr^h`ͮs*YePk*5׳ـ V"ggvbos-,nW&¶6v5\ %eڐىIFvߐ9ێ4@&] jovq{*+Y5}uHKi2rv>֕Y+W']D6kwIEq =O?U@0K:^AvL@6wXeΈTn| 3ǽ iw3g  ;%E2xK=>主ǝ<']v];*yd#E^^R]SSƓ (3+ְ3Ս2j3L3 mlej;W^ q`-gESnKqB';v q<2br]1i& ?v#w(W.LPܗ\nL01UFA(cutw/SpqFPݜ(sܲXXU\52b42 t/ ]F:#~|Xl,CydN}AڗJv<RA2O%|"jʕ,79⚃=z1 m_mvi!U a]KᏮ#*^ڍ*dKbdnZ$<2PYhG&$+1d|Prd.j7hOKF:u^Gn؞W^N!3| tvP;Έz˓gupǫv `kxw22Iܹ91(ˏ||㍏N ~t5 * xz)*6[v L 'c2*id9DF_zpP䤬2.v+ؐlڝqɅܮ$yK*VRTcnKPS0L߶GP;!{w$tsjB&}sܥcq{ܘ7V@61(9d}r92ܒ*ZQ ۛu0y{^NhG`]2yJ^'KCba:=.tq J% ;<6Ucw:Aܟ7ŝ$#}N:sl b\ x;HUQ+R2}yd w).}!z^?.;;O0⊻c{&s1hoعSurr;Sq4=GfΞAm󢗓92dng븪E.X'zş9$Sjm=XUV3ܭғu.ŝhnJqB:c*S!fw}>a\ ]}Wbx5ef>4("v5SAI8>4=;oF=:i=S ݞ]#;G0 }xE?VksQ$"R[Qi(?2V䌥K/~mڮ}N"1;\גm ]r;a;)ٿkmڥ1dux!ŝEmqYrWIZIya,[M _IiNH` pG&oMu'Soŵ|0a޹sݎ7`Gas*]= {;1L Q%.cE&^+5:s% (a-v tWp:3pQYew#fvxl *:bR:wh@IH봐Y-1䢨Dh$(-Մ8LqjTyTa{KzA;{)CXLM̃Rn{Ia8AlW%> Y2\ލص55Oˏ/z>araSFz{ѹ)&͆Pg= 2HQqOSeq/ڛPIqV;S=sܗ tKu0xJqɡM[69ܮET%K| ҵ5Zջ5l;B7Sn;db9ă3p^_Te{9sϙ@ FMeAŽsrvGQq+]鏡Ev2}L܎JZ{X9Wtɀ/[ǯrPʬjȠ"CvxߓJjW +(jϸݪY%kO*j5[8.gQkǝ];ooX{^`^ 'tcNސܷMsWz *W; qjPkNͮX:y~@NހiKKCwfvr^NL7pɏOYkT`(d)9>HŽAS&qrgge{[S垵O]ް ir "e6Do;HL^߂#l露]xN;Kt[2ާfU"sR^_ Wb'lOu{RjVЇ7O*+s9 -~"MЎ# /ߎٵ%ճ۩=HR,#5 bxSjI12۳ D UP{ը}S77TdthJi؆efST&-Vc2!팊Q(6DI0*/7H чCc0&Db}7!?µ|OwgzCs{}ΜN+3˵7mWo wڻ/zk$~'w41H˰CpTRg=)p4]_g }fqreee|/} ,[}kq&L[攑Y(9.] Ovʐ^n@]UXnwndiQ{.Ґ<^*Cj=?{dr x'RKr4Qڤr&̮lg5W'J(rtVkuwĹݪ8Hp<)7@]!NlXe({5Pv9e9e2DqG{ڿ.va&_ËO+CtJqwdw]bݭwlC**28Ev/H]-4QS[=;xKl!QTuFvL6 `;隬F/Y="e/jO6K`w[5v=SdbW,Zc†=bk +C;]Rݞ|GZimעNjOD'Sie~r_#Gc m;c3`@ZA4rJS[.۱5_x$ (++3ys;}3fYAClwjeIJxjSyK.ŌIvȖ$fv gMN`Tv]{8.ۘN 接 QvL^ m2w_~q#bn*YqŊS;:fݹڗNymN<r1X vy22˨2XUB Ƅ%f=wfcݕ*c螀{>ҎT1.Jv/ +y=;ΫwĄn'[\2 v2liB4TvܼhP V3,R}a*{g'zОi'!l΢0Ӕfclmbv,A,h"uMmv^zxv^UTyd0Eki(].L]kO=]EwjZi=@4%w aQ6 Xm_%ca?$ t#Ų\mjaf^9u+WP`3ORw_aa!ǟ* 삫2{Mq̐) Vq⮾Q ?ޜjabw!(;-Il]@VHsi8n1-?tI6FZmqFO9mH-##=ـ xC9).lQ&^ql7ng=z՟kۃMS 9ɽD}\MCjqD{SLmBٜ2FIWHI se ݰ}Ԇc ٝ2ʠ Og䗎!wQdtLY"c{uc;j;-2qAjvyX+A.$mRqdeރ!EnςW9NpN {ܚ:h|RFtՎ2jgTT!C`8+7pR#!cnkw\7v6+Iy[VZϣDuYnz޻A/%#zB<hp3{}Zݍv-ph`nI7gnaxc7!^1>il*ikj7NԽLq]L]N0#ƈW*k}/ՆT!MR'Uۨ\;JkN*^o{#&{];JWGI}qT5w]I42ˊ<`7o ٕU:2=ޖ =}s]qf9U^;EYent2Q.bǪ,BԨTE)I0 :P;4+^\⑉#1"w%{#wNQ#&hVp%p 2kPسO~WOq[q/mKqwv/]sZH\nuw;L)ߪ"Y;2]2ʕq#c~=ޱ-sgq].~|.x;/x؆ԥT?weȈݱm&_U/kY֙rބ - n,_&U|}Cl{*qrdBlG7S1{Kool ʬ[ɬc*XXl})vK}{^Ibad" mI&p :[p;c ^̎V)!vS=za;-UK;؍)剃;1LU;`H/L7Hfyè'ptZEvL"%žAe33`fnVɅ~$q;dwvNu9C7ǝS;wdgFZU5 v2Nzv|9[{ĝbwYqù=+l/jC까 0fA1{%bŃE긯vudx^(s.w;2q %S{btѽ}2V%qP/Z .Uhv%A*3KViZe;u>n\N)ܞS{(SV)õ$t7glH+hs{*jGu ^[Vf(IZ%;daᯉ^ŸIk+9ץs\סU \) c{NEFl}lCgc{#Se]rjgd)`ǁw(lmG&v_$vi:k|M;Jklyo%+VZo|s']E͝ǵS_*4nlĉR:J!iگ2/ Vx"sP$g'W%ӷ,Dy$FCwgi2d>8HJ7>9LxL>h@틁γ(5E5] g olBIlez{vS Aޜ<6yQ.2ɐ(v-<ԗl֮qQ3;מ7Lz9k9Ӟ\_nnv[a֥N7bNVDq_Kp"m'qܙ~V8ݵ"·ۃ=Z; (YV h\9P:w!;3nO4c#Q\#_vCْW+LDe;\#WhdT+U#mooP]7^o{kvڳDEʩQ_ JmLw⛙>;;_<7m{j<45va;uH pvDm/a cJY/ֶ,:/ 1SVZϡ_][FnV+mfKv7jm1|D)4; w.᜹L˔dOU$y>yvf1:EӼ5ttW-T ݹNN |wrz{b;SehϚf tWi4R3xz"!oh4uJ:Yʻ6&8cLPTSarTݱ驍PgoWG 'Ix92 }:c>Kۣo{#Trv,ٙU6;4EITہ\:%wvL1l^=s)29e u-߰C:*1\rVL'`b|cowAFa >\]c>:u1(|Q~ypup/ŀtZ`,vE^#}C2@{bݴu뿄 wd;Βl {K깘}txqVV-ǀx]kWz.U5Y\FO+ZVRо=/sc)c[է.34EUgpEZ~Ա82jvLxTq/s##n%]j{$r;gYu.ʤKQlg vƸs>x\+ Ou ;BgIɝÃBC ^gT"= pN[͕ŕP"o,ܻI2E9#Ωq0mt`L}ѳѣgV1-Շ, 3:2)6fys{2AFhah^K'*f ]ihCjl7L%v K0a{a e=Zsߟ>}zxUXe65 ש7kMBw\0tne9575-{n^Q=2:}0,؝p Ű,^n@QQ^LO96{l!p4q߬qC*L6{T\ =OŶc|׾%gv &+ر@ D&)S:r.^Trs"W[(߅Iele*/b?sC;}>c#3E92l*TEWDvjGv1;JڐφvyGZimzsxI݉=ݡVZϩ/]>xﱝ~w! W=zag`1ǝxMζt(%2@F9pl렺wrF6wL5_ǽ+Q*tNb&/%=O&5v]ht~Q 8eҐZ2e05vR#t"bLCn3$% 4v``5xP>2zc24}^]Vhi'ޕھ[{ }U=RgȞv<>\$I /t[vjZd !հ]&)lGZсa syxYJx#\rS=m[#ݱڃ4^&O-|I]cn3ǝKL']C'ctSG;;:cxeNh=W兡͝2 )ν[)6xPʨT}ԭ22ʸ3A eh{ ðX.l-P>;\yZCj%nvYC*GM.VTqOkDv.!ͧ6z~SF0;0]YRܗ %J늠vBrGtc ATswnwNVFD 9x}: .fHI9_?5`Nn*4HF@wg1NwhGqanL#6_ dMhKqDe zEw!n خVK*Q;j-S\ùXNXUvL0pMLLp1DvGxd ~^K74`v .\uNi=pQJR|~ Xu3"Sl_F7[jmP尅;Xeb]--$Cn布NP? g*ͩBw{9uxB/]k>*YfvĴwarpՇ =/ qNwX;%x<6Ad` ۓv ۅa"`lXDj'ńD]EP2y)Muƺ"CYdꜱ$w>4X7Y;!Y݌q& iRܯP`g{l܎5BU>qU,o~Uh=܇ V'\rו[eBjGm)s:M5k0ɠN ]92vȨCe2؎!ݱn̨QaM)%XH+mZ7= L+Z|W>򑏘_2]\3]^9u+gMrٿSXULžւ.tssW0c}__Y${ v)3& ^uqSrKFf ͩT?];]Owe`j!z8. ={fj׻ŝp$ƈ}2wzdc+ K.Ofib{? Dv2;H8ް}껸ao侾Ax|OѾ9^\^2Y PMi28l\1p"Cpw=0093vNJfx$vsgsHq%3ݞ2]#*X ;-bw+r=2ON'su ͠jVK!Cl~te$4.d`E{eY"g%E&rj9Ij_8HmN%k K.n<,d0tbVE@R,IZ'ZITdD形vdlk>#;]!R,JSiG0>A 3aDwK `}͙y]-(w{7JkAYP5r+y6 4},n9L0A$SwIUFr*iN,gx=ﹱ)Bu *BfđLIFOɬ؀TލR%'ZmUpK~q9HKLqS+;;KO"wܧUԩFpww4oa"?xoPxyiN3RC{ST Uy9eXhSisީbvj:Itc۳,B;]+Xޮ p9lg{>#*h# u;u곴i=Q&/cȽB2# Tz^@%(-2LdisV}>Äp{0h%3{ [-QꐚUzh)<{SZd;[-hsUu{n_wֶuO2i7}o!;vkҀwՍ3_lD_! `w\tA]U`v`hs;}Ó3C8+wrXG'b'i|kjD9pűiL܅"SdNOlnwjUáZk)Cz2pTa1D<0 cZn;iZ/c]c&޼ԋ!_{cn-y܋NNSq=&Qw_Fv'خ[RMpW;,g|C^>i*lo+#N'>Yܹv Gryk[;}yS=mXI]siiø:nq J-Z{;*%e2 rQZ$DQ0(5̦YTB4 &>4Q9|ιmWjYuN6[-;Gwdڿ[讙݃ݏ O(Â3.29R.QqPC,bxZ,ZNPWF +u=LY(EHq hamMvޔS M w4^'gt,)=mӁ"r2r߄A_ KF;w2Nu2eU~I*_wFIq=hNwzeQq`}5N &RcRee`G0YIvz{\ ~CQW-J;Q wϢǽ= ڜܱ*]Im2xH!u>@]u{ -jELRMoW.bxF>^,Ώηwӛ[)9 vԜjSH_pKq5mD&.jpKqrQn2Hl},t4TTnSb}YKeZY9إZ{XsX{qOjAn'fԜNjbwG(U%n.ս;Ƚw"qE8ljwϑ`w :_8_CHA:}2q߁Tc]0r{(C]U72E,(&7ZT rv\ߐMgl޿ykh7l%EjGh׭(W{+;1$vX d*Tw*/f{ ؍S=4R^^=>(zYo=we߁ȝ 7rٳ𸇑\9a;Npޤ)L-EkUw*.~{g2*Qtc*w =#`' RQ}]]lvݩd?qQeYBr:137FcH1Kuא$X,J fj*c Z:VK*=K{ r{4ٮHmo3hwݠ/Qvj=,BwOftr{ӯI*S7TqOukzw͉o} (1lWi2!'F3=W~tm)zӧqһƭc9T}e|qeZO퓠Cww!{Mǫj0S /`zu֜j0r %;8W,~i4w}} }<ʴZeͩTAJpw'ŃL)P{VSن;֜TZ۱t yۙ+lLō9ۥaUcnkSi]s2Ɍ>s˖D/x^r[eځވT $za;`ƦV.a[/8w>$w@?; 읧PvewyW(ck'IfR6l:[;ͯwaa3ӚJ߿n=T+lwٹxh*PwZoO2+1fl"%#_ yǔT#fF~dxLc/WKq,6MBuLXǁ36=xjM@ol1ܟq`'cu~T?vu].kGFn~Ĭ,+U92inl'{c$p'.Ug[!p+=vlNU*$ iXM{{f7eIa.+VArwr_KnjNm2$vsL˄xhCTp[JGA8JʁS0KF8䕑GFSхʥ0W 99.:J^ȿ^>"p- FqSd!YmxZ>K`Gv]8i?]9-V7(@{nSffteqjIƱv6H5BWꎨ#J ,2Ah{ٵiR&}˭BdEߝ{R3\b#nݓVO6QSXd;Yݿt ٝ哙9W^dkn:րY p⮘G|>&cp2^^_:wS܇&?Lɽa渻Q;olC92 qiI=p'{g3=vHڱ^bZi+ Z`ݱkyՖ _'7 ٹh4̯rnҵɝ\n(v [elJ!m^\`s2T+ 2T r2Lfx&w,h9N[$$.]r.X|87^x;n@q'ӐaV渻QFRwgO:O|!]nmb; 8TK`@w,1Op3!i qtM"nn~jpOk80X- t5vaxѱ +?{n7_No;%-۳6j)c{d|B."E7>ȰVjG15Cstjoס+PI2=1'.uѧ<:Sg"0F}C6=wW 0e;w))([ DtԟNgI7 -Tq*˛S}rjvDޙJ%x)wd昇@IPq䥌 2K w+HKOоTJvܹ㗤s.Evn;ނ"- XW^}5@wb>>(sw֘ [S㞟p}T&,w .nYF;=!O(v)u UݩrNlFe3h-WF%nj܍أ4w3ș7P܍unGIqW*ɽV疘ͤ#̨?!5lgtѝ/g^?;~uOY.3xQr^æʗ[偶¡? 6/aTéHq!\mP~ŊDwp;u^('~ Fk?xdq{:މ``Ԓf-uvZՏJjcڱwNs,~3{LttMfVOI%?;uw͓OO2Op;2_e+݅rݩ;Tb-Y뤸-Qyr3z.x>xls" z99udVݲʄ9wgN_KPd)34.jwnݰR[lTB˹=3 ]2tKg?O(ۋ%C+= >}d_zkݝݯ>^qƹޞoG(nv!2].q1,{)y]%n3'j6-+#lY;$ޝ)3ix*]LLvvJ~:ۢ6z}jw`[{殉wTv]zF;w;wl%~\զjja4tO܍,LTZeSE=?Xq;vlSVRe!Bwdgg~}}/,vr;7 3(K,2KTGjR#k^he2,/QK0G0=Hzosٮ7B%{R3w&TR^wO48_ /42NEafT݃|HDn {kV,`{!88ZQ;KvAuRQ[M{)C219?#KpM twʁܳlMdL&n%tR]0 }HԮUk6:QMl/[ZTC*dD_@m'oގzri#w TAKqS&tG#@qb~up2p_`= 3ea +8NJ{q&,#ѩ"w-vvflzjK<& #jnѪ͠H-MJ wj)`v&RW ԥ۳wԌ~ , dQ0;} J4ὖeCqOm,/ϗ;nҏZe <4ɬX}:㎂sgPQaFS.u+n27 Nm?\gwOtlUva{ b;Q[olb3{]O l',c|+kC-A9ٝ X? V8߀E;[Sq7̏O}˼8"ͩ*[`hVe EEΘm;oc$x;Z{.t#t\.n*<48U% HjYKvɠ@y!Sm?Nlg?yW"}>~丏eۇwpwfWTYeL,U͇Ios.\tg܉*SHzaadja!q)Uۖ[SCNKS&w^w qw=O0Ƚ>c6{Jq=Tځ]#Su^x^x@w)n`>:r^vw0eALE-0{:8Jw;?8 e82ݬ8%ArGԊ_sl^wa6O5*v`m Ցva`#{c,.Yۅc JtJ-n=[HMt[BP܉ha.=ݷ"q9%`&r;U 7UBIr qcŽEqni(L*ޔas*0@tʘܮM42er; ZR0:w\@x|.UTC*>Q>n. LTm73LD,q{'URem7ݗU,Hr%;;P_|xepݱ~H^;wL5ŝA {\~der/CJpBKq"4:7As3+Vܱhq_eզ{TgwA;7gj&o07wӳAF;WGơ=x1qRܙ "nJVJ=1{'t4a}@Q>Bxp{-쓞#QLx*Md`k; UzR,+lM-;h,Y$T 8B/mwnMvk~g#r?K*ǃwckk#wH#Cex }Aw)z=#sKobeWmzHU*䱐 vY.[5.iU?*M]|~;Yg412 Naiz0hj>.@q*TWFoj2WЏ:2$Jjך6pqxF92.CPn|j V d(k ۃZck>~|.=vX4Tr;PACj@n6[Ni֛Ȅw[e^ejv=4'{R34O*[1U&yeN~F;4vW{Qa;T-YnzpQs鞙0v|79iBu.Y2ܪ@q߆yjNsq7rP0=t˄tZMW;_v;P<lHݙ3bcPXYsd8!^uY➲T/R; =] v EGjX$wtڵ+/9nݏWNDT2P0`Bc ye~bWb8Qs*!NwܡCqkA*}evSJ2 ,A̜+(u*c6w `>#zͲϣEװ3T&Xe α=Jw8TN(h=-948V%zSXe0TMсe:Z;7v*G.Gvl L.x'wa);av$lDuvr]"ݝ tܳ]Zl92%YdPrlcMD0ji̭vw5"u#vԮUA+wWu NDqOj&S-3I|{RIzKs]X5U;S›PUܷ}.Q޷d!}hVE3F[YfLϷ79O/w,Ktoy KD^u2q^A{ON k%7߱a ,c v=g$woEƩcj"{_fdZMl/)풻fn⮡KnT2;v"nA2OM{+?rK(p+᪠];ѝ5ZNa8Tr{j; VU~~EP-Mqi*qL }283Z^wU$cwv>V?QZDtq|Y tobw*twY)8>ۻ=a$ԡFKcT;cx+u,&je8$j sQZu7'p?֍?ڍO~ݭ21gcBΟ@/̧i9jXfp*en䑡.orcE6~lmG Qb;=2 lھ&>-]WW;/ ]̔kBr_|>U5&S>dsy ?;r h A6w <;ܮQ@j)K]D nZMe"nw4Tѳ霕%E$㎅" vb{:v$Nn7jpv#3j[o}=?YϾJtzQq~W [ xLaD^蛦ϋ߻.`*>Lp@1 Hqg;љ2۹ctd`@sTyܛ |o1 V6=OУs/p66)-ƯnQ wxulәfk@* Qd/wV;-;.v>17Wrw۩ g{Heyޙ}{!]~zBq_~ sRUlj$Y=2(QrS%w<=$jAF&[o!߬'eyIRe0{RIݮ-_? Sk ݑ~NDwGwUTݷDnwZefr.3߅fw F򉺛a7Tn=╯qŝVSE~ɚS wr{)Ž'Bve[.VlHmgCjfLoe6Gޚp+-x0xw bdDG:R;&0Y{ru4Wx%ZeV%*(G[ +BLZ!i)8Hz/A2P/nk{Dle*~w "w#@hrjq{*vܭƧ1A3E_)Z*ϰۄw 4i&5E[y]. +n7 +9C\IKt>:p~: W+ʐ1u)d^2)xAg5 g-usHM;,+ؕi{ ۾f W6G;vq;2Xu {mZ f-,v=܎+vH#S=SrhGGFvG;qxbʒ?EJHB"ܓvO*}G>1NHs{.xGG5ݿ稺iG]Htwv滿az";0=w"  )`c ՜ r'y`&yEf=V۩j*" g-qJ;|2q⬥9>}2Z"y'dLe9[~/䑙VRpwի_t;ɝY2#; T?ܮQCB[x\/ڼTye/cz*]w;Jp܃TyQ)qVLL'$w(\vMI v(0ވ݇J] -X[2jkr*2cʨq9~!+9z#[ۤ%;I#F 5 ng7*M.K yqn~ ٌؑA~;ɷ{ZRgjP$;y|{Xl܃qQ L2X| خlDiZmʒcBO_X>}֒GY*#u'VXO%޹3QFNדM '5C+$I%u;w?O>I`;wox)eatWL(+bٳc=J\N}֮]K٫#dD~i.z}\qW3ZC{ uwZ)nY4 *9hK 9tˑ^DK؞oNlڋL2r\w[-]129GD13p7]MI׮uVI4};e'i]N+Iy VpN;=NŖW 2k%w~ `.]2M noXH;?lPr:UY62hw.jՐKt(Ǝ՝}:?<'ZJޙKu00_=?2O#$uD\8H캀&`W:v\97ݽY5Bl[!辜;?p,6Br⾪nFH5^}&(M|Z>ݭ\vaQ*nNHu}j7.E@2xb95Yw ęuv!OF'H-] we$>/35}֮}uLwfkN;7u==o-=l¡ޅ 7,ٿtG7ͩLNepr*L Q{(+6VYk휵DwLF@m9 G0Z۱]n.]Y2ߥ;mRA92.O/oOصw+ ܡ_"jK)}Tjȷ( ݙq>d.#$Ux| 1Kq7 /RRszSSܹ@ګ$zʜv Nό ؒ)βwi͚҃Io]{fhaYoq vvNѮn=@rA`MZ~8GS/ͥzhvO{|^!nȐUݹOq'f/M>u#S)˨۾cW;dV5)ݱ]ܮD zQh11kiCg#Z;.{|̒h+O&I ;DqOjfU'mc/Of;kOݱs 3wZ=>UGwyY=y؟#_;Yl]{[EsFwOl'hSo>WqxPqŝ&SoIR.N]Ue 4UC*0>IJ/@s*4+UnF쉎TQ#s[;dlIR;/*ϾGܯSo7{HD\''=OnC@Gd+ΦaIQ;0t8ɂܥKqO]V]qG[ P7LF^7`){XbwMMؖٻ3D6X{ysW&ͩcjWv:ysd4k1b"s{-w}SR_9=ݠvPE> ##&.M9#< uW}jH;0ݍ<|>ELIͩ)F/(ʳ,a;vsƿsm^Ϯ2lj=l;pĨryq a GQeɦXvc,oCRoCt2p`=-V wWAtώAݖ^UxG# Z^D/&[8HP<\qw^ci#bq'mјLlwLXUȽ:|֒[ټR;G-l.?{k-lIQ傖TK؄j Hrܓ%D{O*w.cp㼪_"كzhg}TF,R;Qx;Bwcvzf uSCcp7{=2z{o17 e=(:+]q0uw)-U&Cl=Ba d,㇡=[,sn%v`;VϺMik\=N^-Qvdaqws{D혔$qg2ܯ_}ykbRك}+yox.NG! T!k˗ |Sybg.t-nŕRܹ:z*tv;+2Z?XiK3nvi<}H޾@ xERR)c#dv=`Wdj4H>$3u[Bw])npw;KXsA3l7&.l.PwbwMHv>ᨥh@Rd]2{u\$JYVq''VJ*zS{X˗΢Ԯ>88r ].t7vW{fBtAxezHHjT%?TS-k 6V4n"?t? R{} q{%GͩYD5u0 >N1jz;%cn˱g{o N-"|EoI<ȝ1$v,Fv:Ea>8OM^+)_~`zݮVT~F"wS OW %Q + SUFbQqo{7[ʨ@6F0RAX>`o.bCk7eID;۽9.Ž:Uf)2n`7ݜ2cEuP(FT)S[{] "L {9'1H}NdGMC"cՁ} g -;.؎Zg|^Nl'Kow7OCeI5 ؛.g; 1ӬՏg ۳#3*or)Q;Ԯ}Ӓ&6`;m `J֯ۓ!I%%̲NgLg~STGvfp{UDہG [ ݷM%v7]Bw;.>`ݽ`&/oN%+]a3MuG)X<T՜zRe4)CrWǸ9kN7ƧJdƥ%`™Nڙh(o.jqV; v|lMQʥvro܊o/Knn"+])XTqNα}qnm}gHפ*MQvgp"A;2"Fa!)ͻy?G!ssc*wA<咁b;RG"TUoI}j;24 >ݮH=,/Uv#r?F?lwT󶏱ȨG{Џخ~>xxU/ZW}uc. {'f&ɐI%u#r6G-ws 3sBnlXP]s'%t'p?`;]TwTjt /=w{hB4 %骫l 3?xIL)_Kq&Zeͩq܎ɩ@qS#Vݱ]ab{:N=h$w,mĵ+ՏYDO]QZ*;ܙ'ܛޏK΍e.rjWQ;Ak\kت_W=Hh}>Sdv.5:Ro;Cr?u_)K&svw3dq v LO{2*LJnh/zT\AA[:ͩ͛|;C>2 ,p;-=խRqL!$6tKtPW1t| Br! pϏ2ha1D[;ңdя0ekm L_x5 g;R cPJ]׊ҾpggηR;%wv\oxڞ{;(J٣vA밎;nN#32V*LU?j`m/[zRB;wX܂w#vgI\<5/I*[,2QۓJrd_Z-EvTu=Ž؎2ѽn?-t(ve4I:Oz_Ao8ngf^Ќ2PܿZ¨I/쾪i'|n/S2rPrw: S!rrŽDäx*1UDl(_N+̝خu{=½mkؼRaSYQ"2(cwwp׮_KץR; 3o'sLqwjY!4!wSU%rwt ;0Ny܅T3fsw;LMf(k6?ڼܱ2xlYc>eEpG6THz}*|Rw%%.C.d93ֆ`0qnoO!5=:30w؆vgem(>7op;v0u 0Hr{p;6dw}2$[ACr{$6g8|2BghDjW'j/"{]2 9r+.wq=Proj%I%u IcjRIOrݡky wo <2oG^ܟU5]br:nTVw!/TӇ81}# %*ֺ'@-d-Oleһu9%ŽѬ2 =ޜ* /c4),R>wʨݹŲL ϭᩞi[cE-wj.b+F@bڱmڥZ <%)q}"_G~>7:Gl%dK%;D.?5 r?;dQKߝ~w4^85}6q/,c¼r1r+セ65s;7އW!Ƹxo˸8ylW w֘,vŖ㾳݌1HaLЖ3= ΀3grPIQ9ƓcWm,#kbd&=T@C&R!\5~4t C{Qٟ#ao@En{R INUjH-b= Dzq.th-,6;dvy͹nU4=[nOI%Q־lKBvjÒ6g5?lKFiqrwn>l-u;Wdu#fy_Xv_/Uu3UEf4#{'[t[ )i*НNwH[yW[^!Sܕ*CVEtPS(qv`#p:Q<2]SrHtPbLyi58]E]vWE{ZzRz_rRڃma:'xm #!{\31^NlY$9u32;q.Gݕ3eL앉f.^޼&pZF{\J@ݰ`$yRܻ2 Qжn:cFYIo3 .T/ MK˄ubvח:vb;!Lo[Lgvv<߻tDXRya{ޙz+;cGE]vw%HmaLJ7v.`{oGfzcpΉ][+~v]#Vs=IsjRGޓNwpSՐ 6;ewzh{W3͝uKr ݻΫ 3Rur . m861D}JvG{sfbuttݹ`wU fփLsvIUCs*by&V+=QF;2)gQ8\q؎G)ݮ-pw_Ԗ L`vlfE,Ѩ_2G_\1Hԏϥ:0Gvtҟ?~inpcvJX`vG4'qaaD:Jt?$ٗJn,n"SPGł;*;S+s;N5Sᖑ>s+dV3gr3w+TA47O><WUϼ >gɩSҎBTؖ>{2ud|H>O1DLN>QKs7OCf7v{l;oZ  \48aKpG.b0G6Aa$oq=SơύQ,$hx2F}Z |'lg3RQK2LjHf6m + KrꮷCѩk$TRI%u ׻?\C{MM[<\.OG®.g99jIOW/u7ann1rtφE+±MWqa9Bw;qX3duqzCU-o]+ZU>9@qwsjNKƢc(jLtȊKMq/ j("}ѨULte!c۹ckՐ0ɀҢw:n<.]z:G^."Ix& ZR]rRBw=U`/`b a>QhLv}G-w5wv2R.%˨=*Vw$j~IN]Wb~=7~Hۥ`IMqEt7K@bܞBq텔nu㽐ؑ2)"Cdh7}=v) 8t[ʋ ǘb3˿ c,B vn[{)bXBww/vykp߫މMk'#K.] Q>Zrk{5mWd;E]3Dovw{魸[MәT'SU+1'vp;f[-O\46RENכ>n.fA:٣BrOQ4̼'Dr3}!7*3 Xwg;oގLWllweԧBeͰ՞.{cWV6n'o]Fǽ*=S܇LFkji_N`WJ2۾e;sE.0=Mpܞ'/a7۱<4*HF؎͢Į= +MvG]_>'[;'$v+XxҎ}VF!&US,XF0w2F9+Q j*W3Ku'Õ&s Q%XHqpW:Pܧ~DQV ܉Tzq }~.T| <ʭ1um/fKl?F;Rg K<>ET2ҩ"<2z+{s%c>(;ޕCqGee!ci!;Z*>kv9۳v22))v`2j(l mbeS8ɶ2e*DqO#}9 ϻVBΧID,s]/:)p]=3ZRe60R9Fwye$cnqv)soQ{!lSYYZ&/]2Ţ=}BwU(+ԞRmGҌTKȞbPʕ'㲻axJw,Wqrο)Gʈ?NŝqmC㊻-4V}XVn^vl\xdnD la[~)Up;V$2JV Sno#_GN3i BTVlky E2T;F{~'[Z+ФJɝlg{Uݙ ^eY֭{]k@([wMɽ웇I\ʙ"o& >~VW7۳E_T9FT_9Q,<;qSKx\Mt<)vJO)]p]ϓR @⏡CnOTЮsRչՓ |㹘ԹUwp.aE?53#f[d0BF]*wYϩ}["$Tho[A*.w&o7I|lojǏ坔ܡ7܍5%cS8{;XF Tu@=!1$Yh[vnǰ%ߟ~.Ŝڵ8Ft1#Lhvݟ&AS{\HU;uߢgLJ7}Jw**=UNL@ݝ2lG#SsqSvv.d* ִQ{%rUE'Fgxhp=vZdBl˸,& |]R{װȎSVv'2zZ ؝ zRyPoO-ýMͩdd{SIp]SY.sg<wx/p>?2@pgގ3Y6Fr7"Qw|o fSoI؎,,N#xc\̢ԩ=lU&Աg/|_Q*Zjf*ހ 1k @ bM[6]vwt߫Q1֎(BNl"Su_ @*)2h(nԞ &%S"oG(n[OT^H{䎫*ݕ|{*TRI%u m퓭>|3+[:X~]#^?sR?6}ΪG;J2bw;TVBAv8UgwGn;N 1e=\e[vNk !W(eVU͞*{ƶ: 37Ze&R{X&<~zv|ގ`=v*=@qWvv6NM=2>`)c)/DvX6߿~|Emw;ӟ`o5[?Jt7vOgخ)lw]qi7W]jevSܕ,CݧƩ22ˬơ$w\6GIXۚ츻oo+=&wDn1bwq7Ed0=Vȷ+qp: }FͩO{wkj(Cޕ#3ʆT=Y2ǩ(#ub`=Erl:e(\ugw N8YtB7j!!Kr飖vFb;ĎxzFԾ-tn8Cdo9zDq0*Qܓe+JM*)JoS ~o~ƃbI3̜|2̈yrNJܩ{}gˬ$Kq.tݙnwD3$o==4DjRj 6pv(4"ؽE !c'f ǖUjNݺiq$w ܎Q?*=۵Jre w\4{ہ튓aYy'(!uq_7"j5Ƶоz{onNJ+;Iao(? ۅ˜vp;nsNySsQdmRjOrS6=u+C;Yf4WfCXUWEydP;N:L:¦ǝz)a3Dcq5EaI׮>NVPnI3)uhsivbgeDj${?ُ}bn5?Und@qǒe^b?z?*Dc;aH{DwIN=]ЮMk_xHjCcxDoGvѸ*ΣOԛԧYqkҜ-Y 'T)__FvgF-}8 :e' ݽK+v$:' rO݂!eu'Bu?HtZeFCIU#8DwrG.ÌUp3g;2ijXt Y;F\:K ql?Fnxk.poAG|.PgLR٫ŨcN %ev; ֝qHD{>#wҜTRI%u m/K|6O|@˂ןo~ 13?dK5vl7҉[:)[fBv$au}U@TѨ t(a&nS.r7xA~F3"ݑ>t<߉{uf3@-\-R`wŝ<(9M{ շdlGr `<D eZ4Ke$Woy,>!+ m)&vm& Cf_lScw~15o keQ; ^;3vzm$N]^@MjN^w38@N g3 plL*%;\v5.WyeNlEL{q;^kN?w.hYySS#W;|b{qc;N:xZR>aROo|-;^{T*KL/ľQy].ؾXEn/Lk8R'rWL clwj~^U0[EjNuC k`-'VwU]uC$*&b+$$h4m@}L0&B" ThJb[ʌh jqHuC-3vS~`µ|ݹ?9kϹ Ok(QD I_<[%yaӥϟ>Hy[ӣǏѢb^/?~_]bV@*!0~aދ$\w \c]3u/!? la;w-^owχwUwdZk`+*ä9~rѩZnFtz$ 3ul|tV؎b8'Cag-'vl?t6jJkwhd |vLR;Elo*"}:sb;+VXVyMq캢a2Z~9e̷r L;yH\Օm%oC>"٥L{ A%e| ^"p;@&;,Vۈs0;$}NMrwU`~}r{mC]x9&϶udiOX|R!; +̀C;2ysb 벎,AI^~c;3D_(xg;?4x2&vv)v;h{{kU0FV1joCuTbHPw$J(QogmPdQ%}9'۩@Shwg/_]tcNrzaKCtWԽeb^.tݷ ݿl.trv 槱:ֺ7aPKih:^[Ef'@t:1w.` ރNǽ{~U!Lyqf= uuẝvc<#n#L/0#(^JOZr;`BLilnHulplWC؎ IY;^S7"75v^SB^g4a#SwR؆Yga;޸vbQ_ `mNݦ&ȯ"J HWT\΢>$IuDBq)w92|N*.\=B34?^"' BpC>we}^noh;2WuÝ+Bz׶S,r$Q>zkQB&{D-h}l]=~,YqA.Ϡ G^^蚩<}_|9wq;7Uq<0Nr>]~/)A9z0#/:F#wT\-ـeu@Ӱ1e_bFEkT+#=DwrfQ$oLdJz tťgtϕ2`橬Q>v혀? rldžO =wά{4<09׫RFY&`D [e~Ǭ c);YCۑ!pT掋SOts[޷B?Қ@ks{+n"r2tSwFeLU*C;3xLȻ6=Coq!lg}΋K9ܒ2y"O~¦룻`b* %d급v<&S5ccz#.vB;=6'b ׎!]w'uLdϼ?֢?\$ޑ(QDn{_ۉXJV%i<ԑ ^򗿐);g驩QA`8良]~\}Jq/?A~HEZ"c!@ ?{H{b&vq'>i;Bwf_MPzw$81ziwmהNE{SUN*Td]L }wl,D~vj ~{'pLq(#"hǀ7jGH晷?kg qcf QA܏ ´; ц rgҝ23D6587muv_НJes,wr)49neSq]2: w ;|w۹nwΖ9)\c057,c vɩBr9НmA;sTETޤ4tzYN%vZۯ&B_vHȽMId2tvН\!of}2{f-n^;fjCe0>v !ESOr=< Kٛך>rE'&{D-H߾«D;2H؏,0:wnvn{5<1::(\w/: C;ѽvک:Y4!Րeb݃vHC*2Mr>܉ԃoNr&4{{eըaVն^/-s]ʸV߂qʰƽZv{&[Oj,Aݮ{37bsUItv"ܮFڹ1`kMU##nOa̡vS*# ށAhCMЪUL.tǠߎūexm .kطRFt34ǫn<vq;QwBSSv Nn@z`sP\rZ Vළ.mGnU\] F3 wqw˝iZW1>SN妏o=do1zWL ǵ\sC*0ץBB;RyXҕM};. "iu7%a \cp@>@xHKl of݊m֭;aْhsR v*N+$hgc͎GG{:rgwƓ;܃*tk'`_kX'J(m+VKVn߾sJ'O>'Gfl/S0~p^]OXص rGa^|_瞞 t!HQ]ip-f8010cT{=owEw ;篝r'w?n_`ZS/a#ǝNp]z˞.zc'!+(S8~#: wine-Ru`kԹ^JAQ;oHJKlHǠHdU9 $iX;2AS Q]dW|Om'w +&=\7G<8qNJ3$w|ps[DgrbvA;&\{> {ANasnA}5:9Ui)y~!+\/ׁKAEjvj)2`mH=UĐNl,t'" ?FjNRZ튬8Cs1ѝܨz|qw:F諫"cl~]ǧnꃢQvh~] +ݒU2"x9[/Feo*v-=QDnYJj/YZtHmWV~KBw`?=Èn+yE;vR|Nz{OWe[MrbA'wsi6{K*sdNPh I{ϳz1ܬ!83~T ߐ*lgLQ;i5?Wr j4Y( vG%43l"MF.;c;2@?99;~EFخ bv ;v:~%{AP ^Qv<82QDn)@&}%fe yas^|N=E|w@c`5^3P!qdѲC全?ZQlr);3Bw;Ze>tw P&wjv#UEK7(wjZvǢvlF8 Oh7{瀸!cnkC@v?5un=ٶTbF̍jԆZ}n673U ۏ u2wsܡŴܡ픪e0@>wTWFFw>ʎcye8"tLhVP޲2Bw@2x Qqwsc{X&(scrh莕oӔ!W' .r4 !q:(2;q;ti L1vh6c#n?btO#b5vR;\;& C@'#]螷̌:i1qݣcrQ6f,\ ­[ VmdPxɱWRڛX $.[>9 $Rf` ۣ2wju*(QD Q3n_Y;mwJ~ף!jaP;KjjSy<=A}O|=~}j4F#v81r{܇1#0ݹAu8k'>we>U 7 9c^tr/7Eއ qǿK*w?40@rJ۵w-s+#SXIiCv{hd8vT>vved.ݼ_嶫ڕOIUq.5Ip;pOÝy Mfhc| \f;']NeDcCy^`2nyƽ-Bu.1+ChcN2 &n4s9ed܁Bw >W˃P &(w)~ ٮ ׮\9Enl!2^q;cF`_\F6w\SQPLQ)jwyv7kH͔^DlE݊kCjۮQ\ٮ'j{TwOn u+-3!k>ٜ(QD V׾+~EнdgGK')$Č=˘^wD6G9EܡJӝr?th}ib2dys/uc辯?@R?͎];)CsݙuG`Ədzu!5{xjU22scx2p,TU.w+nLS!;]^;S%gJ yۯ[)#n}(y^NSܐ*jycxB*R1N梭԰vGۏ nڝڕnݮ;Xlϱb|0'>x-PZmdS NqQ6{)YQ I;%}.d/2\BlX'Z:WǭQyJ^,z(p'#s/ ۮݨt=7nH/QIu l/lc<&Zk +;IƆA9\́=t=!&!rd/v_'\xix uGFv~ Sw%Jh!߬ 3z+VĶѿ(x/@wO< vEw{ |GvOݮOg`ËR, p00#vg 3OYY[q*rM{u:X׿>1jah~~#p߻ l%eҏf;[kHoD2 {$N22p 7p?*22ڥ w-"wQ]vyXU Aox)Xg1jҹ⎎uRߒd|W/S˰0DvWݩ=ſOΩ cunj'e0mVqϓow &Ze25ʹcN.jիD$zL@̸'P:.aݏ*lT谆Lvmg@-~t4k`UnL-dcp _6l]@"4 *qQI$2|@;kbjXۓSh;]g-qFfxծ(u4b`^]Duwݞ;=QDnNl*I 6% v?x NrPw QSS###'w=(ls!H7zق*jfkޑ x>U?rup&,L;3P'O??jt[f^S0UU-pG]_-j4Xtp&f?Tnwʜ%+*# K ,$dx w<0w;X*jw2È OH}jg`⎟Ɗ~ ][lKjwmDŽPn ˽k%Dw_vXrLRΝ5+%en{-؜AVNe'خ3v[Sm21]NLo;l21O;)}'].| wKBwO@7NOWܹŴ~OEqlu`W>q{A;2r&hƪpC%G;eP^W~Ll?s7]JE={X9R{B2vawܵAU6|wq`Xd A?r0ښ 㮨;,wZe:6BR ݦ298)Vqdv\fcr::DeO1~rn!;hmkZ-2gdi?lW:+N |`Ew= ٙV'۰0B3lnW,d'kl!`{B ]7) x&FKF 2ٵ}3a]QwuS|7<75D%Zhzd-YSˣG!0} h*ak\rٝT^sS?[)Z+.L9*JK:+m?U]iy%{q㶯wYݽ<,!9 u2o~M jot*}˱rV;0ied"wYw15˄2tAʵLx>j6W^0Erܕn"y};f)&$rx>s~^묥hkwnH9Gƫq`N;;CXOӽ RVއ)"ZX Kdz&w9'>QMBw pXi-{GEj9UE(54r':H9 4?<.?eR/D'3,#.=s:UuZv9vB; }B26 ˝ۭW9}{8ީq<`Udy۹9lwϺuWc;+d~j{=Lh-q7rӓ,n|op=>U{ߑ(QD޷WW<4r'`kYʺ%v{\FM]S#F]31fbtrP㬙8򭖩*;Y]讝CF~l1df=Պq*Ve1xwrvQרj@\ v䲵򥭌| @vKWv"Ɋֲ24;v9Adxr*S5 =2Fdpwv7l]lkzdv%%OɄ[R ١kdD62]m8_}\wL;"1qbU⣪e s@&s?duVÉTLWdv;sLwHNHߢ*`W]1nq{JTeAKXD?iSeܿ2+Lproy 檰}v* >ê[f?iC>탓0ڧ->mv9yرB,X{lg.2ݺ-3R׸6p8kYL|>P z;ުaގ1nǭX ՜uMҳ1loSM2r}/Mvy6LIT&QDcRP&L;U+xFOL쯪fH02Crwt;媫BF>A1d(!?4:e tߍ )tm*!z|v{Y;M/s8Mݯ]ÇPvq@uX̆06b"tgVF.ݫ 0uj2ʸ ՚|IXƢ2@Žߐ:;0 21D~)vJR7x&nH%m`OxG8ϲo)O?L< aŏmVTǕ1)c nwM}n 3;q/`PKdmNU9_%yaGt~h*on_7$QD%Z8z cGaOӣ'v/6u?8rE83#do#3p?nxpff}2A.060h}MwUc?hcUU[TNtS80cH8ݯᯧ B9!#w}kf^QUdeaDlO֖˝^r2,.f_gXw^u6Tq m<oxv K!s{SV¡'۹UDiu+:pt̎:p0^_8o96x'9A:FS7 v[FT3 j9aqw-V|q7]z'uDk2\=16hy+)19So;T(N7f ó%3v-z :6 ט)TCcBV;GӃ}cvs^aX Ro_zOvc\j`{qZ Z;ۻ 1m'j8:HG`uv7݁$%R3wa;jCr.Nur7+33qr70dN; @k5MuLoczeI1^J=Gj+/gv_D3i?*}g.T@Cv%qنqnU0ӸHǺu\YNf1qFjqPwkyw6,پk Cҧ,ݘlWH+Nuo6ՍG%c?ڦ>Ј=Y24qwx̭o$(QDa(AkcR)-(VJeS)8*k"_kĂfBYlbҘ-4]UɶA>^@q$|K__==30x{O{3_oWfjusfwv8w#&ei5|}V׌-1p׮Pd%L ^6i6t3ȼݿ{vM`w{qԓb{IG3=>_\UULp{*w?vmMCNAԩxY+Ċ!#-0h7vЩ|p2n *NlMF^ ݝMv ZhDžϧSm{Ra:Sʵeor?(1+-;ݹ Ur 'W'm'qWƝNlNn_"k9^y,s.?R{9w(2V?D$3*\' zr_^z Y/3l/™3tε[;ߺv0۫ϜQFFv\'a [_Gim1-lCf7!﴾:K"m`J)Oxgؽ^.t?TWyef/{M ~Q/5<4<#^cr!#{9al ܛ=QD},ۯ5~ߨc6rHD6TٹLgOuW3Q;Fm3+sرcƇ?o?OgѾJb`ϘY9D kIr)m~ŪuK=Dw6n#(STU']ݭ=yGēA[RUlw)اWDJ6%,w; KjrX ;-wwܛKi.|K*]L KU $vN'.31&Xm_9m ÎgdDΡ*h/l.!ӍWdF_h=ffo|r;n稊ur*w܍U aշ"ΩSo1pkjoPŎ԰U&8)S0Tݴh6nRIG5pw.}uȜd;/;l)HԡQ n=1Vb q]n;Jd52vG]vUe1 8Ktt&Si5N@o|w<މG v9(+ dd8'D%D}v5Z퐘=d_/8^wOpxsM0ܝZ@t g~X9}ıt:>8L9K'ڶo߮|yo Cjg {ݽaF[MMh`lڐ6AhpfL&:T7b 3hZ6cup{yMYe5FKa3SeXd~$]/= xL5@I~;}Ƈl)32+"V;. ;c2̷ va;kD"lz+tO.A/asݽ^Mռ7o5U셿oN*' 2>8*#"0k七Y,1&aykܚ*7v,6 0ͩS}s*~q][i{22洳 w ېz]y6T=vmGՐJ+5}vnXBFо\ޣ YNj6UܱBG/Lv]vL)m(=Rql0,4i2@?WeKLD-z'}Jl{}ʑK.vtߛ rsR wxY>`{-wi{(D /ujCޞnX[ތޛٝ/Lڧ)ې_Kܟ!ݿfT#3'b7]U1CܨJ;S-w 4Dnw8X$pQMMf6yER@r2K@`_~ΜK/R"rvU2a3RWY}"2Rp֒1d} |ʟV^Y ۜ;]#JD*sj1@v\/ZLR+wY鎻v+%rϜdvB9ITP 2 !帋=r/aq`$ZR#ێ l?N۱d$VT6,ha ؍= DSHNO@|$S(=cӿ "O`鮚Ev ݽRb|Y]R9Nދ" 5Wzg7z.}4 qɻ? E}v'J(] )37SVm[:&vt߂GIӝq3.德TH 2"#47tt?}g%2TOKz;%aee[j:;䴫 Nt>7r ҩ;c.=ם$;TgF~$uO}#_Zwh)&2 ?/#2f܁혊8  eڗJ_U./؃IHqKm=Wz]踻d%͘,۾ !d/ܑk++K丛m;]$wQȝk; 3߲A7]ZmOwH2#,Ì{L5wr0l蝃 9C7SVZq…Rqy- !Aǽ2B {^c DME1l'Xsf;ПAXrLwڍ^NGr:=l_d /;kJ`B~J$}hOшAҽt!îk2ݽqQw[Ʒ}v/Bf+r5Eq }.8^U?f9t;%J(ݡ{l5C|ǽ7GR Nm?6;0p~`X;LFHqq޸w!wa*i< KC=o=ZKUNj:S~*/iL.~mwEݏ665UܱO`-;2W; f GwDQ#w5ݵ3KK }ja~n ʀe(Nnwr܉dvʄ܍ڽǝxt;h_j.=kuNx/jnv\R+. ;g!aHf5v:&vpa+zpÇL`fY A=HP202T:@rhs[q-_%㊰=50|m:| qWNd+N1fC\3w # bs*6tzdLnףGn1dvxdD>c]滞f^Uϵ)ؗ k>0Cnsx [t&r\EWRa:kKAiɇ B|CD[Z2)5wy--9I=QD*ǒ2teOõ#|بN$w@#Cm 8;!w=;42L؃::ƍH \ǯ_A&e<=p&&j-=S' "ŴkM-tjC>bڌ1ݭ!!ew?Gr31t?Gfj3TCx+;,D@ 5-:ʸsTnNŬ]ܞu\*-zڗERlN{1ڙ!ׁ99q+Ve[OmR}Fo_p3p %˗.;y;dӍ1d ܛ3ܱt-Q 4QC஌{gedt]!w!Yjptwqz`Ry9u7t]7Qt?!uOpB*>W7y ӱR ۑlW]^;.@LЎ2Gdu!<<)bR";^QwLL9cX7/d;[J̸۽Wq zрX( njs|ãB~e:%J.ѽF 2-zmVDAP[U~\{!}mSƒ2Y2x};50< >Vv th[>{ TeY#C ׀P8a,)ɝ;2?ryUM0+sz 7nP\w81GvHmR Nrcs\m-ؽ #8RV}HІTFYE&:qV&leeD:ձ:CR2EqM K8 OH}Rv,ql V;b2A*'wpt!UuMh'~e2IDw:L> /x;Mw7%wi `,Ω$߽UA[Q])鼈^ ɨLMH}{jCUW0s0rO^;FNÝ!wDKqt !^ϳh m7|ێThZG 6΁ ;|vL-ɸȮH Ԯ@Q`22몬G{lnϫQ~=/14CrKW۵%3a \zNI]&rW\F`oF$th{x0*א52ڱj+^;='(QDwoI#`qC1Co[p[[4>42r}/])C{GZ踳qlnQր#_8p`bcb} pOtq" OTH&\gLanSKcӱJDRJl7h[\w3bwFe31SkPqnj_mN76UT=JW+#?lsS=*c'0p3UIϡ"2C C3eAY-~$IC!jtY>&vuk qd*ؽ$we܉v]6ՀĢ}4c֢ ac&WBŴ>cYNva;|r;*io cn':\|௭w^JXq;=r 7 t_hW5qdT#J#}"4P2Xzpj53}.B׆V}>=̹CIT&QD"Y=LG6owz7Fw\6o CH6=1鸟匶qlWfx7)gςz?G^н1AUwktܙ&#龘9C")S V.kיLGR Cz&ާ &Ϣ{UTݷNywj_U̡D]S%Ee{;M&0d .N:nGNF~+l}i 8qd\l\8Ml@1NiK=1Ç_~W~_r}WQ.ǝAr{-wIܮrwvEu.X׫ )Öv;Lgq/-)jc5ۭ\&GGɞxm{T*:qgn64{ܧf#=ޅ9!oA vDd< ^uGOt۽=߱\$ыaϜY\|3^ ~qmZuDj'n Nw:/WN;kzDSxTKmݥvW؆92tu7޾N}a2>vȑTv@~d|lop7nuX@wa}}9J wWRmtaw>ї-bwݧ`̩jaT2T@ȶv&>ie ?(vf~|֣vCov7{^&a*gSP?'o=S2**xF.jݰ W5)ԍC-Ed4>ȣ S&`à~}}ӓ5tvQ3҃v*]{S(H4U{ ?ؚͭZr_Y|۶gj bww^H\vǣT)bHx*k*=3h Ѣ{sRQߞszܽVԇ%c8ENWlW׎KNjN.1׮;ĜLh{m3ni"#"#cjsa>T0+wە 3CvgX/p߷"`wһ]P]OzjQkr9pw9jkzB ǐێ;.Qpc2Jʈ^Rv{bs` n3h!X;']|UfG7xvn,ۤw?<}vؾv}S2U~;d]/^:u7/ vW qNS !.^QZ%0:|7 3qHװY7- AjlsO=QD.{Ϗ);F Stەq{mGr>v:%IOB M*<ᑾnCgW\gkzrrxjg2@&`K̸x);v{ndR^fAX&D]:IK{owcF.u˻r_o(4#>L|n `MMPc{踛;S5;-2Co3#3!!,7KpQ@&.;EFd6xӖHHǀIۜP;YTrp琄bsi" fs4Abc;VxoQdN`*k!wwܕr.b5inWEN0AXQ;ctu6 ԃ`^ yAS+.lǿe,k[w>ڧ홧N~frIźܩbvvLf'= (ގT*zN];mFP- wLJJ/vuhQvS7DM-攈>,vZH?~iNH wϿ,<]$˽w$J(QAI8quĠFSPXKzm?5w?0PN t w wNӗ27]pg?K6==EeʻrRtis f(p#}IqT1wYJ`*: N]KݮnjָrZ )*\V8ܝԩR!՛gSM2d4`;ݪ|eW .揄Qc\ yx߰nz 3{]lZSmbQ=5Z ѝngMs#=vkK*_n=f$c c}5ߴQx{~g&;`;%J(_@/늰]7pt'93 %:ʸ2wk=ȹ#~kut׈_Dvǽl N0 )Cr=RS? U52rۏgB26#"cEqLΫX52q LEdmoNۛ_MR{Ĉ{qlLDjxèi{l+1#t"48 ƉEWc^w,4}C1e52q`=='hpNؾ(M,eŇ;Tm,/U{e^3pze~{Afwݼ_ANcX igŠvo+q'n.hǢMZB-v_D]UmTux_c>Y&1EF͐z̟vǃj@vNyGD%z{}so]HG,r5 c X~^}"&=d:Z'NaԮOg;]xy׌3n{i:K \taET2 @&\w(,M$P&Cuk퇺LK(^\K۽*k UUtcK%E"C"J8KZ,aԮt;]pwlVa1sCϜAۆ:@Ɉl@/ ھ:vRNYxߩh+Kng#ȝ܎I׽"nGR}!'wU1c!C]f/~2*.FefoLɎY|@;25sΰ2C3 *㶻jZp!2̸T:/qwډ'w\ІTc'զ3ܝ v$ mv)ZK+QBwXH2 b֭SuZέ'`v@[KU>1g2fai{9UDw*LerZRsL<}tg]iw̶;Ov΂^{9c݋YTU=D|iۂi{#2ub2*w1f4c@ӆT^Z!ed^cFdnwl7j׮T,ٸHvU52j|!ggzd{SM/bܾo'_0-;+خhr2rHLȦ 2HTq}~3F`e`(A>1{qZҽڸ]1> q".Y~NoP԰Ų>H(6ho #{=v20Ct^r][T̸% p&h[:pNMUYBw=FE);U&QD=^_t 7rIgbL>MW"ݴԝt^ݬ Dߺimw- yV!m?a=P}0Ӎn܂ce}98ٹ8 '3=ٹa6{n;.F݉}=Ȼg}{w3ovI;(3ŏG}tlqWℰGn;+Uf{-ӸNq~N.l'J`ԾIcX$~T% "lI Ch_/XM1E%9|nx =}nuPL3&!-$tNfg;].9];2KȎD8,VHx2P]^$~9vܽmQ{=7-: $b7 n/E[RXA'n%x\uΘL\$ÕS14bHv)tGEdݾk.Ta;dև"Yn{ݨ]Vulwo/Y;MwջC-ؤmoEEk!{C<-qOrR=G=-i;E(QDo^8ourҔ;>6 }Yo0~groӹ-23ܐ ~t[rbt$g2UV{:'wVȽMN`; <չ ޟ}$;ofFj7|&)+JHAj]RFf| w_Ya!Mripcr㎨E_ȎLx!/nSmTv+bNNSN[OH%sl6aAbpj_~hMbTDeLt=vΕ]yc?EGw{Uj˯Y髖jƽGp\&n6~a8&;'{Du m6$EeBϝ fd1eKJSSǃ@'a{HB`FYs֖O0վv4;LT(w ^#^)tWnj;CUݴzr:B K:R3@wՑ-mFrGw" VK{C2^.f4yR?,l/.N-QJjfp&# PPTۮǬ|er;DlEv/,á 9Xu Y׌LX$ѻ&JC?oc2ױU 㔚Uоu.UtVc)AlAZcRlL3p]>}W)ucvvL;ۑl_D%LmL܏zEds1nO j >52J܀$Z+n/8Jm'tnG+=٧aT7~{;} 1aٌazFR5`HN% w]\Ck.U9v嘆RMn86kɔ)S}X1ܥ2a<>alG.>lNc~G ׋b?~o2Rb{_M#kFEGb'vV=/c~JhL/i[q)LdzB6U tf֑Avʝqe;@vJe!::"wDn6dTj벩C0~J{{"'=),һAv8Bvg}##lHpӣvx%^JqMABJ|] OI!吱{=3Tqӗ}Z[E^,6we!䎩wZ4ON)ͩI2T;kYhlƷr~VyܐvD="&DxP3vej..9t/N oׯ_ vCvwL>%G3QE;)tjwe9cAi !>mpҵn$OSW\ ?ଯ^9 jUy3pϔ)ScNv;_-HlYȽ見!;H[Ew3VSx^rNq,vsXNnbw6;/eY}IwR+#}=X 2O`â:90ܣN b{8!UϊoElOv+@QEvdq;j.R{kPt: FFW(%cvp;h_ >%n * Ma;kw»~JL}D '-ζ׽~3\uu$~{uBT|osGq\A+n0Q'S1*Sk^]5fEq4OHxE߂Z#:qઘںhKrB*v]jd#CFG]Ԏϸَ] wZy }|wq$IT$c)]-4#tGw܌wwLա`۩:߱rrg\7b?i/D}24Vƣ2Y=SLx}!w*:?rBlzp2s.~<66tǀw=2&o;"w5,>d螀{2yZ`~GGjFvL'xy&edѽ!I`w/o & n^Ƚ]' P;F귋 v7֝ٽkGL͜r!cv{}$]t&Gcv*X(n+&SJע`]o$~kqr7YBX_jmw14Ð;Ss1-RCn``bXja=ɹTްy,El2LeeBTm/~&k ,xw1ϲ GB;ngY=\v:bw,l="ðo_!lwfIrgLE? r[I0[d2ޱqaFU;B˺o\!0#tߊYrD tTSnSĎ]|FG4a ҄ =L2eoS1 TC"wvq9-o']~12obv)?' wӉLtok"3oidj5کQ2s=RfH0c{@wϺ$/>n=jt5CzUxzd]LːzYjg2ّLRP73mgۺg΃N$f5cŝȸym|2&f^}Iн|#Н54sS-㮡"w;p]{ܗ:K^;jdF;]SE'XFfyyb;"vɨ])cy8lX̛d{ ەnuIK <`G۝*fo v"WP&ARBw;?8er3iwEe8좸:crAzTc2cbAlTR!Y@F{mgF?*Z؏GL2*!GfN)9-(Öߘݩ$֐9.lMutWzWtj 0>}obn~#f-uWģQ 1F_>Le;1iP˿B252kɔ)Sov诰=nХo48Ҵlk!oGW^7ʴ̦Կ-`rJ2ף2hҽǝnp׍Rm;:bU2l{I>F.PiK|v |Ga; sM,Z)[d$ËPН ~C1cbf\KnT<3f[onІkjd.Ý-vO`<1y_CY2SL>~<꿈`bS2hwс=V8}9,aYtۉ _] z>)]S#GtTb{WY˥ZZz[pTH;t>Q$/]}؎~訽NU-!}'qO,/3bu%yR+P;=U523rf[JȐܿ~ea{<#ve,LHa.l>%?rwbǜmK,w~UTŇ.-'C ~Ā\;3Gdrxptܫ7NyW˜:TҝuP=qo^ d{S熌;nl1ǽ: D,|GQ{zB^7ZuBBvvܴ%Ֆ~aKxQR7lS b}R5KenYh'ݕu'z;dM\Yzl-ڨǂ{|q\Dbt_a==~7=Ǣ굾#VMސAfʔ)tӑEܾ)b[Q7'&NLi<_뷤[,ӝ"KoTyX6P_ lo3.r]N~AEhߜځCR&ÅG%00NHš= [룒2|1ێ lxT,ii:"2㮈 lr!o@ YEq݊#5u{A7[Q$S+.}!9$31}mfV)t KrC=d^4vxKcM΅;:pt=̽qݱ3ʡwEe~#%p1ap[ٙ8-.Lwcw=w?q MzʪqvolK[y("EpcԎTa˚K6iL60IOy"wwU.QL!~vvS=;1c0$6:ѽ1 9Xp/AGrc2~a?PM>  CS;b{!%sR2)ޢ;λdlv ĮaK_?HAbwFcB#5]I?Er?2Zʔ]_}r=ǝdfsk[݊LFv`{mHEnG׮cR1꼁9v^m,ӗ[\h{oۣ~ש s;&S5wDT跟˥; dRnj}>Nݚa; WAݛku'r]̮QK@["y]_=FjM&8L2eFspB+5Sc{4߱zTf=H^=88ip_vWu?VzK)WAkׯwrJ_~wC䈖6ˈ{B#]tgu=wCkGC0*^h {mwu쾤c[0%}k*')U7FtcڡF2=Nh'otxo{Gu2ۅoT:wBcʢ2pK= N~RGb_X>/ɡ%|0RǔB{Hu'OW{dvX\c;.ejU+g0 !KX lw$\chsn?[Lf[;UtiW‚ۉmO[(Gi5F1bvuImh~S%?"5Eva:=?qS|-t!cܝwGk잺8ݢ[Խ&34Fyɍb/L>r{y"'Ϝ^=L2e>a+txʔ9n/μ6,_|  3[v9HQ'Y.Zva;2 w;W#18H]Z;gNM$$eyP}8{/N4ARt~/Oݟ }߀g2} ^䑩k {#4 ٝa R;ݰg8۷es`F;-€)%o+Yg$9(Ͷ{!жע)Ŵ+? 휑u7Q>=vn mIu2Pc.]Z$nW%ver:VT'xY9U7Ge9FqOG\<R5IH`g.ʪGyi=rOtD ծI}Yv~2=(#twj' UY uZfB=&fTU8\wSu:_U{ܡ` ԅ7.=tΈL5Oagʔ)ӴoPv65Gnwv/JeD%Qȷms'c_SHsفbw;vGlEg_}}oHz\:tP~d!1,v2s u&\wVPIbr;mn?|I~e\7lH%.?u95c`!u'wgZ{ݩ:Իujulk'y(.G Sw>*?Sqwnw {U7쵢G'"ZRbrU)ƀەǹl{FoO{d0~ې?"vXɰo;?|-=v )+#!^_{bvY3B[S.׽skVbvq7L&7.1ĸǎὑs|៳BT&L2e.cdZZ^KjH|kՋ#Me-z퓽(oc?c{#ɝnW-Xȵk? nݩ6`;scR#Xnvb;b2 Ȉ_`;=c DlvorpK]Z"!^7W Syb}/GMڥ41dyߟj}yv;].]qg3c]QkǽHَj$c{M;^nD-2vBoH~gP;uD fdZwОW6_phiq!!3 IxNIԮv,Eu>UIwwvtgŌBh{<Ʒ 8"sԃVFd=2e4]q;U%穝v=r{O3!^lGlq[!d{\^IByj.2-¥U׌t݁ܧZȺ }4"S%Ȍ Aw:i]ݐrH;]w ̅=zŋ_UNѱ;u\lwlU#U#5۟2)F-mYgtӹ ^Ml^A)#BZ.{Nt{F>eLFCC"vFj 拂2sqLS'Ȼ ݰ*`|)^/8D91LpܵCbv\q`, k`]wrkkԼlZ1{W?{ W`v]icZ'S+R9@VھОl qVC m^8E?(e+M[ ]̴2A̺yy;GFQ^pg~҆d{:+jͩ2e4MtH:@`2%wy=~i f;C2[8xΤ̫Kkf܁v$~->U{lTuQ9Wyg5VnH*̎B;p`;\paUZViZ,wi}Н5BݡvbuWd&vig&ݵOU'R1s!v%a;3qؾ.̀!RaZ)vL1 {b-HԎ!lwǝ܎NXew!tSx &] q 6ڜJϝmV>wX`gd/v-7f;qcg4vb;cbQF j"!~ko'No=.#\R>fe"R;'tb7d\wu̼ ޝf,0:!=-􀻱;\!}V+f0Y{w{;{qCT%k0Cδ֬TUiz6e:ꖦ6?[FDqI,Asyyﻧ_Q|$=ɕ+W=Clq ܁ESȊ!Ջn[L;O7/?ľKv mPCLA;;~l;L7lil-=:){Nap~ ݏt_s!L8];6F?֗_^r+9g =;cؐjjG~tΞBj߇@v9%eWÌ&RBEzf>㹻v_X@/Yw37i+@ꉇ2u㿻ï2$W#L$:/9f1w ; ɝΌL# %3-bw^1SFT Պ[Vq*Lw*;L F[v7rČvS-N/¶@ vQ'p1 ?7|rnN*=ڔzv܅W[HF <$^iL  33Zs>cP"ATUMQ;Mjf@Dqoy<+UQ ڟZ9GЎ;{e]L`=FeCĨL5T  GƝS./WD0CatAS{sUJjdjJ]fS%7/AN^;6pNbLRU=Ff"`M?IYuU9d ahPFtkEvw7M{Ub;.8y=W\aJ%~=! ڃᮘc{P66ÉW.dW9A%15r箰4&{-(@Dw}:OJ23[cX2C]=ͺVwLf [%t/$ݕ o#gƒ4iFZb;I.l$*pR=%Cb /X.n{vި]N ݉p˓3~( _Bdw9]sXnv,7.^ lRHmQ[1rXaC\;1*ÃSU+➉$ ̙ȰgR -p;.9` ӵ{p'Uڎ15O,e_/餷=B\0 E3 _jfU-6պ:vrb*a5\6)-FL&53Kap\Qјo = /lJ7:\rCwH`冲6eZzsד9,JCb{]:Y?ut!wGWetɰEtǀ.s2o1p0cF.x6UST/ ߰b{z7toU3v7n㞶C,v@ptq ,EO&R SD-mKU$@TTJv;DphfHð`4#ݓ2һ+v>*]'%tZ wN.}t]{Q݇vg9F=KY8NQwː)d[%q.w^(sV`ƛ},A`lǪ=qT!b>c7\~7~vyw#n~bR.<.]QG-[U}ʐ])kj ڝc=T㟣c_ޏ32St>r*枑*vN?f[\FIwvvz-UW}~7v 5ANlP|p3xbug+W\v9f H~ȝ;} x[$L>Ez$ w(g}WVl̫I75);cQCx *Woi{}2cǰHkWn)YsmCy3~UCrmWG{H.~$;fX#n|{!$,;v{a+*۵">?TK2W}7v;Š:!FIo{);1 : 3@{9Yޤfຯ}Bwfh ^HX{5=΍ V.J<(Xx@ x>a':7Տ+W\v 3_|aדyu#$%{p/Yw_oқ"D/N ADCu'-wxd nrtOʺcEfZh6[ZwwxNئ ZIZU`fɝ.rg>"l7CP2vLn#qa] l^bؗ*]v %R}`)J@2 ۹]EwwC…f~d>O Fйay=CbwFvmp2 2n#nY ڱtNYP$q-|;];DnqܧrG2ŽP\x3Pj%=N{,|uȀq>ËܻQSL,Lh9;&T}0ݕUkɄgTo.UNj"1ӁvHmS+~U%fsOĐNcP~E˨]{3NSU RJoʸ޼W\r:2*7U{:i97'B$Irt׎ q'Fk04;w`jvr߹e@OEn{ *fRR=J{g2k7&/9g w淏)wVCeE[S=mx?˧Y.fwt_vJ{ܧzS |w^sQ '^?<;wS5`>v҂܌UNS=Ѫ=_RdU# 9ηvBVaR`<*+W\_lhy|r@?rmӠR[4ӨLrlʹK"&١ A&:!1r߲凝%%حTT q*Cn{!mVv4U(= zČL i}4v.j7`URf9].nN}B%|;2FOS݋d{r6g2 "tR;OG~5ଓυ.΄)x"wv@%*l}F3]wEe8Y&eJT$ UNQe<NN⹩DӮrNO-/ rwt Ӻv Y14.h;s2m?xJu4]K`+dS?A;p=X;݈Ow t>T{f,3*v׉L ݿm8I52h9^} |5sxNN\rگ2v;bLϚNsܿcN`{*;ràOFq,w;\w Gw1dk{ǩݵMU{ohvY9RrSQ3Z:{L)3!s1uǥrwwnS/=ZHNn&`)M%O]v%eÃf{I~a+ru:JNE'g\FʄLMPpOv/CtFMvW3PBtg{p!Br* wsCUǧbmwI3=\T Kt?Vf-俢ˉ#c a;q~X>! M"Mn2ѝ#p7 12#D^Z*rY쾮kx'Q}SR.bH\q4lJ*oN5_]9k~oݴV6Q=wpϩ./A=W\b[vjRXXfRe4-Iq j;c]oa官{rT7I;y7Ta;;}5>5|َu<;}:aQ`ikў^/3o[5NSm@rW}/3壣ڙ{`3-$˶(]32"ZWn X2f]D߅aBZ"˝~@JpWw3d윱޹]_1Nw}1Ew>zНRLL,4nv|*mwY) faJݓ6^:KYn}`l%]׀!˄ӹTnJ2x+FM'y,!sj"n;3SU؝+1SC(.3 /iS6ZfG$*ڋ{Gd. L;pv*|mSO=eF'g_Jn\r#tHŊr_A}Y<ſ7b#FHqWdhnj Ʈ,v,jpWfe9 Q;w;3Dnz'vi'-0^nދݯ]pnXTيv +@omD,RQh  0U\BwYw]28uE9cI%x;8'ؾܛSY]'oo6Xl/Hv7yJ[S.zX@J4ͽS7ZY*nGW0CL5$ ;}m4ӝ~B]2<-C)P;G15bM,)c webRfG>(/"^.vg7 S˩(l7 dGqAu@=lϺ'31c莁)ݩklI@>H»J{vj`HL\v^uJcG2әLKT3wQ9} ; ,'s=W\VEOi(inN W-4b|[eD#sk؜131w%e~zѰ'nRmZEeD;%w6(;=d;mw?P;2u/k%C+= ymSU^w,|v%X!d*~h8!Kqtgl*r{"OtnW].lwnUHfݠW8_Ourqý<ݟ퓒HҨ!.v5( ]S]$h;G<'Nڕp)Eрv53X6tOҸ΂H…?nBuL]ׇ@XZ3_cp*E2Id@wD٫N8c~Y؎L=Ƚë΃nH%g'>wee\rC A#romv7R\fԈ9Ev2^i9>RŰOvǼqQc&CMfw;3ZPng2Ut7.~LF#.Xf6P{\̞86>nSKEv.rۉpS])q{LɐumG%hvLm{(A=d/wݍmQMmwnq>FJן3q۵ӗFݹX^j,9[F2U厼䝐\G5IU tqLs{hqG#$T_>yaΎNzۧT;юTc`ӟk>B&;Hdze[ŋ_kjϺYʹvܳW\r5+iȷl{*>;!E܉|{*]Yb!~}w%$ESc3LRM5r\N\?cp{72;v]p讒f{zmKcC3a;ؽe&| Ga`-!yqleãɬ4jxRP[{&ܹ8۵%n{zPmJ~c;61QFFGfF2CwntgשK\c{xqtN9;2J~] |ׅ{DFEݡi^Q4-cTnrn6X--{JʸàL32a){:GY^7@N-kh) Qvxi tW1˄f`gTU&g gq>Lt/$fB]]{T]jpU`v%۝jZ^v`Y n92d;ON=f\rʵ V;.]X˽R,4d~203{lr }W%w7ܭx'?9; w;Ff'@}w9I`U=1B}PɢPkVm f:d i~\.Ż^?ƣ)1(,qݱ2 \m;9ʸp7z׆X0 lTkT{W9PH[#BӢRbDR2*z$k=S~5KHJ-&[RO_$w4FȺ]3bL΋_%v'[}!v RwYlSE;3"ws*GLؾqO w|hooiwf{ќ+W\_1~qZiCVccTc=TBJEw-Q~eJHCw"3l?>vgRT'.1ne/Q2ӊ^w>/SָYѺq!_ZݍeK+VGq8 #2؎9>}v:v\ڑjNjוU n/R%=pְ]^"w`".qfOkϰWwwpg݋f2_Fӓx޼+z; }Wݭ, 5"_<{=I_(e溋޽2Mr܎7:ฟIyTfg܋*tPva;^6 k@KL~~ ]C\"Z of/OYwⶣ{lY$U-VܝiV˰_;6ܟ}w֮޴`{Tu_;=2vw@;bu=oVaȡ^!|Y{ʕ+W;ʦ8#**UA=Z(Ek(M[ ;1JL0vJdzD"i:z 5h"^o⏰w_e<*ㇳ>{z|ڛX{pojty@OnOm@ȝE֬rerT?Q 2q's[es-c*>yd"@\f띓J,}7i@n5a{ݚR\@>Ҟ}}]<)&f9kE݅˸HUcUc[W= R]#'> n&]ہVؑ!cq;&vPs -2mi}HƬvP:jĎ+QA[udזq\w&QLT8BU2lt_ lWZwrkў{2qWdw%ed&ݘVZL3ʕMpmGo; {seJfa=`;1zS;wr B1S=qǔ";R=N>yޣQvr<&.0߁0._l?4$+лU7Q; w9^-CQ<+W\^{ݒֶ,WVL:jGz74W7~wޥIb'KVr< ~;ѝg1bHiifs9(Gu߭3f馻娘Z3ӎLU> lM{y)tgRU^5T86[M-.Ro]Nj:]fzd0Ѕ0nw=K߅!hlHDm7EʚݣkoI6Tݜ۱D]KrxP]] ;]O ] ?*wX2q))cge6$Y=de# y3Gqp[P.ǽsLsf"ٚ9fu/2)S=v5zK%3G^jUS}{-0M.qWMUU?6JN{7ͫ|onktO3'e{\r/tEj=*#tLB+CpgP rGZ#n]Wpoܧ}2̷㡈zȢYDwzwLiN\wa@w{ሎVGW5/WM՚Vl{_&_:O-(Sn# SOs9)jByLh.pvNl?'nInj N%Sh)Dn_/l]$#lw]wapqoL9R`$+SB72IhUdCyLtg{09wܽv{/tߦdw7ܝqaVg̸{MmR/i%f;3?sm'sp_I[~QHFvavul[EI2N_vۛWZOt7 *^](5Õ"3y4Uˠ2qo7ʕ+צY6oO9}ꃄNt]A#7wqveNmGnpHϝTm'p;2ܠf/[hA.ݣ^06rΕzjwMuuCB}9 nTggW$jdVSa5ޫ;x;ǷY\rt/S>}g%mt(cd.;D\6x`}/f*ݳaLJ.W^܉ۥ饁}Jǩ ]>fifBTԅȒ9Vy(9}2ɯ=jrHqA!"?*sIv~SjoWLRyq.v pؖzӷFlOE\84CnJpi3#Ou? p&7[߱Sw"~l2&޹Oٽ T9tSeJڢ:w,(7C2 p7ܿC~QVkYr_vļo7hAܥ% _1lǠឞJgAVY=1eݱ}}w^Dw L`2b}G-_bأJr?2 = I{-}%ڐg⮷ZSSuo{y=W\6~k+ ApL(ɝ{7v8-_`pX91522dܳ2wetWLܥ !UՐ2Gk:u׏wq{2Vf tq+0tg2խc#tW3d-]X;vS߼ D_ ۯ D۱ZJHߒp{kI.M}5x~q`CLzt_l("#nnna s퍜a`B$v6.*t#mqp kr2iPF^vdxI־BH]w]bxDc:ݹpPi;oSU]ieVQ)nZH-v{+(.]w%e&ºlf,8?u-6c?a01vN°2KBw~pO k/hَ)lN튵sJ݈۞V"vOXDsٲ;.ręL45y7C#xyLv}h$5#rCZɌpc.bvvvyvmI}}v[JiZ: V !q\rڎٞ'd܇V`2̸ ۋ}%@tCoitr- Ѫ!l"U9垵ܹ2,OyXw H0{wݥ0jq{}صn͚5%{G Ŭuq&t}@qK_Ÿ!O)4N%HӠRUȀ}Sjv?%b2h(wjh%t-7)1>ӎrڅG?@{];lWv-vmOmB]awef=B bwZ;eFUgwf8dojB|5fU/1XTt:s펠;]wTT^-w>Rފk_j8ze܄kqevBaҚG;3*e%˶ЮesxRFSS۳~6/#1I◁4U^vG\tS'$O>z!Uaܽ]fNl {Rs=Lw]|6vG]Tf߄7{^+W\ZoͩC1=ke9f wqt=mVu.%wi{Wfbwѣ|$CEy b=w IRHٽЧS\:2ޱ_}, W`ٌ<}aܩVTY2ݍɲvv~B2=`;v/t݁L)[nY3 lt4V&#hObĵ1, ;?F;VN/5Rxcݙ/g`:AX0v-!åbwnSoaR;2I+$PQ 21n;r{ j@*324SMv++Fewl׊3ln ku~_AƴL:wyyf9|/ͷAn{;Jܤ{Ho(ĝ-@ve?r'hkI;ԑV#tTRcho(pK/EE` wP _cAo~Dp D}y=c˗rH.ivSU (^vn78 Gw<4-SV;^xMDЌeíR`"$V^o'C]7?JF yO&)GeVijRδL/нDwBRjm.r92.vǖTi^ݔmzݹ}NeW\yAzdG&r{9e䷋|uuVy8gỰù]Cc2>#T9p 8X0"ݍ`wOt`I=wLJyҲ2FK$BqU%n)uK5CuٙL}%gWÿ ḯ!ہ+ZWVe d* vij\t=vݦlwa{Ն.ZWݰiVFn.=SbxoSk )=ԫc#iL]寪`c.J w8 SCҳ}~(랞QP ,%$݌38>aQ2fW/kQ+K^{²Yk؎}'\y 3 32jD,rĨn_G!X.S52q2cB ˄ߨ*vWS gyLF.n_4ʘ;2,A}=l5C([mfN;]'ji>農jro-ϸʕ+&pذ~ฟ:HDePG.ǝ;DUj7d2 rP&%E!)Sv9O-x.ֹ*^$vKߨ*~wPt㮔sfGkg-(]}=uu4'w̆/5C w_P+VNLf\w;^2D9 4}G 1;Bwv.r$CJTYzS#.;.$sIwM,!U۟̄T,쾃2̗mxUFzNѸI.]ts*'ɺc!e#0;ԂI}OmA>].>vLh~ӢN ?ᅠ{v'Q; N}<5/܏՝+l* d.:s^ۮJ͊qosߏ:x; ex%}3%`ΠҳA򎉑.ո2ʜ:V2r/'?}lb;2mE"w :NOՀc4t?>ON͕+WM&jk6d5`3a&V#pC @5Re6T[f3q*I A;n$uhΨs w "j4Gms}^>M5r/ԙ׵G>^˂HJ&<+3´;ྜ~;NdJ0B2F`#+IQ1Hҳ.]G0{v1In7jL^BI$djef+{>mu2Ewy/T;}jtƻ܁72;_r̝ٝ5=&UpK~cl;TA˜ EF@w:7ʑ gij'w!5#o~>vW3;}Ibci=+mQ(ڞ)mWΕqr2U)o)ܾ4!2ڴSBZȽj˸m~CgUcS_ x]t47-j<{SsʕkkZ EzSVDA v+i7n7jZ5p[3'ih&fұ{vee*(]t3EEwy-u?\$݅1l9`;rs ]u5K 36^>RIu>qSTNnq2ywXڎ3Ln{6"38ԩ]-,lO#!vwN92iAw]>C%vR+]ɿݱ h>u.rszvtFD݉PnocG1m26v媼HrY ؾZΩ1=5!%sgDfȸ(s]vIoE}#f{ؐ:<6:ԟXNrOt_lOٮ;=#v4'ed^lCqn&ݵAUAIK9\bHr;2+W\\;8*Q`nJۗ#'à SuxBObf]w.wIl~;4n2!~odv;awb~YNlgΝG,ݕq n8 jKۧۻ @t. 4)чoX\o|}sw*JN;}={"2J&$/ .K%dMh'm r|wѝ x=z'w18H=2Ks u stN]A)T0s3Bwezvqo(YR6{;4~0<.v2R/#GnW:F 1x w[ulϨM9nBdB؎KWQ ߸awgw61&w?҉M^pSO+p8Uxr⒳q=k{ҝ2pe;g7bvx[{3*V6˕+W\Vq7p&/{RǽNd`]Ar{I}NL8#5^v _{&w`j#wAT,Ü;;"+:XMwC^#wh7s);]/|.Ep&v?5E5͌Vկ;̞'qrrۻ$wVut:cn'G Tl/xԾ)lG5e68kÈvVaܐ 9&ړ`>h>8Eħ}iD]+л$gTZ1gtNOfޙmG)a;^bw{ft7z/nwXGzwt79 uwe3#;(}p'P9]NjnwN93#OHt:*n"vDJP p-ݥA^pq bBrE̸&|';;a3~ygC,Pwd exKH6j߶,iG{c7rʕ+צpmwoPq;ݩ ^pRP~; ~PP~=- ]ϘнL-s&9#ߠ qq h00ð11\BvK[d*fܫӌ{&NtqZx0[.|Gs?v%vA@f;YY0۵FExBvRЌ+uV=2uRx9]3}Z;Gz'cݸt׋KA x{;Dϝ WH;.E=Svw9 ]ÈȬݹimǠtNNǦsr1LCdb=}Ě3W@bd5#ꆯi6O UϰRnVPR ]k~=8PqX54)Mg;]prU+3߿u J Mg/ZQ#3w;}IVߝS|6+W\m^;=Mpvpb'喖!"Bwb pzƇ Q1-C˝awAf1,tgdf>aw.;T;]vݲ`*&XIpa&xIXͩk踓I]vyܣN!nvjm!cݮAj.nvp ݑu$~x&'So$+.C)ҸcFYz.v\]x{޹FQ1j@hфZDLm ƙiiK&*c!@&KRM4NLc QDCI Qb"pggfa3==z׻o^ >9?享rV2*hBZeawBvKnå+[EO=2:!SL;.r΃h@I&f~g2y{Нpu.bx*u߆-[Э^hώ30){(rOC2zI0>INӅ]#m9ʕ+y:.Iagdj4lpӥ=1uniuQ ݹO|_@չ+鞘/ b^;#^(̭Wn<Ї>tVH9Õ!0#tVU ڙvvQ;Kyms72yT&W\\ܜz58gZ:H&]@E,"׹ga_' F_!AC= .vU^)v@\ingVFafnTrO}ɝIܑs3-eMA_f 3<3w ܅0܇1Eٽ*ܩR=.loowmcQ;N;.32dv?aK?%-G@wEeHڨخ{( qm=$i[zA\ÛA/_Erǝ/]DwSU }kEʹcq/1LHqt31Q!$ NrNZ7rN-3t_9,ņ/۵h6d7ڿ'l'sSgp$_FFߎf%R{'/͎>JL^@v A}u6YO2?f;gƇaKv v;\`cQ۾Ob1a}\rZs'tMUGePR4ܵ1&lv=8 ݇ݿxU-.Ő{4ܵ 5DЮJH<˔`$Aw蒅c$>y9LX8b@+zECp NNSݱM=rS\T=f6*~|CgdWn[lΘd~^c ݟ$r2wܴ=vs"3ʲ|vHݣ7бf}G=/qk>9gV9<8gݣ>;20rgI|Iwu2;]ؾk3H /`W*{@qv8è[% ٱC$&d b9TgCRש"Fcu<]N0B=`Ō<&Gx/ֻ2XƞtOF-?|j*] W^+XlyZƇ1:s9'pqV9`k҉JþӘi,FW ZlW5ʚ(?.]??P2۹zagS;н)(.cͪBw@=}bN {22#~r]ɽ75?je2nWHF~/q5GME8ɩrʵzw7-~T2l N 5nA÷&G߿;niVn~QL3 "wTmP21ŰE5,w5Bj1l(1yqot)+C]9bwĄ:&fP^տ83`SْdCLF9UʈySƝERɱ^;]!n n;ɝn{TJ d-Λʎ1^UGwq睓9S841 OhiOȜeuy>iՍb4Xb< F ;ti乻:h@#3MB WnKUQw*7m'r~ @SH޵/vG=^=GZ gؑ*r'`Ld;Fڟl'U;QLѫ52cKLYz3%SG0q߁tT툹c!XR2|G^`liK߸t[h{_轖9~l-1ݑq usR`~rj\rS8 ^Q23w'8RP̩gUNG~.r{`+Ⱥ#0S*X,+.vGe~+twN [6c~i58 jFy| Vr? Qo?N]kc W00@@#vKݱ+Uu=b1zޛz ]w=bUWxe&7c|^9gNK $V].rd{lGE\Omֹp`Rp92h+j7Cz!XgbFb$mVȽy{ȝ?msӝ {SU!GpOrٝ{vc@ESy"bw&WdvNe#mwjvzL6!>tW=Fd%"]..<+,;^ma'!eWc]ELï~Q O qW4UG \[Ϝ9e{']NãuLdRll=W\^o~Q.nnq'- ܃>`":4Uv:8ak ~qӻE~c=.Y,XA݀=v,5(26Z@wyU0#3=*#xǥnȗ>3<0Æwu_,ӷOi<~2OTT)q;.m+a@vvR9޹98|jh; ݑ.} BH;R`wq{^]Fٴ~vvn )G=z|Rv~agg32+왭/ʑjv.rڵh{ZlNlz϶eoľ$.>> »n?MM!;_kvL'f~`zzktX*DݿmN]{i; r=힔t=Uv&Q2g̸LW߶#GWiZfgw6C/kf~eH2A˧uzRD0T}w*&@L.h/[%J=ey;Ehj(]if;7{@NNj ޻}}UBv,5t4fû_X]DlW)^ mI=7zAǚAݸ.۝ 9LŤN>cOvB{sK{bX=YPbc,w4^Q{2=w:ft|U%IUe2''esoc%a{{ ׮dS*۵wjo `;|R{؎/aGv57ԐۏLNlawfp2ڪJ {m ȝ!- nIi-xF=j6gsʕkF8񈻟t5{+~bwG")#٭S`Lw1N3dݥ wod3+C] 13iXb*μ 2XGFUgwlܫSTF;egFh {\P ł }jTIv%XPQiY.xO3~֒[\,#s{RI=vLIPO+펛l}gݵt As{KcvK*3^+xnWzbU^tVu*xV ct^~X1 oČ3'/B=mw {ːi#n] Ό6R;iR;$KRxQ;N;=%lXf?pRv2##fA=폑۟lOH)۳f;^§1Q1Ynn$u7 _NXt]F۟ZTA|Br&O5:f z+n;y k^~]G +W\k,9 cRsA8Hi?xt+ʸ KɯcՖf{2C`ʴC򡑼F oTNQ{sP7`;Cv #YZ w>l;^ irL舼[ށJJڨJ-U~dr'`Jm/nl9'F'EB7nW$&ݐ};ȝ'{ݝẘqȲ{UY)d+2cN4A)KfOs:-*g\x mǕdч軛ힴCIy6Why^F59UfH;y%dhol`OƍLZϏ8+ii{0 sGl'zp«rBjHE\iGjW xݨڕ˻:IefxK˨ }ݿ_T݅0{xw;ݪj bX\rZcͳI6(B.*Y&g3qz@;uV~̓{oذ vW7CYvsۮ6pt*fCV.U/nWvkǐў#($6ml++W\k]Gͳ1ʆ^IwFe 졊6QЏwMvƿM?u[ʹ1=0Bdve8u0ݑTB>BrT jju#NG΢m#w4CTt\.pKgy*uBR $ --"w`<cFhSũ^d(` ru2#u}~淓؁-Sw;/<:3ڠU((ْ|l9i{cGnW}NB髤# M ޑJA78?b/l%cXTMd'Yw鸏[ΝqP {"uwAL[ Ov0r; wNx>.7]@#ֶ=>iS{:uhFϟϖ(N%Xlv ;!5lHy"I%yVٜ]'3= 'vpx}1'J4n^s0ziOl龰g>r>)lW =P;vv>Y|rʕ+*iz7oT/QT&8$w: QոU! "T~@tt׽>!-ыg{e0T\c%$s`,wGa+dS=*3Ip)'f`RFzinrk"ﭏCn?c2&l̤ڶUZwXԎyx:;KCK]a1&8GޡOR}t\wa;}L.۽Y+ʫޱә!Gtk=K"y_uv w{96g[[2hV|"^2]p;^b%#7uWؽMpO-BS5"w;wc'?`?j p'K" ;ux~P>G5hŲnp@jnO&HzdcT8=tYRB'5ed} '.f]v0$n++-Ex22 8]3;T$7uMw!Άj ɂ__NjoH3&z/,\rZcNN=^?{'oٺSG}ꡡ[p{9U=W/;6YNNdvjЕE;*fļȝW]u=nGOd%hoX I<c7B*G9ig̽AprOZË; :q.}eSv}.eAb-z]>l7=55 l5C{镗A1ᮬ~ʏ<.N^@Zm'ceml=m.^M/BAo ; ъg1j1X[@ς֊ T Ue=dw;{Нna, 9;[ =7ul 9M'rnIԮH,zb;=$ZK*mmh4پT8&Jz˄v0?lZb~g_Wpǂ??;LvkyBnZE9f]Kؚ`kTqq;Mc2`oNnW<;3F&ݐZg%sʕk.8x58{wtn5rܽU怷hoI-?>Y&' -n| #n.rw=O݅ ;Nܱ7ͩyJl8)x=2u}\݁KHi8iT1^@ʶn1jC$!jPK,YgX2ڕuK2;8^Ρ;\fzݟ\.#>z/;|Ϡ;7=$;]jV9W=D6mz#: ;.9ow@VZHr[<.S]v^bmr6è>Ĵu]r݉Dvב { %|;Njmn,0 \;gn헗{cvO1+QF\{SuY~TWJzpϽ>> w _Br}}A Dv?^#sNۥGrpϕ+W5wd!ܷXTbuJ!DeB|(6OL.OoO Q0sOd+-fg"3Sܠup;ߩ븄q0'cMʹm=>ѮLQqnQp;k?*a_@`R~Νs[ZD?ХB\Eek5Wvrv|Ǫ'b;+cbNks!t6{B1 C=O캼%U]=/'> c]鯬$Nl9\|&wtAX[iɓd\x[?Vvݍ7`̝;62^d]eL{A4YIQ=o1u D]st8Ux}=ns#@}O݃26ձ} ȄVu3q=Jh缶E20i_oJh;X݁]yL2'C?̵ýSS8h9c WZzDsw@8DGӽ !#4Nz-2ڗۋxC\rZ; ܙT,[unUϸ/psb Iwܗun8SO6PjH~[(30sŊe]wyhv[cr'5%w?%n2.>$[SF1AT4Y uPA;z!5vDŽ@X,/s(:T_ʸ^%ϊWw}=6(;.- ֹT2ǷگIxƤz8}d5K1Τ{ LwT -#םue̐gƝtp{ poq܊c y{ J1@;`Gp,ˍVKz8b~>wGM5'XpIq{lWi;V0'>5?HrWDABGЬo^=ZX^~k쐐7hʆetaꄡ;MweQKTh'+RT۷+W\́߼3I}Y;3ʸUf&ʜ S7Ge|1*o u"SDwDa+0(1,P1wߙJz=zJvX3v'3ΨL N1 ;>tF`%'Y/#xW}\&o-hf;Gh/#l)"c#>l*/npmw_+nE31eZzE@6U\)]k&w˼0>ΫvB{!URn"3- ; >O {Qʬ;}:ݫiiK:K_Qw;DpKDy{ ~ 1Rt'sU'ܯ=l'NbsWn %4f'ys1w eQݭuL }uqpqٰHkfwmp{+ Ĕ^epizτd~ i6S2Qvۑhnzi-=W\^ʨ&J)39Sḳin=^ٻ8wϸ߾Q֫#*=  \qvoWtg`} %="r2deYO`nܖz1w۵=;v;7Vin Y0]woqt;)P@~\X4 jtk!-'*h C^^ Εwyr/tϨKpݹreRS%x>_l*^\޺ǜsZ|/C2)mvH{If]Qp61^Ε#;.CpfSI<`ts5eDjlsg{xK{E$q~:>vDxbw8SIu3tǰM\!{]./LvkFFXY%19vTsHaDͯ]^"3޾yeR;Nao(%áH{Qb?>Kac ؎럯ݡe^:$t׫) < ef k\v!ܕKQ-=av*sp{[FqdhкL'Zu9J5F &Tu|k]9H#~ "!Ak0PD`ggۡ z}ʕ+@/}pMqTdOS=Feu*C3aklF37o,;ɝL=+3䶇%cT*S.jע|;`Kyb֓de;Gt&|*s1t:~;p"Püw5"k@S bS} 1@zV/I]ٙ9;'\ B暪n[}ٷ:RBԎ醻v.o5^}DF}}GS;w>˃ctO %w݊f04+>`5MqNVӤk H?)| |{9"ȽA ǩ_fz!q^ Ĥ[ko ʊ !w1F0eyXݞC>bū![F]_Ȥsu{i;.nHxݙ 'Ԇkek\Ӊ|Oς>w5KH~Crf]{[iyl5lāۈ9;ȝ;;ZBZfaG-=.]Njt^rʕ뿓qҏ6&Q$RW*2r/'Ul|W^|`.t C^&Fvϲ{LG=S P{Y+à{ݺM `;OawA>aQ n䮂m\s $!Wi>@we6hlbCo~k⭛'&֕'Nvע;&W231Kb ݟ3IM:U`FWΩ;yGbw={L7j NWН*%띗DqN_:EE@v]2>0ij$tF:i@qjiv%C;Yz8$Sl_'ܙG6GMNdw[EryfjEh@ Ȱ7g-]jJ=[.lv3X +E#28URY;UG{ \dP1(#v䵲uyyly{6)uǍ]ش^TS_`%,dA~!5dd o"ϝ;r`P:.&EeU97]=f+ި 26ڝ ܏K<6KJݝ݅jqtw=ݥL]{QLpp'MqQ2˝2o!{Jrnǔx=bpq@ )z,t4UA wް&bp}-jbbLn$( ]G+TI$lwvO'4V"6v9(n>: {{$uީNUյf]&<%Zt^NrUeyVɘv渽xU btԝ֋ENLR3˴x )ɽ~x}O;5&tOb:ib_ wqPKK~JI'wº6Fh"T&{s]ەhגѻecs8Wu۽nSHu]wQedXo!Nrv 9 +JZS2s_9Or$W>h;nϞ1\Dxn 2 "ԎB&tt?rl-muP^jf;fA sʕ dܓ TL,727*+jsxc ~3URg@wscb`ulr{WB ;ǟ6+e<դ'۪*rǃ=n^S^ RQ3hŸ{F=\w{MwKEF2/#thḓ۷"0|Jʜ1NTǨIwݕ.tqlW7\8{bؾh(O'MNi]΁;HО /tt2*fNtW͠ӻAf]qmpFagOG*_v7tԗ_&:u7c]7 w^y }z˴Iwe|^cvO5](t/'c49uDkvpC{:P.+uk yHx*t'JUa* q%f=CMqp^ze?Y[mw]ӿ\mS}:g[rCK]3"wcnCf7WD;Qq^zfOeDKvg1ݓ2k[J@VQ2va׮g58wGWuϘ!!TO#]ݣ٣)+Վ5m秓O^ĥWD&ûVl畒n<)|m-vkq{ TN'-$dԞrf͵E-˵@7>ZT#.l7X'ݻM9ʕ+}*C#ܙ ;}Emf_vځ)#{^y1Ղ{&0*g1OJ!,cK@wry9H-܉ٽ`AC>a{wQB}tiv;oO1`LcYENBbH/;vއ;kff\ctKgᐆmכvc׉1ẛ鮁`+3#jw]*usg29cTEw^ib=ăAvL1{mqǨ&}qw=_35!n3bvzMBw8ҍ켑}8{&ݛI3hx|weIwF@weirٖu7uHߛ]w37(gwʺ잤eM{MxosɝhT+z5*mtj 8{dT%cwz}Sݮ#T͡]聜{`kiyimdiAj;AoJeMɽRa'۵!umspK񝳞T;н>͔׏Wv^2lǜ < P7S?ث1b;f;lQ]zcG=>d`ϡ;AWC{:aI2#&Ui`޻v3^-Srw^t{+Dϫ; @5. q7ϟp$tW 73vP%cqhL%%b{47&"sbcj_6s2;L%O-(s ۻf_^d%Qݾ"!!ݷsYئJ zmz_&=]nsii:dtJ*jex] 팶Dd-nZ=JoUverhm!w GsWvTC{Rvln%ߺyn+lM=R6܏kMP^ȃBu䣋9ʕ+@:HhMV wv}x~;ԍnSQ0wteg!'҆/vg]ORb&6D&w)fncOmqc{HA| 77)O (% BwR;Ꭺޱ_mxϡ@wq IyKUTpǥBXFˁܱ̔Zk(5Fyy;` ÙM.Pgngl Sw+7(HVU!z0/łv:NQa;vqwnWKxaM1L E:.cnj ٝA^jYi_=eP&lSr NNΨ҉Lܦ:g3kh`{WV{FƨNHgvQmYv?l.=!w@zt2!K2Y]L01`fݏc%,%`Lun^Gms-)X3r?.C=qϣ2rʈ̅Iƽgy'wdi_kz꩏?]<p30݄]ÕT㢊Ua2~f{jq{!= s}g!ڻww4֏XY 3fGFZ?i 8{;ؽP^6-v>r0@wK`K] xȱ33i]G5y&=5aE̚uwYw .u6ݳ2v\uANiN}@ =5WIBE_2.Sg::T잒.f+@M셜f[T<.ðݪp:UO ;_myƍ;%S շ9 ]M%ܕtT=5nKAR%y%}!XJ.~&XCI @n Z+CzxsJ-O؍33>8t #0e; NC{Ѯ)gʳz;`{I &vɟvKĞh [ftxȽ99i& 'Np'_Bl ugzo3%l\wcw\<1S]<%t'v2%zd ?kz>v3CC{uUDHup*&n A_mGFfiL5!C~/)^u22 b{*, Mw bo-w>~TMvLwǽvCcʕ+-x&F/CeR;27b'D!eX. JBw 5zH{ݟdž^8U񺦖M/p_3+_ 4۹#bvf w[zl1~׸i"BK?`R;4]$i{ Z$3PȊ54哏ٶmo{d9v.Dv'SqZ!EF}g»= ]jBUYP֝{.8Wt@^917ct7]0.G?;䔍 u߸&4r>0XGonLˈ۵ŕ2-S{uva;qwBnp;A=zK#ʤcvR;ߐWZG]{Fouj b9-GIΩLoKvnKknWG`'1͝ʧgFTڮp x}K 1I!"cc&1ۯ&R{< e-ר,wf`΅ޞ{^{~rj\r2jQ]0C}@l;-w~d7 w'i5^GvnjTW*v?r۝\5]vwtϚN:l>YX薊$wz$qRaoC6{;f.namB޵@tcwyt;^>g!OShx-.ӝ9޿ǹ]QTc9dܧʤ:Zv[6Α&ec 鸛ߎM&k[ @uLY h@RED혔@=7:}cԸޥGt3,bZ1?${$kws1w~=v^*h`}d٫!j*^1+0=0#];dsHqL~kR]wb`Faw |_rМSNlf%!#W<8 jdz .n'?Kt)te=ut/ r3`7'XJm*ɽ+]G1 +a%sc%I} n CmԌlwS}n@[p,ۍSv'SvG%3:ek !Tm1vʶe'- kQGddWfd {jjrO2Q*3<ː%'d(YL'Cܤ/?P /yj>vS=an?;K w[ɔȀie<^Jg9mδW5R߉/_mA}4AbT8we F^w%S[xSRh).ǝ⟡Vqϕ+W^ʨ]q3:78T 1yI>4oDS n؁%T_]8 ޫE *ލI~Kl`]̷ף UStI> Z:`C|)'{VXA {FH^115}ΣN>dEr߮IMrZ{e2tn7E!qOWU)x`讕,:V-:Z{[ȑNy'{Rr5pI/D磋OQ5CCP׽|,U uHnqSeb$=l7 { Sz{wvV2v*|qE)7Ō;7 gjP~Pa"(6RrUG[廿gҒ@|Tk?t1XtaC`vE1'X!QS![{ݽvLQN*!;RtȒcBv>cMvedP3*s.fe8evfɽui2=y<` yd\rĨ{* O[eWT&_{4}6b< 'tߥ{̺6U&fʞ|#(xŌeb!w;=;IRAلj^X{}=]خ/aKMqjj/v`69Hv'L &y}tԊb :"ttR<;|QG|)ǝSjʘ(\gnݤlwvM)ܸ]^i;֑dc&ÌǩƬ]@lqvswC|?bxv:pu\=HĀнI)wgZLa{|כ=$[30lϝS{ jsh{)sꅄXtg۸Dp?G{T_mٰ-n#~Cx;$!m뎬gEo)0V; wo<ɔ LGh[-;UuhԮQ%' ZWoeH=bvL)=f.][-徵4T3~Wo@2~z*;c(zFzfPrʕ+ *͸fƝQ>oy`:hD;AmtܯA.mO}e"LtjlTiܙ;/pG ۫nTS!{sgV28H.lgJ^f'Z]6{ .1i#-?ˠX3݇GwU/2ڞꕐv?\ f j?#A;<q"00ce632cx Ό{dxsZwi4$ujvxnݮ1MqM?YU?Qɢڟ" Tw;=w=1#]K)P] ;]Ю[uA v2./{4>Cs79乫4~ϑmNUXm"nvҷ[i 81^&lLg0:({Hڎx;s2Q9샴j#*Ca]rtT)u =w ?nSE'&;gvC5];{ n-h۲ Ky̳>"j/ΒϿŘ(vƷ`apj獎;&]{oO rvwxcۏzz`i2vol>Y>irnBzWtDž$-{iHѿc3]; +=$UtHB>SGÍ{S]zʨZevW g*3ϞBr7tMN%_2tv`z2o+Q;eHӊ&TTZ& _3S,#z Nxe6{?侻w{=wHH̜Ww9I Ff֡C+m''n{(\QnŌ5Vx{MWI9 hm/Adt% xIoxpپؾO})r/NpǽvT;N)#Dͩ'Ssʕ!\!1h :^D[(iZRmhr,L &⌉~'ÀLF|E_2#*xȦ>^[Z^_W^uG>\{/re^9`l]uiTf*9:uRAq&B,.z縠nHmSŀxyO!CŌݷ|γ`b(.veRlFK9#cK[Hrl{&߶KB8f 5,Qi{NnooOɽYAqѣj?p@hi'=wfRCΩ\B3+3~w\&Mr︛w9+C͟b9dKcXŨ 8(LyDv# Ui1# 1-CjR~#m' a@]h2Ӆ7aeZIuoەqWL=( K|w190OU=T{ongP>`cSjPVnF 7irBz{?;]0J;-@qkײg> kyv>`Y{7Yz7d`w*6v[L8Uk~N!? riNj<ÂZ_Ő=c[ Qڳn{yQ՛'Gg#l92{d'rlVV1E{&4#eE(;L%Lk^+W\ 鍵UƳ2A}[ w7!DzDNeTnɨ3+5;> 'tg~SňgӅ;vtgp ) 5` cY" w;D=0si| {4twv`h*i*,nwzHنgǝQa7ƙ^S8N3DȅȠ8Y aJ|vG:܄Z9Kp& )@wߦ*]L=$d `Kю[鸸w)ymǎk[Yl َGp6`HGgwN{Ce}飇ᑰ}y;u^tL 3e`[T7ʕ+C[0ڛ ) ˶7ϖ3;wz†d[Tf׫ǰ]@I`fTvH:S= 2ey`:;!G2%ܮO*l._͔QGqGNlvF5 JH7?.  w1_A ?ow")p'Op-0 n2v^@K wk9qݣ.m>: pW7B%=)ុb۫BԽf6!"l%&`ޭň.h/ 2\wTKݓ Ll磷ňE싸vz c2Y%fa?6ːۙsH2rw~EUOLo2YZ2LuSӚ5w9sYHa"}1Idk}rzw~Rߜ @ޒuܽUfӦrƽv>~tܙq̮RtOket7Jzv?!=6P&̰ĆnݫD&u3#lDž!l:%ˠ?A]ؾq&zY=.bz뼈.Z=c_"C,!ONon72lrם-wEܷGp_]֝F>b"$k~,o> >U{sPt݅=ϕz%h܎T*q mS-—Jv[Csɽ":*.Zwl AX0B<N2Ʉ{w|~ mc.]l E`f8A3du̦&[zΥӽQ`Ӻe_ꓲ侯{s$ w!C؋t:cF'rᮑ&uTv~Î n0nNC"_w!W;=w{ܦJtw)^Ϻ8SqꢿiqEQ1_nU`w%{6&A؝JD5qP2!7/*w՗ w4˸zxoLj{.r }&]ʶ۵;&(螮ݹv\wh3AJĀ,aG*Z5D} gGA GŐ n7"nClLv$?xab{ >3;^޶d=kRWUi=W\^z͓q?!Vo:Ȟ'̉U~qi zܕqGWz-d]:=wmz]wi`R;/ۦ@3^1WDtW;$=fݥZu9 rd ]G-N'qDzqi#AM1+~~f^?Cv>]gQb݋.Dw ބ!*+ǿ pyȺ1whcnQwLiOE!,ͩ#ppj_z+qkjНR א&_V{Vng:G;ܟ"{\w|1_ѝ L=FVhǢx+ 'ΐ76*㖂{ݩFޯYئǨׂ/}i۔+c,[Ԥz:j)4/3 ݋+f(#wl͌!F]{&]R˛R?!\E2c ?&jCr1X+QVvL\#``'I, ߳ƿb;B"*! ;'}23,v=W\^zk _#vL2bX̧A(=AqNB v!+:gT(5 z_N31lBo݅`Tc;}dwoo]q] m=*j͂B03n75~o #=fН3f@G:цLܾQ; r 2ŚS"Er[snv,X` wa(lenιmW0 DnR\mC*~[LSn?2SZɶ E? fd7,_poވ>H9 qB%Rb7Kʕ+#om.Lmi;wEeLUf [e&?QWv`Pc /z;W,@ǻ*f<!_z|H2ݦ{ox=vRcirj]pQ:00Xg0tyczн;U J}>7wۋvʖf.xs]w,=xpMe̊$;JˬS}cvawzdݼxSf&cOAa }^'p/fmĠFv׃s̸)^3Jx`]L79RӬua^o.Yq;n;}Qam_ݽnYlcIǸet">M{`_96Qd)werbeܙcQ]RXz9 Q$e EL@[ M˶+&vEڽTb޴J[UFV3l3~Rv5tA|^'_x*(#+jn|?JAY%X-G]h;]d{7:T\z"=QfvR;j#vۃ erܗ\{I3vzܗurZeS܏(䎸2wߜ{/*s2߽$}勧|ݐ?{;{OTc]3gs4ݳߓ7l_U$NȭRi:H4\x!%ܹ£.rk>$ۊEW)3Cboq'-/AşGҝ^R0trgVƖc݆S{omd^9ם+B#TZ^*}xaGuBC{p܇Ef3OtD>el6V5FݦGd|`WY.;?i}ɇ:Ԇ„OT}-w`;g}q?Gno+q?Br(7{{k0$fvvnHۣ UL;=Awz@ !S2 ,Y#mgYƾA}'ۅډgI 22%$}PO!4Illm"}Kma;5\mEJP`4N`*N-a@z[Uf~^+W\_ujrAޡ&;9nQq789]pW׽rﶎ$?3reݙA]ɺoNtiI-r2nY$t԰Gv{V8>sP.L&^4t1QOr/JTAn[2]U~7YB'3N}/Pju卑RweqDŽu.ݘSڢzHHi(l оTlLd!9!#նcƦߜ[Zdcrt-t Mx+4 [E;}2 =8 2J۹2#nȎ7ߏֱ^K[d6+!pOj-*r"#o.0acr"—Kj[C[ ˶}f4 tǸBtbw1tjZI)~Lf*ޣ! Zґ׳^sҬbI;vȬu=2/_=2ڐ/폆~-6#u}kRxAv'Arwde&*Yw~Pb1\45LwAtrʕa-cKU-_dЮWLoQHY0)wV2+2n7t/֐ O b ٽLM9νO"^v3Md'P ̭}UC߇i GwcFZflj MwT v$BZe!a;2#_vJۡW_89Œ=q> 1:Nj[=$23 Vnl UC9+$CdB@!Nj nGՈ2nvBj7@ڐ'pT}&ۭȬ$sDYrol\oͩ%w}dzS[=?)W\^BTf.RtܻqWw:O%LxiBëW3V׌܄+ rDwCA319-NthFt'g;JB;u_R͛ &H Yy\V ~f{5]2ݝ riHO>-܁ӐȝBܝJpEL[.چHH0~ԕZKm+/T0/C݃ݝ#b&#~*tt݉ʞonjrtWJ&R{VPLϢϑv;o7l$cxijdFzR%;jimH}]%;RCsvD;2C渫=dv;`=W\^z͵vrg{urjqGdZY 3ڥ? r0N| Jߋ~ܕsT`?Jם{rv")OM78I;wn_hZx˷otPr@v>Uݫ+ᮔ kA6-MBoo1ǽpbG\fS7}g*G~vS{nF kT}?G2Iҝw;wH,vbq{+ğȋۗZqEC`l8"eCJx"o1?>Tw}pem¤|p݅"wnTRR/!(73ݩuoW@ (# a{4nG"ނVrܫ6Ihs*ȝnQ4ZZ;fOϽy&CI^fpšC.N))#lǍ:>[Ӗw ݡnݥuuL}; 莘 l0{rHπ%K47:'l.l?vz]RA]^}X "Eӟsr_Nǝ!w^e qQb2̸ksjɕ+W7QSSy;JA:95:1*!]F=%q@pP76e@I!7ma*f^q&sCwt@fC78G݂w~˷NiL5@v'b}C&2W9$&]QHaNFNۉ71뜁2;tOtd|ۃ|h|;>i!?I}%r]Fܮ>H@zj!e<.ӝٝIwv91ؾ}$բtNn6x f|<Ţ2 6iph!wsܟ~ogRyp!ɽV)Y;aә̺C$u\=0MtLCeG;mts9v?66t(W?Hm_^K_]7O˅v;%]SvAqkh?l~;x̸_'+BwsW7+W\Yo-ܵ;윌BS]Qe-*pYq[Rήn<x+5#w'u>ߟCCawus?rHpDwHS2g v 9]B;!7鸟ۥ&ex4 B=@.]@+"{[EvxPixaoLwhCoԐ.rg1q=ٕʒh.j7Ͻ^#MNѝ.AwC=e"Op3rܓݩiL/գBQE'tW}C]3lthCNeTFn{{1ܛm~+r͹ntܟ~KP(t'#Ά+Bw ٷZj>YBPgnHu7=awGwr\i .n T@p;El̓O>H{&x?~ _NSbsry! 2Zw'wo9%"'e~S8SqEEv5naq;jd8(ef쬓A$.2 HȰ29Wm.AK o\R =V(,e.D]{U#KSݱ}2F:5h ;!!@ rVU-~1קkMEܟcOû  tɏSS%3m6v/wCB)nUcK8.l{'N93~B~C7&f0[Lvr;F~vd3>AޢFpA7p_`꺛׮=ajv7uwG U9Hd%aՈ]u{HJ3;W)RfӸy|O_rtobн%qϚ3opW{w4L;T(cbegdf'/- U`7QƽX={r߂"pܟ~?C_zmH~sێMLȺa3>}wYhي@O^bݥ2̔r._n8LUaJG1{4SQi`{vy!܎?vO폾Ah\Кsd  6 >w[A>⮬ 2\rzqW{ ?:ȣL[v/(qB1*/ ww|\:=0.n;y?c`F3ݹ;^Nt?ˎ$Vqhq- ntҥv3lt3%LK/KvNݛ k4{zfz0hoV6; AqO+ev=zb CU4ÝE3ۍ}*Нiwjah&f軻sOAᚤKLZFdS#I"֊Qnգ[&=ږ5B;.nĂ?nj- 5GCF}v%? 7&t [e,*-*:ndpLߋKr%CL.U;3L&F{aݶV広yq]U}Tg2 ݽ!rd"3GNɓ'=¤aw6N;@v Y)#l =4[V+ӛvLguh.aSi;] [}eed<ͩ`Ԛdeq=W\!qQ۝ y{q]1؜ځ_lSDjn;>ÒS}OetgEfu(YeZ ϰ܅wfq;}w˭[pۿuC DV yv;2PNb d߻ 1 4"DwP9 w2]FimZL& 2"tY?'wYe Ywg>N])vXx7|F@vXN]906m"W(^qk@,vuv+;p ?{/r_{?(1zcw0$sq01w/F}CC ; ~^W}ڦ:͛,$!z3 A;)x_عP1ہpzIQklvW{>8MT&O3 Rvw7i"΂>}kzWm/ Yziک] .nc#n繲ˬMeG)׎T>ŎZ*s`..v$YCo!wLu ۉ&99JW?`l?؇5wk,'}@Ⱥ3v*5\c!t?A ;{بJמb 4 n'ۺ$n {̧W]WlHs1MߛvynQ]_9,.]橌^f2+o3=G=#*#3eʔ5y^Je Hnϵ?;#iV\e\wjv>9Apo0ݑ=x)wxG-}Cy2e,\ȸחpYݣ2q+q#B|$ݦ^}q+ŃxdvM{Tr}/u?ČDxJrng1۟g}&[ñ~[W v:=k~|/3&c.9c\h̰=&~0<<#A ryP2{}\wL&e6Tmd%U- ;U +ewš5Hq~Z#Q9fȺNcNA$ Đtlvƌ1Ao{5v39K폅-X vf IK2N@T"O< p}lLY ;/!eN+)6CCv^]ˑ;zbflLtU2ܷ]NnW {f^\6]i7X/XU,U؝\vfp=\VR@.\_HơFJB;!yS Ƚe]B'-%^knд}FNNGZnE_B2St>&wܡk8i{1\w;ic+p.v')n΂QR;3]nDx;Tmvv0}ٶp}=BQ`:`:Alvl=/'_G\)&ex O«2NZ}Rcy# Y32eӫpGNEVQ$U*w)$-?FTez߄_ņHT]Cܿ5{1TO,w4;v+퇤h)T>ak%ƃcRa=b];%]?F]oi@;fvì UC dyaD9"پnn12 w޿Kr>h}ϱ5v)>J&FUGw*p{܊IiR]+/1ø%žW+#rbRѽ@}:P wŴ\mR2"P" iemp D(O ݝ >i2ئ.fBN㋦tB}b2\6U>p~C^+g}O݋H̴ҳ8ɠFbo~JT.241#vos^Ű;t>=q* m3-wzKn폶rsᰛgϳmgS j"o2ɩ^I!}j2ϰAUТ";*2eʔ)_/xK_Criǝ k 帇ͩg=@D݈[\Us:0ʸoSqG8Run25d!tН AϚ5)cbNnwpgb2c8s ܅"NuL=a[Exva.3ͬLJ`O &sO``F2#Iw̿8qI qe{D&D%T@6jBxn3>u(!ҾP,vѽ`̦u1MҤ{މKZ%ˎFlf&SiL-^2CΫsOl?)|rJ!G ^cfqq8~R{9@S/]8zn2y\DlyתKoH}dlVnQjF1.Ti%;;r*AH̜aǪF=ݏ弾nT*|6@g'9n7;fvؐhN4yiº]þS!g|UZTYz6;&= gʔ)JO>}#oۻw? >FebƝQxS'[= SG;P/떘t'LCyg2IL&;E]܎u==& GI!'~ N^tDOםvn~׳v7)v@3=b }-UI31&z;Sܿճ oيl$UݧD Gl",vV0#Um9!wq24758NE s^% a+eP["O|H˹"$Lv yh~I+(deFFVNc΄r s/q?kxw݅툷, {T#6bjKhv(;dwNS/c3Pn\=R *㘥Ic90NdϽ`~{AF26FfI^L+L2e/Jn?`>h LsqWTfwwxͩ{ƝwpN s2oЉpwqzȱU?Bbf2 bn\bTa!8_֝0]2QY'@Vw٢Pc .;ElONT= {*z~ףvގَ ݢ&7;NB_\$w䮼 U *f@"Kve^X5{)yGx i+n&Xkch Jn. /{|ԙJ`FÏq0nw>Mw˘L>b֍h$Ύ oiw%NS3݃2JUJw{cTtr1}- BݨHڐ** ݹ&'-[J1IyA`CwبFFk^LS#u5qc>/ w0 v%qwv6,,)SLmb:ʨ) Ee|s83qe!sܷ(fLˀ2m2-s]TyeYe!2nkҎS3F۸NwN^zbu³w!Sv9"ic2@v, aƺݿ t:ѝV{= ɬV[8jaQ  q2?g62߫}hX;YwOB;v&yu'S wCzyNl|ݰ݃a7N^nRC=2Sj>EuL#v\`b6yb+ː)r4v<ƕdݽRXSKɈۅňR<&J]Q|Jˤa]y_N$UԎu>@bWs?:=+GJ~i"jBwTBtt'{sمV"AnjuѮ \:NUTƀ+C^-w &gwpq{،=.lOvP;ݑ]LwлNrÖjkG-M{FvAbE]/MM\`ྊRQ{UUrK׭~SڦJx6fʔ)I^<]z{_.*cǽQ`q-nHe2n\(3Nt{,̛Ƙq/޳s˴k㗯^u\wmRx .>Bl1Gܕu?v}s9 H.Fepϋ((ݿh;;d~^;22=vBCAj+#;˚-FKeqv榵؟݂jjOޗedc L/NU%ɵ^Dzar*-ѽLl+*pCYsvji tw:ǩO C=ܮS{A`v a;H;TCνqy6WPiL!{N# ~Н2ʤخP4ɝ-O<JepK)D׽&Pv"S LGTY2];|ŷ{GO)7hP #2މ4ݿd2 6jkv:v۩%wºz 90KU~'Rl{QmzZWq/94 MEۚq zNh w Nj_ҊrVٷvǚe2eʔ鿡_VDFz׻ߓV9ۜzC+wC[Tn`=2q/)ƏӁ cPtp! lߑwG5Db,vfpFM;v%mT.ʭJGeQ%`;$Xl;DvN5v vAePnb2$>i]'' N(v/ɧ.]ygw$1n; w8;׋54)ӉӧyT]5}bڸ ,h1w +#L'^dwnF JtwHKkߙuNtV1n%uۉ(Dlohdi{wJl4մ-/6+sc"_ ijGrg Kf@Rxd'2qߵ ,NhW@)B^4خd;Zwm/8v/8kRD&^I0Uh|ctQcOK(@iu'}qqNd)SLQHvv\5pߗnNg}H=rHaw2q';RHLp*/^;ՆT@;;QR;wUY.l7 ˈ=ꮰ;Qf[n莥)Di^f.6ʔmWo{T G.OEny2?h~upyr}QAr-.o"Cg{ ~ bodc.)XZcΰSW%4Ilߏ9zFU^+1US.iz<ҋ{3ݵKCT+n^Dn{ͽN-w.fncZs>w~|ԩ6(zFC;;B2J\tDܙPMhzV^3#C]"ٿщˈLj )s QK˪˙KY w wܓz.x92eK? Z破2ВETf7qoU;[eN qC˽X=s} 'wm2Hʼd 7ǽ}.Er3UKsUMW.]v$(o1SS;ɽZzY}jXtܷ.]J>3's?de|v 2܉vp8C2A \vTl% hoJ`{9]"H"wwܟ~?Y O<{}ooH۝eǍ'1w)ﻧxh'2;?e Mk :;=wtJc^=!wp|E}v)X|mzl*NdHnc.;X[ܦY%xBZp8(CQ'rwCH e㾿qr#sP$@l3&;9@ܮ v1na $eF$H2z "]خݳtW'3݇Ltj]wZl,^##֫jkԩLfK9u.K?{gqKsqXݜ{28eA^z ^=s&Rd;~Bj?M l d eD0j_;_|${EBL n{]pUNB9yUV1)SL="u ^FAɩvSipu=>:xJ˗ q)s\a0!n0ьߎӁ/3c fҼCₗqr }o]'Vq:s99ܹsz?z(tf׀"T1| Pr2 cHݭvm o_4ܹ3S==$wW@V>Dvϡ̸FULzOp2po(+o'3VUO^Z vܧ0ëyɢ{nmxUTHz.c}^ bkqxGN21Uv'wc׵%=鶧J]8s52;SlB$wp;=5 2e ho uyͩ{9/d+0)2tK丟L" K*s྇~eUh|Uu丣_].vOI_oH:4p_  ̝{xt U`Dsוb;$n< l#l{7%΁1dB:ɝI8~ ǝ2'9}'O݇qS_.|vG5$w@]rBwF{^(dώ fރ9CЮJf?=ݥݎn+P|.>V{@&23C{"1*yӓi0N:_k? 0}HC=rϹnc >Ton:czw%= 1l?]1vnqHe2GF ڡ+cWML;fWawݭ׽Tb&ٞUw t^nw)Awq{혼 ޕyʨyQTD1¦T(m?b1{QK`VR)\ԮUNd"+r_f{lJePuuuYe/({u^nJE$2SL3~uIvoy2:9C=:)u!k"&[c# epeuq(]Q-wp{_UU%cxv2qԱLrr,v>ݍ۟;7ktvpsM)_EnȉQ:=|tvڣَI&S(jmGFlXݨܾ,ځ6ܿD'+N=Dev/RnMeܵS1}h5[驀6o۴to]/T a.&b7 |@lP{ˍ?pt'bIʼn+=w% ݽJbgMҺ/M[kѩ,5>uZ@sݵm$CfSi#LCed L[nH0qC}wѻx})&.18S >D+ߝwHs;w'24K[w u r`a=ma؎']s+4p6U힕Y%hO22uFcKJLЬ"Kr.C%vb#woI7QK0&tۻl&^=!샴#'52eԎ.4B1U?er7`,w{\UGj; Bh LZ Z(1DI+8@0آa(c-XVmuPF\ds "|gsG +k(QD~p}~,-l2q$"A=2q Za;l¬mE'};zAX4; T\F#ܦ;}? u9etT7=*foݎ$| P?Fac;&2ɜ},.`hRjR2*)NjM؞EFvdD8- 2$R;}9s_+GdG,]k55w(a{L'HT>n'wwdwLe!gIE _o--v7E]oE#Tʁ ''xN_,l2wm^FĄ, 9^Ge21s$Zrx ܼvRS0'w\yvoD2+Wvuq 4Ht8U6x`];B{!$/ Nl911؎ 7eDžkpڃGnH]j[څ%19cIyrOȠ1۝]^|q.\Ќ#u/ư;c w :vCiw(QD~{n}[̵Oܣ <ܕ*Qo!2>i/AZԂgnNpW&ݍC=4s/)Xrg 3&~ջ#q>S]^t4]qo OI; ؃l˹M˗.֓Sݱݨ=S(%Xxշ.y3{`s}~{(n?};7 Q#ǰ;scW7ajt{nUX~Gajkv$RR;&+ymS}}'qfX:Y^TLn;Enw-#ܥZ_Yc#KrܫSvvb;,TSO=ss<} crsI>@lU 9+ݞa)^Uj 1݅qS$M(WN m$Ώj!p} -㾱?9_w!^ YLܾ<Ѵreޱ >!jmcFrc 1Z>5GUxrzF<1z=+ا1e/+-np;vvEi| RYw67x ]tu7nPR_fW'a#Н.; ]B@wڹz=}-?Ds]^8=1kd! 2dٞ3/cȧZz^*s|ʊ2  [Ľmv;mweI {Ojf%Jz;Ee{_"N[=ԪA⢫j@A;h1'AT~Z?ѽ02ܽ0+kI8,T 䃂;Lm{,Y<6 ݏMu w#gG(s;[.YoCN?tmǢ!lg $N] c2N^R$32qwn{(y<|!V9k{WUJ"f ݍe!⾲*^Qԅ (jW}9F&Lw b{;C`w}-v;w .xc:W>6^ _#]nZ'ess (#Ip#Jۑwn"[_[yܣS7~ j'+'/1Pc76;1fsPm=UQAdL(DLg dZ]T]ljQ;!ud"]vkm/! "N^^UUo:{ol߻p?&TvnI%QvȬ^\؇_=򺆂ܧ>ypCA^y?Ў閻;mxړ}%J̟q;>7}*~ n,yf+3ڜ渟 NN2ʸ+*;6s^Yw܏3BYpI?ݍ}e<:tvn՘!{`8_xd=L7TL[ֱ3 <ç8ٝ%7yn'@!OZ/jS*CnN^2oAALwdg6]^\eZEߖF{~~*Dw51A!.è\﴿>>}7s&2%Z41LćΩ!cg2ejcE=|ÿ)+fp bvڽ1*mW<3PgY*lH3<=IkWk"Y[~zblWdDzΩ {Z{Ha9v/^‰"Iȁ{uĶ{D{hF;&el/߸ u;iKS SK1J欖߮l;vb6R]Q2YBf4b2jm7l(DhlNʸ2W7]Ԏd{&5p܍[;hKe^ 'J(g̘3>utr}cCi=ܵ9u97؜x{+=q7ۇZ0ěՈͩGXЗ-*q%9=O]xewci_Gw4'KqK$7?Io)W?ss{|1&$Xc]+w4iNA(JI)E-n{RVL`dIn7T%e0S;. S }(z붨bpٞǽ٩Br;1~OIMˉ'<> ؎Ʌ6HSg=$J(ѭmNϨ̇fJt}>U;8zFJuۛqi{ssYr@37wHw9xRTnA {Z+Fƣ2i27fUJ7,wVG[Nz_(ً/8狋/upo ,wO\=l9kWHdwq -adv{#UNsׅ۹)5v2r2P9U+oeS7d1Q^?/r{ Mȹ[н[;cNGZtW."tܻ* A;oG<T /7aL >Oxgt27܈AnwnN.``Y6Dv6zpa7f#8NUyncv\V>~B*\XߦO:/|uI,;K!34nW=-2:nz42GtS, 8*#`esl7%ݧ <)tW=dNx0tt}]kb; 7Ů{Equ,:նIF;am;nZ2ۡ#Rt_tLfmwh-Klj2lҷ:;_|in;SuwK=刱gwv[+|ظI"nNN=n{$U޸Bzޓ~D%ǝQbꏰO[?DazDwäL;Pn{swoVksx}ȝC`QY#MǣUʔdu!8\-}|,w:MUw vI :j܅J˩!٣ͱ9Nr?An7rw]r~%u >Uo{]J&vDlצTbl;S1~ftς3L{Db79B{]"p{~eiv=2̷қaD;&0X1RiQߏ<cus%hלNbv V̴(cvA{Pn.xיLRC,q=+nwKN8{A="z΂osoXVj<gj'㎕7ݭwEe&we{T&vt٧YnrtOgweCY`F^ȋBsݍv!Q13}}#QLl[|wޣQ/1n7 @twN c{Jn.j/tR[ۡ8ՓqԎIMQ9i DDzdZ0yVr.~mcl/{~myA7$3e%JtՀ܉/trCعh1 qWAI*nN剋\ϸoQTFS+D{Ƿ =q @{wDeۏH3svwod;$l[LtQ/q7z :/`69&=w;So=rq 庋{W]7\%Jmw}`; $~awe'%ӍۑQ<:q:TyҒQTGZTfA&<(q ?e=ʾ Q%Y]9|w߶,P*ԅ*vsx7bz/= G3_m0$Q w|-t۹=,;( }{(NHpjޢz{{ק`oE&[**^@@f5wbRaNEtQ3AK;2mdXn9V/t7v"F7T5` wp;2(DGĠEGdG3Ar:w9xqɁywmJX̝K<+oBr]~$ٽol@XkVs3\F-v= %vCǵb=סVͩ\9Bl eolǰ*بGvW-Z0(L 0SvH?qBwSuÝG{8쾊vqw7Aܱ8‡b] %Wc[}%i-2ßܶ}Q+LMl/.uGdjV,QIv;L9Eq/,DT{{`cbhLBvH0 q٣;NVMD%}"xr]xͪ@>.]>̮]l[Щg=ݜG3)Dc |LB\ 'ӝ{uY'~7v7V *ݍ9ew^E9_ajPά lYʼڝzyTd} ȀvND'綟:p2L_;wIQk N/pw]Deqq3lw;01~{NH ;3tݳE{;]C#}v3qbF܎KmPO2G;TcdK'۩90WC-KźbHHP NN%g/5nP]N]T19TNqcR(QD788+;lxC+_⩣G]47ju$ܛjl;w{^9[vfyPH> t;vH5hq:Hfuڜc w0UA `I\D%E}H/> tGDgQUv+ +-ps2Q$hG|)L':hwE{kc-8gK6SfkD&dŬ;Njy-;T/wI%4a?GyC?Cjt^J5LO0(#lgZ:.n/_&ǜg.q1>q?mjX>F)rlQmwRQ۟ |b:5fyn{S [S;{{S.Bw7-f;h!p!,;]<.-!&|_bv<`2l^^(4ܵb] ;fvoXu]qmg-oBmaSMr/|-v*0qwTgܿqyb;L6T쮠;2w7AP62[ܧ*ם ѽȝQw#w$jkbۗP35.)ソ G.]oɪmN=Pɮf{P*SO7; r`E3vL.Z//yٸ]~74 wَr'T;8.ltoW$ѠT=2;m p:70rL^]Jydw˳k _b$ܳ{Y–ˍ黃ީ wT(Wy9;qMjkv{\KrQ/Cw̸i%~"o+ԨD ғ-T*yܽoS%T>R8pux_-;P}ǟtlm҆OBǝ2ܜڀ{9OsLu6t-\.r7dF;^;\w ̔6/hoH{[J=0ð`\1CtwÝ w;3T٪lչKhH۵tx璞qDB|q-y‹+LGE후2ۃ-7bn;/tdNro'G8ڛj==t&U'wue I|օgm]L=QDnqW]r uFݗM(×,2wGYYxe4*wp'~8ݛݙ-[q}w/}19 1qoDŽbxW' T7[{2lt-Ȯp6w8"#r_~~e ;Uso@qeۭӸ &ۅ5T'uBǽ7r@Tı'&e>TcC^$n4p߈uD{;"(G[SKS 5kv|a׍]bw3ޛ;/9a{ey*w#u!\vni ḓw`lb6wD+XjVvt7)k+w*or[|`˜q`ZIvuO!kf7~Tw} ]3pܟvuqOsgC^{@rf/R t tt_7?lw;w*0S;MwNxt#tb< ݫFн+hiAQؽi?^Sloiqf乢DzKt=ZTZ_˓fS>VhI'w^/At82ql2Ͼ4w4lLjv1tQڥZQ{;軙變>k 31+3QTIs^k!LFk]qR떨}o ߦd܎fOmkCZb]@Ә1mWHEc;2m:uS~z=93>smtGv㕚I23%J4p?5qtėpBqߥr2Faͩ/,uݤ/Yq7#32M Ω]jq+naFe'WqܹU )T?G;}]k%ոΈ;;.p6_{~ weFDG)&R$pG;~8>nʶ/ ^OA]F{ j ~7H=]uM\T#mwR\5KqܬmWԤZә>yךCYDvt4rey@~pC9\q=Mǘ ^$hw7}7Ц6 b;^؎Wk3ǟ`s6oi!;oۣx@E螐U2t֒@#NUoqs-,?܁.l'c)oI#wo EٽwWGU6DkaǘuA;&ٝ fycM+w~ݧd*`2hEi8НovjĶ{̙sn[ Mw Z2ً k-P;+цTiEv/d;.;ldžT?BLԻӱmDvv= cL2Ty1@ ^?fb3X|LQ5QDn( ?4?TRFWL|_Q)+ KOnݭɝǬEgeZa6nak/>ݶ`&Y*v:I2̸3p_8xeʂ2GT]Ƕ&Fe*A6#)RIEE6,ps݅ >A|OvCn^^.r7ݕhFi w.v+-䮌;-wA<@ƺiݹb~n_}ewv\SY˽S븽qdVIpw>x6oo/i7f{CS2qWxɿ XLT+}2h Ϝ^_=;+՗6Q`R:w=}e߳ "qkYܗͣwX!4jO\RLRq35̸.pO/?otʮj;O V ),mQVo\yXJ |;pVM]T{G[i4tyk*4l3E݈X~cbFT `I6 Ny=4Eqbz~7/#Ӱ;ԇFm:}S˲Szƽw([eB>U3@w`5G1޲B$w/lm̺޻yzϓi}pc[Npǽ3"9Bvsאu-\|mrtG B2Y`qና;WړHEIОqQ+^GTFF[x#f7gО;Ηy݇IBQEʮ 4/j*u$}]aw3MMuY>Brup߰Lw˺f@|zYDf߮b;gBrVnv9.ܝۙFxr[vH;plϳ]a]Ю6@fd佊31>ޙQPcQ=1ө=] !ܧ up:fo*9cvN= Ů{>8-֑K2DѳԇΌ~zSӘSF#МpTcٞ L5=;8ǒ{M$Mr\G@vvd(خ׻ ZS:u0p'侶_Mpl~*ɽNt6{6z ֵ{A2 ?yݡoGU+O$w̲g{+v:.)2czrl_]خw; ~v,(u=/r#SkId;ɤ8zdީf^Ͱt"\yڝ/=U s+#lWN*{RuW"qx3ɢa 3R!o[UF쎓K}fXϫL`vYհae-iY7]u0mb>Snw b;2*TdlPSpj'BۥKlTGu!;Tv195TWy2>'&2Awp{7eQ[QRyUs\Jeʆa~ߓ"wqT[̥*Ԏ'w2\#s!zv;1dU;SzO4hL3,EB|6g_{V"ui񴱭dǽwY*OpGm9e~Crʐ;j;#LJ]e;@se.E}Ma{8e,=t")$tȽ:2`u#w;;9݁r;5_t>=IHLeÈ*g#}*gW|FRs;=y߳wB!"{DgZϴzN\ݹz Xݡ;ھخq QJnԜji%T=/;֝Kخ:u;i!ǒ;|pn2W'{&̨Nr3FU]3dG ݻev/d`rt_FMɠtgܱQ{l;!AڵѝB;2m"vuēt'c{OdBv|a}ؒOHMհ=ǵB߽*#lwL%ƽLޖ [혧*]{yס6{s{r\W8m}#(+G'N Zq9œbB;ԪQ+hN)^ Bf{ Nfaٝfq[[,UfnQqpnߥk*^E=r /~-W C]U/ _UZT[Y7+S_Oz#j7nҷ\F޹QvIIƹWГé坩qwo[oj@,2 ʪK )*CpDr7t_~{D^]0|[gv\ʙ{y h҂NpސZ .]- LߜAZQvA&SwĊ*,ޕ>%OMm݁,+c];2̐ѦdwN0̠8ZU?p ȽK!Kv+q;VvbO*v#v3!)fkԞ~tt]xJ #c#RVSߺ;u;= v[+ o۩wQɽ;WXDѝSٝn7xw'U"pǕ3*WUy?ڽ/[V|:VӊweT-4Dqn'>)}k*ʴ4*;`A~WBܱէV-}nc* oT+X=F0dٽϰ}gD%Z~cK;wHeB؞uݱGP{t[j?ޑV)!JW{ ; 2c{'C>H >832iOL =ll !r;lW5 LNbbSۧTܓwu~f.QuwtDH|-T!?vr;x; ݣ`wP[ho;t%n%=va{@Bj7d9d&sBjTطK[m/w5h+k7(iN`7t׊$w?DZYswP;׃oI;ѝ [莋KԮPHd)v eUr+~<,jzpq.KŹܙł@H{°8kD ܡզ17rKw͟Op8dG_IG2%;]K844wz݉0phR rϙ;=k{6k\u$wlǰP{Xu0C6c;c;N:n&A)ؽmq9%s,y9C&00})nBqqzHnxYyU@u':)X =NA9Sqq94ū~w;#*Ϝ@wJw\i#잁Su!sQ4wL={ "wn$OR!5$#yK[ky&фԈ)'v'@jSv*ub)UՌ2aTJN%O"wJq6tʻ"OL&eD-*Wq|bT"}KOHvT^']DIFd &0y 2*CM Cŝ޾pT=݇b mOfnȯ2ysT_qN8^w_qܽuT"D]Gp7=aWPpd>'2R w#q\.o=\pq=&=;44$r'΀AqԵޛf*e݇%- 뷿$2Nq%a 1:j,g;Twa;nzcw{ qN>w _`; [voHwTyx9 ^]o9;sb&zd)2 }1]:zG'íޞ̃<vg* ɩjNu+wx.2axl1b9frnt7THa$穒ݕ1t?{ȽiE"0Kso#f'HqnUI}leXOl K:#3wQ2y);{;;lG:rceэ_ԦonYR3W/צ+ReR[,Ƹk;~S=2m9mt$%w'=ઞTw5 H] 1\nwc ӑ^  }߿%JU&zd*֣5Ʉ{MZm,HB!HզKnDz ؚJWܓ؞ r$( }Nnzmpw[ݧ Z}tQ΀6\+6펄6Ftѩ=@wӁhanfw{쎗ucZSogG-Ik;yެfv ?1YOJm/庍bc;/=6M2خ1ZWNu0ZF>P-VF 9}; jN+,ݥ#]0!Rv}NwUrz{y蓻C{paQa8fWO]Vtq^9;ɽbFjNnme`wyݩcc' D_g(uyܽ9Uzaq~hǝRHq΢UƇ7qc=vv;Zdbrdv lRw0lO ;~pWAu{50YM*> CrdH7Ž=/ ~[phvl#wxCt=\fzo^u΀C{( J†n_T;=lJ9ef%x9s ^\L{io[a6O^3 is ]~Ƹq=`{R'wp{lNurCp{6֝ѝ|,Y}c ]3(ws*` 3]&gD\%_ qvڝ۱n'nFdЂZ.]@#ãSd%ۣ?w`G;D#F[K3O-^ {!H ya p/ wI;%ˌOez`T&lUs\?(dv~8;kQQc0㞭?iͩq"U&nN(AɩPrt7+1p̘NvclvWk=ZNu}JjvQ -qUF)qwbtʛS;gfqŝAw|S]r]e]ΰvخܓ󗒊7;55_?$r7tZ*Bnrwt_ W_⩓'Ƕ٣:mDw+L&TOOoMoB@x%v;NU?\{`dDwBrhQf$Y :-q"S#r޹ER0@Af;nvP } Qy|2 N%v7L_} qZq;QF>vǹCPwo")B%>]\<9UF$+J]qơCMk w1,sݯ0b@tHfliI50v/;aIn^V)!G2 f$D*lUq,Ѳ$|7;nވK2LQs*+dU}{E>]eM;sW5y??<~8y"Bw}WrG+rw}oUp_[L1v:ݱaL JfltC_=v+'w>-|nN#;1yOHInKavV=/1.}}ʖoV +@0 28&=vF݈ڱXgk*sIuFݩ*2qsjO/{}ݙTeo~}WBwƺG{ s$^G٧TiѰ;mё;wݩ[T1{Fwe$0]2vdaKjH]ؾЎBhF4-϶9͜"Rcql!%g-92˅s;T?06}Q|nvwl2X)(;+Up>Uͼ_fwHu3݃sCr\?@@)sx뇋(8RPų 8HN;}E@wSe~Xe>2fA~`;< [ӈaN;н=0#&)F{BvA;-&Iӹ}WIIHqLJ}7 nWyەRuQpYfj=J᫐|]UOL/> t.tWbM +c晍$we(]N)qG/m/ʎOfdu/پ R܉,sve"OURJY(d cL:MnХ-iݻF؎Mlwj?wFz̩_l~5 GA־R75jn dPο g$v]!KtJԮ#q'0x{!oxԐǻTQDw+.st[j_l-RІ1][;rMz /3{AqYy{5795oMLT# l׃MMP;D~9 St} QIsgjwX|{r'+S{kuOHT+TٳaTi)iӘ㮪gːܱXcZ;7J!%XNbN.c;v爨Keuܖ^.\%0@85k)GC7)pwj'+30= s稺_2[[L 5w{^w)} >Tݥ"s3 'T<)]>x $ٳ)\R=a{ݕ0C];:U#$vخi-jRd+8R;(GFv.;I;o(֧|97P9̱c dSqS̢Pq/7{&wD}ʘy#؆u]9{rQl}3 w6}GOYrZBI$w&Hk- +=Ufc)qgsj> &Kug*35ມ+򺯟7_k-t)ӗ&A>ww%x{Hyt(L"wŝ*\Mps{ؚj;xJ{blj*lPeS렸73N\~%2c]eT){ D{Z ޓv㏍H߆5۲b{m)]ۇ-I\hS{*TBo ~|'q&{T1l{;mpݭMUԮ\wnse? A+jO\~c]ч`2]x܋;m+J()y|,^qBD:@}ڍڱg'#L =9:U2uPQx)d6.^24W&V66 cŽ*Tܻzc{5..T3 vUnu>>)wS,;W4*JLݳ)lD̉,.0#v!rl2V;IҵQ?(pɴv 2K,1js@uO`y!Yv5x ؟ȘݩG$ uw.sy&9[^ɩoJ I?7+cFWt?NnǦHwܱщ9ݹVZL>TwZfJ$cӸ.Ì]J}vEF**<e?Ntg %w`vu"GYdؐо^$SQE5Ow;GYppG6n\ħ yL("vx W ?cEhaFِ8Z~@펥GY#9s\Ctt/YV8j;{"kh 87H#u[@^(]nI!TNWܕzܻv5(B9`>U{Zu}(O6TyڸnJ_ɩ;j^.PZ;.3fδ Ye;B%5nv)5$\2<}$tv>'َ@t.UCۥ NrUk]m w򛆷d wS;سtH#w8ќ}pG%KU{ =ɓG:laNn `s;`K:.{rmdڭ,HC.Yv砶7 K5D/g|N}Fv$󳢸XlWo\lAfօJb=ܡ2]2$w{2lNuf};?R0%w;Ev')o7{>Ldʹקhq{%;TIoN{rɄډ -Ƌi-&w ]v g{a;F8k) | 箿CI1~͛:~wSk yiR7ɠPYZ*&YcBe SxRjBv7v'9ܱ]p͡ܕ3Ý3*W7vs銡_~|'}a7"] < t0q!3/ޘ5 ֚Sa8ǝ4 SOAӾF,WTV+a&=ybwaNY,+)KjN*sem<+d/{ͅe&Bq?TX6%vgi8?pTԮ3Fb%{⾃;x0t&;| Y*`rŝ/$c!FKApfڪW@;-!\fݬOyU2+;%S' ,u#w1vUT-m *hހ)v[,0ݜܼM/PPmx2%_^Js{br3e8-wS/)]L⾣w-p{*s1Gx ~d{$ yqV2݄w;TwD#ؽf2 )g@wшnvO{/s٣N==،ϸ"#j rgb;siaZ>n*M=I& ۝urҹcG)κ~9[ܗ_p~+kc×x7d՚ڪL\ E&'Ue[Ƨ2E,3nw. rȞ\%O}{=szObzΪ> "wb9e<ݑZ=F9Sq>P˪;}Efw;)fVBwGv|X?LPKq~J};=a%qu8Uw N ;( ˼ֵwn vNFxwC{"wNN;6 Idd(ʆN`dwxxzS, {{tӖ0 3`wO }8=Avr:h}6v(Q5b TuǎNzgFehnSnG p“dv fG,r=H=]y|T@]>.ܵ.Zx ElGAb>AqptOA&soĔ 2 v7l.{W\twr,˜f^m8>SuFfwFp&2;x| |„"]}ː!ܑ/=Qzھǖн>+}&(jCE]-J6FPlw9e˧O8?6TSuGz."$_!R+qw=6͸ǽ5qOne)-opt2Rݵo}Ntn6n[FXzWj0)U޲{(_*ī?яjJ0V_VA5WNL0;+Sec)W9Bt/c8p˖ 3+Mi+%K;jb1'@KnI`JzIp[3j3);hEe6*ѩNpUg}xևxM|>n/c*{~qb6~x6tw< gwkT]o"g&ˤ{۷D>\UKlvS*w1(,RIj-Y'JSߴZ;9ސvb>? Ǥ& Jr.܎]V546Oʼi ZٱXJveϭJ}*e΂sQlx8g{~y~\D1Cn&,3bwcݹ02C??Rcj'b{mzR5Btw.)a̯G1 Ilbc._ʣ߰o?Ӛ GZ'R (eo#tfS-]WRqo{q%J; !.n>'lyerN\*W*^{^`w>8>M`u8fXDp'_U #V`V*ʰTjiC>yr|1tLL&Cw{d4'_×;ZeHasBeW9:{J*s 2aβew4Hmq:N-v'V&VݹC uNm/Qq'8S wzdGF͊^E?nzا p?G (`VU2sZ [ܽ95M&P;U ;v[`{qY2[M̞*W.c,_+It@MD," U;:qj{AdɸUfTiT>k*Okс/ F_{L.ϻS%V_f9q^3N=*mdͩoś{=|>Vܕcӯ(|j_Ee\.PN-^.Ҋ&R%(*uS@{=jve.~dPl}y3)o!/XJj,{>Bt,xCZe1 G`6lQ)~vCG  ŭa՚%!NM4m,F)[B/[mu_fyy='mq~+pgp9A3Imq kKL>ݱ$B9e2,s/n*s~9oܲe 5wr:vTw;;ѽwSYLfwtHGwZ6;!BԐXx%=0p :JZp#F~ebf-;[}wϞFn??ucjjr6 ⑯= nǷXVZoNuX׃4=N84)nN]lͩRs#ϳ.=!22v;2' ޙi۴q{;Cedvx^w{c'kxmܛh)rvl&Sx95C/ulаxӍ&Tmjnbvf. &̰ӗiެ2ka0Rܱ*(i(Wƹ]hȣUo N*W+(oK;!;{~{Bw^lN﮸Sr>L 6؂ZBv|Mo=Ԧvxܗޤ]}UlSL&n*?# ׯaQ*+D!ݱ\mv K%;Ym,lT[EFv1tR2g-9@2+_[&}NskQ@wf` 2rj+[7o%Cp,1;-vyd؎=nRس7gur5F!| ;,FL "x{NHYI{*{yGwr{1zW*ּ|w`n#\nS&LfұLi۪]6 ܟovމqAc'UM T'95z mNe  Se,%-Sv) aČI3rp~=(^;(Rq}[evv{+$\K].6]Ď2@;{HTA3tNv?όO+ʹ|U~o{#BwG=hEBUvISnWj}X}r ͥFUo)t8>XU}"hE, ʹlSE.$S玗$w{f߱}q?j'{ ^Z~R;}X}sS I q )K wr{q z3TVqkNt?,>%wߓf1-sw; mGw;X:=g%;ٽn讄h P4:B#ebF0-CtG}aS;([]f,+Z;2ۣ~T(վ!=ܚ{yŕ)7P]Vs$wʸUuV-!{Y#sa&ׄ2=۱8kvlUދ.3auW7nw+Cjw=`ɇ5JmV}ݕ 3vdvAoџofs(Tσ€h&N#qwsxN}wA ReNhT :AAjf$Nv쎙LHt ǩS7irG*poz?y]dv#Tiv2]^9 c$G]{{8HZ=!qUKr6=kV)yʔ.)dBH7t_Vfwdٝ^_\8g8i]l 3R1NUN'.B;7 DBh?#~tۏخvɈp+G.TǕJ"!z<rވM#RBs{.~g;{]vKm-8zdxĆwqeLptRrW{`*qe{j:sՇncf݅w1AI;VΓK쮌D=R-ӹָ7YDwYoG(+YNt]j7lBfUKfgeNXfmTxCw>mRc; f,ξo :ͭͯ)λ2U;`b32.99Vܷ5} ؎(*)=Fgh'vJxէ3UJ+M=Dͽrņ'hvݷW~4t5٨U6 -$P9693PyoE'<tDZuADr7{;'?: y./qaLw6rfخR.$87U;lCv#jWu^To{۵.]FͩjN,j@I1op{`uW;jw4 pU0+T-3V ]YRw՝T>2u>UZe<`4'}Bhrva;MmW?5UvZb7܉]O~x_zpZ{0[4.@w܅+ ֽvgq^(!+]ŮV̠v_p0SRz>b2N︽Q Kֺܾ.י ڏkevvl=#a#ٗύO-FeϷ; |u& ]W\ŊKx8j ۓNU2L/xu][u/Yݝصu]FT.1kkmrƖhi`/ŝuNto2̊gMMM w-CtW=D+J٬<܉ 255ԷCm?9*wp{1ΖE5rzm9[}(_f| R;1FwY2a)XEE 3 u ]~⺻׏ w's9{v۪VZiN9ydyw# աc|͐_/sbЏEVU(F'Cqup/~j1`Ц r  Mvw՝f8?9vUFr8]>Ѩo=Tdq?x쮗ItO&ΨB{;vbؽMF7? -ǽNѝN:{ 9Qa2mSihKesj[kShNk.Dw;eם7(w.YRWu1"Wrs?3}mޭ vdH mÊnb L^5vBvxaǰsѽgO4˜YlYۋ`{TqNlw]u l"%V~V~+.l 97coO[%W1qkz=Pd%E`+!*#nGyރ2n ︝!U5:hHNx&#&W^ĎԠubj;7vȠNlRYx FwɨNGt70>ue\3lCm%cLnGлܜ%0ݓt`G;= \Xeke\Ew.d⎣He3U+njźk.;yNTJ+K=d%w_5^\F|K>Ձx =@e+!;_CokUuɩHqSe٨ |G~$Fw_׽ƩξN=" ؝5/UFV0ys*+N)seQQ>y_Žoi=x)bסg/7Ao>L'9 ݩ+`KMvg}4>n{sxSqDL[BYj%("f Ìa/ rՆ1Xye0C]ِ2(SQzwSBwq밬Rۭ#vbG֌G9VB]{rWɜDwWu$2Ofݒ. (c>8ݹ>FSjw˿;ޑ;=tc%twu{~kUccT v>̶۶m›T9ɽ\ 3Twcr܏DVz+hfjt"{܍_ql7rGSwl.Cgv֞%o2m:m:S?C&*swS@\Y8/O02gj՜w({zQqrwh/J쎍U4= e+iU5w)"Ҟӡi=^3N}}Og+, wU/;tju0NJ*}Tq_TrctS/+; >H!K;k}6ٝF}(][[sjw. #arbO|*{Ѭ+p=1ID 9ڨ㞿8Hj@LSKla:i[T3vw8uŽu.l)j~G4UGw$_PuGٟ*{\wjV-]-ݝ [ C^\.gné]Ynr3ޒJg;by ZVGѡ`}G啡(~"{ 2ǡ2rtUخSl]XBqO e?v?T홶gŹLcB9 Ǚ]&+2o-r8@߱j σ^ p_u;70@u/P *Cp4w1@l W ׉]c;v:23Cl7t鏡M&j_K霎 d]3ybc}ƛ߅qG-yerr4C'U&v,Qk"m{yqVwϘ)6PU{VUu~N@p+NUj>>J'VZf=$jwu+GF3l߾}re[ >xT!7܉;Sr'?Aq; (>{@qY)͑XoWG\uewJ]lO*wq `*XeLqx@C{=):)T)4{O<>XJver< t-ŝ^_ ewJZUqQ- wEˠsٙݚQ&2x IYe2KhNjuR;Jv=-rWk쟺|Ycrڣ<ɛwKY:;=L:Cxܹ*=ޜ.$fSTfz2;.{p,ڧdDKAvާEgX$J+{ܻ͟at Ou8_Z=8IL-7.=I;S>@wYeݸ!UFTNpޮs=C6:u(\ͭt.#[V9ԏzzAʫyr=r{2m N`]UUfsk"tw6K<p;^ǢX.Qr},kms] *<^˽ [ε7 s[;2WnR~" O71ͬRops;|92(vިa{쏉=Lθv|SK<{4J!w(2/ fF>suPu%# LYqe)mh=dv^UM Lw.twfW'*΄NPʤR{Ziug:GW=N FxfDt+?inp/it _e{܉R-}& t'KyUw2@)0`wF̠N"Gͩ?=qͩU9i4=ҺK-; Ɂs+߿'_|q`r*FdN)㦆wU#]ݩG` ]T܇?)Ž -w9cU'tkS2{uGa&ǩ⎭Uń+P܅ɑ^n{@p WQnq]*\w3xLP2Ȉ]qO2.a;K"w|JAAG`oPvԻ "gX)(_Vw v_*ކoȫOed Dw\i'>|~;St7Ì[+euUn10*= .Oq==l۠OԾyM2k O-)ox]; ^^r⩢+ENr?ZewnMNU{VDIkMϬZ&2b-Ys3K L.{Fk*6׷ێd7Fe[Ts0X+fZK&ݽJp' )rWӽvߨ9L|Xk jW'+np'EwTզ=v_,H}J+{$EXTKO'_zq` on |lV*`x[ST2{ n x|wwq ok~]%n'e*S,3O{W(Ǹ9a ]qvVlݻQjG> tϕwzpp祍+;z܅Ok)XG9.W =;(O øbn,{c=~=v*)C5zcɆЎRxnu)ŵ72?&wZfq.nGKM1؎S8fV\.Ϝj{49SpvETmc3̀c;.eɒcŁL<~{%e Awni>dZiuO;ғO>}_Oy%n';S{n[ {ݩUޝ{_Š5V%'bx2TfEu6K_HHx`,#f$%O.Uܠ!w)Kw{ X 0> YٍB9֛ZPzsq&ѽ.h!j'wv[8.$X,Ye$t$4RG×Qr f!/÷G`X _GTfqL?@;BPu2w 3TQ8fv~x-)CիW9Ws[ed =&c2NW.pvN\Uf7*%lS{|7Er` ۥXo*2 劻T*.tט`tH](w$w) k uu O^5P{h۱Ҷ(H ׃6` ӵɁ^ϼAp'KƝ=lHB뼈v<:ZQٗGcS%Y|=ۮ\Fڲڱ油9{&t#HqgL쮷cuxo*Rez:=UmpJ{XTk~::U 0 =c&r%I铙8tJ*Yc;#e^|Z۞g;#rNro_F Fz4Tw1r7"+-T]uW*2Mڹ=ar, \[,Gս?D)#vZQ]kN]x~j_&gUz Az ;lrj1v=2~C̤ypW]pw.CD{ s@qw VNv*KqĝwN`2.} =Mm'D-⎤q{= o.wJ.jbW/V[Aa{>̕)Vߊ}RqRlN)@t5^q!P׽ .<Ʃu}dql?c&Re/yZrDv}%G2J!ev2f%tGJl`4vR=Һ뽑[cOϕ6Pܹxʁ>yz 5OE9Dݩ ,o8Si>'/ЏBS)2e:StǰY\oRELt&[jSKn,ʀe6k*u,~*#q 6GHocSQ|Rd*H^CܓM$v Tډv~(hN=T ѽsHvG 3X!^n+G]&*b*  DwzT+Lqjwt4(w,k[5>ȅ }` 3x٪nڑ%SnRAx/qIH>A a.#xƯ2aLͼس8ug| ^~T-crnh8W>.bv r;V\q+.r*yw Ԝ 13^NT`ގT.kQrʸf-upvM$w:]/t؊н;ɝU$&-O;swD4"uf&qmv!dTЧƧ&45PM[=]Y<!k9ydݱ=qn [;r /6=b{%fGC&!yL2bƼžv]viv(~A.. =ҺʧCKq/f}YخKU wٛP?~ALV8 r*SXeR F>wB^ S:ܜqn"c)}FVt݄)K0<}xA=R[|= ܔRCܮPȤ=ԩITgRܕ*#z 3JtzO>j{/N]*n;kŠ)}Ո{ EJF^&wO@pop? n?guC?sءphO = js[clv2{q;ieBLRrwpONd;s;4w/7^;<wPrc镡eExDžEN Lk)5n'Kb?ClvR1D]%. U%Ap>$4u+Z\q8q|9oB!2-XG]{+S ]{ONyܑ*Sf{(P>jHϝW. TWΡme+|2bq&J)3Iu_m)ɟDΌ*2G?|$+Z7vR8C0]<@ގA,v*9{'3M'[  ڥ+FՀ"t7jٟj,qfB][GܙMvYVN"!BĎȔY"J?,1eXmzAR`dNqk ^lSfN܇)y|y`>u_wr2zߥ"۵>+vC(.-~^K!; eq7Wh+vNU lKa%//3Nb_jG_߿#BwTсCo&*Ԛȗr#}OEQR-c>Y]JqkTthy=Nݗ4_ )f,;kT{؂.7l[0 ﵕdj}|OE`@o+ѽOw=C<܁4\?ŅvS޲FBc@&yQp^MrO&^Y{=cdwlgދ[Kf46݄OĮS'tGQLzciSAp@%amAcjQUU@_!;w"HD[z) 广ũ]$Z* _:q7d> ɫM7;]r3tDe!!ui_6jgG;RS/C=))>)-R;[~[D9:f`0  ce<ҭ2R5iN=Ty#M2<4V^v\k1qPr',õ\d ܉9rd|Ԓ3z k V,¬ yS .Ϫ`n?Y=1.ŝ{ܱ\y+-_x7n+iz}3KCW2aFeq3#KrwqUs\=e=ڵꎃw ݋ P7q,`"{zqog2+n9_1g[b;2q*3gTlBWy8cyuVO- &?;SeuI]l=OXMnF෉ {A%ZՉwwʤ`{u]ޥWH0t`;:igfSv;쎔zqؔT\tzIw|X2]q ci߹8J:خ{#0;Kޖ;wNEIr{һ{=MrކYFN6]+Tݫ7 ܃je#tX$ra{LLrGmxA2y]SlIݙ]@n_ 7ކfv{^\?oYe vb{kw|ARbNr0]1j*埅S2@3S,3颻=%`F+Q5 vw O_Izwdr!qer\=eUR+.}*; S?ËhN;JEkNehҩTA&w4\XӒ֦/iU΢UFli-P`59̎n1n1MpS `pd <{GήFnn{du\wmSAnx9e0 S--IpoT*)(nVG?Z佩fRĬTmy {0~_%T۫9Uί6K@&v{!!2*=>Z3df鹇HHݽEu;hi-S&{r~c;8S tRSۇZ MqyjG~zeML4wT侙r_}>/Px0g.cIj'& >6̦͸<yy9^dghQܾ~:(u, aoj9U A 蝇nzb.Tt@NN%/g!ۧњ$wfj+/>JRqW 63݉쮷Spo$wpx&2N(|7A~+!Υ5lIӖM^P/\33s+-SS?sn߼1dri-'NLXuO0R MqTy1| j;7w۹]'R]16{GkeA;]xgr\=l2U'o>}>}SM' CUiro>veqW;U>wVewe Ga26u%PW%_+QlH{CWr=*c:Ye/󗤸kq`\bp6/5m|'%PqTLb& Q2gQ$we4 {ЧJr>S:Pk%w?+QQQSSS> +}Ǒ)j$Ulcs*?&&C ;: #1a2xGe82j.l0cQ{'%.U5NJ`rg؍ujIs<΄S !c-\geSCy%2wM a~7q/>/ZhujN ToN8vJGfR+=E,>մXw-kRfp d_&we@ :U]sr{r^ncU,Sݿ^O|.r`b.WF"p=VaɩPܿZeȩח/-ʹ@ѴnáK-SͲȠ=[eLqÇS`==q; uAѻ9Vy?]z{hYyu+qWGSQ*%lŢn.2"MS=7 Q>dL=8' ZT$B +~hrrjru Q`x|]x/5ٝY 2YE4qa[l"Yf{Z%1;+֙Q2=&|$TwjuԮ`hnw ]pgLt_=sY=*H*q'W#2b;C!]qGz"8Hpalgv\;m;^]f^w:edhS  r7l_T-ҭ2ϯCrfemwlWh7 tH kyxi4 ܯ#~0:t`պ%<2un{) W;vD2qwnd1T;]bFHv4|Ɪkza!'r_ SعbǻT\*W_%|%+V</_Ooߞ i%S μ.M~%p_ͩOPqю@Yi&S +/?{dw;֚4)@ώ?Xq]2.;S%wTr8'w/Hq_+5pw_;ϐ)AϏbeԜz+Pܹ:7rU+Sjwpwdxڱx\oO tlg%=qwrO`»Np%=R꾢nwWܙo\S'zbmrye@v!U^@qO:%KsJm>L$wWtOw7w RC=3D8m+;t:ﴺx!K50\]aMibS3Gwz2kYS99uyb̞*e\p}\םm̀`dw@&e?z]2UznR.ڵ/~ճ?ݿ[#Q YR#XըMKWԠ9=TFS2%Px%nd{W4 /:U6rk0>y(kJ/\s㞏XLBqGIp{wGa>q71X >_C Z*#dwLr@ȔT;w!BtL&Ck &Qv2M}h7 Sg&ƚDMMr³g="x&EBq)PANj7nu V?Ve{lsH;O[]E[@'}O!;^X?5*ڭ<\Fb;Nd|fj{iBSi!{2rTdS;U?1HJqPړ/Ys;:q0svv) n,U˱kS+KA ]ܾخ:s= X&{K*wHPwo4n6% 6\nV)aO0\;q0zw=ݭ2vOFٓ269kJ.]w\_Rdd-ԁRʆސP޿CfwoUTY\*WAyvUm;V] ޱwOoܳ۳{6nG M-ƶtmļ24^h1Cfye=8ȯG?hQkeekaaQHpLa][8dЁ!LB{םNjG} $<擷ԮkT_؜ =̇D27yIP_ٗ/@z$d.x'3WF;lNeLMvy܁2;Dw,26]f'Wneq9}^~/mO/=y$}\v/utٽn |5 ؎.e1B@~3]J!CrgQjWKvo箖^ULUފsc>.n'ر޵P\H4ŝh`[3=&, n9C/_y1s|.F%Beҭ2jNiqSdw=AqlSU܃m Qg+pO*KKpb#ٓKN&JM[1}'|(>uf-#3dwoNU.9+*iN0cOv˰ty!/mQRѐ8=a.s9^P|s\=$Uz2$w;0R9Ti`6A_7w@Ž@[wVxnf2_ޜE{PKhQPebɎ{{*$o '>rS69u'Q+Ww#0~c>(Ufɽ/yd؞ʝ")uTOA2a+c{$c.M4jr@^w;!Q$wdDw, t8{g'N@@߲' 9UDwV{iq^KXNhOm2r5w}bANw b;ԝfVڎ+;(jwݱjWChסƸNQܯryE.rReTN:q*HWܽ;5Uq8igʸG{{dp[e9g؊yLye*)H!w I^ x.k[Qts jߪm,ls3voHEwps܃\q;"R7=ѕ=8ށޣx;LwJ".cCf&Ua{s*Wza(24AWzvEv O2U9馸s)Q1Q;)b9 4‘SYY2P\Zًpc~>W 3D{[e|q;Dt{܉8#= K9ܷ]i%w盕s ֐j~^pCNAz[۶g桷CG} ꥱCu_@;%ڞ*RO?Ad ri!AJ[+ sȭcI{_ր*(MwAbӿhq=qCDF]&Ɠ:~;/5Zp=t݃4&W;+ Rir7Ej3DžL_0T{$&MDa /TG6|'ūz@U[M#P/9evwt/5pW4lSE{;w:G1^Ue;#Ȗ!ne:vJkBX^ {+sX12v]q֣uKvP 'TrqPT4渟25ͮunsѿ;59~,_쟳pf n_Vq:t;bf3^Ԣ^5ɽQj;>n=2.pc eRKRenOdW(A?¼T.g;NwZՙO-+'ב~۴ 70*@vxZeVKbh2 ] f}X%.;+MrwfgޤTs3UEhW=ݵf'_EvΒݑ"Re`'Rs2x&:%u`>Dw<Ě52=̃ 3USՏ9)WeʠdQd Xbvl;KgC m:YSƺSTǦb*Ӂ*tL:nMǚɄ6UUimfNǐ9&*KkK z[4~f*3Cܻbp~ ܎+h˝ 2pSq7v!.}bFk;ӗ)iB:VgϜH37M5WP: j/xw;; 4Jav?ٰHt7~i)n1.T*D,Oc)FV5Lwt1p%CeK ;\2їcq(75 {* }1G}AOŽ_ Ji>}9g!wCHaSl{W4<KԎC&b*#tWLkO/Կt/e:dYf~cڑ/cu;j[|]=Ԃ~=X >e fZ l %wGEg;v,nt2rg{*+ cw]63%3C>gu~8N(H ;=|$;S31op̠x&2+Ds7˳8*"qxeYw{qGwYe3kzU&]q;vhmz0ng˽f "V HD{L݂ -K;e {%{usss5;.;Ts| )~U>Jϑ!/Cyg7ۛZ7,B,|OqF{#;xױVcv#-tz;;[؎Kwl.Q9Ԙ nr^\*WC^w TV~1;]ϖwfcݦlHjNBÜnկ?vrNawz?`(RܹC@ f1 d6K% UU՞X,?@2]9ޜQ0$.<9)SV-)mqGXrnyA[SE8VF(MJrGn%S+ݜ2 Q52ݟ03~,xc:YT򪗔Y8 c[䣏>[W6P5we* kh(jG)G{nUXWKt$MFq(ȽގO Fd!{*%j .uuu5y9.j+o. ݅Ydw|Lw8/IM~);,@vꎭhH7 )cs{raIm:r^~/7~=Y'Gp1eMeҋ&wyM Ty܃TײL7ȔtxKϯoo,>t~* ?UԮ'MqM[sjwu*;=lNx|L@q-bo)ͩɞPq~r6^Av܃Ԧ&R;$q7MpmSA od(ᜪ;m/_L&,'AL$r{7ze!|=[ ng=ٷzK/=H5Jh莯R=T<` M|?&vb;"\R%cI)~;՞vq/zeqO_Z~y79E=vvԾ6@;nmU˃$w.+K,qsC{z'2_;kŹQ.]qzR/CΗgl.&0.:/K^?9>]vyܿ,hɻʟ D?ӭ~%eLmwtݩ:`uG8$..bTXrU%h7Qw<AGkKx;}#{|C@,vcUMNmˎAC㈃|qͩ5 e;SZZ X̼}!pVCf2-#螚.'KQW Q>PfߧcKpU^)#MH'ݓ"vޙnw=isy?5&+UFʣ<lϿ pEyJ S}q h> NW:ݲGwc= ʰwF6|YzS )C}T{Ww;j1Yخ2?][R~QU ,16>| [!s:4щٮ}/]NѺdʄ18H.y0*LsY p{ ܩP8];*sSpSt^+:em͑Lk`cޠ}^yܡVT(qp+wKf{/#n !1t#LƛS!Q~`xm|nOL6S2ݟ9uOF En7{gq'+k# *Q]LrCݩ]g_G*3CniZ*/Ets%;U)C dvQ,^ŐR{/@C狁j30gJk3KYGn nr ~]kgՁW&*#pf&{ИY'Crw]Vo4ېAqO`zګMd_(6[!qy;N-jN%wÃ߸ ntH#vy5mE}y5j"F7*rg]>s6tg;k}T^),wuqU*cP3&hV de]38BdOd쎇 !'ɝ;ݽNLݝ}T-iVUz;}ꄌx7{gWZqՕA͘tǘBL1 ]1NF !dوZb4([!*/؈lЖm..뺯swBMD=' ;xNJwgi LLdNUw\ 4n \3``wwzի^גb ^:[W΄M|0-͟ه;(CY"\b SNOKrf,Xe*MNU~|7\/"]_RLcny܁x'8ȡP7%Kq_(R8=[s7#EY[ebvM)ʘ>ʨ5UqJLL4߄.ܥjg_뢾tAtNh WAsm7Lc<ɽXyoUͩk_Vsܫ}"w ӭvtV?+1nǖ~$wT.awp;{~8JK/]u'vѹxO9܏Y2f?DZXw#y=4ư1==CO=>=yv&۩SCLܜ\b;wWܝ+3a^Hog?=<"&^ke+/Pr➦AЅ:K pen O3mvHmc_sw*#}7G_O1N T1;o,;/woNlF9y b7_s=?Q=jHehuyLqnsWݒ銻]n2IFOvJQBʖܽI5+`&)+`wXֵО(u>iLWu]mz5zSqۉ`w4c7?*ݭ܃Ujjr}(*WT#ӫw*}X)27jp2fHpn oynjA =[?}iuN%.3UƚS8R89u0ON <ǵPc19U[KwHq⾵4Ok5:dc[ݟKO\?T7 XT~ÈeѧA0wQ(˾#rR m}L2~Y1L̄huuޱRK{Kl[Sy) x 劻 VtE۾~lӻ[a^SU&IrG{ӈdAjE]crMrT<;ZUKʐWwRvRCx-"^fnl{Bs Kplg^jSeƉůOs=0SePPWa2t}kKhRX"wǢz/qۮӶS%`w.ܹYtɬ@uGm2|MO2&2k8Vwǩ4U$w0;ɽ'R; O^ZT ~jU|~irܙb`2ժEk(LmrI"!m2wy=Ylvw˄~ib;.;p~BGG^qdpvZ;\J;N|ohZƷ2qn;2\2Oj;JNFːkI.Ddmmh0m' Ax;Aznyۭt lMU:jGeO*2 GЎ{q ~2R۹7e~6yelnr{hqow9պS5"c}ܕ܎Ÿ4κ}! oK#{8# ^΢v;M?/Sxܡ^j2ݬ*o4v]f'='X vOǴO{J{Ru=2s eФOڣLETu$U.n/;!UzK ztjzv #vd#_Fk_' }Zm$jV[eHP-fWISf/H&[JE(rGBKP*4ˍᥩ⺂ݗx&{>Z'wgT6[~zn^S ӸUFS3/1Qjᰮ^]0)WF{:W{&FXVͨIZwaYe DweW>]7|hGbex>U.!bfǾp7ǎYLuBrIg V)Pܞ_tgr\2jO~H2uI!ktŕv/=v:cņgcfy ׹'Ye8H8v]VNJף͉͇Ig8ASs*;cgONx܉TvR4w;Hv$Nm5*ʴ^O}=P>ʈO_% w.c_}%?>/<wjpǘ;|ѩ lG帾?GpH&w'qN]Vyq]vw]O.ߴT{e2-3o;=ۥخC;w2<&PN^O!}M^qt.QW78ݡځ-#4f uuJNwٳy(ʄͩܗL Q1}#tΕ; +Rq9$xWX^;aRw4~; Ns.;ISχKZX^u*CeAQz&b[2!2{qc-+L*oH$a; -9Z*c{.Ž]?\PF!lҥ`✉ 7+6ev5Ḇc pg7,Tdi|k .Z'ӍkhOJ㾪ܕ,!KݻRxW!;ez^ 4v vwv^\6xcB,Ĕ;w6/n'G{lql۳Se:rT5:/y]Sb 5e=9mg0UkLXw`zP`u;%Ar7t32({3tulGTL*#rwlgSf; ngoj '0,F)Qw*1D5wCo{ιk3=2]U f]2mvܕ*/7KlM]atw>6woRNuW %zjNz{߮S'B!)p{{%Zv`x^ #QFFsyo%ɏLlׄT{,{L(NM53=,,LVF)LiLq0+\zfT_za;nQ;Ew\\A;>˼]O^h(>ƙzի^lI4HK=y7LvEws||:UvNBrT&ʢoɍssSɭeQ;|!s/=RZXTGKɥi|DX'&w7 *pLvL/q{Es2}#MQs*S2G):tGV(DrN~L=fv.|3nAV;wr -5hnr'!;=Qsش/1\9B^x:fgPe+&" #U&&c%;8{Moebdݕ+7ȽIqEts";ɝ/U$ //h#vĹnv;ef7Sv20*ĸ Sy8 diswn/㈙w6,;[epe)d!#wB/vNL?;6b6{?3㞀{vknFн=ub%pd`2/!VW ِ Uv= o6%`tɶ+wZe,Xg+mw/uw_Yvx S[{nѐbwa6UPgzի^tI*t[q* tȑN̳5)wNlXִSbr<ݹri|U[GYεRq7VJ*C2] >jͩ0$[U2>A.Ԡ9U㗤Lq^BqgJ?]tCSqB^fQfNJe )d315NlW&w%}%v;norAG"q{Mxw!?G}ʴ St)_23gᔱ߈[eLp_igccۃLHs!ubvU]`vp+6`I5t6,7wAhjq+tʘnݹ82(U]9Ze*ۏۺ?=[qo܎ wLܣTʰc' >5aAql r;-3g9fEnwQcLq?zE' %;@nUeji$}#KoZxN{T`;2T?7p&n,s3Ɗ2kFwj iG<_ca{ &U2;N^:fUzu w*;w9}u&@r(Bq'.iq4z5Z:wK5#JrujY cي-7 ;i}XדWEJRq;8%ieʰjMн2ܧ9w:W M+TS[rCr7lݵu<;1'JrLCn1p|ԓ^x~Z9i;IzN2(x2# +kF8в{Tnt+vIvˬ7JunfwĺN˗Irݱ}.#v[^z*]7#ּu +/vM'w Ź ĥG!WQ=th"LXq.֔ w:q;wr\qW;Dcu4 }/^HS;4\; +ʑyj,E~ [P0w.=(ǽ;g?!ɝ'%pt7rhH"kq(.tFw-gգTw\uOT=^^d+zW^"K@OoIpww1/AF=|4^ؘ.:EP-rt+rk7~帣[>whO]+RCU@ ZJw(Z-&C a=ˁ⮛JFŭ2UAƸ74HE2|VLl {*ܱAN5fP<.c+I1?wr;RߥFlFOyܧ%+zMU8u9_aE2S*J{q;ʜE(Y͍C|z.iB}O|=>4'.x xl?tzib۰~x~]VsR#OyS7+g%g;z|x㇠:n2/"ehq=R=ǝyTܱҶTr:܇쁇[d:. q-;]9-ro 2Lq;*[q'n?hͩ9?]Q/>FdɭA`wv;S=^sʸ>f$ywh OkųSwwzU&Kq.^||)Rq |!pE {+30ۏ9k;nCFr{]w{cO`(F̉/wu5wC2J}-Cb|vvlwxv+kq}Je>%dqᐉ%eUzrr1lO=Dw6/A|y6urNN w(W]qEͩa/wb=@< ֎;)n5"UTMU;k蕉{i<=LW];FE#CV` P8:?rn7͝]-S<W*cSd=Yej~)_/W,QYw[,zcƷJs2!ޗx܇ 9NۀAZi{*a2{> ݟmg, ydhlO|;ǎq?fW_GGbAQpS&w= ySrd `kqÃ=rhی2~|:2{渇Ԏ$wPqU=tg0{w;dۢccܭytzVʨB/("u ]q0)ۏy=#zo8Gf>y<2!'w&DSq4];=3A$OuRy7noюwe&.z{ܤ2Nlg oX!;c7e:{UW49vǡT׼ͩDqHE8]$Mq7s@ieFdآqc F, ?>UmW*HPPTnh/>8:0g"1GGprI!ʸ^)b[eJAD*Rܕ)c-1ڟYJqgA&2uM~C5ޢ.ngBsw|߉1 w+C]&wCR$}dk`~X' '^h biJlbX9L]g ~뮸Mq_4 (TZɩl>iw5WLX ŽwmKI/3ѝvP;u\"4R7~؉':CqGjb;UoŤ =#Cm#N⊰]Aݷ A>$ӮHOlÚNr6r_=뼴Hq|2 Bvxpբ级ka]4产 Q;ީUz:q$cQqk3Xrq?ctk-Ro*z ٛ@95ͩnYGS{sKquqy~j \V<5dW9n'I/WFK-)|fXmZvcٕt/.Ga rHl64XewhK^x_Fb1L Gܙ*3sNq{`U$q>y5;vHqUL#_}o~&>lHuls?(zV$0Nn؞(ȃU]0tb{ v Q[1;ۋTȀ*{+TwoNS}^VwPq Y]ߐ$D-3WȎ-i]jptp**`Tf"BqUJj'N5ՀWwAz[e8mVh)[Vфqqyj1X[^L^KW N՚&e(kqq'NJ; >;wldW_?WLSSpT{ܝ;fO=8,$ɝ{;,H^Trw2Pf0/[s*ɽqB? }q>SF07YlApN>CqolV'S;ktsdzFq.݁a{'ZT=UN># X;QO;(c9lq| cٱOC~ex2y jNu= _#ʄΊwq2R}i۱ sad oܞTN;s}(iOeySޒ=]2!&]yܹ/qWs ;~]$ۓﳽ}*Slwl_A{|,̬2݇A>8U6ܿL;NqbΌû n{s%tL8LTe#lXUz ;زfUzOMxwL2sIywf?i|4sSF~=qOS/&wAlڮ+Rܣzdgkp ~?[w)Sq%;݇.bǛx6x q-UGL|%qGo(]؞PӬn :wG]؞K m{0**iCU}H=*ci2wSy1ne,f޵R_j`}|Kqݳ!Ò.lݓXw;NTr]b<`zSW?땹*"dy4$ ܕJiʄSiy,2?yuu82~`RzDXHU8Ý+X*`;/* 2Ol.=qvzr82[# DΆThX@x\bX>IsoHjd &C}h:t7>ԈܓT{<9wQ7Jq{sj앩4[sw{wVhWqTsT's brndaӆn(t{CT&V(n`{os `rn$wnj4\G&~L]_<2]_[/2ܲ@qJ-L/}$r!;pzPLs{"ww=p +3\w,fTn6 =<اzTqnq, 3Wvi@F=bR}j*eт.P5ЪETi(ym+ʼqrT19o3WCB%:T]\k.N70 }MoKR,ThT55/۟'@q?wHsܫA K0аX!f:ܰ{qG'w?c{rώ~;fwݼ7C,0Fޓ_ɽ Iu6V<bI -\+9|* :?-,#/̐ q@џ(xw3\/N)9Ƀe&%:qK.QL'+7 0yYXf޹ԕQuJbq ^@)@ZpD V-iVH|7m4تc3I4g1Q?ZuZ?gmk;3;3;N!Wa]bdTqݩw]$\2aw7f)S}rWF'jT+ǝͩgywb?홲w25b.t#g\to+CYp+퇁v`;w~wɗoa pcq?gC]#~bHg-̃S/fq}m;=`Ik3 );2w_:J=[vQwkQsr]ɐcs鯧E2hKfTZպ/x[ƶA*T[w Ҹ=֑Ij6ьݶ 1* qҢ2J ;\8:̐uc0JTrsHiԉf>9/kLē!v]z]yZe>)TqOqBmNrܷw?g ہFQOe( 2ٓC5w{.aXWܱ^%Iqg wr;<jN%/[$&0){PuMN}ZM፽~|JK" C+0ӫolJ?M?H S܎ שmB0S;QU;Lt GgBKTqǷ@'NxXjۗ0CU^SAsݱ]D2"xn}>ViPMAocBQ^wa<NJ{d1ŽVT?v#8;:suDwvO+v2Q@qk j;bES{*&g-ʀyaQwh$Aޫ~loCjT4~ +Aݱ e)5L+I5,hw=92R!=`wѻϣ%]WΦhwTw|B;_yP/Paytbw鑌't'ѱ}r|n%w;a]%lSeq?|wf Мv|COQrޙ ۡ2q#@ꏉ-sq +wq7`"+ӃYLq]$E5lSgB 3HBwx*7]Fw+7@`/U1Nܫ}ժVk4w<>vv.*yw A$؛V)+;6w@0t8]o?<<\8T(hN21\(N ԰i8 GT)=PKPwqǽ5H;=rD vKI(;Np$)cn.;K;b\qVqgRpOȽ\K}Mlaw CUj.IvŽM~^鍝4ȫ*`G uJ+񤴅4Bٵ  }iT.6^6蝃]:p`rŽ⊻q[<o<->շPvGm J\YALq yؙ>D8&:_Q(Įݩ2vR<.Bw]κ&̜<wv಑FNIn#-ut>6DgIm' yV:XsM&./<~(4s뚳g n䎍U&0ir o ]>-9e[eqO w,[ $s3Q8\s]쎧0`&v랩辧=Z<"rnu:x2.K?yOȪѽZժ}(J/e%w،L0).k֩(;UZF'Jo**@F{f47rnpd_n.*s嚅3wucwʜ$zŸ@m5ܩoM?x~OJK.|(]r7V-{WʓFyƤ~7WMu's,rNZً})[w*NZsRsrޝ:n }fEXТCVa"؎J{(e=S;*Py'L /Ti?T)u93g-#vo D0k4nu|8aLyd{yKpR .0\F;.lvB&@4J|WZպRLo\)wlԦPqJf6 2>*ͩP1 w#wINBgIҦnC,KTGRCr72}}FO5=HlU;m]kWq0z-ܑ:w;pD:X<1#P&T_a;j{pLY$>jNX]4{G +7=uo$sTUTP8ҝ;.FʐqNJT_못4ws/d:$NA{?U{U{-ݒgI9RLNUD>_,6 l/W[s$+sjGCLzT*LpH?w6Z9Kg.By_uuZD0ĝtY1u=Q/GXoיmoCeݵPН KCܱrW!)+T_A)WF>LO LGbpߚ)@hC[g f֩Vv/@Hp7RpѠLq5lW&2chzq92ܮû#Cxw;HmvTZn%eHih99 M5y@Ur=Hco3=u~Vg=Z" qnyvV`v_' kq;y~ AFpSF;򢋆j<~ oFr@"v) [{lt*C_BhG?;cL4q)=]>\vmPReԞ LΐsGΓuY.wB~JȾۗ2^L.71l]v7 8jjU&U/aݹ-AxY ]i}@i< Av2is*=G}<7|Yմfؚ?^l)-|6F@)ʛtv=dw_w**#ՙ~0IqTW/4 /i9pQ_0߀d=;9aF!=U{n*g6ɳez&dd7y(>I49u@f+c{-]&f ռr.`Y[ʹo(%&rN&ٶ*S2ͩw+Ak*J2]VWQRw7*]/qjly} mcy:3>slgMMn(UԞ,>8UƀSe<ʈSp΃ QTQC+o,)=ŝe:eL>r;*w68f2ά\v>Ѻ>h*G- i 09ǝ@(?Uw^wlM}X}F-9t<=5~ز.dgyoDW8vٝ[Xi`9"hG;*%[Q }ӕ:Xeiy]v{G{ޜO]V*/Qp'Bas*u];[T[Qm}SSeC07@v0lc ;T }sµ~*MD2R*]tŝ2oJWm|(ڢbT9*ۥ|pSv;*B4'wqO5L^;nv=1vxR5Cm36 ݧjZBq p;v\ 7|QUS!gǒ0J縋SŽRWdfy{6UA,A;%L"ɸQMQ0950Ν7mh;JXc~Q1jͩnS{Cn7v8-K۩_$C~p;qN=ܕ.9 V*sRy]w]RqV2ժVhF2e;605'I9eJ{\~:UIYJA.w,0r hGͿĎBiԝ_>T&iF {Gϵ=2pR'LFsBqX:*کoYZZj:W4G?owjSRp k,11g{sc(VuDC}6ңDH{m/ tGa@7W,O".SUIv*%( /^ܺ3p96g@K_B;'VKG*ʵE{^mm3{9w8Hz#pOSÃq;K4+3 `:Z(ݡJB!q.d< 2{/lwL g]]0H5ܣ&G~R9%wYQulaժV:9eMUqޝQj+(WS 9PqS3wT]@?ںo%bt =M8kJ@]nzZU8WCw{'EgD؜:2BtPsM7O侹ͦ M3:go:!PhV'A uvr+Xw @xp LpHH'wOqKM9&0+r7Mޜ:D5ɤU8|C:K{ߑqwR5ZժڝD|)c!59U5VoN帟["|z2jNͨTءZX,UEv#qf2 qr &DmfȶABջSev2IsZhaRU2l5.x4"K4 ndld,z;`wm’re<]&"+NpA]I]rtW,ՠȍL42 DNS U& roM]q*/PMe RT(Ƶai;j0(#o)ٝAɽr;7ݰ;]`wtwjwjg71b 0L߫\P8XE dO%ԋLm32+fܹCw-e٥3Uf/{C MM5ti}cqTr,EAZ9r]u-w22W75w?`mܻip_P\~g;_{lKv/A=|6gCʘ.=*3%~p 3*E˄*v•讛v\;+݁.΀w uU'y;e1'VwBuz01:p7꘩V笠>'";lʧ= q5YeHltpws܉Kqzb1g׹➉+%/5_./#ӻq)a4 Hv_&L ʈa9q̵\aw٢hInT͓[-7ZZԷUV96z?<˗{j\ڽ,ҩ=8][Ub; we,CGiH ܚ2e^ ɩXL,- p">P#D17Bn]+Se䔑˝յTp&^r=y#*oط9>|oط.ً{EW޷`|/+9;]i0įWk՜qׁOv o ɩqs{ UFV)u50Rƭ1Bv7->ɩ $wlU::wYe .7"ca6Ο8v{lmt"#՗j.8eHzGxMmq&c0|23&nPgzcҜj!GF**qG/]&S;}'q7ROW\dmj Lx}I ==/1Trf+ ȑ8̂fWVW-} yv$?7.=|>*]=3htYH\w4 Lܥ폘ӽ;5Pso b!#xב]+ =b!ٚ;&2]EtOw2yqc;pܟ&dH׷ꗩVoձ$t=ܥ?#VyXLŇq=Нww;mǽGfc[&;/hZ;vTN1r ޥ౻2]릕ىRqF.w^\bw̄p's+Q /3h1^(42Lml Ika* '֨՘x/h5&&?µuf{h<{}@}m)f`$U6--ͽUjc]}➄K& 1p7ڊyI9ޫwRe<][e]qϮ{ae>t<ե g\1^d~zcm&؎@@qI՜Sqg[Y2}"_?IVbv=ɼy y|d~bk7>Dq+ü]g?uR5L22.bGf2YOS.+ɔ+ k;` IЌ2qoHrCrOfq7%j5HXųw~xީwU܇ar-`e#5+ O'Ev^fU2UG^(wn)㻘Z]'PɰbuCT=wo;vNhgiwC{3q3~#@B}[i_*cu 螈)s_zowEwNtqUte)nB Hqn jcֱ'܎s9zeOΰ:;"/;S ^:L;/{ToPI݅ݏvVwݱ|yުVǝ;*^xMVhT|NIXSƒajN ~W܅#p^YeS59/&7w؛t$-to ˻9=vaeevw*,fL:isG>θfZeڧBq?|~uqۢl+tȦI$;0C/Wʔ!3wM`J#`?|n3zoQ9jz H-¹Tqg#]d2 bO*Re~zS4! EpX0>jA95Dw Ԧ=EݶB;5"u\m(LÄK#SNe]V~0ͮw՗څwx;=S\@lBIqwGqwlש ~vsT6F䎗Pܙnn壇Lͩq.=u,p;]咻 1B9zsn=+jȪ vxgDqٝ2h&`r?c8%FJ/~2h0 EP۵Qsܡާ@HO:PG#=캟Qۢz?8sgc;nw-MJ|t̄>_t3\;1 a'3H -UjU= r,zӱ8\qN2>sJ*C8p5O+b0*#3!]qUZDᶲR8zgDѵ|o7.ʛ/]\m3 O}&u}Rs\vHq/+ Ҭ2Ro6q_=hT%>Bۊ@fUR;!]owlzbz~q?]p4Hgtq^/PɚS-zHs܇*S7]3HRYKcY; Yc8]qo+P܉&]}SO"wa':n{F)+udjq:Nͩ] $֚B9\B;C15lY /]n }pi; bn?;*#]yGqo笠=b^Gw_iXqOSMpWx= 3nXe1Νl$75c^'l1)5iHWqG,`;6c]v|lꊻhɔk<:RyõGqǝV((WG= ;1}Dѱ]{TN:2 yq4[FEn$xOdyL6I4wKrx*X/o SmUZ]~8Ͱ9܅R!7f޸U}Ysbx|ZdγM.=3PHpj{* j+T-'n2SKLV>9. =ͩwr&4*~ܙ8Hz-{ei rrfuiSM%:g@-i%r?>{̹3Z`iO*sn!UOͩvbw8@;;۪1}Sw^q*jq(\TYeɩ/ef{U>95`%wz .hS {`Ydž[FL0x]Օ if~xp7r"E{q6u*LSw'vXxw==:tUf28$cWL9bϪCw\,"^$^qt2vGwOFb}b rg D. ;43V2̴U&:]zC2<ۥܯTKR?&+*!X&qd~Azͩ,z{6{q?ۛb$]/u,oHnlr%{SeɩT*BV~%vbL.Ct$ǺQP$$#S_nص@؜-֩Cdۮӭ2nѩP?"TwMd+;nmY#KrWs;PA휘 ni{163=έSaɅpa[MWIr'sEn՘݃9Lݝ𺇊{tu,ء7{/W}a/ӭx[ZժVewpy;MqwhV( ]eo'w*WjNcjN]NLSe LpQ'ti /-ntQk{"`3]meފqUS=29@mr*ML'ìq;kP{@weB$}_aP!Xr'[:KjA%Ў' qSYv/vqTEMN`*%ݩikB]p2th i'd8e8Z5L=Q+Ϋݜ2=A,Iv*BTuyTN_OdYzQ\`%q`w쩓0ߴNr;O~܃O}x];_:KQ;v\)8v;ݩ=%GiU{D 2K(L4vm\ZijN[w{Jsܗq_n7JUz237q]9۹ԛMjLSe U(pKJxs?Uy`*J|bg2jL5}0!wp;\oXTY?Qm2iUZUs:VwlOMYElNU=Q?xs`М8HNw62F39ugŝ;~^HzO'ۗz{&P'''.IԽ9É280q/ezӇ{o Yz{6ZTQ1ޖ*D12bzCpU[(N؞;u< w_3]~'s;e&V9bٱ) k-Vќ wsnR eR=⮪ޮQK`P3i@T3fdL^S#&w@Ќ9eNu޹.ٹH1 촶+ NwEqXTN]䞝SEVT6DQCxVVc'^MSyY:`=*H`_<(d2:yݧ/5T$s䎸PDqNca j|y艋6&Nd~* wF3ݚSO&,Jtg$OLP={I.`,~v` ,3t{e┙ %wTwlgp*9;_i66=vy5T[ժV0vJ=TS̋Vߑ]_ܫv*(z\*>9U/B=CNwh+)RNa×jo+N.};&'knW760Vf^3Vs)wW7i1kq$+ޮqTZɛ$!_}ܫIq/aS;Kqq ~M~XUcw%I7ͩFӿ1Պ.tGM\9PgA'"~O2{w$ɇN*ò0 3h]΋ۚS]pu[nnjȏ!1Q-t~}su| ,~;?7l_qx8H"VbC]L?Up'0y-Ze=VW#sӹ6jV]7;CSG)̜}5?wD4{S 3NNTl}jϱcS\NcOOcWͩZ,oNn%BjQU/8v_^1;-+[&Scn/c6x=|ggb0H[{Z*G"p:;Kq3̡$Sd9}7US4+Ro]}p-m" {//VVZ_tn=oltI0cij[B>dۓ3yuǓT,W;awIqriro`^waz; % y w Y}n'nCq;F" PoLwr%c9H%AvTy&{JЮM%v*l۵n{HXpw}r3&)]^^`mq]}]w ` '{{uXeLqoj8=7(%Fܲ>0w(6*6vi VێKqIVoL<-=X9ބܱAPk]6WL31-z_3G{&{,&̀=`&Lukyݙ+}0#f-fwh ٪V*(;ny%/,޳GqIKzH;Dqg[å?^{g|y܃T/>q%s6So~zؚͩz"VS*cVYe*C潆M };e0HqpRTP܅w{}jݯ6;uXLNZ$wf^bla;dஅqUVɕ*Gʤ 2]#qwlvlÉqWsjl:T'T F4'h=kF%ࡶܩw F.`hzC/cG _Nh`OL,Wvsܟp{\e{ꟃQVPqu{ f]qncTA2{g}.ur3{m.Ls*rة;fE)G;d,VUa#GYTZG~7྽]5 5nUfc0UOq`~u5>{`bCYocSx/0FuzwVnN fv/, 7:ږ!+=oq ʹQPT؟9'F74}? F]|-.ؗbW&Ul`v߾}{)B;VT."lGûG-d52TfشnqMsFNܛwzekt2Vot?!pO&-= 4+*ͩ=(!+y]rNzјVp[evJ{t. <>WT93)uplvdqG2B{wϕ8w#]|g&MNN=PUkN 0g;]NVe5 [.U+j/AN8s;"$'<<UTڭjPͶ1A}o*-Cq4;et͝8vl62{A"Ebv\q3-3$uR;.u+p>[tOYTwv;}*؎1ZFKC`$VU{reuxHBܹG!8HN[\7LN *w STrsw=uW.$ePťK`ޞfmc.ݽ:wYe9U9zƧ>YC7.7)Kn(|w*o*,ު${ٱ=KqSC=gB cjvIU^%{{RᔙFif2ܬ1;*MaõN/jr89u8̓S[uۓܕ)9 ۃ@;Bw~/!q.gHpOН2휶N :0 u;vtޘގ-jva{h%2\rgS;w8WwAǝ!0Э2dlʕq]w{ͨ>OlU;ʠ<C%Q۫T~7lNUpN5fy$x `R=)>zܻ  iG(UFqv\Xh~mQkwtOW"x_1#RE>D{U1+R7z!= i0#aw幫GYwoUEG{ fV^V6po_qM:y wlGEG6 #A$3Q_ z܁' Ÿ'Lά2`^z%d׫=2G;ܹ"nM:fueNw5$Sq,-Ϡc}f~@n3VDwØޥ󿷔`kSjl왿#6btV,w]M]wwR-UF72N6>ՑcX ]jn.w*3s*s Sw;)Ϣ!u{&v!Yexaʰ(|ԭ2dXf'2ReP195tqz?*9g8nœVY)|͐9un;>JjG*qFc;s+B{@]{j!In9~ҬWʕ\>U7-{2sqO t_EDvwxby2$oD,݅lf2݃puDl]iLԥFw{`w'KqJ%wܣn|eiU_e<E^oHV)+q5eqp_^+OC*zcr]Ot=b6dZ$mC6_;-Ze^g[8ɩ\e^wzڑ}GvXSn*#{J.wi \j$C%d]v vt250٥w"{FriUerOFY`݁]A}7`vvuA~"}%pgrTq(!0\q;qU 22BUFͩ 5*ӹ9r 3U wvJŹ05{v_NvYCVZ7@wg*wU =>)ɩ=4)|N5S;dT]qk;.9s@w6:VʓKotlqQ4rYn+wV_)Wq?:475H3yfuN#vט.ÒM&a"01cK[6.Uwg?Nq'c@wVσɩR߮L82&v?t,k{,`x/07ar *wqn; UwoNɩ[$7?}e6Sg2ZX.ZVhMc[oۅ \hj*cR>ʈ=9"ZW/r*?]0hjh7=5⾴x-w;7wkuFc!IKڂ@M;%z.;>iAqʕT56Kͩ$^!2S]qG!1 wo:N=z+өz} ] sGӶ#>_ 7hnxc=(2ʈqnNcpߍ,(]7'UFOe!^7iRܯjr*qGc!}nw3_nS5M.;calhSe|rꏂT]6ۉ r뫹SO۞M(Iv wbzSqe켄 qu4ǔV hx`2A<~+6(Rv(?w;6Rx&T<'Q;Nc$)'[ժ[xAaokmyPkTYe6g1 O*@+I{Ҝjq6/>'JDI2Υ4xXzzdv^ ;Tn'{ͬ2$wTe\/r?3;E ƃvZd2x5+Sl2w\ي;Tq#Lqw-$$wXe@ )q;=WMpWځؒޱnXe?$EfN{Nv Cq?&n<ؚ>0TyCݭcjz;ק7+ ~r)`ʰ-%LN%-}˕^-XL֚(.v䮥Hxe+Y} ?۸v\B.ZwtWfC|IN{ƛ𽥺Ueλ-4=eqDz=!}{S'Nrs9NSo+R{b>7s;}Z[:ɽnճ}BmzgzF0MWsw<@m_yӟ??o}jgo`wSAۅUI[|.E/K~=e-YTAؐe<=.B;eQijk;Tv.J>6YLLKq7/ŝ2m^F^s_9u>'J%=+%~)'q0+'Aо 3>>MQԼ#WOT%]vxkH]k;/.aʇ0ǝrA +2.LNлSF̮w]Kq7vTr9Ze:9U;?`{P8eC):n Rho4M8e~2jNW;W_}`0TSx葭rRu:L# kuia3.nN62ݙ,s,&r;v]ؾ/s!;f܅ 3]:qLQj OtNt?bfJH[ժ)";vQ/"^;%W~.0^۬P*)pc 4)o9Rܳ-M4}m0z0"ӝ[ntЧ"~M2$GRwٚd?~+??Av+^)T;'/=vtthjE{On0Wfs\BEwz#lw>.+M̰_%:Sae]oNrG9d@ɝݩ[e*ɩ⎺Fh㞦rWgb.in29o';zs[:bk~,,uEΛiȜ"OX#vkw,q(HqǝopRVsA] $woDtwWn+R7 ' aRepW0,ܯ|Z).JT7U uw5vzL'8ĉ0O13{]YKƠ.vi<=Ý. Kͩ`'0ҍ2< Se\r?x:u;z)*tSˎ%e(Rr;6ZS}uHqTq+{ 7^&4pj&ܵG5vÌ]N(n2; 'w`t'܍&F5VXxYHprŝ7akVWd%C(Zs Yeu׭2qSMqCdtDNPwzZı(-r ~@0*U%}qqM\!K=GP/ܳwy`w\4\vpȮ CmIqSwYeX&:uGFJPNŝdl/w݉Lq" s_2J~O.\ >):cS}T0,K=U>6]kOSQ.̹$f}wjdjޡx+ uE.=2P&e e g=*#l8HwWuVw){ܡ9w޷?9~>!:lx{e{C{kLƇPL2VKFZ"fa]K]k_7lwoBS&r`;H=xv;'CT ج $J~m2m`5 ;}ڜ޷US5rF*ReLq( ; TCwhz*-TK>TVq8Ȏ4^xZ{"ݱvJd*V/ UFinɈ<7wZ ;خewܷwYe'ddzeb]4S~:QK3\~sj>'1dv4+?H"x4uu?KUw6Mäv-%Kqo'Չ(V9YGw %G 2tLŶ7ng=]?%X_rܯ2QN0Re8H4#oU;Dٿp7[.QuxX֣XFWT$ኻlLqretUXϓ.mnrΓܾ^QO_iv[rdGV Z*䗙2B{};2P&SQ{Yvef|anQ;]Kw+1'ƗN0/{܇s/ D1eܡqZ݉0q Ud۳2:UIڦR;erB讍;.4:IښX4Q/zFݩ4}Janq JsVQM =I供T/f-&q_ɩjNM=8v1.az{f`#!pGw,JV.y We&@zyW@; 3|ދ/94WU ۨ%{q2Ac ^;n=܎J2ef~23՝~sG.\swtL}(&PAwWgLow;0EfmfXL]$=UܛŽyS;Crdvmf/aGzbnKQΒԞQdh{^=g _'L:;UWuSeԜVQ둩2̂SQqG\ǽ4q2Lǽ_yR3+vpW+UFh1;v*Sn홯T%|tIqgdQ΋ЮDH;h"2) q&Mn]QڟÝKdl]8ZF</b~OW|;uz]r{v\"w.a;n݁,U qw=pqkj_C첷×Ui2/+o.n?:eތ*ʃo}0ϙ@=" ^6vńy,mrw}w}6*2}JĎ'nWƌ2j8;߲[SjwCx۹z{ lO 'SzSIk U5շ/{M~߂U6&{^(UFyYC[( λ{DrwD.p?W[C{SXs{[scv;.qx(ߛ0g{m }aR2T۵\~Owa{V]wWܣ8Lp;Ew)j2bo2]^w2زa7+]{jO}C e.s65sܩqO];JnbxX·MDpl&vj`*.q7|WkSI:Pis/Mc+Yͩ!h$Y5d]D8=w{LH7*;Y=Dw/, ]k'Ǩ&Nw\N*<.՝=6f25QOuQ[g 6^7Uv/>;/(lS*}8Uz[JUAքv!z_/VXknd*q'k? `r-K:=T Mrǁ2{&$wn;޸e8f{Bjvؕyjw h^/U&q~Kɨ`2. \)]qw\T`"Td 1q}[%}*Uܑ׿Paa*ng{>+OVĝ fC<SF]q-wBֻ7uMqg&zo^ txLjԻ{cے=Cq'Jf/iqkt*N[ɩa/6M5rǿ42lpɩx Y=4:kUv;Q >0+n c=+҉=1KqSeD\,~jN = Vxܑ"CŽ2')[YͩIs:xoNp-bFSŸsRe=5Tq9@wpp^ +瓩9ȋr{W-'{qv%/!"CvPHTH\.Hwl-Ød=C͆Q= 2T{2y ՝g5~CqveR^3j^\ܥ3ܮej;gt߻xFl7 .S$Ceث)Vr՝M_!7߿o.s=ңdTBdxn~\ʻvMRR%h@HYe蕡+8Ț}\N@Ix*# n W Lln'f;{/^@&{6鑹+Q{Kʇlm08?"{+3e5ۖTD},ݰ ܅ DjHskjG@ŝeVU#w$}QRrϙIbvZɩRcԪiFp#Mv`{Oz/N;܉SXɝ^nFTs؉rge`rroR{#{'9ՃyuͩsLL`r.V>)Ž4)2U;qg4oٟZM&4ʜtr$A[#ŨNTv5 .w >i{rܟ*4ei8IwyR ܥ{Lz-Tω\Qv+S5dޞ8y1Ua鸮/=QFq(p{ޒ!4w1v\ngZe\m E|N=2Pq<>Pq_ʼn~O1s0쾶rau {qֵ3͖H:Wl7WmljRdb Xo=Ss8Hvr{[.nq}yeH,c]6v64,"gNB032 zަ>[ͩ˴, U^NL3S;a2? "ˁ}/I{wyחíJ366VT صs;kvQzdvٝƷ!jM+Q[+\[eZpېU/UFGL=Q`Pr?V~3A^~w 3Tɩ$r|(wA{beo*".~Г>o$˽V ` sܟ%Gn<w[͸Z'M3>>܏?;= "wKqޠȈ]^w5NNOtϖAjoNXNm%;ߥf/edr܅:Q:,#ŝ{rwcLܱL{K޾=.KtK&mBxԋ gI43}ve0Tj{B0MrH/=Tp! UرĮw~udp򶖼~e (;3om.ŝm+pҖC`^g,0*o,auG2uӅ[݁h?;)B8GHk6reЛUGsOq|9_YF)*fʴ+!ldžYF U*X̄{EXeOש+Se)8ȍ^W`C֛J$w^xsj)ʬWLq3<;56j@Ջ-x~Gz>yNԎ]A&A<~y{ZUseL]fI/qhNojN Sey /޽՝2T,yevTp96+(X ]S۲8hwF2v%Ϊۡǝst'=_Cj{bO&$>k;|$c(xe'EP??u!pԮe]ei d#:y@q@ Vv74:b;oS310bw\uDv[ ,|ɐ4͐5K՗l3XȧcY oTڹ1Tmr(y+u_ ^gXn!]iRir&&wN]K9I;{ׇwzi2,|)by0؀y ٯj/$wʠ9US7zS*{D(/qّ[gMv_#A\?<ӌc͕hTܱ)`F_P$vy~yE}2z]ҡc{rO2DAs*;Kt? >TAMUz|}eĬ23F1i{uٺS#a;CeW'y:rʸd˹o"|1DSvr5A?sM5f6k; gú5159Dqvhw NͶʈ۱{s*};9ʘPq?Hqsjܛ*7՜S=SF2bv{3Smr*kNe$>?ǝ܎k|H Op.p'*};6d))ӗqU 2-ON{kG q||,Փܟ)2e;Z;>:,e%iet&Uτ|vX%kSVjq z]AE; gHg;_;qQj+bwdX*]%{F{4Nv;uԎlހ.et%b(ZM8+}He\F0t6T%Bo~=vq[:KV;!i5nOsk{ ^S95d^~8Hq0 r( ?&Ug-!gf5ԅZC3y vѯVVio ;uSy_rf[$l׻_L+KqjZyn2 :Tq2V+dw~B6խ7/ jWvMNU$|e:L& ݹ}1Iq/۱*pcNͩA)KFfoH7B{th+V&JռT_a{n#=QUF%縷3[QurXepGAjmqMqK2`vG2er{KAv@O/١Tzᤸwی̧9ܫrV%Auwx+XwρD#*>aܻٗB~r;*jO}b. ގ"cY-N^S/=t`Qq܎si^2lwt sC&12lNhi宻Cp piQ˝GDBBwTtT^|§Tl ejTzijsK9}쒛d\qۙi{ #G ݌2-?^ 43iwYe8>/}7?x a1(rx){w!x>Ql9v}hȭ24U}8O+}]: fYۙ[(ofv_n;.KqS0{<!vNOGiğuv~2%wV-)}ŷb>ͳe$>MpUgln$۫Rܳ&aV= =w|&4?_Nr!};ޑ{ z;.0;n85Pbn2xhWZeH<]AnqWs*s]k 99՛S=wHqϱ9U\ƅwZei* mY3f>Ze:en0cMwVq!tMw]8{*ddHOzU!;lL`;ʜ2xINqYFH܎+1b6_(P {O<_ۇ4ݝ 4߶g=]2?ڍiQ;rwQzd-Uf9/KOE <].Ǽwcf]@f'`Dᙼ~$X1tdžVs8g)뛍]z^2 {$CӤɣ|xvv`:^NnΏuUR-:/-mf9Btow}^e)!X/TH8ȝXn,9ʧΣk{oKhKiԮΞܕ%KCs*xbm8 #޶L/0uȶ *l@luwEWYYD5mI\-&j_<|ϼjĈXdwn"&\NWrcq|g: 2:TTq{Iq]ZQd\q f>zisjwܝ۩-W.5@yZg;9%];v:K̼49U0*AF xڛ||UkWpI$Q5M˟a;Ig3ܱ+C~AKF[O ve7ns?B&^lyfxcw//BwbގQ%G.R!YByk2@w\nsJw d‚NZ#-һ4wf'Vwq + lkj_Nqڕ){<{bNI/=oZk*({e(Kerܕ*p6Wz%>[JRqv=]Bۑ~vfu0T `bNH:hv bܕ+͍GlEfQ+h0iLYrnPܫfAr; +.˲ؓDbZRۋź2r{mX^RWiC)bC*=2۱|*z R]qKfjjfǖs71 2ޝzYeP]{2=q(Y2wXhR;N|q6q&oNu ]ܮ)rϕirǝ2o'ETuo96ֶ}'ߡ ]t7UAH;71I]a{a veel5u=Leuf *;Tծ3wv]ZnwNN2nM"vU j Fpܼ˟.]v?5לX s֥my^ĝqu#zn5w5SWu `2~IW=kP𩽻]^?q@wxͩ2k5r**۵,Uw=Ԙn+(;cBtU{]n:s1s]F5,;ꂡr3]V1_3T^ɽ啱 θ950>Ar>&UjNHrW .OdE4 lG.HWPoɻA3r3!4].3XePbL( lq 0m]{JdhWc\*{A;Xy >xǥW(}=[ r׷h 5)Hsݹ>RuT‰|bOokjΏȵ¶J)UF9jjIw*0Ao]Q:;ǧr -cs?D' U՞nb;O=Dw-3YخKq30Cfcflv7dG{. 3ntOv.-e0R~6]L255KDw$#ŝ_ќp. i]^kOeƧ^O{S_S܉e8~jŅG{uCwc9ea;{U9wɃxOVD{*ctDsqn{8!#&w)hإݦQ8u;rmhQaG=+Hͮ7P{eBJד/ >榊vݩ]pOݣC2TkFIjw/.t۞\ʄ<-Sp y)\,VVo xݱ}u˘\w9f>Zf$ݩ{Kp e<;{hXY`be{&б(Ʋ(pಢ4-ѽvꤹ!}ZC~+AlSoWz{Kv'y:Y2gωPmw~ά2TI R9.ܳ2LU8]I7\ Re\p?XPvj Pfaunqwl9=qn۽-a&wIlf.xUۡ?ͩn\Ӄc{FF)rЏ:2e_C[V;2ƴvld9$V%B^2%w>$+4דnzН{,= Gf8LzDdeb)S< 4Ǩ[T}ysb%mLu7{ڃ&M&4"G@v)߻\t傻Ƚ*+ 'elX`O KyW{'{"cX0޲ܩ1 ɺ9 ;L㞗=mN)p?#Ł߾KD#S:,/_LSWlv 0~3ѝ8r;+ó ÖTn"wqwBzǙ[ ՘9Uk8Τ 2̘=Ș;wR)ԛMUsjqlwTY9eLqW;ȝ' {_驨$˝7Cw}bwB]+,Q>;[wd\uùLHH;N.ܳ"x!1"ѶD>2|J-3I +۴ޮv[ '3Oҥ/5qwl7`I`c_ث=z"$y\].Z.0ܱp)\_tV;'GV*ǩB8 6H]Ķe;qxڜr;J}yŬ2JTM`b,N{훻|7W?}qVy٫۰u T+`B";`gn˟И*ޥ v2 s~([{>[t=afqGޘ4YFH@f._T /,*6x Rwj=*c)k˳ xUw;2\s$@zMC^S\Nftwne,~Eї2set8yܿChW&ʄ^ǢL"̛3S[V93EAzB{sܑ*("VFr׋U * ?渏*ͩ[cCwu3JM<㞑O1>ɚPqbsaBgծsZ:ipaABh&2څ_8'howlӼ2>r"=O.w 2z2sG{_0G;O"9_hre?+/bfb SqyQunj3aӜJv'.|l"΂lW2ݱLsw ׳ui.CL PˬȨu'w[l$lZe&'?SHW>D4&`3#gw pɐ"vE5zw4`8ʸwvغTq_T d?o~>OO8w{}aNngG?._dlW&UGuvEOl~roGBӘx{-Pܡe,VbNz"O';$wށ㲌0C;6p=w Neo*BeЛD4/q ;Zejܠv_(ݥk1d5Bvbeo/||H'>:Th'O'>We(qwW58u w:bǸ{r"/J=2 Uys܉Qh R@lQ9T]ؒg*# XrPag*nx6sWjt'?2 &eԥ͝ iO`wbS{_F2Z^m@&s;cUٹt<]ؼ)å'lMSmj]Z WHN^3p>=E}n̵,2"'N}ݦGRTe9;GS0?(poL`3e}ur O,“K:Һ=(R t.t;R{ g-nrU~5 2 ye Lq{#H34zܛޟwvފkAА.].'W>+Dkj^>4оag*[e 7S*Ê=#\q4*CDIjw{|5^ 0UCCܫ8A݅1tq*(( KqF}ͩ!j_+cڥ9+qS3\M9UÉbKh8Kϔs9w5՘؝خ=;P0Io)w}_MXǧO$YeT z)J΃ Ԟ]_gzeRqߩOnG"|[22#t%fF[S̮ǘ0Q+.;+ zSA8ysSqGTt"!C͝n^lu7kIF>tX>F].,'7FںF,FL ɩ"b4f;< r*v=ܝ79Lsr?ɩ(-r_Ģ^Z׆@}|.>芻Re b,D!{Sɝ*x;bzGf  +RѨ9.|756LSunV L=3]&;\2nf;SƷr;d x'3ӝ]'n;*_w^YØ8D55P:d,&,Q 3$0+JtAte^%[sBq[Sծwm']Tgwse*2G<5^9؞8t ŽNz7S5|vZe8ӈroޓ4m&50WCf yhRvf켎BUR;ev"{%\I2RᕁۦwW=0wkܾ{v>0 ұ:M1U:)݋K3pdɨQ?lZ[S== Cej6ΏhŎT,=-w;O'w= E;y莚ۇ;ܡ7kt۹⎍>/l!P!bSpiEwi @ucܔJlT5&<}v8t2"v]9 YAŝ4zLWy3 Re>{eN{W$ǝ|Ԣ =]LKlN͙ŝ>SUC\U;N;JIږ5nŝJ59uK{޹yi{a{\%GSm oZ?5 hSf9Wa5l#t5_Uw۩fs*ݽ`4be>FY(K/qkݹ &w&3>[v-e6v3=w/I5).r'{s]ε%֏0w#\ewv!ծ{e V_*.ݱ]N[ڵT*OE)UkX@sW&$˖rBo䙷r;L0{[Ft;9|^(fDz>wjh*\N~G/&%ޥvzWWɩ*sP*?ׅc8!fvlpzTe$Y#i:Hr/f5;u#M)LRMw@SԛRk&0JtDL.t';w(ř"~JpGLVm":]( /̔g&)Cz;.{*# rnsǩ5 \OAv0H»3\ȇ^j,2T2pޅwA]MkLʕ Pp8R9S{r;^r607DinNzk,Q;h]&<:cѭT:{޴/5c)<(Z CDWHc;{Q Tj؃:fk9rwYSVTE#wŒqyOwg;V\H4veBČfqUFNfQ] Gv ` %g٥1v;aNj`k% 4'2/U a }&ԷjSI{ KC;S]pevxj;yHvҪwp]2]2BoW+;PǏۏGF rǎ6] "'F̡q֙͝IsQر⾦U{a~].;2/' ثR=q6 7Y]8'sXvHb;}2(;UKRܳMM;22n(Ȕ#tewNVƣ0f$ob(^^%.?S՛*La}}p{&xs:pZv6]H;I>6'_3{wSeqTH}Kwl{d!?(|0!=ۓC;VRehl?TMpRp X]GS;/{>*C̨rܷ*#FF:մev5JqT5ڻ8|R9I9Jpp/rj ȃLdFfkPݜ@w8dpq]** 'hpd9,粂!D)#\Fn{=wfIٱo[s*=31$cmT)z";.rU|tLCBzW  &6XUږvn)kN<lEۉ>4]ݩo%!CrotV;+ 7+*;+ܣLŽq`]/T `.]G(=cr2q\ΎElܑҟ[ SӃ+^b}qIr(&\99q Sc{aM(ս@h´z #cݙ}rߏa񯥱c055oԺ~`ݯLlJV{ \qw } l'Mf&0 b4ѹQO/# wnT*.;6V1ޝڳYrױΓ۬6 (U^(OQ+Ҳe^FpAp6ea"IR]vLu7xvlS9dTޗ$w;nϥ[."'c{ҽWe*$ȝ{ve!Mvwߦ:]uS&'^`*Λ3D1mÄgۮLHܸq9;d *UfYVW p0K d2 ¾N\ Cv_CGDߍj(#=v8x\QK? *As*v`m GbN* R{Л*<_3yPCpČ yTyqyeG0ȭW kH dwZܡ'2.gȧfǝe䮪+}Vi叱S*YO&v $sH XS{ x)kF33݀]lO-9} ܎rprܳ=+8yu-oQ-hO=mQYs}FbQk%݀$xPbrU9etq Q.L_hNObRKj;=TQvPH ƾdHL1RSfmBѽ n_p4J(뚚*ϖ[w9eRvkA&;^ɝn=vޱTlf>B;w;٥h.ɝUn&v{Ht7yR;e tMܮ.Jϡk k۩Ks{ǽ8>_][JfpDrx_ZnގYF^7Lnw;2f1 etdؽNt?WseId|F 3 afv8USW=Q{t7=.Ur.*וX}̝7O؇?I ޚˍ,x%tݱwq{'gjb}n(;. =SpWMq;CwU+=v!;W MZ]SUg)30HX uZGw@wDTS-{ Сnzf-!]8y#PrŽRG3U v4PEf;XV{SF '{ M&쿓՜*ŝ*cSe9ܒB{d!- l28ku^,хCn>ެ2T-(3ZLzTAJsɝv{Ho.LԚ~JIp;wOrSOZjq`/Im^HrGv"ëi/>w~nvvQ;)TFɖ쎻JV u`6+Q%;cCUYY.侹aF6w*ɐv-;7=vCq4F]һM3}[޶̴]]tfI+yxĎ{R]y'eqOXvn_Ļ#Q"('_Ip}jq3̜ٝ 3'ܷ>vqv?^TKr?#ZǣC;/ݦ7Žbt9 w!;9 x܏Brt #`[k=.Pw`dž۞;92ŶU&?M܇ɽP+[PEns3beBeŽ|5V=0'ѫ(=3ҚS(%KHHE 3v?[Pbqnnn<2V3Y92<w6^ wKJWs _Fu\Zc8遁v Ph~"JeMq/'q2ܱ)\eQ!q:sv*"!Քz~2 ?2v>Dݭ5Jm6w=PuNh|Ej)no3ם+{OaSV9Ї1銱=y&x3)  lw^w@K=Yw]2jzmWw=M=R_ <ȎgᖑTܭx-[>-r6(N|%h; 3Su rF.GOq ws@Qlp.=kBR.K:9U&A.\7`r'?]y#G9 0aTT&)Wx(XY/-G1YޘWࣟۧYtOϯ{ oHՎQ>fhH.7If7l?=y*FglTjʼRe2lN9o &0M>fiY2p?jH=Sq7nw@=e)]jU`QLqzUVvlog7*U.]gy$r)f~)?{)\whWcY2" q7*R'JiL VM͂'LApB;?LV/v]Sp+̊֘Hq$0H6. oTP䞼zv2;ݻT]x ;p$&]F$wϖvj-+v[T)ם˱ѝ#=G4C*wygijzETE+lV dk}) q%q*s7M{bs$y%NjO ڟn^wC95j!w"af#A';3 4nwC;ݒ7C2Re̋~Pڕz٨,GA()Kqg{2 vrV1i]6z3GwmVͺQ::4I;UsߕÓ nrqk%]ptcQbL3{MEt۱$ۖm9Tin<*[RCBw=Ѹ}?F mPq''4 ;~B01W_c0ORܿ#j+SqRe6U_Ѡ9:M.* `6UUf^U_*.";nxP9cᆈf"ը CZ~Twqner*bH<(vߙnw:eUF["}xZIWO*/Zگ]}?^Fc1fá~<_? -'Ց sTW%/5z wAKlq~y 2TyYCDw-dt)͝OX.d Ob8Tۉq.Iv:ٿya\]_PO5gYN6CiO8Ó&9jRδٲIguĘȪ8YSF FɄ u`o buNTD|scN+}?}ӗu.sST9޽R$w;̗ywVdcsSV{Zu-fS^-O/ksh-HqНov U Go$ܾ}g@_&!2a5=J "fy7=b鐿ea uZ fQwbف}SUdޣnS~:i &T{2}?vU Z{8MGCJPܡЊ:(,ǝ{/߱=3v-wb*(#ܱ`+] O v4cq;YՏkP/Rgwx"je.]#ߘp{svݹbrlQF ]WH| &}hb]WT5w"CIٽmoU/J6<ߜNȮrnOKV6ccui!,E܁D۞ >Y9vM^[YYQ8g0'eyMSdw6pgIz"PNΩLMrSFWTIø5I.sqؽ(W%vxg&8 25ҮO^CوqNtT'w9avG2tu9xY?&˺vrhw7(}!>1=&y# m㮎:C/sBp_jr'>><[+JKBn{)QqԉSÐ5gʬv8ށ툖GHai^ vmqww=:Sqi\׀%9C`rBq?LO~fIcOk9t1<./'6w# y:e w]W̵wSj;*/(C2/+\l*>Q,PrlU)TʘJJ/7|t击 TXe$cwM,Lu^NU V%pI/F]JpvfsPTsj!2)A]swhh4_ڿfڷȆغD3bw"wtx-Xe)?O퍴.dPC zێjV1=B'99S^w]cz0ƽBr =6^7r'p@wp;Ɲݟ{ܿ+WP3EO="ttBw=c;UsӱynN*(N\MLG})HJO@hWN8fQDwGݷ?_sbTP&/W7pn>ސÊ=6ά~5BN9e{t\bTӻ$n>kDwʻ#@w܍'E}pյտ ?~wKym8gVF?Pc^sOQTym2Tܭ7~ &SaYw pSgAk*)[Apwnw'w$2U&XpaHp݉aiDڗwGwq7[#s;OzG}F*js,O51?_mDSewNN;=wb{CqW=vZe2=JI=~7NW3(wJ=2 ԥA8pTt!l~7urll{யejz2Kw)}AT& re`s9\DV ;sAc}x|5HUC ?*wUZF~xyu蜊w;s*=qR'sp hA>Rũs#CJ;YR{ /w7*yO>3;`O'Qpyj9w x9^N%0N{z0*%t?~fw47ߋ?O`v_[ d|X&SEJfDWc9#!k=8y $LŽږpL)Ft͚\m4up_=J 5wvF4iY#n*ܭWX,{LN4'2BxT򺯴ʈڽ̑!EFQṑ>EZKUYe@byTh28>xg)/ڋ0\2S*cN=;ݭ2R܃LxPܳ=9%iꗍΩ/nHG-[eN ˘M&w{* 134 vGRjr9۰+&zIDM2|k=Bvý #f4:2055XTE*1ke8H[T˘q[0E'16-\Lmw^S%›݆e.;X ڭu7X^$v e ޷ TwlZXb#Ee;{ e?p;6wq"VeiUn؎+]?W=ܵkj9p}{Қb?ՊY$iD=fdy.;\QNMuc!fkxOu=Ua8[T߸y2i &&DRg"C{ +&yNf'3_昡;w;aO@w?x-ًjbv7V_ǚ&主Ulw=d=\#ŝOMB;kE-ׇ6Bewk&;\^Gv};S=ƿ}}Lwso/+t?,0Hbw }Hr_ Se4 v/lISupAaڤ?(lGՒ˩]:q25{~ rw;vd"?'tN=FplxY9 wwc/kwF]ST xQ$vL.J]oUǘdMr\-̂.3]n*.=]qV{(lPZ)oQ "dܮƙ^!ibcYeu{4l4F*TERBT (jv>Dvz1CvEHEFwe쎝}T)DH.\[/^ŇVOI؎j/{3Rݛ$C9tZyekՠQy;MZzֳGa̮C;f+OU }n[JJqhO2><é=ܽajS݇M >܏pwh"PjWTsp5 7tDw!+=7zZ]Tw|wGRvuOr2w&Lluqػǝ}i;'G~. 8\ y8d5$U/ |?:4k1ks;,7K Xe,}a/wh*vCr 5w F?&;稖QTR1i?Vr_7,R{}.LV"d:0-{h$P܁ت6jʑkBl( FSͽSj,SfZo޾Ǥ42}t`ZeXYeW&PܟwuNMW5`zE ܑ 8e rpr X JlwL `J^Z~vBJ)_oX2p}nt4Uzag~Ye8dssy,rj*.t.[JvAU[A\m;${ T9  zb-2uߛ[}Htwa;&#-\\qKQ/UjԪVLnm CݸfڎuL"jg) Tls\~￰!W7,_uH\SSsk;Dw/InjSp:{FNf ݑISݝC]0! /Zݬ2A&S'NDwX q6C.3``yraJr#ljԴUYSllavnE2:EK.;wD.tq}O7&kr: >X|C!QF5 npC5/nj.XPHs'ܞJr*.#FPq}YerhE{Wm^6b϶oqx=ro/v-9|`֎'1+U&DwH*#no*# w{\v9 ]%?縟wٳF=&~o};(~5+K]O\|'ew݁3*ک~ߋH'g`yt|zxME&U2<_4`:vN%W*)n/9GhyV;vKr߃bɱ^F5@DW'&^=r{dfZ~|1~7zi|: QW+2 Sڵ;~+*۵x|SEp{uaverϋ{ُiqq?xfxah Ulj c^)rDwK䮃wW.:ǒ;7sZj)z/F]q/NubxVɏ̔n?{l;L35Oۑpw;{p7+JɊ=t^N%ZeoÏVO)_:/>p;\3#lT$&66`7i#۱\Ze,ӎ؎gX*Cɾ4cMs- `NN%W Z!jY_'p2v8efI0 @bw}[:x_vd D v%#Ɲ.׌΅cdJܳ5<=KoצRq2& 2twtPU;2'TՏIbI~+^U)Xnvu]ĺ3kP$:;k]k0N*SxG/>z{.wRMŎ\W~>;!)3*1!cFTivJ)? v_!j}9)PwiN]w.ݘU2+zwjX+#Žan &ewiߚSG9$w#Mc=(Ho{㎊uAzlqT= [v k{) s=)RVwkN p'+)OݵAf$s:{CہЮku95ڹ!Sgk ;lW#h#q9wʄq0 9?+NꧻFa];*΃;ZhLUi7N _&ʈֵqpa3:"F!? eLs7lLTqހu?8Of]uXbA# g;QֻG;'w;]F*= u䒻v;]2{$]\9)k'm*wa +v̀S%z]L6Fʼzdޑ+ww!;Nvgvm%<9 wWݓy5CsόLw> 3cc׀T/ IǺIClW:$)_Crl2)J{$;eq4/6iK "7ۨ]C|Br1UO7)S%lm>#vׇ#Cմud6Y#O6S*rh r8HKHgsp\aT..ݱWO[&pDVU/onEs/.&'UeVuֽm2΋1}C0;%wS# NSY/+8s ,S67&Uf] 0\qg_镡>#{ 2we#=KswL3AeuoUn2P\6A2IDAT򼻽L@Q=˄,G?*w^x 4HX$w8Hr..CDuVw;3T~re;䮺*B^f>pv<@whpSSXet9u we3ǔ*CnT)L9$e\7Uw`BF#GxQdvI0͈zWdqDs\=ȃTiev1cU =IH1 H^I]Jq 2n$93ԧ;1KpǤW&rwN uCj ^;jFvvqvwJVky08p1ߟRgζLOF L?vl^q?At2BLǝ8?Ƹ_6bw wS{٤si%X76r'eQuXvQ5]ڷڦZzhRqO(v6^m08"U*搩Tˈ,am5o~rqW$$o*o{*x'q&sCjI#;@F/<R-cr6mѓej{XHQ;-7iV.tW;&LS}sBnSTުjt[nr c{'AA!sыLŝ3ݸf njP"w*u˵oYwU-=1PwW'`ad>yM̧Вݽꥣhve")C˩{J}u` 2 nvXd$?C)LB_eb=|ǎPqr)U9ݓd"ŝԞq1fsjJ&['*܂umsaR*{fQ5ʺNbwC<(rIЮd|⒙rdXnnvp q~(Œ2\J1W yP?L a`\CTAB$3ulnj2hze8Pq'g 7({)Czo֊i(|'(STN;FhQ;w~vC 9n;c2wn]RׂҪM^vM/[ǗHAl={;pKM5q_IV?I38x;X!f']}D|Vw>p@waCbީɄ5t'{{hi0; /k2bVBE] ہv0;=3*-XD0a Se]d[ժUS;6A?W%)U@w3b؝^w;uwݽ_F lzxl뎞LĽs*\;?*Wi]x9UwAS;Vց 1WܧWH| ;:.ݲ2&g`U{$v_q<Ȑ5C=V}43CqzfvW:??{ndr/ѝ4/T!j 觊`ţd|X܃LPUk*R5*PXO+Tr*uVs0TV'{* >ToHU.4i֩ri#}*;A%weu|kȂ8e/-Pog 76~R6h5l(w6eOsV~r?ȵl I%&]P셾ζyiZj@*7]ND=l>{:OtjmĒ6?bA ܅._\%;0NQ}O?!6JV|9[zž\NmqWP܋("н˼JnwQ1t#2[*v@v=A /)>4mjjkx|Rew:Yv˝#I͹ݓeѬ V:/#|'c=*ܭvCz +ijOɁ-G;Z{Z_.,ص`]SngV!zSUxV?Þ Ew@w3]Bw v?/g;UxRr 3,Ljt|GqG7pJޣ8om4`„j^1wqT,JSr*ʴyn(.^wcj!E~5;RFKdaik&'n$=}Q:䜬1kIS\qH׉Kxh/ʒـ >b;nq-YKC]"Qrw}SwSM&Ks6|7i\Aڈ_N{G a[dpcN ٺ\>R.+יܣ(Ȇ]-Su`r<2cs;f8uˮF-x)1*~7U_tzi68HWSAO!D>[<p&K#SWXEi5ڄ|n|+9- wܵi)?8ȝpx8/IoEu"r&^b[vO 3/F0y=ձ=Fwlvq}_VwՌ(!uGq;Ze9ՉT*V>D+W;!2*TܻŽT$}g?5%ng&-A"=Rݩ/ <V]vŽoәt{_\SdI Q (ހ)Q"w^vAuCSe726+va+]J_#0`ĝS?*"n~TXۋ\xCDR{~pa-VG]*oHk@S)7htvҺwR'MbeM. 1FTa,i& Z}K{vSƇ=JaL:nx;}Fwe@wтmPmUrZt ExufChqeD&k<тg=؜ϵDF蕹RJs1mr*}h*;"f<~Lf͌Y4eѵɄaf1r9wYeΩ 8o.'Vl˩phR-UFSO(Ze*HHItи.lD;'Q32ܚFA9=aWC;|ܗ[E;~rZoo:›)krn wɸ<]Y);O#gZRo7Lqd=<%dU!Lኻ2a_Le;2cBqY{ 0 8fTuNta6l: =]DU+hd7/%{_^pSdF*C{br%ʃܧΩ9ހǴNjeS ;KN41cw&Y|(]kNOw)KuKru?*⚪Rp07]qUF.ѝ &ʼ2(;2KY㘸 ٝ^wܕ޸z

8\v:2'a!f_=qV W&n/s5ީJ<#rc?&i3h~z<,_5D{S52{ 3OS-3B4=Hp؈}f׍u )q0 q{~i<^+WJ[Uf<ǏLq^QapoUz1wZe~ c΃ܓ49vNrnXs?=UTwwQ6ȸwLʐOuY~jY0bQ}S{ޔ.݉]9cX,ݸ}yPޞo+U3j꺷M̯*uF^wCި CNdОAz8HTDpGH4 &=陪1 Y& )$=_v9\ˇ^[=Ľ% vk˩Ggwp;aZeqG9ˑxׄ 6*cw MTd Gmύt^jO0횕e*WuDAg?HHws.GJjC9p*r*P]6zfd=֊I»r^MU~3 &s.̅{DwYf \v<6|*f.<7yn%!kXR';;wcw[\i)h)uݿf^wҚ;]fNzSL w;< dw}WC?n;z"Rܙ*8Ȗ:oW꽤l; yb(rwv2AN}&z{*A:GP/ю!`w`d ~ |l^_aNq}<#(H>ѷ):o,TfÝ24HS (:r@H]IŊA;`Dך:/ST^ Z2;HT'Fԏj;zg1bҧv>vZoF }U&qV +rrShuzvvA-0%{9\q'(Zݮfi,3Aq}^fF Y㦸_ĈSRԅrsK pi͵d*qOvXخ (UF0."Uf̈]L i Zwj]whsxv:Eɐx]B)s0bw)\oS4;$_|ޡڵ,CrwKvMXQClFLڃϝJ2PWܱ ^a ]l |*lՔڟ/j(kg(|s}[\!qÌ_SӥMxQQ5WyT!GםC;fp3o% w)[-Ze*T=Kw1Y{2Kk-qP+չ9{8+7a^/fѝ<-)s;Z_m+R1$.,gxu $ SeWf~j:TR\}{e&Z-)ُRUB]PAP%RQ_NOW&{%}n䎝V@8]OZnwa;Gv9w{Bm侀ܗWberlw`*˩} ڲEw 3u]Luv;ek7YURK*CY iKmbDkGVg3vUv ?i]~rܩ+qvsd:ra$dpɀy䞙d~" oe(gB:k ũ2Cn-Uvye0ǹ BMF_RUu^04[.L4뎪{^QCЎ]y갆uK.jGc_ӯva{bqi2Y*}2.EFC G_>vڦ_Zw ?v闑!KYݡN~~ (x'2̼I3Y<_6LPRܛD=99{;HS]q7:V?ŏ n|1nrO)QF]d2$Zl` bvDo1ᢻq795ܑ nSr7n/wߧ˩v܅س8Hx4ؙuCE'}jl֗N ͒W@{d> qQ(XcQ^:ݹ7snJp=Ω9' <rd2e w)1Çe! tN>wxeLq@H{0!B=t̸}V+\МpnTǟq?Bvxgke-|cGF`^B>v>jϨG{f_~l29( 8<RfXx'l mwzo~z3J#}S3 A0wIrǜ2+cLTW.ADmmSE)=AJqqJ)#Wއu=2j$I;*tNt9SS%l7rG5$W>qfVYR5Uwyyz(}B H]_v=ʐKmAm7\0ڸT@/7*IE<ÁM&P]ܗu9* WAթ㌣q[X~$HqzFިܾ=UFp;s!yk*؜y.tUHAu/("; tОn*];lŝ * Fwp@;Af\S+ա}XBpdF>᮸vה=5D'3(UpYkK(WPݻDw%pS_&;!{08`p̘!!1sBKۣ:R*wLހr-R 3~/X9*1uR+jLaHklS{ouTk:;].c%֩%Zy-}r[(9ډޓ5`:{$&W؀9CAUyT Fhr9EclojJ2qϡ\o`ʩ/ 0ѽ/d =](=T. 3RrHŝsܫ%4yELR:&\k~b۹E{ROJtcd؎2q七TAn.v+0 ӹr )`NfT s׊JSgTΒ2ڋJ2\D l̔n2WwB-C!skXE/^RݖsS%=XyerFFz1upֈ e҉]Am4~; N 20b? 3KHYRepϠ*%w`~*V{Wތ-;ArsrJ~%6`3*䩉asAw2pٮxu~k>wS5Ghw^Q3n}8cna2]NYS&&Sm׍Cn0.yXe$Rmv7!1讂Owfg[^.}쐲ᜁ^'dm݃e4l+#9,1_/~?֩*z*ChW9Gp]Zl6%x/++JrFLqdNZGzo`mHyXqCN?92[ΥqNrP*6`0+~/C{z`>c˭.߃_;=:|wXתrO+z?\_}.n$wer Q;y"4!<WxvI'nudktve9tA.l%#esh=ev[@cbn]@w%yZH2p=; /Bts'-tKnE>aВjϸp*%{"Lq2z(ss0ZEܹ453{n;2]tćNTw;7erlM8^v.jMq_gRe8SQH2R܁TYڕnNs*MM[0jO)^\]K:7 )s{Kqv"SMa aKwL꜁mL+&\pf:e<R<uv:{s=m*jW; v̩wV$n'wU/֧EMdS7L]N/{2tM ;w]5%\N 9ۣ.{Tܟ]pdJp#v>W9nԞ>dȧ)Mq27xrytw{6܎y巙6$wWDŽ Zei9{*R*٥2g4 *k_AJ!^>u-qdu`1r0n2 LeNgrKW0MK6ig')d'?l2:Hr_呐\4\$#`nM3 BC(wvx/vpILmV{鎓I}vQְn|4ww8ޮSG=DǦK,euL׫ %}M{bY'dAߝXV 2 30?%_\0̜]n 3'x-RVrs=4` w`z?;0Ewl |+Y~Q$1^)*hb9Xj"|_jS4H ]gKtOUw>wۢɝK0"fSvNpjƼ2 Eƫı,TwqXם2=0_¤N{9M=f)#LQ;VLpWPq2V:'^Ϡ@ebv}pȞ(i W*~I8e\zj 2!RKbrhoܕ)#:c1&gHۥsǝ;xe4x)nV➵_ nW9(D8~iǪZ T>*ƢQz{o-ڽwӓmuD:'wʠΔx=LlWSW|hͳ J~&w>,aI~+r;x {rWTBDw m2!Hd (܃zEw:Ov> tGIr7Dw0}Xú1%@w;NhOFJ;*]ڂʮ:`s깦!gvsݻ&`{?of]F^wc_|N! UwC:>λ߱/z) Ϻ:0ikGi}=qo$A^I({{WuJ =2Inwg}wWܷL# 5J@&rfsn9Sdjr*2)2u.6JŝԮÓ6zBj* +:EtF@C{;QgLV-^MLJ;+c;|N.ŝwR ؀L'{BjzUye91U:HqSs2!nZI8`A! \o%s'o']]t =U܃n^m*ŝ/MUV+H):rM*Bb/Fx˩Tٳ֩8H n2<$ó_Hţ·.ݢehZV73؎IP竨 q*5cUw:1S6?+e@`zrОF0]fwR{ wn+Cˌv.^rpH %ckT1@dخ58}ăOAsn~%;&񏺻g 0;zݭ*dƒѽovWU;5{{ܻ9UV*)0`۩T Kni+â`-2O?x*dǛ3pڇ)Q"P&Kq'Lc[9ET3r',Et?c3;xŦ =htRe+o(c8{*0S놺Vxkkt =r \$ P7{-}MS/nV)ƗmGCZ*;uځ n;|14[NvmE!'|'2wkTNsܥͧZ!܅As}E B%Ă쾄o[[ޮUluhwٮ DXƩY/y.K*}[Vgf﹧}=]M9q^EWx-yQ5p/j*snN%~!Cn ՜iDHMEHl'[ dvNb! R΅7bwN37P%9Inw/ϗ®抻=RۯR)s$w),]Gq ?#={#R3[A"}ln-S% Z4+ r '1y5Kʘ{z|22Syf.ᝯr +rh|];v,|'gwX=ҵvH\| 1; vw] nǴY(Kl׌SS;bw];*ƄDŹcFЮ;qx\oϩ 0cxEuX/+g`[|kPq92Ϧ>Ldu>9/o^U;J*cwg* |,dϩ]ReZhqz]2UΩ?˲ʸ!]aT,Y^;P \Y(u}jwq߄N^W&$ 'QȻGבG_@f۩;'1|$u9UM^[1j}Qơݩy3ʜc}TXpxU[nƓb\qdȠO;r;;+j7D06]\3 tְ#d`nǪĖw,noplk@|?dკ^QewpV̘i 3[{&ECr3 v^=յBu={ـOڨŽ8H](mF̝ 2@ݡr Ԁ)NMӵ 5LZb9 _#g_M Ԟ_NNrߣZɈ5v+n`h3)40+4i|wT+{LNR*3  ۩L>B2_2;L;:Jqڣ/Մe.wY-Ct. E>"W}4MϻU&Cb񝋧;HAI1UFVW]wWg 'GmO-OnfQnǴ~y0]n6\p= d]evV"!SQi9NP;TEtz>!G氵VE4WH"Ԓae* sHsŐ vCЇI+8].V6a?If1׵򎪘Xe._`PTl7ѣoxϯ]tSEnkapLSHX9].=nfwYdrݹv`b9!)EBv;Nr]ZE59{Ah' 0c{S;0O).N>+MC̰uC2|R]:ewS1^:wN_mWưݹS5~)}VQQ;f2 v|G}KAj*緙Qgr}']9ESsJZOgӱ)kNO~)P4T݅UInndNp⻏yˎ{pԍv:2 a9cp4wWa;W7kS;齠8j4]UmMK2֠wPE0}Dwsɠ+#rT5d⿌sen#ݥs`;I1*ʰr*:.ŽGˌ4[5Vg#db}ɦKwqh~a6S#VN ȭvҡC0Gŝ,kپCcs{쿴-ǽMpO2K9{~ kN/+Gz|nVAܾl.O{[{ j;Jb{: Hq= h)sح2$wWesZoVIg;;ȽnWr,wzRLA/ N.relSd7$7_!'#˝A22E2` \={0=a_LŪc'䞯zg&19 K>)g㖪/(.)2]0}]f_.~WR}} Vܺe&C}Xúv=H"F*۳wb%;א+V7DdMR &x_)/ƘB?c{}Y;UٓM~^w¥Kkk we?0}<'L{EstNe 2qvK1o}FwX+nWut`OQ>0;= %SE1WF[B5AF=gva2kS=㞻e8$+J92E~ʖ$32Idq;|a_DC (laJyZ;¼YG铙A+R _|޽ E0񚱻sCꠊe>OQUΓ[ uY){➓u9x˩V9SrKA9?9uNU&N60gVPU\.oDx.,3dv^**R\V{fk^C؉Z >uh5ԩ]布 r/n_\sW'&<1OBrcGydvlZd &cT +Ez!U&, rW$$fQ ñ/en`Hv XH;DpKT۱Qn''mTߢLdwn4: 5kG/%wFL55PwGB]G pMJח-kv{tMʆ?n/}w1_9G~}] $2?QieYpbW%qHw׏QY;&=8eF)1d~[ rבԮr26rŮz{qWwEvlZnjۥT B;u ?*@$ 5`jAZĘn\#wSܛ3 f$r,2p(F̃G|#݅yPd&m1nAԎCvz،2+ O% cebwn1Ɲx>N8 s vdΝFwܱb4w@;݃}T1Lv' ށy)['&x }jݽ4C}X}y;%a{_mH(ױbCdw=,ΊSY^4i=قu&u1>}?fe{23{i-uWoݡ_gv;3w{<1tO#Te\N6ru;`iR~`Vxr9e6 ˈy9U9 UfA6=o\֑<qa]M=NM=Q#<]{枙7!s"Ūql}Ub.=nq{O~/`<b7857/1rɭ2 r_(a4[*.}o\GQl PM 6޶Pnm%ta,`[ส"HD9&P*" PEPE !B PQ@H%* |;fmi@ߞ9w_ds܀\>rj,U,0[ۍ&TY/Ʃsu`-R:OREv(V7渏~)p/S7޹j UTqO[W4: pL\nob 9UW5mU`A3ލqO$w„~Kai5]mS.7']!m%H6|I{ތ*bQȎ3 Kfo>|{(2L1L]D{tr~ga8Sq;0ڱuRœ]Ipt=m1cIFtS(mlH@{(2s'ک*ݡ=>A{zuk%;e\m(c.]"eK{hdvZ!^R'ӝE: bŊ-rn>2LٝE7gsAx1dwuSE;hɧ^>d7CחWCd?OpU\2™q/~w+2*ʾ3.-NՍT,H>,ݧ}$&CL3t_Hֆbu>Q9.OG$.V'}I+SfBDhB eCϰ}IJ{2; VaeAu8e4^jͩ@y"cvu>cZe T};qZP W {YnkY.^1Rtg.NIّˎ! 3 1ze\q4`w"e*|t;5&ʄL@*-WjD.2[Tr?8p0Qr9P{hWJcþ%j4f Z0%Kj1nv;,?zw|\ *;AzuK<{%$m; 4|wNŊxdԽfgz{X)-1O24cNL\EDwQ|`w3Cv{LG5Rn-x㎪B/zn^VLwbHH]Ȟ 'm*;{v:ġ-pǸr_{,aRu ~dL@wC*qLTpHfev>Gyb~/[O}$=N5`b%Ymoq_. ˔\q';+hɝ17$X[-1d\K)c;7{W@œrG3HVZgڱlIiߔ~ʴ-MZNT2,W; $ŏBq7qxg%H)6Ig;]-1lNLx>44v4[4rŝC)ݥے_M2`Tenw<w{=53s{ڀ?ŝw;r^8eRp5Se]nO`v F\lw`o*ANSAKT.U^KS-ќ/Oޗ)xm3fU*~!83S/$KqWTtTaOw*Cf͝NgRInJ]岻N!;&ƃy;8Rft8]ЎZMgv8X~J&_݆*֭z;6>r"1* Wj .w; 61;Fezի[+Isbdt- ܾۻ.R#"w;0EK ';-s{-OnߋoX>xW@w{WV:pCxT[;UL̏۝3Ogz/osq2;!wy~z9>I)D̑:/*-M("A)goZw;;+ڹ')ir.ό\iۃYE,7&9,LWSlWQ@٫H̛0lsǽ9)ŝ{nF:x}8Hb92 " mp~~5j w5KŰ[e; U Ŋu)û_ CGD-% }2J w:e,6VOA65oÝ]Xnqc]SHq'/G}2D-ނZnQȮ٢)~;VڭjtBKZDCq_S%CmC<{М2?y=v*͛b?-eS]gN'w ޣ=xn"2vnLQ$$ ).rUm{\y7r#; KnC(ydjN]%}I~^{zus&3eye1ptQ~75ܣ;-q--MpŒ]cyC8$}l^wWULt!RcHUhB։?ŷ@qbn﮸S? ,?-ŝqHq_0$=NA'zO.Ҙ*Vvi ˩Ivֲs; ͷ  L'2"v e[)ѹ]_Xvgxrz> =~9u꜊UX] cduŸk+(R~:+ut˃zĵdʠp fx7pRnWkUQmac;Lb.;۳E} VS.ݞi;N1V<cԐ*#G{Z{μ2Dɝ0Uw6`Z#g%Cl؎߉n?Dw6<) -G*#f^埣 MO1yhmR׾4DR oWLlnӌ_- -OG{*k1n~J(? \KX ۧ0ٱcO@nc wYa8H.sS*$$o;'aF 6f$ѝٳcZ `Hr/Bwjk)w;vi╡.=e|â6we8^IUPu7݌NLޫ^|Lȝv/;+l~c ݄vi~A5~ޫ2qzݹ=UT0)o_"g3^:zE̠D;7o_~}/! R2ހ)A'awDŝ.Ž-U4V#`{Rhƙ6>$T^]V[) L⓱v{v8f ݱꊪʂ8Ƞsqcxsjy+}ΚW&c3:(Ɲ vB<X}<󽺄 WDxvX - E=z_ce8ԱʈQX9Nvޟ_PEq/5NLڕ ə{f,Wãܽ ly9XelGrn.x7zWeB*8.sLq/x%uN=s9Tܧ L񇅱SS=Zn׭ԭn g` M!87)rE^NLܼqqg=v1հ) vܕnNv }ɛ.aE~" ݵi }x *K qmօɻn#Pʫr"dFw'w<ʅZ1)]ff6.vvbR0x¶i'}t{ի%;msFvA;et"%w~I9G&y9u~nM5`Nc;w;wyܕVK$w{L`FN.cK-=Ze©_辨cu{K7 )nܙr-<}A5=q̌1Cta撇Cʥ5fv`K&%Zf^1yWܭs*(; ;"ҞMM42^N*EMnejy- ⾺ ʺM$v O2Fy)v1YCwJ*ŝS=Uؾ+セ"cJ+!p27饺Si/|ȺS;77v%caUk~Viέ2k&+VF幇T5m@umv]By[ϊ1%ü*]=vNy̝3;W\^~g`]Se2fA9+ҝ)CwVPyQ<NWANR@9̔ Uӕ)Rp; L_k12[o0wA=q`P\IUmZD;2Xa%yu?y+r; N}r?nU5NG ]v $wu5.l6m 8Ĥ"ΝSOy{իpe wNՍ)eOUl8GdwݸQU!+cǞޫ^u1Ix9.`%9Yݓ hi@RGLZ߅y .ϪPdt7m2z0切.#lw w;ݰ8vrwhjQ=AF=d~CNh%+ʸr;ݙEņ縓ڳ0H{n=_}v1:8BS;eJTL䢽>0 oM)ZvALiSSSM^dVx]L.<%USggk?f 3 ]mwnt1zg  W%迤,wML\94yJDW$pw.T;5ܻZ܉kSM {֮2]j*w*I&d=FBع; FwQm4t'*Dw,|Oz]QUDv^b8g+Alצ'h lv] sv^ذӶso|zf^䎡cpMUN;ElPuz2I/1U@qT*9/{9OPnG$+Ϭ23P0#kw JhѓM-d^'ټқRك=()sh[&b|IC kjSG<*b4b4wa{6'-}<fwxWxw )(.R1ޭ%ӊ[fg֓  SuGfwxY2r*z)fA[n+?MU{<}_ aVJq'CwW2U>y9riNٛAݹHmgMFܮ [U)iu8+ 2_莧0Ԇu:hnU펁~zvҝ2mBeBTX$~NY{eD#ɦZuQ&q;{k%^S];Td#r _Gh *t*;/) H; _xoσyܝ}ZmTqsں1"tĮѰZ^~`1@ 'NRˤlN~wx!]GLDwv]O-7OԹ,)ǬHHXRq]=\\sǔ (mB`Y2ӫ^7[u@ПQ/va;Nr{v12/4Z7߹A͵M]/~Tu3_T%4+b V#kKczUS2qo]qo/.z.z;ܥY2g| UU8=;c^|)CJӷI۽j*ʳ >q6YMT1 X'쾲:WRՈIoJPrW+qw= yR&{gaw2Uk#ܥQEdvٱ~)4ïQqWdڏg ؎ ~)ک&_5\pUf rEczfWT5T7^NMqZ ٱ#kS8ww"0%ͨ9/~T&DqϚ/UY]ޠǽ5X?<2cR6xx[l;P\nCT N_C%_/)Ž̕!#Nr;"c?KTGe0;;/ܳ Xg; 寧YryI6J'@ wJx2{*{ӵJ]y˝S잢*vbV^-jEZiɖIc!r'Cy+(rʪ~4^ h&T Onn'sYvq߫索t1OLq:9̯JfU%m!۶-y~z2^w=7^w򑁅u' N[erz?Yebw{=AFZsRzDwntwp z{FuNd?cjǕ t=DC^7LfaxcNAq^?z߉/UF9sp ʜWLB[܋ LRۣ=!w>()si*^T v, .:vr8~\j͊9+Atz`jx9C1eZegФ5:3n/Co?2LiHiu8/dv<({`|MUw pv]G8$UYd8Jhk)2"($wyq"d$]+dlV=vjZP*D_$+&}/]F6R-Մ9 SswF\'LݺeWԞ\K:݅tJ~sm6w{\u=ajF `` ib%.B;J~/QT,:{v.Du?Vj +{\qq=*1w\,{4tNMe9_SLVVGp7&>GtH;;kHd1RSei2+y%p C;{ۃ[P<67U39uumv;q;gduL4Liשo/RI؞~*1m`qz?5zlt2/σp2s뮸szc@ȹv{ڻZeb&+(wdSt4v8#l٭w7U-YĿ~!S1ēqCš}܁vQRdk#H)3*|=~uC}0*HxcϙIFQ۟A>$2PaP-y\rD^ˌ{dx ]22_:]e.fS,&kmRjAO-M»e<ҳ0\p7;vb{ܓ;@wv?{hў'Q{ޫ^ڂcĆt 3@j %\G.z4|/ݻخL}unj]bv LԹOݾT6vf,bF䎒σcfa]φ,1"vc1( ws sDŝ1Tq|v #gk w7k͹m~+GΈeT)ɠy.\Fڡ|Tn 2ݮ3ݬ2j9Ɏ:{/FziJqw=sOl2:֩ac{ՒX}ʮ6x#îc%z7lvr%wf رzGia$w;lzB0]S;2z‰@+ޝUV\q_}.P,3smrIꚬJn}^MrW$ev~q1]Eq{0v> <$O57{.7 4i7SńJ?ogQ=ZS $ͱ93Jl3Asz,@bǰ wp\@J|ԃqVT$mJ;=&ʸ #_ Nf'-{XѽXsjBd%%wPƚ -:Ptg-RuP#ҝ7T (]X^v҉ ! I% صjJh.rBt ۋvM-7,9=nq!~ȩ}[&OlܧW\X ؝T:*k앋 ; /q/&-Pz==d'Kq߬25pWkdnE{tkU䞦Abb)3L<+~%e ;lA^-w !OWF ɨAAop1v $G;P'1' ۔GqXu= rWyPe7k.Y< |NjY4)32`Bl{:;rKm*6>IqΩQTj1#=}aN(}ȑ1V3({T܏Jqw:prףI+wjܙUqiP+Se03mSmG&7GDb{Q;&]TYe.DqKpX8. CqƖJSI785.Lw!71Y]o7e1p_2K ?bpڿ(Na@ u[:ÝΝB{-_L 36Mb7{T>Zb%Kwm}2u5$ d*,Ҍ5{4G;XzedrpD1;b:q3xkjzr3|BNL~Go7o|cRxaڋ@ǐ\bEvBrxǟ^殄M]STw2*c$J-bfݖ{/ ˗7 <.u;2ʕQ_@OV 2lhvpOi#e7eWܓ4&#wwMmG!7/;=PO1*]^3aK3HAwvYހ5w+˧iwKdW/qݕk%@6.\W&jj,yۉg}WلBFHcʲ 3Aq,̃w#jTKܥ;Q}G Rr}(̙#ch*Sk?z#sF=MZ݌2%#A{0_ ?-v~L g/9jVjxW.UGnǘ7[-Ƶ}n/n?4zBLrW%Yamϩ Ď8pXH\b;bjw]7.HHf1{Dw(_ ꮁgۖvȽ~Gʘ}s6cjbh ysW&wQ6b427Lfb@\ǃUrf8j NS;Åah%۟):MGO&xe3+*=Cx6`aȎ٭֌DϚ).s;e kGggF4Ő*Ω9G g~#wtYe{r95__p݌2`{#$4%؀i]T݊p*z r{b]U ?YR/[iN5|;-^(.vVSi"^c%~sHkNwۉ€멀u ii@-`c#0ZKw7]%`׆zsk#^>wv]-Tݯ~*bl"cec*=!@vs `H[#`k8OzWT{+Nt*P?p;wYl{L4L.;;R"tdٱhf=`ݎWe@Y;U/Cvoct-]?wxsr _22 䎉.*˩u*:|1Hi;kQqkƶXQ~O)~rn";_8}9N.VgA]OskWx =3^qQ&UHnK~3ռec ETC#9u*AiB7_ R9tCFj6/͵M]UDxvNUlfYu*Ufw~]-k<Ye0;#[3v`\fxAzRΩz(+kFnp){̔YXt{hԽ7IS=r"KǠ[;2Jw.ޟT7R?jm az<|QnLD|:.fa{d \ȑ* P 8.wzf)QVA8Qlǫ)v<3ݮeQv;2V=Se< Rw+FCus0 %c;qɸ]2Jl2(?+ٽƙa܏ǔcԌ3bSLeġ&+6)hqwj6*(IрBiĂQRSOZx l= ;oƯuyyݺN]l!?.$x;qU9*L=N.L\m wޟѡ}h#.;ܝ5ð;e*fTwjzS2`}7#|p/# qH[8H @ l#\N}VxܕAX-U~NW7c-!P.&?GQ݃KkU)%G}+GI&dT/ &Svt+Uн[Db]StТh'1{ܥK_V/ᲃrŽhL2>y3e+ʠhQ]SIiOd)&&ڄ gV8$r2S2Z޽6r{$wrc{kFcb}8|ɡSeNTTr`ر*NSc dRy(c 9=x܃M&2sFj\*7k Sq#͙Fjs,*LvN)v]n7jfK9*ɝIVX9ێw[%[cfuQnvu sQRe~k0 | kݏDBUA7T_UNrof,cw^Rd% vAqsc%k\Au곸ǝ]Nu;$w*u${LG!{-iM%ЎJ݃51y{]Me|2;;Gfr\̔QƟO[J3Tg:7ۇűeRa0k]^G8 Ekl_uZeT,绚>Cp.buQur;ks2p\mK}hjw{ rW2wr-݄vڣ։uG-WԀ=\pO_lmw.}CϔYe&':˭\c<2s"$䑛*~uxˑuZ2vpϾ`Ro~;$Q2nR(V; 0 #s (L'巻 `,K|8]%l/&wlnnwl/Dn׮=)Kq;pG5yDw=L `;reDw»wI Ƣƥrg̰WS{NnG0;]ۦx)aw4H.E{'S{q9k}VaZNtǛz>"]۞#c#{7U;Yu J7.s]S;Pvan* or\q2Ycx%Tb{tw=5F$VTS?A2ɷ QoݴvlCjkP)scr7toqV{Bzh;Kp~&`ǦMfuC޳L,qNM8 ;6bt.Cedu ӣŝxR=WJqwjJl OUwqu#\f”UFIo=tNMReRn?'}TL]7peX_?XJ[4s8O\M*_Ӿsbgod܎Gd925~9QE;0tp AرԵ;2Ew.wr'ۉ{SlN S!Iu-2qJeǦ6wMe!\4:e)Zf*X~?ո.Y=1'#6q+RD6q6*,<~G &w#v٫Oz뫭=*wZFL+' w }^&Y ByaMt ]Vnsq;/~D {q]wv G($Ǹc/y;ˬ2Sy$&uwЅd;>qOvR`mT%kJݽ[w =Hhjy[Ìy$κY >1rb=qIʀ=@mTDTYl3;VbzSavDv#J.fCqEvKqqAnە*B>ݕ9DSu nfwwhh ):Dn׉?l~t|Eu\RMib{Ho5pEB{t)&+!OTQq93vvݩ@&_z)vu̮@v7QW&Ye`r /Pq!]+ܑN7T ]*"wLH%wL<zz75]kXu#x/ Ha;".aHܧVP]?<vQ-&w&^?:c˩-WNejMs #/sSFiRa1P'=:f\qO:-3b2B`7T@?ۨu2{uM4To$QhȔY$NFuw|k[W1}jv $JLv/|tWELkfw)|)ç[T{ wL5VC $S^_]{T .Kq9U=,d,#N; 4 y۠I c=db>LrH^LtLZ? bnzLR_"G0E5&*N5k$g7x]Iv0d^t88YXFw֊ ^lX]K4{0$=MT+܅5b%LbW݇TY_Z spr"@+3qIkKcoYz9~~Wc4^xfm )`1UL}tbD`3^pO5»|2F w[(cā{4H+FA*Hw89ϕM UQ9ETQKv6w}ݲec]FxP׸!`iH%ⒻN>_s?7[p:/a.wJ~L.ߔ0CboNn7fnܫiQK&) ў3o} {*[<L߆]S4]i tŝ&wqDtvHZ #KsJ]QSx'.m>]-QZcXBP;su?[6C Y9Xp9|aBw,Sq E껄i)U1{I UH) f0f׎U[]}LOr%k ;JClt[3/փ⎩벸ef);k0+r{~ȭҠW˷Snvx^{Sc ^1F*K;/y%UKjbv)唹֪EڪXduO> MXe8$}i0ƇO4hLu;A}U#CL0@>8P> kh~rf6p'w98EwʰC~ǤKbt /iN|7;,Bv|fѥT\e pOݬ>|I/E:#NDbNL1ʅG ,sj!KwǤ2)Sy'8_OoLP1yLLqF~p'kp)㽗\b{P_æ]Ń"Yt`&v\qg\-ȝCnwl#o;N1ݞ?O63ɝK%͋{a%S3SQrWF /f w9l^#vN$Sep9U{g!j{b\sɝ2`,*1rxAVCMн[j7 k9h*}d!&jGb%Hqס]+>&;vLVQ;CaRty {Vvi]2<( R|(;*{(NS&wN]Mo꜊qԾ/BΕV:eqKVh{J^ΘvE웻\c&Q{RQQףG?!\+w7vAZ'?Se .Sױ:jsh~0~lAR炇 l2Lo7drRT2oN^2nvpwL晃}PO_ 1{r n'KotP㇎5 9.q26Rz.뽔3;nmpyGbӗbl߯؍N{w;z]6wvW=Tw+!]rDNpw2L蝪@燒;Kt\w }=)PUF")Sy爨F*ݤKm2*]H0_w-*ۉw:= 2Ǯ;e4=j\r*t?O஻`=o55&y5ZM 6Th;Rܷkfi ygml2MK! ۛf3l--b]SZ3v"*3Lrm܄>ݫj2tFqU#wye~{l96ȼ_8sc])#Re0rg^^Ϻ]mvalTd̗p!Xُx3SζxEr?9^HM;WqS7~$SHǧ@DuAybtp Vwkfgéx'5@w۹^LM)ഃ6slQqBz}dy(;vI0Ͻ8WF 6"[qž(vOڱh=tQ nwKs_wŹc S`׸<B%$hpQNwe8$A=;Vwih ;M;ﺄk~-U؎ɅngϮf(pн{-?ƪ){!ǝWi Ю8H)qwŝ -Yԅޮ=d%^xE5#.;GLwlEڎ1{Ur#y w2ݪ`o)1<3{xAv;CEqwWq{0$eL2Rb$r1ՊL,k zqUtK$73t8K&^g2}SB, Xr Vipmە4w7I=K=,b&6Qͬ2?=3TK &tm>m:SӻEw}wLqW;]~2x\HԨ:үn5KBu>I$a&iŤȓm) G=4p=>^QtwR|S] vwma2Y;N00Ҳe8x !C~zV(۱rnsswDx0 ޹rYFB;7GVk>mZ\NyTݧr**stwnR1r]v0|u6@#]uUwv7.w;4nCIWNr!U_w]Ne~TB按Q;I=>8GeAr/N/ Y2j[Q^_3;lS})e*ܫ*]{4#Krg&01R4wmt93BwݓvXp7ZScIS܏X$a/7u 48Gc{ycK+ tzvyܻ3RS&< 1s{x/$t燉ҪRe0r40 w,ݾ={i'jVjBTGm;KΉrBR~95Igpc֨nkA0T!' ]]'I۵쿐z:!/̕+IbFb;Ɨ9;=\.CgjޱewTB:;JsD]v RJCL% >L# 3Z}_[$Ktb)ɼtǶs.cg.$*jGglȬ!=ܺ]z˘]{P1 P}2VTGwn>bݑ]2Y, 9OQRrGFSC 1hGj<2Xs˦kMtaF8Bf#<2jCe8bܟgq?ŝ>Hnu>s656M zDZ,v{'"`cQ-Sv,;R1]߉'!Z瞝b$粛y9w9e+=ʸj(v2_M5f,W^R5]Ϣve ^Kw;0Uc;hVHgжǬShڝԗx76뾗ltRwI];2m{Z0a̒ero"V&-!}Pʈً3\n.=vNy2޾]Z=e]9"2}Hr7k0[wAZ9;ca5J?*rCkPURD5ܛQo:5#Sl?mRO|̎G7M)fF'z 6bwI<љLvu8f-#ev?IUط7u`;qݵf*vfrhA"_+w}+:0 117;T!3;w>)z+qԱCbw>$QR۱.rGi׉3L9,ꒊX('I2b܈I{yL.1q;R Dɤ۩.[QŹ3UF1R܏Hqnp]Y^G iQSFo#ǒ_du(1";9eHBeڦJlc!jzf Jjv=dj9XqTļd sz8 tGq.^x{܎nV ܩ}ec*~*}߮/DqE=k9gj̴nZEva5jy`v!θLȔ9B}^HW>kw#Wk;e0LUO9)+GFMSr[$&upH.9s~US[!knǃ_OŊx_~ +}2. Tex݇x' gnFl?:dڦb?ry&w;ЮN̐Z*6v:n*tfkљ>r*nLz.jW7r{lt>$xf$2j]T1p{ΰ8hñ(${r-3' Rܳ%cemܮ]u|%w ȮL=5sYߎwMV$f(cv ;-Нn.;/^{eMTut1@6Ńch33=]O5Pف; =\q{~w7ITd0|Caq{BY9kV=I%ohD]sΛ~, r;&e온29ʩ]d6}LrۯL( FnwqłԚ)NSZG/8'Rqe\^o8I*Q^]ʾ{uy}~kf/]F z8cv^H5jϖV]{XqKqvNw,Uc݅LYTUqO=T8e.򻎩R˺ApO}2JU Fyw: \N= Uu*:4wZ!U\cts^jomJ}b}؎Gb{1#R7^|l4;}2t0>dJm0H8mWTN;dvBwv)Pqc]2Xv=u^وFN*=cvm۵r=*uꙐ#p@P+?ꑐsk\Żp@KwPţSLÃ95'SG;~Owr{Dwvvc!ji- Ed ;w7>_1ew`нet,pT$LW LrW v>w{U*_J2zDܽx6BpQz{Qa vjXˌ2JqQwoD 8'@nUE~9n{B @S!Հɸl{8^)Qu?&IF{ =~/U03QVzѻh FꏰiPw>-kB5N 6b+U2M7w5NžkWϘ B<_kP ड#ס}ؾ5W*;QvpRW率ap=*!G KR;#frK]nr@ 2۳w;]^wS-1 Ί1?0U=r_'e;v އzުBlWf Dn]Bkg^` {btB"pj tHO<E5۹bg"wܙ.w6x|`/Cnct$6 G6wσ,vgqnjU{qL==&(x? y 8'SI t'bs ]xe>'gNlCbOwvc:C`QE;˛0yGU܇p*v b$ʣdt5'Rw]n.`֧eA0;̮F})(y-Vf?sme`r[o*=*ё12tQ vwۋlwFU"Uk.qAۅ휽i=S$ȡW:UlͮC&' r@pG< +E>2eHciJBpT9U՘&Wq׉ڤt޴bal 3u$vONtʄ^V (&#:vgvkDv(c#SnFd>kES1qEU;G=DuᕩԄ)τ$}d쎛tHSnSe,<[j!W[ܫUW:ި c&7FiVAs{lTǹ9Ad7s IuPՙI\AknHv}.m"kZ$[KKޟVx_Lo+58e ڹr׼}Ek V7} ,خ))7la28&2A:傁ILZlt:Yw,.DX~zNL eic}\OvUʈڅv]1Rg2s=Z{L<d"Cz{NIQ^cQkW wI] MqgtDŽLU*Bsw2?=WBwg꾻So9Q=;g^4rAehmcU4KpTQƝ2veɹ}êKIvwm)#tT)qY)Cm ݹ$w%auN EpgcS]-YUE?.LtjC{#WyD2}=&\JJܔެGEthW9Sθ])\.]V\o rft_zTw{;UU%wʔ*sXaDqlSNQ;]Sv9[0[.1KyTa(Y~1w:w',2|vWxil8<1 {v܃cGԕQUK$IvJ]#9/fە%#]&Fb$Bf$.v.#Εz;fqbZ!7`s;NnAVa 7ewlqp:%pݓ8a4w2|G=o4I.sx  ۱8f=c+c.Nix;+Z۝㱍*xkH4rs^61N3@{-]ʹdKf`χɴI@ vV`w}KKw+)Z1Jܿdfc:ee$;. s<apzvA'k]Pq]2y YTg wzg^@`qZ&veTWZmBrCFQt)Oj\N]AFt]SVȃdCs?Rkq J{67`zl1 2]Ԯ(&}Vr;uhr\,-"v{LX$^]3_ŕ+k~z齗%E_N%?%^GF -ҹqMFI]"3\v.*hpwxUEZ;~ UcT0pH%G]Q}+]I!]q̖YDesY 0o2}DY yt{&szN=x'sձ&o CS|jjd4";R۱g~ƙajHDQ͸D6b!qv`ERnjPDAjP(^^^TRtUV/;'{{ygǦɓ<_;(Rc r$Mx M2vԷSCrr])q;2 ǝ/R{um6{ŕ5 ^LKUJ;=>:(p{I.l2'WwS}́u}Ձ)j }|[!Ǣjh8INˊ ;ii;ev4X&R 8/^\_n !lW%Fip]RmQ{);U$]Ƚ}XmrTݯ@v;[-pXw7=>2Cٽlx!s l {Ffg]*pͰTSen w ^P!_%fMƉ~92h:Գvm-D{Δ)!!5Z*sd,һT/mgm-{+].RnTTГDz۱Qm秺*=Cn/ɽdv$La:3]Ѣ O8TF'-YVB{ +/$BHqw>,s.>V̩? |dܓ"̽4ˈֹ)n}E? 4g]"ņ2rtZp瓱W alGMNd rgYywZӁ9ɝ^ WF2Sq] {TLb *y!L+ȅ\7:v=kܩ>oŝ>ŽEZYz@ۋ#:*l_l$jx#jwrG!w;ܻ#9rwsBs;#f>ֺʎL3g iB+Cxܛѽ2j* 992I%͛?eLîA:oFnѝޘ=pOocоX=vGCoClHݺYmV=cݷS.] vARm 5㉆sX>*I= L깔2 =M5OBpKrWT &kCxTgN`wL}Nߌ>-ar(=TI΅|!Ew{vˏ8V2nZ9c.jJ?z$,ÃDw ;w\`GmTu%z!K|/5ΔinǨ%c ga*]vFڹ`̽igsss3TܧkmU9Y12Ir=*SλH9L'4\Y8_r!룣s!- v]O9Iio̾8=9nl}wrvLݿ,jwd'ԼdqޟBjw>;T5l$B`18>w7^ }pyy2݀r#K7U.}m/ymPٝRkh/LwWK>1 GN9I~%2_|M?tS3(UA wYe,ӝj9q%{TqLf} c{ʼ4scx"봴mOq!u+ 7='L'ɈڵimB%CQHz;߹U=svŹϜg(wN=Ⴊ0nLP3x95Qlcs!˩Y|2ux*K,))5A=v8h %w9>W'}L7܁ ;JvrMw};Ɛ`hq@C_5>G}#~/=93hϯSsՒܕ*b}*1-dэTŶG{)B s׵MLHh {;^cբsYg|Pd^8D 6L~ʖ)qIg]L}%{s~z莕9E7LU0KOPqV:U&^xMEz^+T؞Sv:E-ۇ'.eosՔiNK;޲߽3L3cܕaȝ2nN*EYv67jݚT>xŽI=S1A8˽fHq L*EvkVcR 2ڼ^oTT vg#rb%WܾV/>y/ tVJMDΕ-|-D$>*6][pOOy먕Be^NV3vȮzFS*nx\kY,vlVܙ NLx0Xc2/{+f. jP9ez?m:Y `SKfg;w<}T,x񤻗T&cbKԘ,qFwe8TZaQ~{!|t9Qc{˩r}'ܿqI2zWTlS9"aKz'>%*ŹpXl Rv x) nDžPT/WNt\צgHjw `x*+dt5 L4@KMyS@/f =~m701 &>[\0W9ƏkՊ;ݯ/ϺL^BŠqHmSDfV&lwzcmO+#r_F2[ӯ:=sGq➹ W+Ys;2o-)cL3Dp, ` ^GU"KŰάPLvk^ zᎁ)&,KwA^ ^R$*Dޓvcz^6qVVj*2tIsܮwX{<`'Н%=[®arv{\"Ce4OHj*t$Ct's(LjdnICe,2').͝Ӽ-IdvfYtfEs~לzfNѩ*V&2Bv-=A螞xRen~HS}̊{8Pj>'A:"]|()\&k M2U.܎e=HrB 6m;>@x=]wS/LxΩ2ae_RFc^fDj UnYqS_q] eb?$J $ A̖Нf0;wl;莁U}B3 -kƩ0,E!r-OI2Kj&{!̮g #2}iK6;GV{>5^HybmյӧͣN/\@X fVD4]BS N$wAzEw./N~_? Wk.!OYn'۵9V voRáz*7}e^7Nm.lSnߎwKONvoR8؟W.d(% Flq(.\5Xv>|7*XMBl9h+!$ęرo~Z`k.^[ ]N5;c1;۩x48qNj^\>ezj=WqWԑnOvl5rz;xdy3+b;]E}PWt2`Wie(_UMu;DVV0Un]cro\#Ca\R.B /7^~0p_ڑn?74H)TWSCe9RܥݎaZ>g݋+C{9Pv";2vey)ua>*]2kVܵR"nhNuMD$VjR+w{M\ii=*c\y-G~21yeMXsakw3U}H'+Νn`9&v{epL'Kva;6 dHl2LSKp5wLx7 zE. DDIW)G5(}.&mi2[zOK#jvTeF}@;[7 /~6|C{0N\}SW1F9Ձ;V܅y!?ضU]F \eX?ۆ]+qU;y#dbjp[kqNXh%aqM\w=?zen C1rːy\PMn7t ʊ{[Z ;5w,袅w)'sZZRӵmE*N QJY40S #vYޱZg%"TƻԮKV܍51d1S{t^"S>o&cNpw%TvNʐ9y޽O~k]HD=U<ש*$w{@24ȤBO2VM)]1X7NuV7%J)ZvIggi0.`ljEteV33inN.zy[S̞ 6j*T+ӔOZ Ʊ~Jiܿ>w]L]b~;az":0`~5|GVᒫ r+9v<8*lN\v ].d7OwR;v:K|I2alƇ ۛ_F$_ӁgǓ _Yf.S;Q@=pb;UL<u8U؎/]:6$EN%*Ӏyxd/\巟1]K-{ܝ~BUX9e\Xp:>kÇC|(VyvJqԯ ~%}]a9KEEn'7/QvCbXlgh O'ýl$\_>xH'CS:9V HNAgvȝFw =\ )ЮeB% K.w]GIg[܅Ev ^WYiϙ'Bԉ10_tȤaw;nf%326E lz- |SgSZ?GzNGe0uH]+S~0+Ά;S&{bm4x-nT 4+=݊&U^a5w;.#݊$wKEVy7ؽ?v[>ΰinŝJj \;ɝ}7u-+M+ |n;\ț+waf}*/v m2!SY֙ r7%\p jD̬ޞS [uS@a껄34]r+1JJ*S;P}ujK!x^Ы܀4 ހQFTv/n[Xd܎smd~X_H]*x:qto mjFڥގrW%=1]nBq ۨ; h3f9Yvp^AJqֳQ.l˽_Tec.GLлbeu$*yKҠT]Ev7jư{[׮%vNUcA޿9!GtszʔUmm׷ PAR >*nr" c%cc2[q۫9מ{yc֕)z;db(\l7 TܟAgDz.L,{\sfB]!4Q;Ep}TO蕒dG6X2ܵP{v ]A 3X:U7w)ee+sҮ%;vrnٷ6 QXI_ >cⵟC L? weBK}AaKo^YAj${q/wb\Fq>e.Vbp0V$o[ I/^wJDչ2"ȝ3ݱ2bdv.lS)I1wI<Tn烊^ [{]Tq;/nUcifs)ڣ^ S]'p +v݁xXk=;Bvu2툊\yi6BlK7N40^K4u3U xem$=*=W@IԭOJ 3zyA+/RABp9;djC6hm~c=o:^{)؎n}8mNh13!c:8Κkv8s^MΑIuˍ0BqqO96.J,|*1zcb: ([2GQM(ή9 +'Jd;2DO > ]SIS݇IZzTy~.ŽB;Vޗx<ׅ(zJ?lƇLռ00ws;0+ Ry)y%{kB2MzC`1݀ e]&I*3B4bvrj/р{T;K p_Lz{hjc`vepN]/q!ޅFM|'R{vCq{bN}:?JnF $XyWWԊP)(Hv?Ir[w;}漣G+ SݯuZrG ؗrH]N_;~p   ~:&]s ˝>!ܞ.䑑ΞR&p];{>53pgv;]2L$QqRT@=U>-[5Y>qx*h^:sr9ZÇ^Gp=>A ASJaUgyeZ;=Cp/.);6`[FF."krwqQNs &E𸐺x~ŭW΍b1R~?R!沼2>YcPjxe._nܒUFf/Buc&ٽNlpqO7*clnΆ(?雊ьHN=Н_&рɟsf՝f#^O)w}" dm펜Ԓf+3#G_Rc9Be qؓw140M{̏(#\ X88kzd(kz7=>TYd,b;ۦF;9&wO(twfFNqi,& V'S/R~ \Xm!';Wq )']{ʜ֣Ut ^8 R;h@ {ɰHzB^{&wL'NU$NKDɄM讁NlO>?BᙡKؾU5M&wv ᗡKz׾g"o%n"wDBkdqNBY^'%g'7;.uE=a{>b+P"9YՔ" i g91D;D`L)s;Ofax`+awV~*}ǸvRe{n⫬2cQ {VթeLP0ArGxo?-sΗtmAvNmX: {dtF3ć%<ʛAO^1zpÔs30C]nɽ_ aS~!(USXJ.[@wḚKzVn݂;j;Gn ~| S_qT{ܟ0 kؾ{LDL jwB b;ICQBӗw`@0iqpU&kEgA@X$G~4̈E܎1ܮ#Ut]s;F}IlVLΓQ .|e0gz*,6@mffnn;/q)h!LDHڕy"I옎T #V N\H f0pQT9Kr=Zd wΰHM*â_FvL ŹKn 4ˈڹ!N0EaHasPq9KO47e2+wƿSs *\ݢ{J ]- enp_ޡ?LC>w}7èb{0/:ZZRpj`lou},{q'Q0'?ަخ|#}#>Yq?q]r=2v*N^9-3>du7e=4۳[f<{S \;f;虚Cnw V&e^l|g%/-Y!;,wNܓL?if vO mSKRqw{{An#Vg*zS:-Qsc;= } Rq*KXGM:YW#7.}c ~]]ʪ_Bw]JMF@ף/?ZRa0 I;2"䛩=DwDT>jeO~KvoV'aszĸ2aKx5+:S/2 ʤUm\p;fbs->kvlGwe=2l?)F:2{, xeo҆G{);aPܥnrI`[7̓˝8},p{ZYqJFхԘƜ J6Q1t&!'!-kJu ]b" TA`SSW8t/@PD {=ssrm,sf}}9+ݑ2ɬkCũT]vOz=n҅e tq)5`ʎDo\?jBږs]Rgl7D2gjԳlT՚w衵jL6d9Xyӌ魝/Nŝ#jXhOvXYkXmTN;e dv a\jS;S.T7s1\ua>;7֒;fxܵ0S j Zq;&ewNzNFL/Zw6,SwkUm22VƝ/ ktIf /x>uϒS2]=w&<w rܮgSNz~(܁P1M|$+W+9¥5`.-36A ƫۯRmІwq$"Wf |-wxMpuI7o\[͢{s ͝έx5U2sQS4Uyc3F>msi}77\R-hW5SS 4:KowT q)RH̗U"܈|)=2xtHȎq6萺m{PP_wyvNvۭz; IzeHqU(?00*#}\SL@q8Tdn MIqÝk&(7`YF%YJ)=w{4=}\2!z OQfimګBꭣ'G>76WS{/#}9S`-(av;(]wRQ}&u3VC6Sedo'fK)rwؽo=NzϺABf's& f-N\7{رk`FMC1h9`j#$Pw2J1܍|M=תI6'ս#f;"u;*nS^ЂS٥XОo侇z;; ntDe䕡2q&zQϒۙ.EݫzΜX]S} w0VAhwϒ!@ҕ~z7`;<< wg<3Y_%N ]՚]?sFfSBwr1Z@ͺ: w|h=&]]V|t5iJn UNL;KXfnR ڹDxtIJgUȎx<eq4<2Jk ep!Y_Ht/"yC$WCqǽԑ܏ ']_m}YcDUMd :(˟51*sOv6^zܮ7F0t4/xGZ6Umh> [ro1gGͺDX/҃:.bSf ^*P{-KK۷;Q~Y3V{)=2u&8A0w:/Pq/2-2vO ^KBq ӹE dcŞbbN92ܴu;^-{dzzwNSʂV*Fx9TD'dwENwg~* 4zd+SFBk NݭXR;ʒ.;"RǭwѺ9e}2vk{} +41<&w[Q{*!lw;o^S;v@;XBrc;]w>kCgOI`׿f&/ | 3>t]ݱۏr vӵT-%g=_B-vpl/<2˔۱\ =ڃ'@]Dw'կYjDAT# ~lTׯ\ߔ JD/Jؖr2$ #foPp}Dŝ#خKzIVS:9Ow Agʬ*#p b:\\ XَoIvb {S^\ 7b{Tݮ0ofߏ4u noLa{G&IFS%FyޮJm?K=|3I/&'PO4.jWe rw.qq5#2;lwi`]&NlBwm(C{glBfah(w U$ ځP$wB,Η Kjd;f?UFnwiۡKvtHd3Ď xܩ@ߝpvi\g);ݏ3%T)l_O]Wps>eL*^n6W[Pۅ*M{J! &>Nw;ѯp2%װ beh⮿0SpWSIл.8rv-1T[g!&8P:҄GF% ܱ"=. ۩l>~Du3ȀLkۡh hX\EpLx!~Vn.#L!W#b&*%'nof*V,D%DgmfD?/Kp0wUj]vȲu _f]3l?kJD_NN[Sg"SX^Ď>Ͱwϭ1<9Jf/nvzWQ2-8~O:{8wtHc,n;vM?fۭ#224"r۩^wwkUjݍS1J{}p{E|.nW'&%ٝqN9drx٥ԎXY5` -,w;ebp*螅w5b^5Qu5Eû>{gŒٽpq⒩ Y>/9^3/&r_U_7O'6v;WXnS7֭Pljun!3{URy!5/Yq!kW{({2brxʟ^)-.P͉+7N =y$taV:-tT+\c WN fPST '. ]~8ҋ\o*Cv7!+ޯg5q&ѽI{lNg9e*.hKڹ-pԦZ-i-ظjU;G#UKΑ]ud@;^0Ɲ>z(.V.]{or`Kѓb{`n߯j;7o轄- sͥ }xђǽ&=߯w{?gpO۵@[ydOL{'Et.G~"nNCqa<:D$v1;'ޟs߮vL]ݛǗ7zr驵w%3d*s^kXąP?@ Rݣ 0+twrg?_""7*_R1Q׋wʘ2 c'swXǽ 'xnjȹ~_H&R{fws+Eӣg1k똆^O$c&nR; >>>~\"wzܛӸ th+v)? 3wm;^o2 $bL ]nVA+F`1/BpGwx1vj'fum#Z2Dqe}CJá/dmFtR԰ʰEf=]G=/ Ht.^$&l΅}=@~Tvc|ndGڭcCd$i^8j;ֲ}#" ܨ?X;u1*qI ZtG wwƀN.N9'Xff]nKʕQL = EL9\+ u.щ۵fh/22q(ÑRnc2+= qwՏislݩ.LeCPܯKgfȩ3Q8.AQfɡ$2aԎޒ~{қo.O=uת;ɝ`ݑ1̅4 .(ٝxXǢparNU;vKhlMEIqTq; v ]Bw2vp]bt9E;Nd\Hq.‹M5,ng]4ڟyw-->jӫYYed;ۍvQjKn*shNlN=w]m$4MSELSG`h,fmrt.f_׫ hC(pI •Q aIw_HeL[N:'uk!NDO6*}.|VN\RhznN[T}#5XbߌZj9=5LZqw '1|'Vv7K6{'NAApg2x} ODB.{sg1RF?돫!+V#K5Alnr%~hKJvUfWv߭U{0 3>sK)vkzǣ\H.{*a;ٜ׭lwB1%=ub[s3eݗT1spxZlswU}T`u:>Z;DtO-5a2w{I^|:m3=cV6l_&/\0/o44& zFoWa.;>w[<2ӷLt?3" "f~i ;xNT%xv,1̰^G$F}Ffs͍ rS.+nݱ2[aʴeHK OBlw%Q1WFGc?JG)?ClԝYGzWGWكgѢNj}ʨwA򁫄X/ܹ͞믄͇9?E Y*ro@uWv̸}Yc/cgpuV ؎q)tzk &{i#OԞꋴnŽi;K)YƩT!.]VRv~@V";OaoODuWN.orgk;>tAO;.^Svpɑ2:n`7,օ\Lm]So-J;hfz ȝwnP\9eۃivP0%_MuT:FwRUwMWβE[c=8;ݫLʧ۽5ڮ{By@;.=;=2r`;TU;2/>1R x?k#h.L\8nt?uI2 T8ͣP,Re>dP-X1dԷ|%]x]5Ƚ}t;9J O٨C39VC='iN3YP/s=_!zKu5G[poaOOFR녯+[ )]mdUF;+wͷ })Td֎EvvLV [JRvb5x7_PyOEP`S_Ω<1.]4mقI 0bF{ {3 Wv!wk[vE${hα QUGw{v.4,Cs߃Jr"]F^uC50qFwc쪻Z'8.#yv ;ۅRcQݓWf12/,/-/M]x|偾5sll 0# TZq$c_ ՝xsSANu6w6#ݥ1S%5DžĮwq5r}K|;(*¹ ^Ωj~Owr+qڵIn<2='Ȥ;Jlga2u؎?? /ӫvM]}nA~7y.lJ@o=WIꈋĂ-j;K_?-ھ~P+@;z;mjno9ǽ-_7]:>՜X^H՟/۫7˼rd1 ܾwSe]R;K~{u|zvL-Xm̠uIcJ?MnJseŪ@ cbQ0xЮmu:ֳIυSPubnWn2.]&?N={?$wWe6psJRh-kZrϙ:%gtw ح Kw<x^T Inb;ۭ{=BTHl Ġe23(zW}n֑!Sweޅ펅s*}ZxBpϴ6KZlGfbJ.j)Fq?z򛡸/41O|U3յBu/НE&KYB!=P"_ f1SvW:Wü3£ݗS]T/ULmA(Hx'Nu+cBss5;B7T;էuaݳ1Anno{`]MR&\[؎wLG^1;KN{N_G\"`S)77ٙ%&v,ܛ-{%˓]Fs -=7#mI@^KqSշgmwgqBWob=if]:<}>DKpgTVV<>v2sc$vG ہNngE޻t\#S|bVq2wdp/w!sa$\Qq~RP{"wuOMaxw,PuǪ$w ˠ*ѽĄ);!nr2UwiN.tY܅pT؎i2L͈Ye3L܉ ;Yݽ5>c5(+8۩W/!ޝ+O =}qW W 檴>d}U x8(\B;0/T*U$23VeB9 򞛩 #-6r/$w[lteLCqӭ(/9vmAӅԆPEZ-S?cM Hvcvڵ8F.n'7be:*jmbvE'&WsdžYyF*7~FſaPL>s<- v:?iŝNըKKb:=y}ÅJmnjbồ{oj;OjGε'?mKq7?w#ŤԑgJ+rd/ӭĨu6)ÿcZ*pAxaKm_㪩=M\1A2`ֽ$L"uQwpbS3RޒAf;i=waG"!A/%(eܭ=vޱٹh<.w;Swk1KO#ZjzHxwUt{·Ȯ-<\:fzo_Qug w0[ =<4Q |pNwwQ+Zw$wF 23_Se*$[2;wye1Sg?iq.=`PiVkSE;6,'ڸSNj8aT"\fTHRI7o. ]|yi^TkPݧ9 c!ehva3bwW/잭0 /_4otvnD]܎-ܩAqgTAjDO22 pk{t>92Hug< .16_KŅ*v;dH,sp*Ʀ32G[GZ#΢YܱGRê~ȡK ;vVCE2^'  Y1-z|& ?ί |]6?^Q.'0V `q}Kpw? [G?ǒ ΐveoBg?wXejvQ;xCR٣;*'ή&5Z7wAMKW]+=X0H{/:Mfw&bvx{#kvv!n?x~GC?XP˗[]VQʣ IuFW&;S^sZJ w̌ kt7)q1atIg5AǺs(~Gy⎜P4΁:#;=Άϯcر5D5nzR'w|{/fP&-nŝ(zRlڮT2]/vɑ5]Ͱo Nŧ^K㇛F%YIF'*kT^\ /ź2@Sqعj MVcqv7`Ro#(}3ϸ \;[V֢{RuA?t+s9?;e^?&SƞeswЎehN!Pkr2X<;Y҅F=HI^ b{+)|Bkhݎۍ~ 6|SWݹ݇?POI3Dv:7])11 (.t߷SFf>AAѝ˼b2 ! ?lj_j kMwL 8Xu߉_;nW%845n!nXϒ;w(WZ-RV9DZf}&.db;}"vpvsr bd/r1s ƶ-ݩv>wEH]!s>|@]=ڂS Uw2;%wﱩΩݙL3Ԥgv(0F; $2Ik$j!ѻ)!VYxӻUw|I~+@5O@YnNJdwOu6\t]Qѝf|3; ˩aa܉K7_XfO&̴gc^-U/Cl}+vђ~W({[u 1Yܞ-{mqwrܙFȝ^dQPc&#;Zl1s\ts[G5K仩8ߞqv*YqI[uTYOQmj7cRw3۹Ա41f+߷"sa+C(9/cU˲*nb۽(ۡsWKخ C !.N|>ϵ>UFiS&;ɯ6ʾq܉Rm܀IMc{w=^}(sdʫB*;E&%]ܮh~ZyDVuab{PtY%)]$s k,iDr~gi,&8BgZ]LŊ'6Ǹ:f ŹKzrѝHlؕUQ.6N;Wp39t!`?{gVFqSH:mғ*;EN-2 AhiSF2[ ` QP/k=]Cnel@wR{.Jq^4~Ro=ٝ35WJDSdxjgc~ 3dgOuͿ2+b&B3 (`fQcOPsaa)w[e䎪bCGcOkחR ܭsP9qtz(^:u=nꃣ3UJ$=;CsweKgl :75ċ wD_Cvs+3Gr" A0x8ޱC09IFgQSۅ{j1SLXgeKw%<[ru) Lnтlr[E~cQgh݂]9G}A )cze]I|f9Cno_u P_!jW&nn)i7I5<CfwIwW+^0$xΆ^S06 -*kRܓݍ,.ng՚ `w[~!c1Cn';%ww-chG 8e n7AY2B*9 X$kW*It@p_mKp'!]zVg=M#ffժ'f?.0#t=>>3D( )1[nʣ/ A˵ǝzI?VZXZQ!5+ΛZ9W"*{_qwMET;ۻIcС _xc.~*c{O} vX%#.]q8};evN!زWoѡmc0\9HuWkU` bu,u MRu{}U莒Y蹣@wvIQo4Dt(D@we Y_SSiY"<sw03!N]f ;┧NC6wa)2u_}#jSe0ߕqM>%R{˩9u!xh*U,$A0]b+ogFhm~'k > vS;0m B, _:V.O\|}eFS;,ٽ-;ew|fz0یVy=J.ɽFTK$hn~z,oFvWD;Ou _CQK3T㬸^KcAǸD2G_zśɍ#A||l+..Tɵ'Ǧ w;m]DwQ;>LoRlG!>,sAOXrﵝ]:j bv@R$L?ヤ}w$ea p$`:*թ<f+U&l3 vin `WAܟX+AZeTC2V4x;7 nh]>0/M{3uLTs{Ud>LYuNwBbN]}FWT1p? AU1;G~\i29Hx/w[dC nZeʲ" l_ j~j{L${qܮ 2vV*\٭;=)0Ÿ!0^U vRh9,4̴ipˢzo3LIJp:Tv};d6wVb 3w tG(L5+Yq,*z#ES]HG}rWafH:Fbjm'992Jvk6񷭿bempK띕^YDv:f\G&o7~nD==[ݻ|&XY=Yx 8Xs @z)$x%WS+ ~(P_)nWoUS;GDDB㯾V笇mq)ۅc+~T?4FTآv-S2-F*kD?AHw̡8W2G6 ]x{cD6 f5*Ut{߷Y k$etCb/v[+ĮPHL,x-];K-;e^6l|\W >]2HCj=܇SUcF,1`ɽ2;Tc5 wTo)}d:@}wFkE=ԅɶ˜N!b f(ce̎ktfLpnq;vT ͝4w(M.7N%Re~z̳ʮ@{17aع.lӽT*Uw|%u.0 ի>E8ftm^w{;K:4($| 3bf !I[7^% bcYn 9)#[efvb|"v-4xn~{ Z…Txdt!uȬ#clG9wb<2}zV9kEa#Z+W Rlt#KWo[[񅩕^-}.;LU^O9f(c(ff%~)%zx>q{2Q W-J>[%w[\{\b.;(ttQݕ-+q_aȸqBþ7ھE ĖwR v,h0??=>QPNŝ2ҽMۧJj;%hw~L?aRCswv{:}݉迄Mڎv J Y;vpĮb wH$5=IwwS!.UA$r#DnT5a==uP>fV}-IRo .sT=1bwFR{u/:{+v8O'ANe090^Llɐ?Gɝiw!P{G=~dw &0ב +XU>1;KHa3ڞ-=CRD5<<㋽v^NTq2nPrwb[Wz ٽw;̄՝X9w]V;''@wC2Sސ=rW B:Oz\fv/e"\Wq'b%̦2-.Av>J } "a'~߼"0n~ 1Ǧuq`1 ;ۿ~~%|ᮼ`;ElCv-# pULX Ykx-LWTݱ(1"vxA;LM$u~Ŧڊ㤩ƪ]ܮΩqٹ-apiɗS_ip{-0#v?\/Yl'";+p(7f3]G7x|2 m)af~|{xܧ#bԛ1nvr{?jb_ƫɴØulOx]$w Pmm3\I#DOZǖbsj//y#k ދkw۵871{)8Irn/wO*%wRYݗb ۹8D#5m4VyjzP8\F.5wܹ0g&wedsGq!`r/+n{2PrAt'guGR5sؚ;6*ȝ;kDZH03_&V*AxrU=T/Ϸ{,0IIO<н7!!ddJS=Pι!v"`AwW/=;08^wɤ?:[ۣ:N[}tW;Kk㇦%htj~&v_wX_L!T;zi+t:~Gl h*+/~A :-}'vH%E?Gi2arGS/$v.`v:_Pҗm~4$uwwp)o}}\]@{4)댿7EF+ۂY]ni,$_M}q^ܷdj)*%RfrrݗqU۟I]ȔԎ'"MC{Y.Z:(3l[[29,TU~0>>ߩ1H(8amDžTd0ۨapQ&(R;f!u:GtK|/#eJ~r˴7 Dǩq'_{~w/&w0^ܨn1V&k5kjaіVamKp'U2@kեX t?H Iyc[`TIdj/bvw>z5Qt/ g *v7c(Hi9KŝWS11pNvs%Ìe*rVw]R)051\qe "{PH;!Y?ȷT6^MrxfP}|cG.w]&#nv"ZK̞6epΕΥ&4ÈFpnFwY6.UWN6ZÌ禍7+L )7wF4#fE!H9ۙ<;m;IZjʴ .h' ?$w""I04 bN@+=PqWyI(~:5,/w& yxp{RO7YYi!]_JS n4vQ;=2Myd0dzo/ %7@u`jpb{T9EAT$ImFw;ok& "pY +|qkSufj?+_T7V*aq``k)( (~GTQ1W) Ke}cMTlܙ5wA+@1WWv̸ X#! Iܳ&bNh'X17^ӗuXOڵqpwKRc UB Zo[j.Z?2vmtwPŀ2>S6ʄXa]n^8/bjP{![tb"AX}ǥΰ:etU|=2KVLX$Z31Hw,WDzqr w~j̸㔝7T+{EwC)(Q{˼!`ex ,. >QM;V~GȄ,DwY>?1 nwrzhd` 7,+ ^e5:OIuSmt禦gM5 ܝ IP7gt?!Oy|GNtmݽUhn+eb=$ߖo{﫩_viFֺɽkn:*sLz_`Y.{юaW;Ұ)BzLΣ/Nkv&Xdt!bz"{Mvp;Y2|`.Dx@;s茙Zwi1̮H|jn7yK'u#_੷h斍wܵ7y*˙H PH:L2q%*4@qo/Za/W}\mGh+ڮSo>Xs'/.;ٯF'9eM^o4_Cmo+GfwRkv8܎Eng )I^䕽1]e;# t ۱/ =H^u/vL_G^WMS?K]ݒ;f5%wlYN2]|wMۦWnP7طLlG Se//m+vY<ΩRIoL^K.j_^җO`p*v7{ww#ZgqНuiwyܧVysZFyd"F&>jn~~8;,Ns jtKl)ErIgE |>ãTyٽcAvNRT2Q?]]NO)SrK/nrw"=B),bp$GS6-Cx|QFKu1;rI]rc0(+L!/7Vki@E% =U NַDH;X< .tO{=8n].wBB^HSW䕉n^׬KmwݕɓOr]7=Om`RuT\t wiHJ̉\N wN7RNxGYQ-3Ti^ws4wR;hH8!2&v-H ٵ'w臭.nRK%*ad -gbK{juT2}b \wG73u&ʪ;Yv-!maf!HD-C}aۉ%,S!KK8qwvl(nuy&2%e 3p!u@d_A+6*?;y2v4[h8'G ?=^C{̑A1i,gK]nQ1{B^ǂ7 #O܏D?SdY֤:vhoܛ5>é-C}+FCMĹcwULn*SW vq}P9_ot+zv}o7v։09y~򼰝a2(.v#dEv8ݹtYcp$+3tn7B}v`x?2S!2wN9ޱ ?6-,9rDx#UK{ C&MCq݅ >w(բSA d'?nJ4R]TAw&״c,IJɝCVB[ƒrE {$g-q{YΝ#wa.v ;weЌI!atT~`;ݱ K.cx=nNoVT91|],BkkVzS2OHy 3us=:|9;QgN 3w_; JtޞݢcȆg`Ato3C"cK ٝyߵ' p]k~}{/͝/0z-6Kp U4FSxy]6W{w*.VN Nz/7U[&M -i2ڳG)YQ1QV *:WUٷ.V's{vl!?Plڴy4Albh=K=[X.~ΏS8feyYe$SʶN@dj?,W;ɓPgj98'ג2)]92ZᗱR~a㿨8%l.2ad ݳM|0kEfאnvcSLDTd8Ǘ>ss~\xDܵ)Ͻp1jd<*{bfhqYF#,p`sUT`{ߩQV9Q17c(]s)=N;v.nƹ6J;W;ݍIu犡M ɀ 1aմdтA|ϩ; ]}Wl"_njʝNHópXA g!s&ye`U $ 1SdmgOyoIq:bTPK᝟jWەj!PGo*Jc{.\.<{C]HvA(åj$f"}ؾMrWYqm7'AGiD!ZVvz~on=/$v,1prJ}xKMRS>\}JLȝ'P:?a{=]M%uCմs0mĮPɀs$WzܽQ KF Ղ;/jϕ܃EM!b|`hY$ w]TncR0X4|K,U:rMv h/݃y};jU΄v-DvjJ|7#:wd?$u;6Q;ec%UcҤ^Lq\v`&&PxHeٝ;+X΃j6kV؎Z;k잌:8ʝR:\em؝P<;}gw{pђ >m=[YE8.r4G;;HI<5)ݐ^ ;%udByܭNeq +2e.̱2w3#y r;|2"@}U9PE`z➲ؤzLmَb o^Ԇ[-)1ߛKzZIXU rֺ vi~bmyy $مE}.e\Mu:]8%VrY>܁pA9SF?=|ԙ'Ns2dx{T㺕. d9v$#S =p۝)h竼2wcT==&]xL?lszU:M3۹,KLBz.*h2ǒ* O] ;$e@j=kzwN=`=ڦ : 3BtwS֩ sU&AE!j!DcetuimD<' YcOglHgˤfx~^e\sݩ뜰rQFG쎣UO,4w2;.^Z\iwϡ|N'Pk0]T+nj4_s r'Sneqa8*;izd$+ njk&yt‡s-J'+ 0O3h06 3ь!ѽw `uS{:#k[vKq7Ň װN=)dlqcs'kA?U(6+LCm 쾌ʹw)@lvi}*ی1X1ekt.xP6- py; Ç?qpVRju$N1ȃn_3 +$*͉26'6w5_„%w{|(Hp6{Ð4Ac;VrHj}Luъ;[Yfu9u(]E|OC,Z LsOWT9/-T5U/ f'KqWU-x Cqe.vתL>?x؝>5 Gדt7MXDw=hn!vOnȔ!:>x;*;ed?^н:Io؟Wfwz(~*]Y5`_AQ7d9%S d-)ŃYv݁IP)n j\$;,4/YZ:;zI]HՅԤWr;#B*hQ] nrlj;!KjHhR{#^z^L\XPB{?zdnX!Lxcc{J?꿀WXP(b{Z|{n v9pUyLrE/RG3 j簑]%jW}"ɝ#2rʜȩ2;w"}ҵkv2Cs>Ov'sE׹i26!Sad؎rbj#x'*Y!]";7:^x `GՈ Ȑ}0ccZJ ][o*os9zsP\ Nj2'X͗cV#8Ւ)bK 6 >:9ңd;ީejg9Ӥ?;+2;Be5€T=\u 02i8„bzL:aN!ZADS1`$CkZM&cHj'\Yz3;ෞg=bA͚צٽGxHN`wL3 Ζ1kT.Twñ}P3C J=ݧciֲ)Upy 4wHS;W,C۶Y߷w2A9w^(;2$w$/YG/l8><<`ȕW;ubvCJ$+> Ѯ0bxݩl&"n>wRMLw71&Zؾ؎l2 lڎ^G;:y?0nhw guu]^v%OUä*hvwQݤ~3U^*I̙F|9{ qy3Md.Lm;dc)Jd,H\AөO!7ֽ| 92'u=XT|e].~[soE`Rp͝ ]-ۡ {^&BvYez;Uu9dHk| |s2&&^{ltU2ce KT f QΞ,|:n@;oN}T<* o;VߝJ\GrovܩoZ]X*]+1} z9{V9Ν_?ȕonU o5kJleܮ⾩5R.Wb(;fduS܃۱+ldtϝw"ba4`>xz{\Jxwa;[r;  }(ݙ I{AZ']2X80S[2fwKaA@iy>} &)S `9g)şeluoI 71CtWNE݇'[y:y(7Nqg_q2ZM#ӲeTXʕ1ׂf0E<̉v'ĎWN8󺙓^ń_ZJخRnl'//Űގwd(`Gԕzt ur5sUoM\#F3}rʨ)L.C|gG&؜[.cv|Fxm29/>ƌ(8ŒR$X5Pa=<> 2'cxd*j_;W)Np^*n'wJz;2 Z nlW3e`xjcvTP#!KoO;uv:c얹rrI$tn$OdGN^?s;MNw ;<:&eH7%#Fw6 sXSqѽܮ^cHjlHux-oR !-|9S70u^HtNfUв. VG)x*wB&S|8]͘莩2)p ɝ.lWW2f8*;ΨUgTlHt;T7b$w3Ci =.R>@䮡mFwD+T|'U}*FA -Fτ$mC[,kۑ&1ͱߣt*aTT둸Q&vH0p(@rY1El>4H2Bbd$̶Kf.NZ^ζ%ߐG;*'*ẖdhgcH_ cbu\3C,>Gі5EtUYwG^-;s=Nw})/JA~hT9E28VN}yFnϊ{>Ȭ>z>ݐZ}XH^p鏱]| vLd|$f !M>? arSVP;=21Kbw]J }P!ή)*JGy1aowddO6o5kzo6+PqMգ).k(Y/r&m_]ocqNh2VFA!~acHZO;w\V%+k DwRq7N|+]e=;ۍ2(& ὓnMs!J&P;ΗڎFz=qPu6B6(}ݷ1bCjg;UwB.v2皖4v;wu ʥ8ʇM f/YyWKtHqv`oX}xs.QOL/!llPvr)`599N85q`3RqW PU39U&w,ͥ.nMfijo^ZGNTRI <:-zM>v3gj]K#CH'cZm'-_c2 2۝ cb'oZ3nA&yUrBw?Mx.zg]'Ly;v 8fsI_^dEi;H 5O?oH7N΍R{RYv%br^^y|أFZ6~q;v v_Eۉ;60I:<}ǝ>aŽDٯv~`jqO5;l2ΎF;Fze̎g/ϒFi]㆑2w ZW8d{-,bw 0ʀ!;ocD`yn >yjvYejvGw{53CMnLa;Dh.@w1[n/}2y^L'Tmt~O(]& |@X+T~ɱ,Q61|ш(.&Ϊ"em@.LBw9Bk*hDw?9.^]tH^y4d<\ZS92p_^K]{ B{:?ʧy?v`=.n{y6{>H1}V2,*hTFR{U$-#jqfx帿'j [QhҾƖΑ.^vH}Z7B6XC/jӮ* eFvºF]|Vgv vHuQug2ϩjjK\gQm$]|5x|}}EXv^벱ݷ1q9mD^*Ě5$wʀuSpSe'w-elZEcg^ Yf6v>ΫCgPoT*1VLNlLڟON (LodT|1{,ƾ#Tw%KEwNu4l8p:C7 VºK,}alfN/]{莝&-=[&=Mܿ-w%A2v@v6&A`w'c QLݻsVn=S{1৘}4ۤ|gWKܮǍ2c],kaOO{ĒW|:J|΁ :^&j6Fp;ܱjx 0s%wlPi<4uSZ{`5 \7{tS6ѠkʱE?XR7ϏS'$w=.l;}~pta:HD;^w0Cnj\vS@*f# r~fbn3˥n VFG]HBBw-+'0}v zM{w>{:Zs-,Ɍvs{۹ՃC'ROy$~vIuLơN Kz>@ Ǎ*ûuǂ163DwT]23;.*;>v;R%ˋ [9E*.25KŢE&ΊJ=Ȕw-Ws6ܹavQ wJQ`Nt; vpHwZ/Tc޹=RXX;;:g¥r+:ջ_u.K`aN. cDBmqG|Vqgˠ^ع Frn^k>V959b|-1枸]%f4wH#vT:ʮ{S^u{ʧΛ.w'Unw5Eƭ]SMơl{kɝJ{noRdT&5wBq}uP;jw4*dvL< wz*}hwP;}3jLp+(f04UIrSfh@^4eoWCss"Y rʘxGWv.RisbCv'*Z 6?O}VZCu]Rل3rWsG$~jztpp2)˖%l,AQJ-lq:Rqs1Iro0U{[TkP4UxshKhgڿT:Zz:nHFAiW AƸ뜹%@HкuS3y5_ 1i6;j{,zʛE<_Goù}[۱o~Ӻon]ld?@ %92v[kdi6ڝ@Gt}&^`vS;:O—$2.^2P$=}l{^;+wq55( -,GO靭2ۥ#1OxA*봳;Hƴ~IʨNMvRf}"բ;͎egހO~J^T;YݡSq'K &`=MbW`˜ݱZܻ0Ζ}2Xr1Sw7\ :csUUD+]ocjt5xKx9b($*&w;2f8dsSq`HJw4afܥ38 ~g#j%wZrZ]ޙ[ϔ4 ܔ5Zr&9_ÈНjxؑmۦWzo~C̼Tu%Yp*{8u's250:SCaYI]GS9ݡ2ʈ݅w5؋tn;  Hw̵9]d%f9ĂC#Ea{k)1P;O1]v=cHNjvdĞׁ3v9jL^V_~aTk5bto&>ۮaCh>7yv1ATEU|H+S :j w=I;n`2DnH*7&J, 1%?'&#~Na;.M}Nj>$vLeEf :ZQ@vAa`&G:2HFos<}lF L wbbv<3eY쭴GS(v=$v P@ȄbvO/TLe`v?Fj;lLɝ˗kZqԱ24Uo2 t tx1H&X4 ߃ 3Y,vufʠ$f݋PHC2h z4Kt1<uR~SAr1UTDˠELc"]ѐT}*0}*# mJ1[rSvTw!e+c tv .)OwI^;hfyM|S@w+m܆[ 놶>s͙IC?c=1!lq]T;[T'ם\@dUf,PZMOURet8eZNfB1'~ \gu s: fsAa:[@vcxݵ#>M}7ގ&Tl4]Q1`=JPLR]laa;:}Gq0a~ Ԯw rEl?~R(C6Ѕ GKnY{~'i!s\3=#:C_0Ee㛋N)s(H@ubނ|"X~V], yT3]%Ox`cSg{SKd|Su:R㎍#ewL!;=26UĠj!wSe-ӺnQu0d6˔ǺU>һQ}Eк=څnz3e!]6YNR;ih2F]Iٱ} uG}NW_eLd*((4CFtw|r;G2v0bw5C|:xy2䪺;*r@}.#ytbwo6ߎ(Af^;=fV:?fvp.js)؎:_(qDu}`@䎧+ӭnjSp%tc!A'`;ތy~U;g sk[fB|W,Yik/cb׃n{˸w=eb||Hxf8ur FԎ#a;5w1}6vWw n'qa稃fIv\TӞSCj#3+}F܅a=nȑgϏ3c `Lsga2<4drsw놠nݸap:+?_IZv/f)H F%)^kNt9d"8Hߐ?5~f nv}GvH}Sdڱ׃%3Gv;GBv~%Ԇui7-C|wN-Eޯ m2fZWN:;;\ g00Mi(NBv7ޅ}[i9)d?QS/?r2,#ΑT0},<,s`/ ]uپoLRB3D $~cO|:|2 (Ze j%tvQ;Koo]sX|ǎw,NmT?ɠGWxz1֒l2KoөVg=2ca3{clWׅK\rTÛ8Agl׬S&N6||\2.P䦈 ܞU\Aȱ2V߻{^E_{tڵgC)CnO&q w%;݅(ZyVz{wٵ%'{7Qrd磢c&`wCmL1DvN-3\;ppj=k^^5X9Ҕ [`ٵN(Ͻ!p.#S?6l.u=(i8*lA&9ہ'ljn|5[ڥ$Ur)qS^e6ML߶0a>n]v NV_o2\M{5[F<x'Gznbv.;O^%"o'GyG~O<ȿ"sGN.ڥ[h{ :W(d6.w;=G%#n_?jݒw팓n]p4Jڎ r.FdT0bD{(\-[ZC^g@{T*uh£Ac|GޠHhol$~xWF瓩=ye|8B\-Co^Vq:u=_)F{ojŲK_%|Bv7yjݛMڐڣŒݓηldlnݞNٽV0˘hQ*l ٣T-ѡ@wt nxVݩ#*Fex7c~Js]v;^?؍!>19JtǨ2ubg6R}H܎C " jaϓNx׽hDf#25_˹C2;}"D=ahh2dhjܾG鿮1=!ISDwa"]T99>(*KpCrʤUH*-%whWvԡCA_HXOfŝ$uRN\$}[c9{[{^ &W!q`4گmj;{v+F>0&l$CQbiE%q׆vAۃ߉@lv!!u ^F%sW,*B%94QXn#CC;{NΏ=xû 2۹⮅GaNS$ʸ'ÍGSeI2X}Sc $%w<qbhot:er.糫)fOsqL|gsww:ӻ6v/) .m2eB'Ϥ+) |&x; 6w;1>A.&02d.Ḓ ^ Ηو?s Lhq*e_I@v<5:ߧ3fR^,3ZHX1eLBvw;aU*#f֝vd]k"ZcpCٗM Dwx*j޿pjY;l&mL!.Cw (rXq݊/;(k5kŸG_RKN;N##p}|1xGwj= gnݐ>^+\)l1ܾ"F)5.f厘euu4OeJWfɅ+<_+#"})f7M }Svn+v+m t t_ }'$wq;~fn_wy'x/>]-'2j*נvDhpǮQF}Qmq+no9]ɐ۝ylӾ.td)vڎy2Tvhwc8T!hvy~\Yk7S\Gwl92dt [/2]l-˴~+>+DWèܢip 7Bu1nR/t*]vl2惩ڹ641 5.Qᔉ$HJmA6(T/5~apV>]ɽ[ײ{>mv7*mU\{luYqע3U8$vt{rʐ1=KЎchl0!c3!U4L:;0a0bs(!މIخ{OuӆNnzﲽk#hOwct +scdf\$z!ֵpuD̬1k*ᐎ?9qF2qjK her4tu>fVyDNqz :&2̑ٺJk e[$StEh,\ -ki0q"%Ct_ܹ@pU> p?11zvgE%ۿ÷~?<] ?Hj.].DEw!ccv(*y8*fhgRq(}U꒸>n8wLe|;"eF*LUۤ1CM;w+=dw?k`.U]/ȃYza{3 ]5oFo%}MޘY.>Hf#\wz;;TpO^OΡ4HNid&wo+R.N-=CzR;]u[M̷[;ze-Ţn#Idz0FyW;oưf=VwfJrP+٬sonׂDw 掇)xT{PqJnUFe#rwۑ)fJ}>hH";=<3qJ3RrS dwЍݗ3=N|G=4M*3{~J$PqfxHKC۶={h\h0s^p,.zSfǴ݊02hbwq;9%_j}/`ǽy S =2XO\mi.<地=d),2;v?N䗛]ΆOPvJqa#vccAF_Lhlw/>66Wa@w{U'wX}뚷lsuo{Rg|N@_ַ~Czjz_o]oV mbс튐QèfIm?DlOzЃ4wJ ;Gy.rǤfh#M¢7%Ȉv9L&\휾"kg^'EяB\=Tҹ_eax3;wK>dzb' RlW!ݢ;;+|Q2%i x+jLm隸w['nj2bf 66VGrzU<| Bc՝k%v̴QMû%whOpHvm&}rKseLxk1;2Xeug-Cti]ͪh`Pxό(tj|hΈeMxað!ۻڿ+9[ӘsF̤*~m϶& Z<+(G9ꆼ=wtA,ǮVW0P#usjYXeTmEWFj9mؾ|enz~S#;َqԮ_/}x*;WQ2k7&vK@V>W]Nm |&W}u2А޳n~mͥ"fZNQ.Ua3>]E:ٝ{LXduf޼jQm>q"nz;c{cBg6*LL#Gf.ܾt r~|QK# Mz;0ޙ#`'k3h^GuKJ4kjMޫBqG>&vȰoQudxNBZl"JwKIub.5FظXi7s졹K#ٝSGS$ngkN~~;#cndPaޭn>e<:2̈v.w1inrwLNFuN5}Sݷ1y^(T2#ؾ֐s!s(=xE]!{g1.f@w{Cfr22hxP `weލx88U6t(g̰sL]؎Uy~* r窮U @0pkOx{C:b&нgOUw1,ܵ0Z"ԎM(|;auO]\w[CeFa5kw'IiǎCvݐ ;Rn ^~׿>g?*=Ϳ T9PU 32 Ǡ9n3>1EpZ&E@6cU{2.!6#bwv;v/lG-'nIr{%b{dGOSmΕԮ$ȻyÃAz܅YqSp7'J/6BAb5Du<6\D0c$^l_0Cd.lz+6ⅎ}vp*A~?axRQL89_ sLٽPQβa2:*ΥBqڞ rsqOV ҽ:[݊vKG{px aJcg{.w5f<厇)LmLخM; yڂxES^w4w+2:U11j=* c% Dw ;'F!L#fbYy=zݢdAWBwL>J6w/Oz޸NϞl46<0uzh|ژe dw+s>M/4;{+v j wŝ^{fɐGޞ#ClL=?Ҝ"1~̑s3P׫RuKr#33!#Cl~C+B(-tc`56*A$_݋WM5V#xa&i5L4M5e:QC80F[" 5mީ"e"E7\;1U/}<rugx>,õֳr\ oޜ;bt׊螑J9.r/}7#2&t`ՇU~[ flzbAA폼NZ{EJ~_[)v:S) ړ^ُȒ+qϟ("SZmvc*6DVm2"wvd_^zb;]blrGt/c%`!vF9vj{zT'pdUvuL|gcōBt8? k>jۖ:{;vh 6Tw`؝N:^aRSEˌ*w!WGsŽN>{6uV8enNL +4?4GT^{wIj^ރt3ifw װO[b!(俩ڙŌ-BlWZ Ԯ1I&a+ 3~){-;'UYXetꮙM}Z ᝅ^e0Y[it?a{e+u3ǞT>w+z]SIUs,=2 Π;c* wp޾^JL CէwduG>q)'ixd5]Z`KbIZkLk{o 2no K%}Yd f$T Lk޽S j{5~/zWЏwhtacchOU@{tw{q "StcGilXKz;_w!-2:P5>o$hW?u n7w{L2/R٠jR vq'9 %cl' {Ke:Rh'CƜ._;ƌΔ3ɁC)hi՝KxAvwJ*3Xj~o6ڵ>ov:Di.2S`Oens p\L}} !Su/KbwE {l Dp*3jլz]{3%V`^]SfNyݧ/1uL7ʸ%_QU*:3GY;q}C3(m,Brn靌wT5t_+ytu*1;Q[װiW6лjDy7jzªFfq0{^Z9!!H6;# {thmG{Z3*Gu+.[ O1q;e#WzN{# ]G -K;^v=^Gspƌ] %wLWm/v+]=I2~eI5; Q,AK2=?9ϵM(R0;lK~"A&󨸝DĨw[ sدG]Q/{tD:* » '' aIXEk~f~\D[ ~^܎z/Ty'{)\<>\ 2O,2 9dv[dvUH?}'l/j'b⏱tY/ viWKij_]#Cw> '0L1[nW [nf)AlC~GuQ֩wv>bg$t2KTq-/0ǽxm1$'TS2RWSY )4Z)XlghHۡv-X,df5V&Q -4} 0|gw{܅،:i]۽qzXuJ#r={=Hv{Cmfa<3u`nxIFdѻf^S-7-;d&u{'w; u.rk,h6Vu"w ;rgfyLw|3tAI:䑑>gxhT/ ݾ&̼>KuR8;nٽe"vKp+8%>rxɏCG73 n/ߍ|8?v?S[v0ޞH-ibdFk9?uڜKrul>}7=clO/2B L:?23WM݃A'C)t4w>#;;؞_*`Fcx%pK5i+S~wO̯^/ׯO]?fwZs#a폼}?#]#tl#&́x?!2?slQ2.cXPK}c횂Wm>k0ԥTl21cqD%Ø{$#m< 1V_˸dj2Gq|bh%SEtre:*jIO8enrYdL=e! x<யdff5@;m{{fwZ;f;f]nt;6f{|2ZmIQ!1H/LP;n =VCF]T3iZt=JhT!~w |Țx{ejzlQ!wi]EO =ʻ>긩=bS1E_ݽЙ].gɴx[xd_%T矃~Zi2A]خo5yނ;-q؈w hE6,n e^3/Gp S~zg/C<2;<2vZ:(xuZr#@ہvQ{vj4KtHF/Ŀ8 rO-0w&}!V;\~qTګ(~=sK뤡JpW}]pTU}\}ab(;d-j l?zXS~vcXyi)#b{5c;?qvodP AU=j~lOIoL.=M!LzxNL1銖9}ͲʜNwfa2Ax&E o!f'۩v4yF v~uvZ]auNڹ ǻNc9R =`,cy}R Hx={zcrfuWz7*t.wL%C;wDr{Mw۵;2j2h>ݷiU e˔ۛ_hM{2Xv^d*}y;ѐ 9vT%U\DC#f~Ku5Au&n8vZv73ޭWcBsg۫Sw 2A _gܲom3[yґ Q`/?+šכLxxnu=Źdx_RŚkMr qlC<}5eɘOۙjFv[dj9]=莑)k{]jaGUڍEY5^֞˨ 8d9}ʇ7jꫡ B{Xf乹 < 䮙Ac_O$REzI+QFb}{Uh.wo77l73;Sۭ7=it?2Yq_nɀ5;wQU '$}]&!{q2םTE<$H;nBngjv{=fwzv;tV{xc$Q`z5ط+Hk5c3۹zfg&Y~3*%ՑB3t6R#tgjR n_c}m;G}(t'jLsŗAw{u:̭QQv ޞMm,sL^NQ+L][d\8Gi3̬fuIKLSO[ާnGUnPkj$]ldwGԞcsL 8=X`{@>,3 u!w:Sz<_x]<*z7"enTwtg4m,XgFО-7Tiww{(|{Z[%b{o{N3x1l\:`wyuP]AĪzDqU#{싀?@c' R+:{]ޒ;-=\o'eȈ.l9sVL@ZGP{G#dL]TS{SAa5;Eg ,jSo2N1;F :Ǘ1CIV*s]^%/JbyfG_k8cr)<8DQL tX)dIFK eP{s2*nj_Ym.:92IAvQdžke-NC8d`2GpO;ǖ݅&@|~*;Ax6(wNH%r˨yT]~׸FyKr9faé!TFͲخfC 5u(Xgy w:Ό(Iގ.hWKF;2,bj#]d͜2ՖLpazzn|7v^˔_.ܮA>tnRsg31̠'[ivocSAw2GvgVE^z䮻ܛ@eN&os{@GdwxHyªcf^6l۷xd۪xɚ:P=[Fݏݻ] ]X\7wYݗ0kǞ'9׳Oc=lmP; ָđx0$kV8\j{ڏUעzߝݮƴ~Q퇟~)l׊Gff^x=F|$M*PS02Y2Ǹ^SC ^ o M+kbrg7}l~*Femc_ɇdL9\"ğzߢ;&CnwQ=Z}t w}|E1O_meԬ!Ofծ|#CK~Llؾ(j ZvK爛 Mvs+C<[ 2GrgN^2[_CUvu$Ș!s~E'`Ibצ~=쾹/&ߴ{mA{;=.7~7fI$0pdJTrBۢE@v[ܑܙ,{:$DYj]ye|UM&'u- GV ~O{s+ƈ͝^0wdD|e{.$nvIލT!5VaHq'<(Z"$r;U{,3eԾ[o2i ) wUTz;΢Jxs""hVdEFv3sb:T#QTx^dǫsЛLGvXf+B!׽XK`w FŸwN;NUSfIb5o;!+c,C~d^Wv^Lm+k#=E]I3!>'lW·v3;,N,2]h/},3v؍ IiۣgrW4x&#ҽm3+F[xUh9ye^͊ )]e8"G?wT}c;?o^=<ꃩ] z-3{cuj{ڡ ?UخI dvR QU3dp?dj/}HDm5Q~5.(hOnkCsvclAEf&[Kg&}9z߶·u? /sSGc*~wh֎7buucK{pg20;{AJ^!C~7]xE%$}Ψ}V7zc&NMIQܫ5CJqWPuOCa_T\;?D fwp]-N8MTC'æmMHy{Lnлe4\BC$CwF VǗ[ƌGڇ/} {l 49pqYcfqa#Оm oH^ҙ3Z꾲qAC:]FDjjret54笹 OlRrj۩#hw;nbΞ2\Lb>pQ&1v<*j/+vE."=&ud4*{̇GbFvV(>_Y\\MY/_nt[:r2^r̰L]_ZѺkE/j_䒪=VU{[_w[u],)Ƚxd.2*#GjO IlGm.k;ۤ vclz-URAkܝ lgkojTq5RܱP:uxOx}2{vlt/z~,2Zn6+?|кÝGu!2۶%UK=h!J Ǿ[ L._VmPod?Gs@Y}cv7uVL-Ń>ِj }ZBw5 wN+]''~ǹgQ&Z{;>^vpCok`z2pHwѝƛL<ă!jqj0{ޓΆݯ; ։v9JƻFG4]W}ĮBlپc7Rd~^H]Gvڧu.sKQ8R' 2ڵn2ܧedGnghIۤ3uoh͋Pίirָ]wVu۹Zniɣ[VpVGzg Q,*~7Ō] *c>ρf~kGl{ h?N8׹oޝ_%n{a; )]!PՠIos]'m$3vMc;k;:<]-vQvA6X]`_ZKegZ}m t}#wײ}ò~>zuӺ=[<ʦL|)ʌ=1jtK]خR ؝fɝL0hןq'>Ym]$<l23Z^ɑBT4FwvP*K!QD-cj3^w*\*{Z-9̢vUWu]zɝ{Fa[njE $WS5Js]Vv]2v353bլug=WR2|)3<{=gשtzWj t7qEjM2f{:JL 4{]dH6C;13Ny݇i=6; t/rݝlP;] ӫ$|9;ܞ}Չ?z'wݶw͠!jd^ÓE:dg{p^|ܩk ݹ\wկ"6 xb(Z۩ʕ-ʿMeR(wuw ;%*WFv?t99J*LvS{<2o&=۹:j)^1zNinQ{Zx:vh:ɺC_Aw*ձ&xϵU>)~"bFopEu= *:Մޯ_,C;QͫyIsW.`НO=߹_Kղk;?ձY ck/ՁڵBjv{KvdJms*E%!3hܵ^o%d8 ܮ=bJekޮz~먖`=?'d yO_^զc{1,:w3p `^ͽLF Gc-%Ҹ.:UtS ;w2ijE7=z;ÄM2}VzAWx;+Dw><<'칒=1yR;_훣-cnCL^i̘}Q5䮦J21]&-52NT1ӂOk~ZT1ݧ>wD[wû%)ywL26.tTwUs 5-3>,2٩K_?C\66p|+M(o21φ=v9^q7}*%kBr;/{9U7X?_m_!aac;~cv+=u.^b9H fbvM1ڋo?||:B&.wjgarzd}?#{27wV}}~ݵAbh0#]`YK֒*c\._l-&{uLKܾuG#؟1# N}WhjCߙۅWׯ׎vKqwp]h7Q}1۵کCSF2'UfzG~\A,j/vL2:vHuOMw#Ԗlrʰʴn0Уk[{fZV/_Jhahqp!ԇndgsrJdwNAw8-|aŽXs͂g5{=^7ŝrdCjN tSM3!iZbv}J~ozʶbvmt;kk>~R^C<'k~W5M|&/dy3vi)c;֞GUk wmzOz[i-6wj+lϐ)evTouי3/=yqE3#zM+|]D?6hO'E͗SEc Ԯ6I9$1XV8K٬(;v{ZnKxd+}TYvCKZ9̼d #P^־nlCՕ&\u[:@=B=/2*tJ{ڇvF7'Fu_\_ݭ۟/BjRݭ3B~w}Y1Ju&Pܧw}N"3a ;C{81.h@j޼H .Vp\22O(CՃKgTg!Tޮ(HtG&9MjnhWi'}V5H`:>1ߨvX$x0A=)P^ZBd-#'vvXos\'Lg"lQ~}agiGg5lg! i2  # ٭YUwS;dt=^w`[V@,ʨ5=FMM2L`c㥯;wzf9e΢HΗE8%,nwȌV0GTWk̔SfԿ,z]kTw7h϶yav1:- vwEn}ęC[X:r\JHtzi)tW{2XQܟévKh* ao8c.a QM社S%?-]bmc8|9t=$ybu-PYlwU~O Dk'^9.=bN@BxmY1= iZ4悺1Mc0^rܞ}|/ SLeer} Žj۩AsN8(y2=WTԻWc> crHft}-Ö&>}ir~jx㖱8ʖjW9{R殕T̈{:]3<{Z]tw2$.w3\UYN#DE߷{=9k =Fō}iŧ(bfaIcFXTuM%2ףLB]ЍT{]b5;Nq#wtoa~9U vgNK74vk!s$ ۟Cu5.jYduZ8ʫ|ZKF5MF #Ѿ/ ܘn % 3dY;Xl3-0;^CWlw⚡9ƺܻ{*Dw% .{{Րݹ 7 k(f: ;e.g=PnjwuU흥`JoGk#]]l2{OL<2L7Sp{}r,{$w hFwA. ?!NoL]3j:ÌgFN;fbaJޘb%ʰвvvNvP=/IqPzյw _QNc n '#}3GW~=ofoѢγf59iĴZvb-}juW{#F9]2[L# VP{2fuœ2;Ò{Y]|$b&1}x.C>$خM%.{;ם!ѽf 7~?[u33{e{͘TcvJ>ܵ偦I n ;Qnfg6}"НNYZH=B;cƚO:gv  =`0vBj>t3+#[mbW楂w[caQB\ v(]+6a;^i|4#v/|"wf﹪讪qxTw oC;Ks>MihWעwowΜܺꞪ^SXdv3Gt/TN.q?'Ůqʸ;Kwjǹ2ZKxc<1D =R?Zc{#+L׹P{)k?nv b{ݶv]U &wVڳlCAr}u 4C}q<7ZW_q-31ʵwn=.ng(tuڃk^۵_y{wYrgi܅h, _곚T{ܭ1cAl>bjeԲ svydw \Jݵv]SKkߎQCKưX@{\9s/ȽݸG{+rz=:;C}Aw9*uJG[z~#wLX^m1k[9,3F9P\e&EQ&擡ߣ{xZJwn9em]$fe\5DDcY] C o"9 jItEEE]O|Zw~ߟZV{zs5A~\ilu6Kk׋gDp1A[b,f_A2XdF$_Hb{8쑧/F]@j4~L6j,2gj U1hf\kԻNv3>tߖx|}p,k(\3Jyq޵r]_{maιӼʤ{`pן:`n;nox6܎Og7̮d{_?ql ;ݏ~[oKmKlnW{RؾRܾ}yCmm%%ys;ddpۋ=Lz;"Dix^?A#s G6Y ƶs[Ove:= Ɓc]_L&@:c׬1}qz2&\F=dP{ɸ"zZj. (lnn͛Q,f"CejN+S+.wgrh8=T#|Pwr}щCL ;Gr-L8)O2-U=UU?nt_gd$wfJwxHɄpJePьZrUnlu$wlXsSp!$M^w6}ƻ ohб7ŋvb;,XggX_޸;AydN %_9,]{f ;V6]dHȝ9t;βnKGR@_}vc_{d2q?_ʏo7mXG,2sVg3퐱܎]5gZ{C0gNe 8]خ*`WU:ۙ2?/`QlPwxI3?z^o+",LJ%|~m.,1?2ǔ X޻m 0OՐױcf~g'}67SuXy25q/\P3,fE_!uVFyf:{{Н6wdq=Cx=/Vŝ26ŝMhHd8dQUwv<7$n*fwmxO  {ir)j{>ǗUil4#J9]#rnf;Oa.'1S ů:!Tw3[@wzmRUeČj";MHAwqGbLJ龁Zc$KZ?n+B?}|ֱc)2R<8 ȉDl*h'k#> ;HC 1*5u2:eH]R~ơs}Th!cY]䮚IJȽ=讄9pC}'Uݿ-"s!e(6LQs=5w=0ŝtYnNl#Sd )*=CdAmWA.Al˺,jwF*vL2H a]O`kG@wDwޙAId~ĦSFg]Ku[@1Gg{?Bly0eLi9Oڥvm Nd'T"v Zd7#s+N.%i6!m2]pP]_\8g1ꑡY W|ަmdQ5UUiӌ+l9g($*R_Cvv)Vڽ7PϾ$ٛ>\S;%Uw5^8ه=~EZ?)Nw2gEÈH=UFE:Te DNw v/׌v|iή(|nό;ާ^1x+[)>n{wa]inWig;WF^b#&lO6rDVEa7xܱL+6wtwv.BK<2n7\H=Gf&g@M,]خ]^}oW, k2$=7 WEu=I]=J|3MNݷ-,?Yũ*5q̰8EGs܆_{Va;V"4C6d ެ2J%ӱ]K &jL|TҾJU"S3W/.YQc#Tq|2J)=o}=^7FGt|=-(A|BfXp0.ׁd'_Aԩ?ۻ7vwEpXe٦jo/vSga{ qSEEн!*mykLdgGeBTȐ\,$wvXcqo㙙(^$;$LP3RBx}lqfnߨ欪-vxݱ1xeylw2;3Nģ1RYݱΈ٘4ݪ;/3"_ݕ Ow243 ;}+]tHS^ɒ-wn+~{qE9 ^]Gmlm]R{#skm8V} {f?!vNJr`dr{p0sٵӀ YJ'HPo*Uo}ޓ萼;Xq/}Ws[q~ϕU&"{3hmrOJ_`*]~N ԗRg;@jw&#}&\Gmjŕ Q ǻavc쾏RJlff@A&e԰Sve ޽}lߠ|2 Qq^й:4Rٔl'J\R.֬vS{&BIb1^16ʌ->*4jUɝbWNΓV22@_Nt76vwevcvu{ܽ`h"L#yd$w>+P|+2ѐ*л*9W>f=̮vw*f 3ݪCr?%݇ m ?'m9!ۥk;$wXݯ+1z~ vo;8یfRc5׻C?q.\ zNйyojR`=8T+alWF:i{;2:Efr̦b[m1G$/-:'?״NE Q!6֣h;M/Vh;{ !xvg؝rnA|G"0/2CcLTk+JԮ^V+sbm}n_Jpb'{qbvwk|y4w9Rb;˨YqY&n돱@oel crTFw۴L2 *Eيۭrʔ;+O)7й*vW^OYՓnt(]YnSS1t2* s^T4_SuVikZ{31ch]-{]a&o LF{{l$YoaOl1TCe2NѠwC<@{f8+#`Z:l,lUT鯩Rof>Dpa`Kq',U&QyMJ{Yݕn՝s۝81P@]] ŝUnw _VZyVS᣼G[;DҬBe<`ul g;ٽwuv鐧 ~u{3Ɲsz*V$Ci~.L׎ήvxh Z;B=g+6o: wl6,c $[о*i?T^CdT,S;I쎺nCp-rh~0ؒl'@j=ޤwH]G-ar@Z@{]RY3N&F;;2 OSCʠcq@a;SLq]ۯռG n"Ӡ| Hmiо!2fXd@*Rڕ* {]Ƚ?Ž؎QFDqAvy:g;MP}1>ԛn$i[喞XL?oZv8xE>Bn:X܉<z]URc)}c^3G";'kC 'E{%z;Ր='q?T8%ݪ 3Y1g1׋9.PHw*ݳv}8WUƋ* _mNUߧi*2smӝh7]6H$2&vY&{]E&^vw~R5$re2[sW/})32CӨ93ڈwW)'L{B0!R {,2 (}ہ6S]FnW* ;KG.gO~@2]`v-26pOհUvj8o@nEN3 5ʛweDOÑc(wq#l#Ԣv+O;9탳o;avU)Ս`KF@V*hka$1_%݁s F|24NFV.أFbKt^'iAxP%x7o׵dwT՜U4kMq'MJ<{BNWi= zGCU52Ѡ}2cf2n׌ uefxen*v:^ hmYbшHwӻ,nNGy43njr~>ݩΙ߉>Utϩvj {uj/݆77r,2wٺSk:{z\fyݍD K>BK52qʌ`2m%ؾ阸#F!G6#/{}bq.ޟmIq ̮x*Jt6 )b7HM덹p?+ zx4[5=" {ѣ;~%wQ& O=/.x N5B؎, Ȓ}_{cI.c0 R{XlגCW;RR۵avdZvRRťv{(buwPhjaGk6к:Yc3-X>뇋ۇӝn=.+ zv928;E6\O#2;.b\)&~)wވ.Jn/Th~0a}mӏffYpH mt:~Cz"1hi;T +i;CfH;RqlC2۹Zե)sI}Xqǟ,݊{ʼ˩<'Cau$v 2gj0~z iٝvwR|UU&xTKf,2qGr/;?xn䝥zq{UK՟ٟ?ͽ|3,Dn;6i]>H C:+/vH1}>XG& bjSǣ=Z{gɅԚqRzB}Ru/Uz~77g}k ,^Gv/{M]E*;4\_R @6ݗ ٭/v:[fBٽ2ؔw1c= u5hFaƾdpa/VR|S"} GϸuR:7jkC]Ÿ Џ\[XsW0+v%N?"L w>Aj3TvP?ڗD#Gnhdf[_|SKyx_ԯ&Okq#ECTP"~ N[J6*njvd̝Tp=H9NuyT5$\]T>w U[uvYZ%ӈ9Yqgy rr*[pJyɊ;qGpTwkf9Bfu,۹ .j!cݣ+ڟԒ?朘eg;.b̮N.=خvI#SEwY2'hR.d(=lAwS{P,b|sN'Duo"x6z)!wvIM$=.Ptm2_XoOR܉@;:I*=vTP{S$w͑ ']v-O=[T>)3Ys3iŽv>jLe>8"Cv;Ωb:֢u:r,~V픂2l45&r[N3oڸ:{dm 39!vݝcGͨbke5;D;i<2q7ӌN;~geZjg}0o2%TuOzNuˑ{Dts<oTD{i+/JsoΑeOhLc1q[{ܒo-`{Y3}w_cXd{p<.3a$c CjY cq}xYdQUqgN,AjQu5,rly:o0J] .嫪w!8_d\ maJܝ>A)LV=Uspi%}UQkʺjпBvFMqɔvbv:v5%N7W';&;)Vit?lu]L}~]~#%`؂,'8E6#S}XKXa1tNJocG{)1N> i7ݞR#E렻6wc;>6ʌ&Ajh]SetPΈ=q9@ 3}x"s((L3:0_fzSeҜqU4NV׫+xdȑgƣk4~[uKU>WMQ? ~lwoFrn/FqgK+'Uw@wWYU};v>vN<3T]v5)Aw YfvNfv=fwf@6&`=ijss^ ^.n~US߯{xf#<˩-ct'+fAk7Kk_g]z;> ivAg4NTwtv59uC WӘB`wR2chSve m|V%F`s/t5@gWl7û)}vK*)!e&nE!jw^ծ#~{=Ȟ༬U(nn2@ %aqߏ"/-#mvv.92av;m[vj{͓ΞWRv `L77揺Un=)I%|n.FKh[*mArG~[ݬמEgQ$N1@7RcgOZwRa_;[}jꬓ?nj(-e:@?Dnѥi2fѩWg>Ykwc:ٞejMcL(6.ǤⶌM4t{cr-ISIqWv /]ens;{a;V uIuQ{ݻ30]xWY&Ӕ;BUuUL3Oޯ3v<2%bAsr܉d7t[7StoR2# 7`[ք{f=Mv'BwQ{}9N>tP=Kr=>!gބ|پG\2l>lAо*f7pȠVە+Lϐ_Uf1M|=6u0͔t~Z&y]5}MxY>?t J=roS`~< j٠ȼJC O~Ti͑ QNrU~NVm&{ $GR]k#=nڃtڐڟPqEzWR &c{§{@H7VGb:dnP/ A6>1԰0;eL>򳷏# g'H]6]N ocl'*g;+.Iy1cR!Yd& {τJvnb2 RsҮC=sI)Mbvc;go٧Bfסj+7ZȜ=sviPw <ˤEU}P)TaB${%fv~5.Yߋݷk{]Q&#//~lU;zѻgC&k8u4{#fV|~N&t:[_zUbAceo;ev'8+2S(6N:*cر?ۿ!24Q}Me9 lSqڏ0@*,,fWGA* έ6Cb{SU@"YI1`;I]fCm`Wɭ ؋WZo7vq0$^]l&u»Iv!KqLZ#ϧo /~˩T2OU@>*2Qj=2711?IOJl oHlGn׎n=&]&S;Ďݱ\W.)ONl&^9]FΕ8dlѲEl!^p9?iBjgs?rhipz%I>7v2C%9Ddc nnNt]* o1xor*Kg,//5&r&Y?`YuGDj{F;r"VŝjDܽ)&ڣ{Lxg䐖ć;S4' hbN+!3.wOv=Y;6ś?XEUwlwEϩj G`JݦuW5U ~} }V)w{auST].]ɦ|L>]8}3/Z= F߻EnɌ suYNkMUƒTLپSW<ԕc>0GƮvq;Ï$I=̑m|n'y}wa}Zr!SWBmM[db3!ӾlWӶ >*+خ5&vqh݇v8:˗9줾 |+:SF^=_QJ )42{v/H~ɈmQ^\ŽYwn?NMܧc3ejWؾB2Afv55_;Q汥 ;5@f'A.:)l)E)^pyҍ h1An/vQD]O|7U֕noUvc; Z!cNs\2#fngQ#1خE,]OLق${ˇԻzwI.hRg.s\IudRm\{l4Yb] nGqw5} L+!{~jA>9l.hp<5ݻbA? $$ޮm =<]6'Dw잋U v-q;[8 As*tiU>֔w*m+j'k:5ò4O%,lj1| rQrK۱8[ٵ ,v&dw> vxQܭN)Wp{ܧۻ{<ЮPSHZ XzjZ 2Hn/~ScNUB nX?jNFqע9цcWC7 XHx=R{>TXGgV^V*]$Oiy>5l)]GWh־ѝ摉m2:&xyu T$w;ij.nnLʛ_[ pJ3gef19Oo&few}{ ,.jvUܱ⮮Vz|Lӈ.~hn4)vU5;gȮwr"V3avwU{PnwJfGNv{jޣH0/t rMZv6}&V%n猳N10cE;x:d̦"eٻ5-j߻]ZwJalANUs74v]HݼYdR1Ȩ*jԳL. ϫ"j:—G2=Y㺢`jA^? ml7PPU4\`n6a:ǠxQ-Zf-]3_@qQe)ӷBN&~9 ꚈlDVܕ]zg8eq26L,bfèL/7V2&H-fGhGeljυTM2=j ؞]Bv7𝐣fT9;+7XA$vQ,.kMg1./*':Ŏ=٬Nb_bj>剥?Yh'xTRt{K^GQfɏoH6xdgoGcg~v`E샒2m4sgO/bxcӑ=OGv`Hx.,CV%v-c{C|} EkI4یwd"_czz S뒪#CwWS: U\RErŝ)h߀]el7) һb%rY»u*eU8yD WccQU]E>ThPd;-w_=ս{{1x\za{X^Mogw߉>5 z'=K6ֱlz1Yml.rߺw}~u9k$?]\k 3zV;^2FC ~\a!v/xclvi<#߅9@ڜ _Y ;ɫDP:I w;{㘡-'لveJN5ۂʝi[ȦQŦxwHLyd{6FT0>**+ЮbO+:kKjQ۱Km}v؎M&{j*)-gkZ`1I?u0B{|f=MkW_ubtwFXm7/v;N6bgLIF5ąۭӃUuImoGn7nzW09FAbt|d +Y-DofW4w"q̬9ݍ;Gz`v:2㘡j?iw2.wK< Q=]f<]̣.l'pp]O7]9+sIcϋ ,؝EBoe:'bwl] ɲkc{Rd)3 Y S ^v9yA(j-3 ާMw'ٵ'|>8ޓ4H=-tH=dV9,^Z[sG^!t皪݋4S MZ#̧㧙MBC?sll?LcSKw~rs#<|.ffʘ៰ą)hޠp] ]9("sۛGfW!hJ3=Kof J{\PEs'[gٝTd8$v[E;Q};˩ (ce3ʰg۹rl/?v01Fu}lYuԤ>ddk_+S;~T܎c;yK񏱵k'+SavҒ}B*͇U2@';WT&B|10|hnlT`F R漞06)xs;uP=D4;t{#P%i\Q%6Ұ,g{Y ђ^wP.̀sI -{mw_QrXuٝvbL 3<@{k-QJ&?1eQsO7h+B.%+Jd'?Uԧ?N:ԇϟ띥q/hvQg; ]>p'3]^*_sr 0;Ԏھ?F;Lq>*qj4;/[เ:V>Aq8=^eٝOw :ȏBOG,"ֲ({gwvD]UOB^kKaE~ؽ;Xe:AMq/nGo*J~}\B!wGdvŪ*}pɬ+4:g;3=MHt,PbАnw^HէԠsV݃NJ2<iJ2_:acjt&;T,I~F=^.v'ݿF SctRj,28st']^/NvC⤨Ry~{Q;}Yvt+u5mtTh(hhϜ236{~K51Kܻe&.^f݂;!Y}{8eH1q讳go5`o{GwJ{ce7,l_`zŽ2-1`*e%UDw ^΂U()u-wU,Wwbx1LyGw{W3&raN[&mz0޽|@!vi\gϸw!Ń/4 K}[^;upkWXYO+$j84dÇ?r^[#dfL:|aC_s?K.oخ23U92[|ww,cv2$bm7z1ZE3A5fqz[nt}:cw ~k94-r]yg 403jx7~wܙ:=ĜUuB kjvjʠk'$#GjS }rsU[Ǩ-C;Um~u>-Kkg!:BvcfGpCKk=叡CdBg}ퟑ ];/314jϽ:ƚ mso;JG/N46Ȯ aSW֮ݝ^vZu 7O4Ol loԕT1J&D$RuMFKDui}|s- 9{>2tMFV-Ԯ%t7S]t{tKJUXpoXpq2e mW+Zʠؕm .lkrvt\U-lk[.{mmUf7ߌMhdw*fnTi{ZwM=όZ^qg3F;V"ݵ.^_\e^xޥvաO~':mަrSw?MmM|ZR੥/*jg.#:c5NRH_-(#lw5#^ccn*GE#!=e~y%VøXM讟Oo{$-;9 eLw6Zqv;fu 9Yأ]~YBU@|-3U㾝Zz1t0h⮼Pb]*wv]-)uj"Ү"cvdxkN%Qܡvdbɢujvv8>J*;^~uT]I4lir-/֗ F; }T?F!㖳*?);zILѲ*NmߑԒ}$3 5hW2ja{w#0Rk@YVE|fC?4=ab7,.١q8Y'mZu&N'9uLvG~wKt^i=jxKr`xm_rBM]{޵iu?xޮ;I6LU4f@w>gʘHnz1_Fw9޵|Q58 h_@u}]Rįϋn=K]Į<$lxGng*?T|6šg&^C 5ɭ~emloWh3PF<8oUC4Ah.ڣnBnB8XLzuFk_GX~nw}o4>efmٝϾ.VNsVt_8yỳJнbr;'?k{V,&Rϴw;;Iy3woXdVq8-OĒXlHm"#gVl bgG+ptlovmv2Rvtu܁sf vv@3djӔ Fи;5J8އ?*$`wB;&J=4u{tvAN?^ wXϩǿ8˝Sڳq@N#]NO&/؉&cQS9,cwsK5 ^k#7{m<ѝ3Xf<}vyI2㪩K4kq9G _wk!}ziuuʽ>g}{yTmr;vJKK{=Cd, wA>s\Ձvfr;ev{'4B܎΢KdN(c {LWl7'AFA?gvWUs''lҰJ{twR N>2*eT3/.AZ |q`;<$LDO*(lHHdBΫ`{ r/LqAZqTfsEF \pO zV{v־Bw1Z|dydRۛYU s|Ty $RVvVl>j`>DOxbLBtd3^amiQYu[5N ]z;tbOV eh:U 4g2UVT"o|._6]zEQK݄nDEz,YIGfׁ wlu@q/`O=j;+3j̖N㗉SN;eQXܽe&JAEwbYfjČ:؎gF!wCW npmY Ht|gƌخmcƍ#Qx@=^?ݹ.yBg^XY^JW 9A VuR_voT&wJ:C'Ml7'7W>w㎁!wvYd[vv^8^B3cS]\_JiGj4JqƍY5zr:+8Y=E 쟱^=\OEU{FC"T0v=ٹ?;&w,L!qlgBM.f .>Gvq(rS^q>L?aK'v}Q>*NGt 3fW2t^ReoSuz3+iׁQخdn;^H;lNd$ic"c_ o^"1ziк~|: w=_ z9gL؝AϤA2X82zq u#U9yrm$#.w`g6@{lC}6 rv &~OxeEq#v |{IAdx]#ӽwm ۻ1-cNrKUO!!=[.;Ǎu۟W.ZjOݷUejڂ=nl=,#޵DQݧ;ICɩZKVޕ:{)yy:WBFȝJ gtk;S>L-]K#;Ohd繿}?ѭ:d#iN#uv&vC2Q5}>vݷQø)noL5-e`{}⋱~Xg5zOg #2FWRjs8(rGu^:Wx țE2{ >a;˵R&\r;*S Y N㷕iQR B{Yb̒DS} U0)W;Q9Mn~g1wb" =E.*Ds, 9$ QsɀFxgXϞFOhgna^==-2)4lJ';FVIs}V_>1tb4 3X-v+JlN&o3f{"'WvAck1]"S3dwt'e<;M]"i'\ȝ,1[xU/5n׎nw8v7UoKهR={}=1Rџӎ-+O{^"̽yYen 7%~>qCO~UûNE$>B\@ikJg*3J@]Xl951WQE6zDKvj)p;M({q,=_jQܩXd\_N4lvZ  n\nnRJ]t1o#oaL`SUQكNJEx)߄=S6*Cdr L1Qz}A4Zl/-)]OI۵u؞ǗZG[:Bv~Dl S<;[b$'B(ތɀ RصяH=;S#dgL!;v '7TcTQp;)\T ]RundHN,#`*wfZW8@Csgg1[}dDvoK ~hlQ>(eHНt;ͧr89 ToR@9uF%UZ~2̐4_QժC kAwfHf,clnɝTU?U6ɐK:+5 IکewW1ÜbvY --*\oס-LuYN>\\MxAL ] U7 DaFi)򳄎Xdv&;~~ބ&Kr?iy䉺s;Y1]ǵ揱 Ujc̒GEhr@qwϩKJ&Ls˔m>YWJ}⟛㣱=n=e =-'ZNk~ SʳΝ0k=:׸x/nG פH񸣸oQDr/{)Ǻ((O*>!S{tv05>\F>nf',(Zo2c==6)ΦTIkX--NAd<2IJ?_GqĞ|jVSrgu*ќȮR3qLNdoEk;ܜmvo(.$hZi=W$GJLx%+,̋ &ŭ'CTխw[ ﭺ$3ݾpjv2-L3WvDV.91i2ڽ]*ḣDmW Wj`RfvmVu$EU538̻ޣ'9 N\ ף\狴kx{w2wөrO$KF +5mz m?KE0njg^;EKdWmQvuo{:5&/@۵=Ȟ"Q4vu.6*DDmwvqnx͡b,kW6x:b [z ہv-s'ݩs#w ;]˧hҞ )!W-v{u].!RjGp dMEfg1[quOYqLMpWJf̠C1MޱQ"3b薪3/fD@og};L@׌ܑ۽K{gٙ4 16ڱ| '#{'|p΋K4ޘWvm 5nX0:Y_e _C[skLy/[nB]tO'Uu\HRu%j,D:J;Tvt/:=s!G.TuZ\f]~?فw|t;i)h vgnLZ*Xwp̜/ m72CRSw;vHNN!k%Af)f5  U|q8bqOav]n]nt'~;=+{E;z$ol.BGcAgk2ОnǮUan|Ul9ku]MJ;g<}Gڱ< E>5#3`PbaSҹ)x7t͏ ۡO`b{TFM~BUf21ܾKj/j? }MjwѾ&fT}Uinׂ$6j)[e{=.VJZlP=j]Gdq;9#-MDF3AF:T00;N~d?y u~uҎ[&vA^H=x]]FR 턺uv^z}]i`ORɍTi{ү0^vX~/U{U?~JK^2rgxƳ; yynLЮ6U}p\h.lY1r8`"3d1xEh3hh;;rHbYJmlJZfSeFxp=f:=SF5sDVnG;_F{ZϗnZO zPg^:N7vjZc@;dBv}㉁1Rl;5RH~ŭmqƢ#S U1[{Fsᇷ"fU+@x>,T YMjlKd a3g6`ew͖Q~B1{sVṄ6ɀG{rKo׀HwUU"HcNZީݭ{%M3q3̉<{J>$weő#{oFv=^~݇=;w,5c{Ứ]`1kQ](:;_(t]wL1#j7/yLA͠Uv|pyZz9cr~~tE?*lׇϢ{?zɝ(_:G5g;I.t^dw4}u4,4^Qxg<(}L|0u1a @n٫WLY02[֮v[{m` KZ¦Zܛ=ISKm쵇EFx>ۅ:-]vmvDwnlj:ٮٓJhw7S~hΩ證to{7f]"@փN؝ofw}CI@Mv7Ϡ}́qwc{7O,&Ӫ2AmuXuT\千؝)3к=j{J멘CiٝBtX¦J7F鐌#fTKf^{3ɍEJ6%Nv;w21_TwuN S_&;#pwN 6m3avxg4^h"| 3w0lѐ8Y?|)zOΊ.c_{6ٵ6^8?ڔwm9]i.M\7PXvEa9,E]'Iy0uxt) GfLLW-]'wһKO>0}f.C1as77MA bLBiIv-zy-32Ue1މEnExOt_ϟ]e*FJ[*mQC5їREqxU.zU::_V!L/Q܇E&N>$"1>IE6gAwk+1IEwD3Ͽ.t.:~$~ɓvm?Çv%?So;#35„ úUavH)ؾ,HCa 9_wo~X^v||f,Н@{ykN9?y%T26svgUukR-O쮮&v lJ;`b'N/:=vENh nTݟWߕsqIgh6 >$]hGq0ΩO!8R;QFhRXavVh:F/ kۓFH ?g1(==.y,c?qfiZ;eᬍmgYrixg'd#s&w4m2;N[t{Pku蕽 yg(~T9^q2Zz \1:J{G-+jL3X+2je;|6hrG~W5ό Rz-U`fy[Lw*cXg!B̟EKU!v-:3g KGKlaEm'a1wLns\:޹,}T*}38Qq%Mjۑ3 7^Go/tG !lr=e ؈l}T;d $Y`Vllb%Kte1qU&%j1PQ%m74Lx2Noktf,Ob[v03֕ͪ{2͝ȁDqy{ &-˝dLếnKn(f) {;TyiDlpWS~=;{Yfx[s׉qxxf5ZEZ42ݹjl.; ڿ^roo4_Tw{͚F~"-E϶w?;bcA=wq;눪eQi@8K~;s]{qڹ~v*GgD䢻c~tfBvzm>cJ֎D1s ::Om&[jU$S;_F}~/ sP3$RScTGMr-kHT9PjuS$΅%7c;a}N{<YĀ|l//q%w&w5aͯXw+= yC3Au-RlxnJ{ Iz#݀H+ kl&GtΒ2U繓o)!3x67%T%@ vA3UP}p̀^RS6 h̯H>hlڵa/ ].s bg+#{uQlיtw:݂S< fg6ۚ:R3tO$tt-* &sY_t6bL(;;m|lI: v#;_+đr#vK @R݁v%t0{YS`JN248^̮`Icju(Gv=ڻE5u'`%]avm<vW[Ooj{ӡJ2}2zۻAcg;I]2`;>w^Y R"BfdTI@]0; ͩf lu#ш !R7xt;kc5(Qɱச>YÛ!,fuHx.p2n6evzr <}iI 3t +hdjBhHyh&:I\SӃ:r {̘Qk'bwA$+wKv=5d>s4!vdkg"i4qy'Z;w/#/831c&UsjЮڥ̄4/y2vzt B'P|s]ڮOaL?9aY2ZxXcvP](hNs٫M-"{-ԾJGU&k1 S;__ rVog;:N{:d?3'n.ukƦ%q,ix0R)٘IfJR7 %L.y% ]Ua¬" . A~߹7u{ιϹ_;\9םAwU==/Zr@H=̎kZ}ۅV1+#2v]E΃=&.X/V1]6N ~)>Zif.~11h=.n@ c7utR2֛r6&AI ~hxϿ@/MS=v-pr[uTov`f/EwT;C̝]Cdwgu70]vup]3_a)|X}(fOw ޺ZծdvUvLkW;^NL;d2h]\ibqL{㭌; eݟދ]W#+yÒ;N=Of:R_eod@<5Ʉ펱]Ywq)mV;(MIm-l]TCBzdtf\OVku.r v_C%wD}k5Nfe+V3no{ ^w=I3;ٰ7%i y8$_]#SX8MJ&f؞L;z4e"L㢨Q@rWl4r[u_/bҞd2gxםOzWYr`~8)W=Rˌ\3~UYUރNYd,;woQ#T䎡#k&S7.m[d"o0i}zS(ە?YAv>c㷔,S[h6 Ž= '1WTJ}5/#c*5^fVwzV{LU52fl?<|^U5kf6S2 '+2)3<Ĕ/sW3ʻo^"@)t̼sGE*#S8٫DuW#Ż>; UzU_Ο }:5n Ubr{`V̎UHkIN-Nx>ʝlp"L[yUdMoy x\Iힶ{M1gct٥efwqɯcy{wݣcb&j֫eAi)l LQ]2J >"azd v7(vCDTt\7Ы/ ٦z>Ή m肻L.Z/@rM5*::MJlN !ڵ!CT ]us,(q2ܒ]WR4ľTp_#ϻ]?!lW4{kaRWoe;61穀poj.f"/S?tXW%< v#dw_qsG+_ bo>UJ۩hg~T}CJF I6%U7ŨMomAEv,PTqw`Y9;k]ɇa v'xU g4c̰Vop~Wտss6;)iqkLJ wnw̛AwYfoyEԞvyEZ;#B޸ ABaW֞hN*l')Ccg NQN<FYONa˭''p<~B=+劓RLLr99m/ގAv.l"ILmGzȜj ܮio伶$${c>Tu7-%zMd+}e+Vr23o l1̘1Gq'w=""31>Z˸DSzڻ#$g2NQUPAuE\zY *xoWU12ʻޒ{iA3!xi(;s{JU{Wi^&꾳 g;i}.TTKm4VܵK"*^wEg<'}9]IZHR{-[eWẓV-2U)YlWmu!u6sH~_CSŽ ~[кΞtsNLyWe'·4?*)7U)OM$ {Ϟzݣ%c{=仩7ͺ 7T!jޱވvx]v.Svv<.!HLǴʀ1(fgj#NTuyxYrmtrWS?tK4':it(y1lc`.gdokmon֔jm/mȆho.-{$P<{߯J]ʾYDkV=51ŀ;%Cuzq5b;t[;ةG),_+= gBf߭k!iGt}Lc6Arª;H3;v$^/wwA;l'UUVkA a{ZeRuCh+|Ӫ wnʎڈ*dHdr.`Pi=MX(*#W`$h^MEN>T d/h7wPG=/fLԩCJ.S{?L']XgX}9}*T%#6?oo̒*RuVĩ֦]Iڎ#.Enrٙ dsb̀4vվZ=}m]Nu͠+'>䦹Nw]N5of|TrwP]3dm.SApHLOݧ.v2^6Z[W:㺧A :he2FwbXA,{Iِٝwډi \<;KeE("{= ܋+ /J=VV%c- :܇2TNDٽ z0Փe4Xڝml$Xh7I`gƔ+M%a;{̐}fטA )N>9gavܽ2.՟jgof?YNdڵ(&1VKcFAwO08Am~o~+3I^~v;FΫ_ԏJnl q41_FMK쒮GX%O*<ˡtQy^_^hoկ?QcM%󼒂ΘLjE< Gwڽo2{݉h$ydvjǗfk,3GiN]p?3w"xDkh7S?bY $&6oo'*GAf}5re+)r{<N@lTpQ)SZv]~U3m2>=NH;НІDr/]N!l3ZƋѐ48ÆGq]3'%k,yQղ;20K-r'+B YMxo#R37%xb93h(WWU_z})ڱ0;.w O011Z}Nؾsi$N=2(G}seΡVوm\G6ڀ;s )= WI#BSsP{*6p0^4 CwAwL0Юe}3/Hvu;} /,)J .*]\FerFfVUQd7@P m% H/׶=mHD.P]&$w1v#~}nF|reTզc[z:(%k*ZJ.dnf6Pk6 ry#d˻հik }13FweC!U-gLr'S-_4a=2a4gJA"]M 3Mq=O'wm("AwڻS`1hAv5ubs}[̾]TYĮ|%sfb[ϻvvSu$w>X`GŦcęP`1\TzO${̔=,Bnj7|!(qX] *qgPU4m}`w2uSefW" } =OƼ w/wO}U΋Lyv݃xČ >ve%s̾w`xGno{pncZؾ;`E`=ƔC8.GŮ=1qvϙY픡F\g-T\4!{(ޘͫPAVś6ܮ-1:W;{^PS]ы7Pᔒ 9cu̍TeJНM,4HN}޺&ywTPYg5^gk6@.V16Mq&>scDxXzW67q{/$]̎^} rû͗!lJ;8pNy=f$\avjWA'*bWbLwk ߟ퐻BU;.<*݁ TLf=UnOLŬ~TA蝢wf=c"_WM/xSmUqiiۉ@{Dww Zd`~R>W` r8NQ+XfO'); FOj2Rq se-By<\g>9QN,wTהT̞̏1)auR@;}%rM$w~yU77S?.IvQw{OzSx}!u=JdvѺ̞AG8]Zg}~);1E-7i@CBEAe *b{l 3"x/{)Ub[{҇:cNDڣsvfx{M3;L2nJu+&vwvlHi325^'9~XSZh>Y^\9D47y8w&սOԕ0F{w!=D>worC OOqjW:l=.R=}zG59od'ҷ03)x  oYfvwnnZx=7UepS:gBE mm6லȧTDw}u)4# nwo_E_mi0jGElgFv:ٽc!V jM51д}PϘ}Q|E;qmMl$hD} ~Z5UIR$Yve$eWUCf>$;L5:gC*gz;#{BN(wOdv(QlW6 wW&CPSUrjKُPEOm{5l+< 2خl;G^ 0iQg t^*ګ#Lk쭷׭$B\8*E׳ 9ғ\ž~ KlWN-3KmKSIʒSZY^[N)kL |]an%|?( 4zv9ՓJzW( 3FvB3@o왜5hƷbǬ&o(k;c@:cf];pI=O3 3~Ȅwkstw{u3gfw-v\x{3UT+0>&wTK/Na@U ԙO|[Z{ѹ][p{cvtG̍TqK{27;Fk.Kfy?q2_w/5k?Y@Cb|n*KIY [6_pk SC! ]\ʈ~ v{$1s5P=7jW'# :iA|ƫM0;0?6 {) 9f;gZ:'AU)`LW7feHos|R J1ܦy]HMI0)}&G&v=JBhY',u%Eע+[j[.?W+[٫h[xj{xs6p;'SPwB% ;W'X {XQ[0[NTugY{nvEMI&$T_G~?7@ݐ֝=& +!؎>QɵN)lmT֞0{ շʤ*y1=PB휠q>6b1:R^cTսF0]}3@S{p{fϵl%!vq]ʷT`uGkn-Dqo쩭}v;Q"*Ζ>SvP{vZ*d0;*֠s9-wR m]5ley =^>s\|G՝yقLLljrϔ u44{q܏@Mz/c8Zfj@uO"%~W<\W-=m_U=.Ncw];g cvT]ݵL3NgD~C kڽ>EIHۆo佹N @M::hyr v;#M(0;Pf>95j*e,~[}{=\w.Iw tw1g2»fS?ྫfU>@pO5w!>VNblg-)M4OB~WޟaBfWw5/~ꑁBhD@;O+j*;0_FRe=bAvH:Foҵ>i7k$x>p9i郎 ߐܑq9e?5)dǤL>tml?XnM5 d/vk){ zڏl+ uTvCIݸ^)ϩדFl'S:=U{  ;qYbg&Iu"t{=Qo0ZfN?oh].b\Җ("èT*7Rey1J@=+cdȞ}#/%hx^i:2L\Sd%qW3q@+}e+{|:y}ʙ=̍̽ԁ֚+{-c^ʺIHZV-~jVwǻ('Bڛu; { wI+Ö ڱ<"׈wZی\.}}|DEcH YW ]|l.>vlvx`?zD3̆ml8OMde`p =ݖTF=c$6u³cP 2QITRY5ќM2 c<4sKCqCn*|-Kʳ {4XF1{(۵a!VX!vv')v/]'}2ؽ!Sv;XZʏظlq=R)SJ-fWUYc]:ZϷ?W֦<ćUVRS=gUY-kdDwrr'NY RU{ͤS"VIǑ|1 se\; [ H?ҦZi}A)tvк[chKE5$QxUrٸ|Hѣ#S۳ͣKN[KIbdc w%]|o)4H=>Cꏕ4CMi잻D|C,?}0},䜜5kU w)~RKps$ðMzhN?M}א>{N~7ɽimha_ o_^]+x/"g3-J~O)k+㞪<c4ȾhgNb ݹwχޮJ#>'pAp+ FR3Dwګ8ƙvmORqN'ۨs/WUy|g ;^-~3r]INw4*.$ވsPg6 v7L"!h(i(|QWi?]rKm#'X3{BIVYdžwrsUU2 ^ٱO |vJZ~2*%"QlvϳSdoNGqBnvN}{NJ*]}}9i5NF;w΢w&{ ~`]ErcLM9c ;k U2eh(u?H֟Ie`;=☟K;UqnVJx_^]n7-RV7$'zFصǑ{2*;+=Fx;u*^]ϣ$zC+)6#+cc[x&ب i|3Lt6^ꖡo u~pQ%oۯԬ4_H^W~]k:C""]T>:һl!#vL;*u7`_Xw%܉àɬrcZh-، ,\|8Y;M`#v._ֆ-ڸ^L zG[&s0ޓ" ?NoF!'LIOt x*%!{ݴnݡ$d!rQ!*@{͏1Ge/tECUϵhGddvkn Ufh,z-0o%<O4Fo9eIƕWg^Oze$BבKjPElӿ<žHo3;ѦTFdb L(vkP\oLwI҂וܑ -)+ϵ[u"yp}e+{mk|I%^È|>m7r:w}<Ƈ6 n?'d_t et[+ܽ)x{OgŽ>FT֣e8(~ɽv{Œnۘ;i-yI&Ddکེej:ghkۯ0]TQZnF1㝺줏ϐߦvWv} 麞J6Kg.8ĀʅS_Ƀh5tv'gRZɔM|d.ݨ6$_0s;_jCq.ש`.Geq}v}L/UGS]s轑<Ԟ՝0ia't(SAgߡuVOZgQl;gnݞeמ,Sp` {|*>P{mv[~]):'a]qs稽{?EzOt<OY|9Nu&Nʖ]:Sص#.a=;oZMf>MwُΩ7ؤǙv9myX}6sΞÑ.4$V{T*\ɍ?2p&ˋ@́`LZ2* HaPwξIiY3֑'YYc=J(=߽#h: Wuvd;+1]IjNSmV4&Lyt(}|O>kot1=QՉ Bxv+m諭+\_z:$z]X.#^߿G.zۯ>ӬmUOw?`^}{ѴQ3㣪8uQ Xw۔hQ'MVaw#\vhwX)* DΌn"+ӎZ5{kgD_ v*ð[s\En*1ٛ،ȲB]G?eT6 ߵuEԜ.lhc/nva/W#W}25xs{i2K,f:v/!6c7{{agr7緂{|t}*C*./*9UC9 SϽםGT˷ 3*C7C8ZO lEw|OU;ܯBJ&zgllH _#"ћ苜Ϧ3wpMGр|]l@xԄߘ"IR]og/ҷ\q[KQzm嘆pm1C rkeH?X/w%^i^oC&eGUؓKN{*-D{@T}A`HR1p|ݥm {cc$)Ve7U-K5  hwa;uwrgk0˟1<*VײyL@w5va}`^wN:nis:fZ W3#ޥ>b lj-|M1)^I3L.ʡ`TW }9bf6ٛ4/)rhZbx0wg;;@|ϸƠ/N彍ISPyu{z֬ԓo4Ʈw"{)j|tW)~F,NNC{b{Zu {p}Ϛ7rgdQ\Kjz/g>mQ dvHIZCc83VFW;)~q!UpZҺzQ~;dnO,!2wl/mR[}R|T)5}+}&O֊V]Jc:L)ZUثq`B/;[qRq/χ4sP:vd j%yEȜaD _]^nvB$y{CĎ:ح%β`vzg 6븨!2yl4|>}"ߣՆsՅ#xT Β`;]zUB+ݧ%cr9 }nc`x'P`G-Czя!rpzNRBDQeꖪT#fr iʐw/qzA!73TUUkEC odlL؜|bh=»ܲ3(5﫪sM ³fy>fK@~vZ|4 Ne+s]O,A +M*ݝ3z>'հ5+ngFKGޜ*/u~Bgg٥^y u:Oo;/nh(g9K^Vi77JB2);yBؤȎFy2gVp~U!nf7CE3>YPD.Wau Qes%I?YW jan1x".tguqz1R{K阜&u{e𶯩V$}R;U|yQ{D >ᯂ0soQ>ZC@;{{PEJ䭽}"߱lL[3㊻B.]H}dFM%aqE\kvQȆxPwjgqITk\no kK%'ڞ@v9}ދ#4$2*Rkɓ-dxznKGi3DfzW;yi.H/2~-5{"GRfpUWReJ|C.UrL*QڱC7m?dXQEGLI{{eʰu/*@w]7^ 'a&ĬR*]vٽ̄nywpӌg_FidSy`By!wT)K.AKbhԽ2S5:\t~B_m:eMvgA;s]މԌ8ZΜw mDjg]Ƕ|=fPlZ"PIPV64-`^@o%&% k*)ox?x9 /^(i$7gKqh;uqCݐ I>v}40_?)?ew&xǛco v-;+άu-^4d,uA{=6.<$Kh^EuR%9E˨G-1Sid;}"#vCuv/?SGCWƼNBf^WEfNNcw!1ve#K]TH il'JiWEv2׭TLq:ؑ%cHbNXlؼU|+ucOk>@v PE~W&IC=h+A>޿9ɖ,=ɞ#,1UHcgfZʈT%D ˬ}3 > 3Қ/3sxz<7jc5IݫMIL.G̸Ւh'Rr>vo!̓Tߥ g;S4 䵔;UuFC}}(n-f9ʩfwC:Şv0o|N&:jΪyw6I]GjS_TJmKC츍R+N :#z]dmO F,$e`ߨh4Cc=ZJ&BXъ쀄czLkoW ^j~&Ge`+UܙYh/wE|5ɤ-îh9Ua}2LmFɰsK2)>;jc"]1}~;U<)$/ ̸Z;F;ɃǔX&̮ɴHwcU.UӔ"{Ir.E1Z|䷅VdBybj~yem`0="mjOàX=c)+]ܤcf"py=ryQCvUe2!X2NFA6^&/]oknv&.c~VȮ )fѼD"nv͍Uwtd +ρpZ<}ѵ" s2]UTק !ls7צg!tnѢL| CC+M蜀;Up\9ۖzb'yi>vh턌xkլ7z\Y\'y(:L).(ڥX!MfTB:sH9y$.:1;W5&e//dd@wurheD~ i*ō;SݵȯP.짔۫ܝ 3gD<|jrڝ뒛Tگ 'hw;KVŃ"Kif,\Wޥv^hW[Fk2cic L2Mk{Z~P;X"GGXSh搃vq?2< ("w_:Uml>ஸ!UW(SUc1wQ>tt1$++kU}S5x%RQQk ߽Y˔yGƴ!הY2X ZA_lg*r|ݶqIX[,yuPIf* v)9)c4Gq[*VcN6zQAEҎ8i8`M}B,FjݢJŝ>ߘ@5)%6D}wd R&g (woj'],ȞyJ8V^W* ۭjs Ur 쫪NN˰0S7UUx{zwTfҲv<0,_vxݿ[ܦǛNwIp; M+𼩪Ιa>$,ٜ@Awnەɓ:B@-\,z c*W8Fπ z_9F;I>ϻ]ŴEus;WNNZeUlr,q`94I%5)(G@yyYhɇ<3&yTݜ{nߙOLePϝT cIdzÉl kvLѫDb@x9 ' , M.C!s7Һ;3lExx+q3~}7м@{AU`4.nR줦rޚEH;q UQHΐruf\Myyr6|;KZ2fӄ_?0/v3 4ar,YpOotJQ]a ͛7j4o fOcL\oh&.COYuKe |R+֕hI+W !3bxk8'C|8"$bnOWNX  x.jv =2Jv}%$%v=GkL2hݣ}Xm&A8dxB];4w KyBvR.{mMF.ݱzO6r!uEtyj{ߌо;5UXqئFw"aw@*GqIGO)jUau%48O󒏸2GQ<2gDA>1U|\vw9UۥxA:;L.v˥cF]!3yցL:;>遇Qd_<DZ(92 O4gl]gfZt;gBTѝ.jdtȤPl~fI/\V_9cϒ2}E~Hٞ2(&L ?ewCo^VtԐHew/V۪Y t : Zq >3 ΋0V !Heb氲ÐzgS M=3i20m59#Y4 V ;LOs977>{"36KY)ATR@\rIAu; ɡw:[\?Iavb{b&wP@9 Ω"0ΡT F"':BWrY]n#SfSW'aY-w/T7S{(9nmJ' A.>JbĮ(%]p\ D¿\vi՘ɋ8>Y%cH@лyq*<7՞H]gl#+E[Lo],ȏ'vBMv|{nQD\tm%ˍ"Ĭ>wjik!i1({Rz;RY/'"D5౐Q;"<p{+2} }MFw{CwW߱zQU˪),m{9{ 9+ę+U8j'4~րHA~ 7x|v:ʑ))1FrkQIM}TLR@;$6bS^}r&~0˦7XIT}'r@s;ֳx\'Վd}tlD"y(>JS+>$snMN^&y11_> S\W:~cTQdIyU ]:Wh;?j\; /s[F}q">ygQg2(6»ٽi+q2]N18&l D%̏~s qWzOgjZ[6.⾼"?z|u蟑jf:sީ 3/9&?N̍pTWSq꡻Uu'&gDӹ̒.moFIg; 'T6'{;C)=ZKXrge{dnuJ;-4wtc"q]nUZT[{հ;!IyJ쒍[3:bvVMpHؼHgBSI:5ΞMJqmC'"@Vp`gع/Hm`xj1<ƉUw)ƗNg/+;\ʿJی}lo,*ֺp.]؜ nU\W}핓q])6j06ʛ:(*K?;UU؇zz-1c9)K: w17Kn"UTV3\GvlocJ X$K|T _.;_<$QJv~]remWяĎ,< n_dPe~ V7{j'ţ󹩊KKVCޟE;-9 㳤#Wot$ ;TG-c}CUI}@ S] L*iI( ߁wW }êw;Ԯw)6x NLZڌj9lx܉P{<$Uwg2{ƊuGvuC^ {@'OlZ>wd,ئ9Y_x\6XBn"VsREM(avұ^ςda{HfR@9O~tU+ }2K0:y#ʐ!Y,vc$Ǧ 8T1w<v=A!mdvtϮ6޽y,O~Wew5k{EfZL]a[=mIe;*C{u?y"[L׍wC"RpەB&Bkg-#O=!UMRoLzb;wJJJ-#hƉ%+ޑz/ʐC;GBwrk;;ۃHvBA9:q t%3NGb!9{F|\^![42{=m1$r[IC{K6v+*Bu}_˘nl%}U$]_!T-t>3)9^8~)dT/hdrqNnj6[pz= vNZ̞5T'~wbco QI(@l| U IW=? SH}:t+1|>nJJ,Ȟ+Zw`ٵ+ޭu&^Cl^e߱I=.~_:C2WK [Q|{_~~D5wBot`ΥkK!S!K*SfN@vjx].wEwkތ2"HH" ʓK,.+1%5sa1Cs$J.+]/wj%|QݎO]2Y%l_ &QI=!zL狱0m(.vL]2{wLKK, ]Jͽ+ٵ(]*DT[kKw",bD ƹ2Iq8Hy4"勇k)gT!xLԔmq,^V%wU̿;{8 G,p)nA#% Wl{X M&RUQD)̻7s5b0̙F5 ؞j: X)L0H,[fݽ vUU)WU \kG2^k\ `ށ$l@= ݥJΪU9DjnjUzNTUrWhPO}Rm7&Ӏ\˦7ĐC3UnjD 'LXhl[G]N8']:)q68iFcN\L@z tt7u'LfR'?NP=ؑu 9c wH'[vc_ uD7{:RKq)O3 ݸnSwN4z1hRݏ-maTdykw?AsqU1|~2v~Mv^an4Nw#L|ˌ{_>d;7bfeUl.XI0)O3a2 G{7rk{:nRa; }ndhGm;(˓jo|'`vfu["v-уMbwjл4Ñ?ȎVkb}b\%*Sgne;Ģ9G 5">ʧ ^0?|>}?IAI"Y!'\S: gIb?MٵGG[j2.K?&9s=Su͎aL^T\0N >* nWP-M̞z: 9$tx;7ɰtHxclgWykI\:JbpN]F'w]%v$_0 8`,7P=@wu*j iH]~P2яx Fw3 aw\RmIfE[b%}3,i\N0:f\|+'92,G KSyWX(Vw XQP]fujϞC\2[X[5]o6GR全:fB-qMYuw=WT*PѝULU3pcޣ ǹ@S=RcL{ ]wѽ %K̹R{ى޽T}Ȃv-@^q{%X5r"h]\ NHJӤ~G! y>f[, epfN|6c':O s9s:HeziзN?S =\Q%ر=BϤǝ\~eL!s& "tyܞa Jȣ4&~dG=(;R=<>/,-|: EZ_7T,sY|?$3{vc\Ke!v7sX&vC`<$RѓShS[Ojz1LoKUtyniEw'ew9#$ WnjCBz:V tO=3cL/7{QVJ ;Nwн5ضo;M{ܷ4tx2Jk~FdNܮZWTi33it9R5(X+0.?JfV?5k ]$-3_iqOAjF4r[zf~=i3R9Zi`خw5ʼ~4}VA9A#gw7ǥ 82AX CF(vDtOfO0X]{2F<6-Z߳qZ;Yio;M{$WT'#{"^pHM]U὾epu aِQXZݻ|fv+^m |w6QJd/kT$9٩d/Ts̏8i :»l2-Z[V]4/Ÿ zXd x32Fg a=#C#-oɠ_z;%F|A~oF TXGD6+RHﱳCuQB(!Iw7i_*sLAY Wg9݅䰸]ry2)M1ŏc_hVvEhJ(gɵzInJ-Tƪ"q> i=EyVx*GZ4PmPeOŽ2fx:cؠ;b1 !2zzqLG0!g27*| ;ѽ}H)K"*Z_ASjwRGTsK,!9i2͇{{ =Q=Rzw^l_UߝcRrg 3?-]U+?u^i2J}]uNhz|r{x1 \:y\HI] 5!|̷7_r$Ehǎ|nCLBcIP9\J91@N}i*׃p) p;U}*;[36>U;zK"*M/\c}K֘\@~tAn o)Ԡz ۳t% OvN;vJҧ2*7foe)?IOᏄU˅T'aX{S|(_,l[{|h)>x{/^F6Cv(gb;rz̳u>U{ (+*!(P"Xݥ_[OUkD$vǶwU-bTͣɬk0v&(E;3ύ|StVgLnBwq:ArB'2訜>?X;+x(#|GۧL'1kbzQ+A8KY<~jxKP`vܝ'\D ]ys]I5gy :ZwQq8aYy%1d:&$xpݾ{=v7ՋΞl/rя*8{D+ׁLh0dA׭ݻ"`7n3be[)GK5bJ&?;Ǐ/rE#C{Z[i}ޟ"'J}"Lp93{:Syo8ZDmSuʮ#z*8ivwNcOy*a*Q'C(ƷT/lEX3{-?0bv_)Ja-fvVG/(7@]tt˴3໊kEꙌd'WFwf(F l0{o]e˽EbEQ  /{i®O tIZ(n9ǡst/㐠݇*4 ̛ |Hd%`#=Y̟TȾ(hnU[%*; j7,ӜNͨZu>ϢX#b'`ĶtE  ~ZJ댒gQbeVǷI^ o}W [f=j>[v"^JIe~阇^jvy;e_0#YQT j|H./--"wطV^g'GJLw=ަ]C!3$QA%BV#;Jόlt[نu,:?֝f3!2Yw;bwltw6ʊn/Xi}CgDǰ86~q,v% ^.>p܏(evYZFv9]NPwW^x/c-cr^1?*,-˱UV=)̼Gbe,ùG |JӏVەbg#V1&~<@xԎb8$!OSlCw뾍vH}Jk~i>/OlG֩,ヘ#rI=LY_怀t/"(eLZeRB*qdH{Q _T/(j?jJg4<;D.kWT1iuTѝBPȜ v;6 xW} Ne}xqHy^5/ ];w՚/מ\]wO6dpe=L 5HZ.`gه mX2Fuu )Iy=2$2(_Κ@/IEAL2OG,]s:a b:?t˘q홝`u@U+[ xQ+S GĽnكJjnZֽ^bt.y?^\xW( wz윣*2*ɊYc莑y +"Yij`}ՍT,N~qOd1cGjo~-7 o)a*7?>vLcb}9ҏ)0ʉ=o+, |Gbܟ&-'Ʉ9N6p?uNӉYRT:+̬u~5x cqк+9)͋aiYeTÔGȈVՓsB`ZVv䊣GyJ\{L~VrXa3uᒻY,O)o^̖z^.EX6; G=]W T#fkF۾"|&|L}ĩO̜{k X+a|iel-(@uxϖ{Bޘ abb\+v49IO HpF PR;5 ~1z)1ވ=ϝ'gNay 0%pcSQ: {IWѢtOja+ Ⱦ[j@=Էxe bP}k'zu8;fxBfcܩGYf@ |+: 쉤}T阁̒>-Z'tuO ԞZ",_Iz'%Z9N;IKm?]SݗOONtxzRi/]'I/k !uq{cQՂ{P{Dq]x++%]/v ّ+[AiݩERzWHpv|=avQ| 9% &s"T f@v8 dADv1lx ^$:Q7dcmb!<`3ݺ_[\p\D*Kf%elz8l/^}z# 2ejv).uK'Q ?W;,¿M)K:c& YdtG 4dqj}h$T{pWsY f!EJ)tLv׷|-cnj6jؗ9G*f5=EUqߔW I3UOX蛑ޚ翠oKִрV`}wW}oUV_Zu ={U6C },gʱr<^JE 6؊LC|v!Fֽ˹5 ө;,onڧ;KgV 6ZсL0{ư[ %iCT ĦrRsoT ɻKW{&C' 4rDN}#+G5#^wWBv\'nF}ےv,Rӗ`w|Ͼi_ŗQ7"vˀK%O茁۫If?DIG%uo;ayeC ǎRl_dEΙ>f1W@OEG?*gQ\Tܚ ?1՛ޑ^<Έ/;nϔ Tw?jwyڹf*~8MUһ}(leFʌUi[unu{qk ,﫬VxuwmY_SqYk>PƎ9I[Ip0} 'Cqt;qJ7P7-YE& sԶ8?h}rO'Y:(ʑbLGۛmD+gC j %oО$&[52$uT`JJ6v,ztW BpEsJ~ώN]=e6ro lZiKߚ +Ԃyg6מُ/v5RK_k 5=Ʉ6aqo"rnCݝ0\7ApfwcuPMz}(ӻ=v~g)@ܧI.qn]#LxP^N&L|O=kW}!˅U.|ׯ\]e;%wV{$(?m }cy/T直㯹SMtA=3+NSIbo-:".>Bw{l"Qo`! 1Ŏ&2\M 4>3;ku>`@"#r(킻cIݹW{ArNkv"49/oQgwktΛJe#aP[ʰՁ/Qg /ٙ)'Ҏ~7R銩.]l D=N}bk~exǧnӟC (=y/WRYdA3qüKxkXox7&lTuGUi>?I3];+ӛϸ7GlGɯ$2׊wQ#*:5[?;AaTz}8\v O$fJoA/g$IZc6<ǜa sYzDs|h=6n/GC㦳[(N0.j.-K]w;ںٓH7Z;;wW cH#a&fDD%+HH F! =4Ƽsq QS]Gc Q.\#I쩶;'LKu͑]A:DUv]G5C_a;wL^v(?iQΏTz#uܽk}UV~$73 66H?|e cW䮘oJ8^m:=::{;jǻqF,Ռ_v n EdժQtor2citCLiAYѓݴ wT##1#91m|@U g_zgLNiQ/r+dTaIe`;/u#bօEؽq_tPlR|Z9v ^}G-v/~}q3H< w;>ga8ѝXt(Uƙ\MDghQdkvgt] xlA{JuvDJr}rkĂrpr[ `<2C qVow@|Ӓԉ{.jםF2Fu*{}MUӃ͔uMVvى}UV;HSa2&Ðc{LrOmfG. LIiڠ=!]꘹L똴?ez0WSa5^fx]^e7 D7Z2Up'@OEz&d)UΠk;|Ry1jyX_Y//SN \w;xc$ |[0ݔ.KLE.W[U1O[UUY X! H]笰u,ȝ .y],{m;kp俯ރ^l$tsE:O13WB,p8 ybW 'kR8clxNQ/C$NhNB6=Qpt#НDc)1'^A%v~HUm~-I]v}KFzPgپƗ-4.sni(՜UykP#}d͓$ϸCa$SJtӀp;nbǒ*/yOIvȏy`)hADcLVGyL"i饢{x6.Yq|{ԇ >4'݅Fv,k*u\cDZ/J9hSM묭Q>7FzەMߡdj?kSNv{JGALq@Lg5a=&6sS{ #ȫ+,f/d|f|\gДڅ }WtǼzt\DvS;X^U!.7gYЮVf yKJ_/=qU=h{6V+!'‡3C-C]nM74̠J΃fn*V妪4X^rw{fa2d96h~zX-#e#DR*:(tw=ݵ<{ftc]E٩o?4_>z)#e-I'/g໏xv_ &z0=Y_䞙:$c{ñOg3\_̤Ty{jL|G&.Q=U.`ؽYg'PGҗzg&wTwwܳ^H- XW{̣#_2m)'%ΎMrBh-j7{j7F[n|8aفq!ύ .w/A~H,аCE0 FD4`qIZ5g qiiwz:!$N1jt G ѕX9 <'zAG~)Z#ۏ[*)Irؾ7樄x\vNYǞs KZ_,ETىs 1WQ;Ȭ~F΀Yzq.ʤLԁ5nE4*i-t+3IOVj_eU·Q|0̾- !`=cw63]q;˦fevBpg̎H. h6jؖ羙 W.aF;~r뤄vqǰߏX!t^?eGJߌooWom~LjX(U,$ aSkG#Q9:l 2>"Wb#$Й0w׎ .qtW͟z U">g'deG_n$<{l 6Q:F9)l%Ni^.&k.11X:pzN %I?^ΈEeN8LYyv4ҁ}60;tG:@B+'=P/2 G|p#Ϥ&Q"?u KGj'w(5[ՎkkTq]pWDdwi u@Rum7= Q;Rh.L}[e6SS_Q!3n1:|Cf)2QQ^iNNդމhNS,u=qFۚЩ^sA:GolEQцvb{:hh{ /@Xpd194z%'Ha,|!&bCلF,?#n(=1j?h's6eqsƌ9n>Aϕv;DZEU:7׉tP6G otBy1=A;X]'sJv9ө~zm&}[,&Eɯ~j(,y1UO[DŽ+z!SwM]ݹ/;Zu%!Vs5 jO^-o#{zRyc RWYeelTlu2t,YTr/Sn[L|<_՞cvީf}3RlI.S"ۓA씑jIavVнLs*.ew8쵍LY,f1ulE489Avg V1^! .4Q_ɺ&xxt6ڰ ibÏpR7؇ԵCx 2|3jj^mҡM{}q{r=/\,GJrU!)2:Dp9ʿl%LˁE@xKl@dkN犻JRxl0?_Hv;Lɲz%jc.\~%cbvVJM!qJyN{UCjZ;{?^BvE2heP {~t128'_ZZeUqo6aƵ; H%: g/%Sli^R}d@ex|?Jw*l`v *aSF E,B9TjI&O݃"uXx ln5s7N0l IFkR N1轢IAbV":rP qnl'm`a'smwls,vW/<7f2X-B{.+{b.`enǷG۱3h*g-D(>fP 6:"EeL´~SLr~kjտg$v?;ҝ"4IeCTiº^8=VḰdv*sKI:juKq]V#o !Aо7Z||AWŝz;q@+*_#j׮X Jd;(67@ίSdVYe>(2l>䐝#[)˦ݽo= ]C]p~Mgӱc4Ľ"轰]?<[f gg($lW_.oкAv wXV%+V(G$FLu=f ۩O~4=~lVx+zw 3=Pgp}wla$+;Gr{c驁->^$G^3w]7遯 dll> N@܋.gHɵ;:b?1c8_FK"$NVv%_MwPvz )>G{bm1vo^ǤkC \n[GLF+4윕 kG*[RzOԩUЕxva1W'&Bf;ѺK7f$o:SfM3nS٨%; *Vͬwyl9s#!?#4/$B`H[U7Vԋr[dW*mR+=@ޕίdh3[h~ t;00^4a@=(S>NL<3v'% e=}nb\x$"7:2YR:t !+gȟ£sRWoQ"+J@KG)=u< r$ƺ;&EY::lZsjuKR9A|coR"u _`3\rA9dxsA˒?a6}]'[ڿ9ۿߓ j/L,jWG}I}Hk'\ܺeU3  6ͯ.tpg\Z{WYeHH59;.tܕak:-/~{^Rn.e!v<1"X!>:v$H\M2dv&Lt2;.#Ńu:g]l# Y}HžzFɝ֚]5R+$i@8) }鎅ay wz5aTTnXhx>^h6$(t1>Ƨn4.so=+7ڗWDà>j?.G-3zZn GކsiňQ=N ۦrn/ FwH:ZsB x @T9]ƫpNC֞bu(LXutT"?ꏱTڥ ݁Sܰd?S6 e}o5-;3NtC08=2Fw7 Cv׽JRy+3Y[A.؞[:Կl^}UV1ݻU| soI~_iSwtPzx zGdg%boo'FN2!mi*Υw*P{&D6a\y%T' pr6/,*XXp'iE;gy,Qvɇ/#|<w 1m͢1KdMub-5;"4Gr|g) 񑤆`rD(Tgi7+p'uS8Ś-NIrlN/ >څn& ET'V<o/k_1*RO $&àxGazH=qwk cr"81sZc8ـbưS˒TT佘؎+Zέ1Og;".Lo8qF}%QZ25 hS.7ꃴ>)+sAg 5plr6ʬ*> [{N}P$/hs]/\^N%_PP_0޳xɩ~>&s]K/X83lsL ۜD Ʌ ܄9E A^X%NBTU)|<[2>7 <(ſ4*N1щ2)po-tGMݧuP;v{ =)JP tk4s<| {ӣmM{̠D v+% Q̃-)gֹNP֞$LhO:>v#ڵ-߶Lqk&>sJ];r560P2ĕ W~g] ;&1ؓF [DDF4ҲӮoF;c%ϑV.~׷VJsJ{|a?)Sue&sƃRv VN-cݯWYe/_*WR y_71fuFXX)Jjji>{=ОwUs!Sz3w$UrwVYNO>,&[5JGs~Yv^wr|5[43W໫`V])LaHVKFjlO 8jH00{N91w?2r;L0^k,{k*yf¸K鮗s~&)X 3;{ܥs:-Mu-ar\Mr,T"Yq$,c8]BO3w#Φi;m< }+&ᵒhLVI]iYޔ58%tເ݅ 9TGd+ZƔIU;P^|YR{:^?<y C/dX`;vlpo'̾*~w{v;ƣLwdUrW=좐ѐ<#bƒu,RAwû=3ff uOL. tQ셂;+>s\w5N珞hX ^H _Cjnr'HGÆ8nj%~U"IFwo *996{p-|{ 5s.!OxcYa? 7ϻ{v|x2gw+ -.-[۠G 'FubV{ ?Wrt90\R,GldY6qKَ#=*,_dC*Ca36Rd`/uXƔNȲ-7/}| sœR*1SeydⱏU-<{RTqkY WڕߟXg+sWI[=R*ߗna'A2M&s!]Pη񹰂C]pf|FjwQdh 2H~l)Y3x`nj}3SE2SuijAv*Xur'eOuS|92殪!4:SOtP„8 ϭ_Bly ys~*iFui@z3\XٙVl='`tW]&<{k21M.6`zkjy蝳,瘄y OO^. ܱcDzQp꺓.tHy{S OTk\|}ZKݳ^vTY_%{;zߴˮs' kKI=2xѺZʓ&}Au v;1>veyȾʼn{GYB e#9`?։C;S[MegN$A{-5C2Tg酗QкP]},㈂Yҝo2a=h=Zwnug a;.t.c8"ZFFP-*KG̟NɎL֩kX^F[Eq&7kGO4:&i n4tk^f$Ux%8 $P15^vx' 3Y76#;8*@:0;Savw!sCo;N}a(njWF]1v*?r.A;_wPbgbPvW]+%iA%r*66osdZϚޱ2b-M/[K/j*-oyҕ.fIAwޏXe%|[yC^e7,낼]>%T/MJ ѵP;V^ۄao1s#ew]yYz`d+KCcI鲢r2Lx"3 zk Q]j( ~?#.~?hI0ʞ9zf[j"H-g`yTvx Y騗bl]J)?+S\ΨG]3Y~VNԵ ˈ+б FoY~ ikWdgX;d)KG<.tTnAEݍ#2׮z ~vꭄdiv@N/':ݱ{׮UVǍ 0V[Z cp"bg^K`-!Zz`ry $~{|.:2v{ 6Q,'~zݺ=s/J '(D;q] 2 {VM;C"+H^zAڴUCI}z3a lHU9 NߙBdJYǫxy(jϾF&RfGNy#_LI"uwbmϫ '+7O ORy6yC֛̞q!RB׎%ϵyڬu{:Ɨv%rK~"㓟{C7G:IVYM-Qd%H+Gme07)hGWgX?NuuYsguGoj?Π;E__UJ`eRipuk'8FfJv>H Vh9fsFhiYdE˲nm1{ˈC9šK]Jo΅Nߪq_7M)u ;}2*?@7ncʄHFʲIletܭtcL`+q*p%u9:zzAcK'QZ3x oDB@6<_zY>e|dR$#arm2^Z'V{ VX9a09Gv4[?^ r$!uĉsF!ވ?{EAPD$szxgZXG}|ڍSwQ3{|ld'Ru<ȘBt*gҖ94 fǧiY=qu[{ڥZX{&Pkh?ecEZau9=Q=??_QkO tT:g2$a-QZ76r\X~Q& .ؾ"d]]LqvG³St{ "ر&'6V&gxAi 75= Z99euٵkY2H23Y׋ΚT}Od;ޝt~5^BLyn\HyD*8Y]* ? çay))Gy%P9AoB1㡊S#ݝ'Wcz8^Tax۱}08:Kx'W'ưl.7PyOOg9J,?[_Yjg9F_\z9]U7m)_\u.*ΖEY?&3m[uaJ25? vOxk9ksǺ;H^wJ9kX=خ7_wge{;'E+ _/j/cVrW;O@xER l_!C慲6'>jz< >>F WWiRи1DVl91G.ğ£ zh}dlntMoL:j]o:oƅ҉ Pn};m0zVƦ_$ CB#[!#QJGH|oCvo4I[:Z3:ǭ$;C߄Cker=P]<= _hggz~ }zkhUNZ;wǰtP릨V? QV\`5KG#գ:GpnCо"od .VX|T=qfGhvg.oTBzq?{* w%t(J2<4rzJVS;̋,ۿYcg)"]5dD3KWq:]@'EN?X1G;rWrjQ@$>l(W}Oz>ݷ0q \37Ԯ+ǁV>|CsL:Qh"oE8.̷{hgyG4 Y #;;)O6XDŽ083Wg z}"|F9`]b/rWwCypšQ]9DcpVB;et(.vmf>^/gt gtjW3[.jػ7(]Q"ُZO7WˋT~3ۋK=WmqWVKɆ9`v&uEOʼn󒧬C6Yc~8~|OV4vTb; x?W\ʇXG)/z^^ݑ/:}+y~ x\/ͧ!Ҝ.gG@Ndovx6?FYX=) 0|A]r׵Ɉ~PT#647Et&cm7uZl$-e+7lWuJ$3ܑ /q٭=ρj(I?s]A|h*΅vyޥ^d]qv0+O\`cOn< ){pKY0?D=ku *^~.?\#Wi]DxfTmsTbCnj;pAܾ"_Ÿ׶d}4 ^7[cfUn BR7d*P8 Kiz)A=1>nWɓciJ.֩e G=c. sb< n}fWa~ջ!.˧~(K^V5 (7`J}p]g}}1vV=n' i;s9A},AHAڊh hKG} 8T/F*9sD(,lhŹl:f\Dw}EW;}fjo%(T󽉩]:ubI=ey2W5ת+]6w+aAvd<0v5N۽ܯٽS 2P[d(&kk›?;oqB,Aہ{;ra+#ş JL?ŵ΄E6{w32.ѐ"u9,w1LKa^+vg3=;T^xzb] 'c{;i=BDbx_~X=#Z1C8 ~|)#>#DXxY XoΑ06)˧GF{ rDc""X 'cRp;+%<)$/%{z$,oaY9CS]vϱzWJBWOeg}2MY.d/'Y ovwUFɥI10{Q{ETQܼVtA {a;Q]>{"F(m<&N1{EYd. 2iK_Kv]ΩL90|t2*M*f)QZQ%'#)ݒ2vKf#GvoVzԽ#q:Zizޱ )-5Jwzqb!ЉQf腧\?ؑ^/͓ġC(ɡ\I:$ǥ=> (G\NRo\s敀d~! `n-A $>5ˠ Hv2:dxNܺ_ ۢ:+7+?:xC=~ڜG։m(zL$;igGUl2㼐#N;L D+v*# kOӿzku `~mW_4jY c) {e-+mr",?܋{:ڮ~"ms~=13.t[fa UTwzf&w+^&CYCU9[6t y8FFv"=&w"g04V.\?ߧ<} IYHáVsJ4i]GWiy9"X!wø~?MhWHlێ ̣yi^k=4udu?ʹ3NlO:Ńlyj ڷY3E^܇>}eIKfãoJҋarN=1yBOʞhvTdtbf:xSaw t 58I lgOOooOQ-W^?) ܘo*"6յ 9*+Fk6",HVmw#:v> "2dr!l)o X^rZ;ܮD7ەVT~]{QD2úԙv\}: z`r;Q˯R|bv_zRY%8#{d:|!:+rܩIt,&{}|!=^>R6;x1c4lj;7OiE-mabR)τu%n+y17>N:de6Yw[^PXpM0:-0vt۱Ng(yC2ʭ0~5wwST'`ݩJx9#䩰ݡD>Ykt }O:+p:af+R]-J?k-S ;҉3-Vqr.5-m2," M罫8 oUS^+>~ }j}J-e+~K݉ ]G)ݹ4=z4rQFzm A\Wi8]aRYd)pgȨkM@䫃߬`x"}n=iam+Q9|vH3R?, (1S[ayX9/'fD; wX}uT7+AI1&J Afqdw ڤ0yu^1Ifbtstm{["_,ױٻp|a#{Tڿԏ(鉑#Dz})*^ Sa/l7_/{7t{勺{˙͋J̖r",d;{#.>!%|\d/u{UfS}7p*Sw*OR;v*L}^%Û>CP.g"!2;,EEP?A +x=&}4snapRRanJv ;wDhgp(K}= (} q%1$G<3-y>\ly?SgW ຌPdgy|i 2!25v1g*._- c(y]pEs{%h1)1gwz!2,"=#f ^ U8ޏ nlo|CyaREZhv ̼FNIL2C=_AxS-u:n[t9?l;+uO)dV]^R*<έ_dNrqI!U] 7l:}^>$u2N]7p41xȑ;~mPzH37 G2RGl!'AOnHN-CyI1WBA$nW'wȜôŸS W@: >z\ ]‘arocXvG#g?nOi@^ѤJt .vYy q̮{MWTN5|jsz6 ;@cVo!;pڱ7T+2(8ID9m0Ev q}"\|]R[z`/zWF' 4^'֕;T^UdACJ$x]wpR:RZX|둂ѽYnZg< FdyifBg_2}ͤ( %nq66'àv vozL哭b~Rs;mbtU_\eEv\ȿ2?fEYIb>?훶O&P籠+w,B/Uiy!Umˮ=E"FO:I͐&YdE h0Ei%F*{d?R8b"wfD>T̓,IJ/ܽ5i t1("#|F(§)Cl ~=II/wL(s4kwTf )%G/:0:ŠqOBem@&41EG=XА7 f,-Ժz+(5QFIrĸ<W}pSxGW{yvǃq]Vb*|^ qCC3b&wEn)i#?c?8^Mo?xu/sO=M3Su#=\ Fq Ewfn4DhUbX];̢y*?BJO$HXD"uqfS#r yŧ%~Gyx!#pq:O :)STA8=#c,C<}N9MbFWZ_@ߕhihDXqr׏r쩓]hNdVI% KE^,.y3 䪧ǎ~خ'_Mz(RT,>_~V^r-3Q]+捽G;`eUp_˻~ܣnX2DfEY|!HrY༵F7n׻ԯ;E5[. {3 v>&7H>LޣAF^*9Cr [Kua +5GώV{J&+r60dO ({$u+o8gЈZ*8 } J)(}!9[K9>ʵ +7X Qv8nZ*g o ߄v<%~vmF'spSEE翸[SdW:#" $H8 cP.c-R1>A3"6BF9sdȮT0)qvYLd~8L%va7Hj'|{b־gɓd}K7(PQ/tw=61̔Y6n"e",u 2QrMxŪn|W͖viޣ3,/Sص`7SUNg]zgv?߹H0gْ;߱&`^)?M#:fI&Ur !i\oJ<]Z۵ ٫#5, _&h_IO4W8*PTꎚ =k[^0)Jk7lsGy[i'0=R&ɇޝ up+UT/:O#b>WǺ`ܮÕVn8fL"&}1աE~e;<%n*O+1*q\.w*ׯ;6_Id#A\YyS:p=ȋڙ"Z;uuuǰϣ M]AJ5 %̮L\ښܫF!Z?."}َZeC=/~;6rdgL{ ixrQI̼|g;؞&W%7%wE֯ڋ<T2}G~X We\r[(ʳEdRpϣh<@;Eɒg>R3 })!/:?8zu~QόH(d$깟L$/@}yT>q:dXr[6^Yĭ>ǣŕdRFd1~); ^; ucuH),gZǤ<1l.eZe^2 ~z:&BXbZٵyyyH)4.v%rR]:nd W:Z;Vtπ|&_1bs g/J}#}Qdn_n~Sin]z9ISxs,2= 2ZkQcHM^a:9^K+DQَ؎3z/ˡgF$_ewS-/U88i)^<AZqBXi=17$T> x/z&eu y2lWJIԩѷ`\!qc l[/a| cܒb/ON Z[a^Re9O0vYg%(%xUϜu.p1جqt8IHpQN?Ud<]O Í\8iaL~lKZJu<5vFڎe!G.p 4w;BW֩3G#.'Oe,QqכCcTkՉZ쮲S@{>Fњgw`!whMle>ޱv>ᇽ!3,Wϙ]L+ceng/~.x )ⲐiU}2~P t?iNUxpU5Zҿ|RJ63FXW|FYc#Iq.hΦS4T Wx_yF̼jA~Nl4^'bl+Wcжgr3<_Dzws=^aThWܯpjoN>-~  w(~y'$3$1O`%4*LGS~oW GK G(E &w4sSy=W Aye{%w?JɌr rYI9tχ!K:TcCIKM$ce?t}cYtO}ċ\%tqxڥ*{&li+Q}5.M+7op=1r5d/v?nYL뭯f4 rw N*%0IZw}Yf/MݝCk/U /Rl֖3Uw,0'RiTdf,9Qk줒$ŮB|@)\^=U+oMHUxE'iFcT zǁձ2F ) ysFˡFe}O1WB2dyu~7cQ)De[vo;!TۓAyW׃_ѽqfK CeR CUf")qT/G㡮tԱ~R[9`b _:y+ae d*{Y_돚(-kbi#%{X~?HLhvnnՙK*"w@rQSo<9 گ#z oDh}%50~HoFeYf{dxT.pZPVr nawXO;Vwܧiw:T]7{tROed;?$|$۝VhȚrU/Yv *a9aSDI.Ch{U}-m‚%*O!fxQak-C#u[aa mX'FyN;ghlQHt-lOvy@r |G4Ok>EӔRѼeRΏ%܂G2Re`v,窯Qs.]vΡ8A"rQ%iPz:JTڷ:.VǮUoNcZsc@/0\BvY]݁uzimȑ}YfM{-M2ˡ^8u=fNv&v,sl薑%m(pnrzKwB7-ے5#N}\_v*0VգC$@qѺT:֩+:_+ɉ#c\OiB;xlWX~fTӉ:$>;yt]63ux |1ܫ=~_NIݗ,POJvL#|O=Hƙ-sgeYPz=YK:iuzodca%DvvGuy%;t,iіClp]kh7ac#Q5śvEJewn'I@956~݁tX\';}׵$`bשxwrd$$ i\R\kp=۪דD7}cfNÇmL)u&4ۺGF/\KuœHi=dsKl^1__8W+Xeo듹s8>NjzS{{b%*uMԾ*j̍RBOP.Axߓ8L}=xCԺfeYfdh>O~ `78I˺.L#llU҄hSxQXKWU 6^b%#;? +|ʳ@|N:WJ_FKVYj~?53GbџZ HGO7xJjlzCȢi#,p=k|ZO_ߞI7)T;j׻f(L~]0Npi99mMJauzYԥؼw ~/^_+1U;Hv.`:#TP~qN*[x_>zE&T$XQVKֶk2.O^f2Oow퀏`#aeYf;^~m|Z]A^Q0]ShziJ1#破P I}fukrؘڴ8ԛ(9ijG jQ::Wk`J3إ-rdώ֚嚽RgeY٠ ӗ;~t~)ֿ$cs˥ilٜ%I[ 3 oSrSK!p)0adYN!uuBNѝQ١um@q&i09sBD<ʺ^sW=x#E5Tg#;r|Iy%3_-{ffgﴨc]aUNa=u _ESBvyH0q`g:-Ɨ=#Klo1Z(yRouT⶚Wr(*;v<@5Ҕik6Mb:ZA9>y3#T67֥m +lWHAܟ#xGeK=+N%txޤbb`P{/v}cX8㣇 P<뾩,B4O ۥmL̽7Nq 뮷 s)ugkD?43ߴdvՂhfZUOT%KyԷ'.K!=à;@:E<*@Mff>w3,ߖe!HomvZn3]U QTChvuȾ)Xq31d%xCrtvR LyO؞IYXnFރR ķN1*O&KtF]wVwN驱7{7'ZnWi)&yi'~(WN V-;c=~P,=A#TXXE irdbvJ1y͆!r հ~.cD?Ď/FWX֣b\hE;b|ۡ}grCL2o0Kg-حn-Ea{٧`v-ƿnsƸoqZXR}@>,_ iSfiF8|,X)‰Î(Vյ2oTq/{F`eɠY;z0{ܧ7}-@ vƲk1QH oEJ ǼbZKhj0z>*圛ӱl^ jI8} O[ȉ~T:anh''GzT֩.m63fH$uMM0buh:da8;܅2wI.VZ\:ڷ4Ho% Rr`aInv_ZOЎAcYfexLE}ډ235wjA"%wAW2ٗy[ݰeaw-ςJKJ{z{U~wo$w?u\Y]9>׺P#e:GLa;_*#lS|y?=ě|x;ֆqC:\sd,˿MD$χ\MXBomOy'nInuqQO7VT{>~:|2վgw-GTF\x'O#;1Z+NƸ]g"vF>~zeFvO\FTZ7o8M~%#31̊iw*.N9. ,2,EA38ĽdSrbg k[#혎֑; 9pKJ|AwAEGJA:7Rσ'6?,cGO^r1+j6 c^Wlvy5y+~x9xhfsL;nr6'%.ч!/cz簌|,&{)Oٌm뗬n2dx6د :E avgUuWN6sRa)Ho6@+4vR ),ʻYl]jl/ 2k/,ΰ>,KTc g"eYf_.HG OkX)6UENxDviQ%;Cvjӫ'^N!wޙ/0n/gIi# `5A&ޓ3W믨HZ|]nnOlS9:s&hNJ5ZV;EQ{{x80{K^Fg#?`;?8#BȽW+C9){躭28O+.qC8bgNb=JpquyM=} ߥID⎒1QxSR\~Z\eL vI(]+ytW%ذ={g%7#H,NX%;` gA9_8ʫuq\>U"&;wÊ;d)SL&?sgM~C͇z6d5iU{}g5=~BJ˙kn]- ɼ`$H j'W<2:+OWMO{w705bww`CuU N,R8 ?.6Q豱(Y Qi|u'D1Pbw}ƻ$Qb cظG7tzHK!\r48,9v8c)94-X. D'R .bHT޵ua䵷N=BI48g-# J+lƲkgv Kv7{S1lZb7+(jm}ۧ_pv= 9ʷͦ)SL[K.Q;O؈-ܮl˓p72e-v FOzG@z?W >4n9k[ӠGJ,0>//Z؞~70۾*Qnx9X8XT)@ Nx{m+tNz30}iәutK4ce1yH6MszҒ2ሿiLig=]G3ڢ`bXT@hQ.uũ?D<_Tw/̯ckEpQᱜv=Vv4Mp2<1Φ#(,d2Sc)k ޅάs Fj{~]I ikl"pl!ҪOf)S)Spo?J*%-A zX|O.kN8V<|a︟ƽC *g_Kt`Ŝ$|YLUM6hLEa|wY{t+2֟Hv;_=ӿ[qFݪcMc6?>I4aL{;;e|^߾>J |A;Kx\FY=zy\.k>~E HϥW*uuõN*dd.nguSZ rtӅ\fvKDbt\FxZ+vw;a^˕&n^QƏ/e*^Nl2eʔlZ\Vvx <ۍ4-i-vYރ`}ZNH)?D$x{y"u>u/G`=5yR>n硓: ;<4aw$\=Z>aCDϟk<V3lNog/ltOgd%Oc7*D4xy‹_ƶo[ɍ{Dh,':sҕs%?g(}SQ=37yXfu6lCo޹>:X/ 1gxьE]JׇwrAyǟ̤6TWdQBUu*z>s^(%v߬Drλ;Tj ˧RKo/1Xc)SL72nw8 UTp=az LmN.fn ֬<Php8]>NxGߕ[PGI/=} tccb1~Y8~05l#| qx{c#?f0?uO`zZ<4Tcѣ]WF>:_cuBt+ǣ# 磄H|zH#6Au.F04˫\2]F}D=ٛ=u$%bY,<;OA{5CpҚQ0ZdWp,x} ^tuGQI>eʔ)q j_/oH*2$r1kQKK\UL9t^؉֩+sUvl;"~Os ȭ1ȟ˞(VQ xhTF%xٻv)m?ɃwQ yw1䃰{#u<ڑ'Cx#}}km9{ӧdKɌހ/+B8/ {eHTZ~8b§FHUrX7vu0]tw~Pdosؾ2 HHaciwcyyr5Ch^O]*Ρ"T`]r'#6YK+0Ks&W xgu·XKkH73SLTOmq{' /,.T% 4n3ܣw1:ʳh˛Aޤz<=%;`_i<͞L]<3hvʼ;?AٜW|H "'Q$ɱk)f <5KAh)*Y9vϕiڵk3aQ X+%[ bҲw@>{ZY\k߫n&'{tXtm ܆֣d&{׏ (GmctK;ttOq"C$b O[?ѵ4vp0s\c;0Nc}Q*@֛ ;u9RKy:$H C2p>;3|z\MSL凉 &4nЇƸ.;UyfZ>nz6{FlܕͣNN#)w͂HXN!O`.mlrNO) e^~ɳ PP0REB[ϥe=y]UVYr}?ز>$]: {Y);}j۽`3y+e*'TjUW]\p9|0t1J?דtOS<-Mz9$g'!iǁWZZ}UtrZcFbșu {ep)sv$XiZ=lh7l]t[.sEu!#x]㊻ɜЏ,9O2eJ6oi匟rr;_.K(ݪH-,6ys9t%QjQS`[c_v'g]wOMwDBreW̹QӮ͎),#|7cEwm~gAxt '|Qv^Tg^g`ebg`+݇ñWJ+qTԽr{d #8At>u^1oNWZΟgu1 Z_?9>ЩkRmBi^rvƦWތ:eʔ)?Y`q6 -R W =F:W#\}Ɵ=i2 441w= )S๲ bשfgmp_?/8?' Em%6rxJy=<|ctDۥ.z`ߵѷM9*:褝;p#jj$Y|nWw$ .7$pY"%;?<,gVrxGx/?[Q]tKvpBv,O };ӡI=Zr:^]Nu e`?;xY{cf}ʔ)SdǬ>nsQ),/Ja)/b]BPw46U>"g'x{ A¤LmuɅu*AxW=ifI\;EtC3눘+ ܞՔV1^m V1{ [z1:pntO9D1K麦n P(Q@`|i~j"ᦥJSL?ODRl'iY^& yYUL_[g֒ rvdN~]yk8p1:`O4+W O=:y)sw>CiX0{5%Jκ?TӆYY?#-k+m(I%xDBƁ$0i1Ms!w|gQ&sodΐ#! tӈDcDٰܛNTvk3>nu>_`tߐȬxº W]!~v)c!Gu١vο$,s؁kԨZϪ=#_eLuMUܡwX}(PNv%k{b6?h- rw]u:҉:+|uʔ)SfSc*^_gc)RZj}_IǶw}G;}wwy+3&]TܫNoUw{e+q靻M)e1D}^Bn~'2Mp0ץǺW!4>"f9#w>@'~~}NnJC +QtQt{h3CAv=G)֗ ^::O(k7OɐLj;=앦NPĮL < gߚ$¬:x_12Oyk^F:RLW7/*'q;uYWeܭ]Yʌ2Z+DCfʔ)Sܟۂv0HbUi`!jX7ڠ=kf˲@zVoIp_{\i#Y%/ ʧ~_Ip/` BS/gZyFJU.X:BJ{jj5)`u _pr֙_8zϳVctoϬGʝ}X޻7,XC7T Lkq%(10 񥦆xVn.ULMa h6 >uMmivН{dlEثˬz:ܡtPѐǺG^W k :߸XN;>;`ڷsez/쐙2eʔ):5wб؝#hB2[dbsuoT$al8`o1vﭲhs-T^UNVͼ@٭JpWSvEn͓K3J Exzo +ց5j=9>)_q{qinIwɉ _! AY0L^(U<IJ9tQ>GFT{uO|I5<ȡW _ܮ$u}>UxA}W]Rм/g` 1)A@S)͹{8Wi'" X%v4 CgI;Ix?밌Ztb;ELy)OGKW%mCA>ЎW!'KIW9FALg_"לvbp\S,ꫦ,R:բ>v';rS;ڀ΄\2O SqڛD@q6L2eʔMf}{b׽f3W8e[5/fّ{/}J;+-8Tc|LA>uT+Ҽt*y6/~K3ؽ{ⵉVTH{Tw%9 Yjɺ_ڶ ɡژ޹9OXM~V@i/gιW(N gȣb {r"N ~ų5IxϷ%;YlHlh+u^qϧˡk1SL2%v;T,w4ligQ~Gٿl2]9Sc? JW{o^1pQw7PowNd|$U$;i;to˗0}:ɪҾiho+*F-KGz(˜d~狇υ"1UwUߵ B,4x^9ZS}.>mS/OqEк:^;'UXHfQ@\&N: n2&bt-e[;bITsewM1Pz/qI$7g)f;cxvLس;F31 EWe(o 3UՊwv}ɒ%K)9|0ߝ鐍,"gs υmXgLX(_Imҏ%u+U)L8Ѡ=owC9Kߪay\W 0E]VQoOt-=囊uc9~gwi'seLtDy/637۲EQgS.-t߄Ar+ CU$u\jRV=|¶NBە%B~+]@-Y51cs"-s;M1zkC JS)bo((VD}p v,/㑳q˲/Ydɒo9txL39 r]}o<6*ciΞ6A5/9|W-,Qz{L%S>FEx97& eޥ^kUx1>}NWܷ#R5y=L翜5Fud eڢD$HKnWBr.n0^XO-!"|Fxrxx׬W7*{LU,BTݴQ/\6$z%MM:qh]n\Y/<H^ 2pݒLuegpnRWie7" uAs6.kKs.EN_Ҋ$Y  F~(nSgP.3L-vfۓ%x3!67d #kSw7o&xmʮy'*b0_av$PiZmY+z6/Ur^#9W:s:ZX+-ؗ,YdɗKvYE.# ;ʗDŽw>uBbѰ8폯0ͶLfHa4Y8Y bp(o?Ş\mA xIk+6gZ1o*b+o;6@9^k}OH v ?e1=$wi=m.uM`wVxʢ\.g8tL؍ފ ~l_<"a;~Q(wO=ER+wd9JXTu P\*+!ePr48v&ڷdz.^yz К+d`[Q*'I_z{ ':Uf_dɒ%_&v}> O,z~y0J.UWDoШ[]Sho3S nZq!s (Lޠ3 @Vp6;6%liVhڸ7uyRd]~/.Kܑ$m/gwY1'ӡ.rt|쓿@=%Ӻ^i\woy#2렕z]7ȥe@Q 4a{t^ڗ,Yd!; Nt\7{;}xɈ:m-&_rڌy@ĖD/̉ȫXp8O<ug6ejs[|VqnËv4TݝʤT>3KXݮi8 c|x;2b(HED"o߿C(~uq46,3ry=/(wh\)'m˗{ҩ+p\zl6H'D.cX}Ӯ5p!wN][icpxRCf7AuȘ%K,YW0ш3R%+D|zW+灟r? ^P-M|'mg'Yj[I&/9% I-1룖X{;~t(HC|Ys3y+M c/V["vtcQ'CRZ<2A{`Htys7L"@G--lg^(_=sͣohbw])z/f:Nuf.ʞ^#%v{Bg4.;TB'3ZخYdɒ%K2tb ϴ׉'Fmí<)2(_rNGq>&OPM !ӾDR!.a rvT]oU'^1T05ױ>Ծd|ENsOẪB =GE$ל%K,Ɉ~0:<:Ujx,J Kqx'LydLيƨsE);־w[{H.TY?ޮMђ*|VCwB{K73v; tJuc~?,POF[DfQzvfRd?~*i{b'[*3mxQ<$?Wk>nzI䧺LM`Uݽ.~+ڋQ:>_1$?ikG(S+e3}szp9"zud !p8P\ :xZ;OJ0uKx{~&6y{=G/Ydɒ)rnwyur%73B&>8eF2x),G:F,r.6 䮍Sy۱> J:NDx G슼ju͐FB>峬AxH)5]a#LO#nCgSQ<9ם̓SO<~].1O;-W<Ѩn:] %j_Cڜ.ۍM!yv0wlc=b+ïly#%5gDJtwdvaWJ>p*`9I@I=KԾdɒ%Km8}ۄĠw`|;| |}øh;Z(CpưE^9iՌJgJQRpW "OS+G|%WuQ@z#Ryv]4jD3_<_4{-R!;wq?+.PΥ <7񮟿n r7QTk_:u޵ga.EfAe{QLk&׍x+C]y$<֓IwX[cc,YdɿHFHݥ cOzŝw9<E )ON1l Tݚq!Ǘ\;7<㧵xQRB Z<(we5,Ydɒl`sfl#p2Ğ`M50d\G$;Z]GNκQہO[( 4ӼJ:<D0y ev?$f0x23AJ]k|*ḙ\c%3GM=#6tb|I?9}av%RzQF,C;ykIqRI?$ڡLkrGTF2`vt[k_:m/}n'SP]y2Cqt'@f(wn%K,Y:eۓ|𼭯+_;NrӋ`5;6ϫP8l),FoDÝi2vh+V$I4ͧ˾u^ *8U`n)v?fr:x[a 2,)zEk[]B׍Y[Yժ*gPA\Jى G_?K{l>6})x l}WB{q9&u<'25Tc|Bٗ,Ydɿ]CRmMۘ?nRq:}5\0p=l[M ^O2u_`PHg Ugg_o}I҂ϥh1)PJ&+}>gypL憎 ˊ8B5;]yOonvXs S1q,ڼn@urX#ԩn7F/booԒJV=^h=6y< x4UDw`cp &IV)^1`;.9Ik O$d/yW jr&I^펥lfcϝ*,FVnO$rK&HE2QPr|j,A Q۴#w2%W]zV)vGr>&jiN0S5 ? gs6jN&4K0#Ny?O+;-59 ? ]j E~</5r<Ipݘsj6LzS*,kCd_doY ߷O_ Zk~IAf߲e˖-YAH M&ټ@̊-iPA_Y.ΒY]8TKblFAJ*n׍*y|i̫ qڣ#Oaz4'Ǡ~bi8z|7»?ܜ~O.י|{?4 G^w>_yѮ2ᝑwQ_g_D] _I9VC&yb"%'|֥c5KˬwP.fʾJ7;.^Х*$CS s}Y8D-KA-[l?<{aSބTxfez!zLR`ߎQ#h'zI }R6yqggTfC3Kgϕ9qwBun` dӺ˫>MלHX' ލču界1sL5]Qli4cmr cy!vׯcY>{=j|uP0 cU㔿cw/<'Űxi-bZПlPT6oٲe˖9~=;;>C#$At )TClh'S?xS 1쿴5svJ˦O&mSJsiG:[rwml8 tQ2zn،7@O&_h?pq8|;wypa/dUs`0W3Zm/J_؁bkN昊^,%=?NQzѾĽuEg)P>͢lP߲e˖-[^2eGnT|VڱnҽٶqzlV4_ڧ\ZWQ>1G9f=z)b0 :H=r]3$}s-~ٓet`[> kq؊ r1, ԍܠ9=aqASgsT޵P(, !*)BA}`F ',:}SOmx(̛H-S;w\PL]t޶!;NѾvw-[lٲ7\V99y,ӡuH{w=+5{*OY Jg ۨYIVY<qCPOV,v -F" O!Ƿc>NWw 0[hnTX? ƤNaFg$A:L/M֯)})-0bvI~Z]+w.W 3?E|6DIGɖ_}ĭye˖-[|_̏hFx^^>_/JIyC [TQ#۶[dp[uVokʟ_MY|)jj gxy*T IݏB;1A4ɩpG2gu_-%ZaxR.E9)qyE@e~urq>!0uW;w@p %3ЌZ{tκW*xS7Sx=Ilmٷlٲe˖Zη?YMkŭEff!LA)aƦsN2h!c&JcM<,V6nGx#>4 }ifQOuWq >+"{:T+R{{UF~)f^ 'lh<-9GX\+i2]7c=,d^doڭ }DbB2yWQe˖-[͒_/C{gӭ"ٛτKgp)xˠ 7ͺmx\R&)-#QMa}vpkzM]͚Wp\2dz-W#1qgNtFU|wخϜ$]"fuIG(ܧAꙟ/~,kgC2eܼe˖;$aNO9G=¼ߠ΍"ˊ`j[@&Z>,"xݛe>|B4.o ::ռn;u93\}<ڃv 96P'0Y%ݞ_;Hχ,5@jUkܾxs.'m]&W,m}8N0Rv%Zq7n\;cx۹|4ZA7xp=+'F[7= DkJm-<.Pi,6]SEP: W?W+:QIbb],@gFW京XfKg5hz; 3jZmi.X1DMeMynlQyeH['^BMŵdpopL̔߆ ?kݠk"wZ ?IPڌc@]v.I7xjawwK d> xfvCn1\v>ۅY͛uUl": N&ɤEhziVjZ\?q;sLa%{YU誝Ԧ4[SNz a  r/杕3>/[ZD58qzx!{$s[f )K| wZΐo*X^'1wVS_w7^||eg^"u! `\/ {a}mO'V~ *WvWm<}.ɈioEcӃǪne1VjZww/Ҫӭ1)+E3aBO-z4eNbr]E# bgD>P'Oݻ@#Ew@{_q^wHn0k[Q/^RNoKluoQ q~ݹz+cB،K6-EӰjZVk4.I) lܱl3ɭLb9 ۯW=oDcMHE ;Kp/"vrEs۹L.tÍtR}/;G/0@ǏMN *[kg{ꄸƗ>[PMvI+)V(5Mu>'q|uWjZ?y[T z3닰œ/-TNB)(2ۖm?5RP (Ō9Ado?8<ܸt( jוnĶ ^ ]?;l>o3%ؕ鷈jl, %v7R-@e\nqQKXGx^6 Xc%&|Mr8ǡG^E$CWj9乭\g}&QlTǭN&a+30nZV2y:Cd^@Õ3).0?*.LtxZz&F$$w.b(ǯȨbq?B?v (kԶiw߃"[Q1j(榭VjZblY sUejs~\qV]rv'=qwu0~_˫z. [ ͥVj_ De}8>w'OW׮ZVjS˸+QQty%'؞0"x<2$G#M y:xxKaC8?Qe_{\<^W'~&w6G4zVjZP3фYx"Iw$[a5S{NU: < $!m$X }Mಃݼ::At]ӹr\7b"ӷ^tjZVQ;/EIwGg9[6 c~S>hz{'.39ݤ}93YgSdEˣ Gk_RO[jZVh}.aֆ+J<^3 ^K3Ί9:(v^2e`'O_gfTt.lY!:nmYp(HVjZsx^ ZIѕ/VjZ{no[TucXoۼE N닙N$pIqIk9kw<]I2grӉA_/mZVj!/i~դ2F ɗw)UDxslfwOKN%Zno:!?f}JRkKΑǬwh٬jZV{ˍ0<A&H'Ŗ>1 y;;׽qW]\+oԭ{ݙ+GF:k gMV3 j~OQ&~qtxEsߊҍGwt{LP8.̋3d{Ju^$/2?>!>vuw!Nj6@;cwrҍW{>-V}gzwpEӨ.{?~z~l5ψuzZ '`+gAרٝW_Y4:]({i"_-h/w4_z~n3Nl{L -w1ۧ3W{M_oGQFr-#ZsXVm˽{Oyr[ : |,#sx ˖VmY^G/瑈u2WC ?y{=r\8>:/QEy/3lׅvzN$sgNo,DYkr 9gg{#]Q)Jw.-9u>)C5ݼ|R_-{q}${uAV< u)>϶[w+[Y ˥@ߏ"X>VE 2h]t;wF *˕ uTG]6]#؃ FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8mUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUa_AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU؃ FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=8$]rzMIENDB`PK'Z&)llview/assets/img/logo-20x20.pngnuW+APNG  IHDR bKGD pHYs B(xtIME&IDAT8OMhTgݹ3/Ɍkt!5,hJ"c$ :a`ŅBR2ɨI&Fv"b1ATTB6&f8kP7}7{-C*g zA (qL2k,zIrfEJ~HgԸABUߏQiUtѓ;5Aq!z~aȉRD%67ȿ3 鲭[: P4&=>@A.nw|%ǁC xF O`T xWCP̲ug- 'l#߂ r [_߇3eVV3ue3v.g @qqqDU2" >`YV.E:DFPf2---)P;x( >ED7"SW`$l?\PunݢUr_y1ڵ~ Ap)b$Xj "n*~VA@A PK'Z/view/assets/img/logo-32x32.pngnuW+APNG  IHDR szzbKGD pHYs B(xtIME nIDATXG[leg]jAZ 4Q/&}5F]Ӣ-]kpQmw[&^b1^5(^ VrihawV;s| U_ȇZ{z>ϜlWd.iZZm0mmM̮ڣXl4O2DFA^NյݞqL٣~@Eæm%FS5~6 ӧL^(r8)$p/fƍgr9m2&JKN\*[A?o)!-3at" CgK3pҁ?6ռhES)3H.6g9v r؅=tyӑ"L@2oMFU lYHJ?c3CDMN^}gݪ1s\`-(S>޶ 'eY6fv0Foyp+`tuXH%_!{G6v6W=3wt7dC5Vtª9Tc \^W  |Rb_1AV'8r#+gX˂[&.p(X$4[U{f~`2DA5{@Ǟ5kzpnTFUJ=Pf$w]w&|FÙne=?9 4E4# L_;R#[h:J]H#٠CeE}AO(RrG`#x@UCVUK*z[{5 (eUY=Bo&OI㚜QZUdUreӮZw ',m+CDEH`SzbSF4,K8aĉ \vL/uäAvfuч=8a j~s a[Dyhu)U RWxLz'Esmj<>z [,lK\4x{z ȣeL.Ut'ws0 bk3+M5Hu^W6dU&Bp؈wۀܯza0ҶDy'ֻP(ǧ%Ep#ڋCw|\5eBCWAsE Fe. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ jQuery(document).ready(function ($) { 'use strict'; // Idea $('#ai1wm-feedback-type-link-1').on('click', function () { var radio = $('#ai1wm-feedback-type-1'); if (radio.is(':checked')) { radio.attr('checked', false); } else { radio.attr('checked', true); } }); // Help $('#ai1wm-feedback-type-2').on('click', function () { // Hide other options $('#ai1wm-feedback-type-1').closest('li').hide(); // Change placeholder message $('.ai1wm-feedback-form').find('.ai1wm-feedback-message').attr('placeholder', ai1wm_locale.how_may_we_help_you); // Show feedback form $('.ai1wm-feedback-form').fadeIn(); }); // Cancel feedback form $('#ai1wm-feedback-cancel').on('click', function (e) { $('.ai1wm-feedback-form').fadeOut(function () { $('.ai1wm-feedback-type').attr('checked', false).closest('li').show(); }); e.preventDefault(); }); // Send feedback form $('#ai1wm-feedback-submit').on('click', function (e) { var self = $(this); var spinner = self.next(); var type = $('.ai1wm-feedback-type:checked').val(); var email = $('.ai1wm-feedback-email').val(); var message = $('.ai1wm-feedback-message').val(); var terms = $('.ai1wm-feedback-terms').is(':checked'); self.attr('disabled', true); spinner.css('visibility', 'visible'); $.ajax({ url: ai1wm_feedback.ajax.url, type: 'POST', dataType: 'json', async: true, data: { secret_key: ai1wm_feedback.secret_key, ai1wm_type: type, ai1wm_email: email, ai1wm_message: message, ai1wm_terms: +terms }, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (data) { self.attr('disabled', false); spinner.css('visibility', 'hidden'); if (data.errors.length > 0) { $('.ai1wm-feedback .ai1wm-message').remove(); var errorMessage = $('

').addClass('ai1wm-message ai1wm-error-message'); $.each(data.errors, function (key, value) { errorMessage.append($('

').text(value)); }); $('.ai1wm-feedback').prepend(errorMessage); } else { var successMessage = $('

').addClass('ai1wm-message ai1wm-success-message'); successMessage.append($('

').text(ai1wm_locale.thanks_for_submitting_your_feedback)); $('.ai1wm-feedback').html(successMessage); } }); e.preventDefault(); }); }); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/global */ /******/ !function() { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. !function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Feedback = __webpack_require__(332); jQuery(document).ready(function () { 'use strict'; }); __webpack_require__.g.Ai1wm = jQuery.extend({}, __webpack_require__.g.Ai1wm, { Feedback: Feedback }); }(); /******/ })() ;PK'Z?ff$view/assets/javascript/import.min.jsnuW+A/******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 936: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Modal = __webpack_require__(544), $ = jQuery; var Import = function Import() { var self = this; // Set params this.params = []; // Set modal this.modal = new Modal(); // Set confirm listener this.modal.onConfirm = function (options) { self.onConfirm(options); }; // Set blogs listener this.modal.onBlogs = function (options) { self.onBlogs(options); }; // Set stop listener this.modal.onStop = function (options) { self.onStop(options); }; // Set disk space listener this.modal.onDiskSpaceConfirm = function (options) { self.onDiskSpaceConfirm(options); }; // Set decrypt password listener this.modal.onDecryptPassword = function (password, options) { self.onDecryptPassword(password, options); }; }; Import.prototype.setParams = function (params) { this.params = Ai1wm.Util.list(params); }; Import.prototype.start = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopImport(false); } // Stop running import if (this.isImportStopped()) { return; } // Initializing beforeunload event $(window).bind('beforeunload', function () { return ai1wm_locale.stop_importing_your_website; }); // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.preparing_to_import }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Import $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_start_the_import }); return; } retries++; setTimeout(self.start.bind(self, options, retries), timeout); }); }; Import.prototype.run = function (params, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } // Import $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} retries++; setTimeout(self.run.bind(self, params, retries), timeout); }); }; Import.prototype.decryptPassword = function (options, password, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } this.params = this.params.concat({ name: 'decryption_password', value: password }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 90 }); $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_check_decryption_password }); return; } retries++; setTimeout(self.decryptPassword.bind(self, options, password, retries), timeout); }); }; Import.prototype.confirm = function (options, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 150 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Confirm $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_confirm_the_import }); return; } retries++; setTimeout(self.confirm.bind(self, options, retries), timeout); }); }; Import.prototype.checkDiskSpace = function (fileSize, callback) { this.diskSpaceCallback = callback; var diskSpaceFree = parseInt(ai1wm_disk_space.free, 10); var diskSpaceFactor = parseInt(ai1wm_disk_space.factor, 10); var diskSpaceExtra = parseInt(ai1wm_disk_space.extra, 10); if (diskSpaceFree >= 0) { var diskSpaceRequired = fileSize * diskSpaceFactor + diskSpaceExtra; if (diskSpaceRequired > diskSpaceFree) { this.setStatus({ type: 'disk_space_confirm', message: ai1wm_locale.out_of_disk_space.replace('%s', Ai1wm.Util.sizeFormat(diskSpaceRequired - diskSpaceFree)) }); return; } } callback(); }; Import.prototype.blogs = function (options, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 150 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Blogs $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_prepare_blogs_on_import }); return; } retries++; setTimeout(self.blogs.bind(self, options, retries), timeout); }); }; Import.prototype.clean = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopImport(true); } // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_import }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 400 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Clean $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { // Unbinding the beforeunload event when we stop importing $(window).unbind('beforeunload'); // Destroy modal self.modal.destroy(); }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_stop_the_import }); return; } retries++; setTimeout(self.clean.bind(self, options, retries), timeout); }); }; Import.prototype.getStatus = function () { var self = this; // Stop getting status if (this.isImportStopped()) { return; } this.statusXhr = $.ajax({ url: ai1wm_import.status.url, type: 'GET', dataType: 'json', cache: false, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (params) { if (params) { self.setStatus(params); // Next status switch (params.type) { case 'done': case 'error': // Unbinding the beforeunload event when any case is performed $(window).unbind('beforeunload'); return; case 'confirm': case 'disk_space_confirm': case 'blogs': case 'backup_is_encrypted': return; } } // Import is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }).fail(function () { // Import is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }); }; Import.prototype.setStatus = function (params) { this.modal.render(params); }; Import.prototype.onConfirm = function (options) { this.confirm(options); }; Import.prototype.onDecryptPassword = function (password, options) { this.decryptPassword(options, password); }; Import.prototype.onBlogs = function (options) { this.blogs(options); }; Import.prototype.onStop = function (options) { this.clean(options); }; Import.prototype.onDiskSpaceConfirm = function (options) { this.diskSpaceCallback(options); }; Import.prototype.stopImport = function (isStopped) { try { if (isStopped && this.statusXhr) { this.statusXhr.abort(); } } finally { this.isStopped = isStopped; } }; Import.prototype.isImportStopped = function () { return this.isStopped; }; module.exports = Import; /***/ }), /***/ 544: /***/ (function(module) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var $ = jQuery; var Modal = function Modal() { var self = this; // Error Modal this.error = function (params) { // Create the modal container var container = $('

'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-red').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Progress Modal this.progress = function (params) { // Update progress bar meter if (this.progress.progressBarMeter) { this.progress.progressBarMeter.width(params.percent + '%'); } // Update progress bar percent if (this.progress.progressBarPercent) { this.progress.progressBarPercent.text(params.percent + '%'); return; } // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold progress bar var header = $('

'); // Create action section var action = $('
'); // Create progress bar var progressBar = $(''); // Create progress bar meter this.progress.progressBarMeter = $('').width(params.percent + '%'); // Create progress bar percent this.progress.progressBarPercent = $('').text(params.percent + '%'); // Create stop import var stopButton = $('').on('click', function () { stopButton.attr('disabled', 'disabled'); self.onStop(); }); // Append text to stop button stopButton.append(' ' + ai1wm_locale.stop_import); // Append progress meter and progress percent progressBar.append(this.progress.progressBarMeter).append(this.progress.progressBarPercent); // Append stop button to action action.append(stopButton); // Append progress bar to section header.append(progressBar); // Append header to section section.append(header); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Pro Modal this.pro = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold warning var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create warning var warning = $(''); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append warning to section header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Confirm Modal this.confirm = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold warning var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create warning var warning = $(''); // Create close button var closeButton = $('').on('click', function () { closeButton.attr('disabled', 'disabled'); self.onStop(); }); // Create confirm button var confirmButton = $('').on('click', function () { confirmButton.attr('disabled', 'disabled'); self.onConfirm(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append text to confirm button confirmButton.append(ai1wm_locale.confirm_import + ' >'); // Append close button to action action.append(closeButton); // Append confirm button to action action.append(confirmButton); // Append warning to section header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Disk space Confirm Modal this.diskSpaceConfirm = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold warning var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create warning var warning = $(''); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Create confirm button var confirmButton = $('').on('click', function () { $(this).attr('disabled', 'disabled'); self.onDiskSpaceConfirm(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append text to confirm button confirmButton.append(ai1wm_locale.confirm_disk_space); // Append close button to action action.append(closeButton); // Append confirm button to action action.append(confirmButton); // Append warning to section header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Blogs Modal this.blogs = function (params) { // Create the modal container var container = $('
').on('submit', function (e) { e.preventDefault(); continueButton.attr('disabled', 'disabled'); self.onBlogs(container.serializeArray()); }); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-grey').text(params.title); // Create continue button var continueButton = $(''); // Append text to continue button continueButton.append(ai1wm_locale.continue_import); // Append continue button to action action.append(continueButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Info Modal this.info = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold loader var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create loader var loader = $(''); // Create warning var warning = $('

').html(ai1wm_locale.please_do_not_close_this_browser); // Create notice to be displayed during import process var notice = $('
'); // Append warning to notice notice.append(warning); // Append stop button to action action.append(notice); // Append loader to header header.append(loader); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Done Modal this.done = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-green').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.finish_import + ' >'); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; this.backup_is_encrypted = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

').html(ai1wm_locale.backup_encrypted); var message = $('

').html(ai1wm_locale.backup_encrypted_message); var confirmButton = $('').on('click', function () { var password = $('#ai1wm-backup-decrypt-password'); var passwordConfirmation = $('#ai1wm-backup-decrypt-password-confirmation'); if (password.val().length && password.val() === passwordConfirmation.val()) { confirmButton.attr('disabled', 'disabled'); self.onDecryptPassword(password.val()); } else { passwordConfirmation.parent().addClass('ai1wm-has-error'); password.parent().addClass('ai1wm-has-error'); } }); var closeButton = $('').on('click', function () { closeButton.attr('disabled', 'disabled'); self.onStop(); }); var form = $('
'); var passwordContainer = $('
'); var passwordInput = $('').prop('placeholder', ai1wm_locale.enter_password).on('keyup', function () { var password = $(this); var passwordConfirmation = $('#ai1wm-backup-decrypt-password-confirmation'); if (password.val() !== passwordConfirmation.val()) { passwordConfirmation.parent().addClass('ai1wm-has-error'); password.parent().addClass('ai1wm-has-error'); } else { password.parent().removeClass('ai1wm-has-error'); passwordConfirmation.parent().removeClass('ai1wm-has-error'); } }); var passwordView = $('
').on('click', function () { $(this).toggleClass('ai1wm-icon-eye ai1wm-icon-eye-blocked'); $(this).prev().prop('type', function (index, oldPropertyValue) { return oldPropertyValue === 'text' ? 'password' : 'text'; }); return false; }); passwordContainer.append(passwordInput).append(passwordView); if (params.error) { passwordContainer.addClass('ai1wm-has-error'); var passwordError = $('
').html(params.error); passwordContainer.append(passwordError); } var passwordConfirmationContainer = $('
'); var passwordConfirmationInput = $('').prop('placeholder', ai1wm_locale.repeat_password).on('keyup', function () { var passwordConfirmation = $(this); var password = $('#ai1wm-backup-decrypt-password'); if (passwordInput.val() !== passwordConfirmation.val()) { password.parent().addClass('ai1wm-has-error'); passwordConfirmation.parent().addClass('ai1wm-has-error'); } else { password.parent().removeClass('ai1wm-has-error'); passwordConfirmation.parent().removeClass('ai1wm-has-error'); } }); var passwordConfirmationView = $('').on('click', function () { $(this).toggleClass('ai1wm-icon-eye ai1wm-icon-eye-blocked'); $(this).prev().prop('type', function (index, oldPropertyValue) { return oldPropertyValue === 'text' ? 'password' : 'text'; }); return false; }); var passwordConfirmationError = $('
').html(ai1wm_locale.passwords_do_not_match); passwordConfirmationContainer.append(passwordConfirmationInput).append(passwordConfirmationView).append(passwordConfirmationError); confirmButton.append(ai1wm_locale.submit); closeButton.append(ai1wm_locale.close_import); var buttonContainer = $('
'); buttonContainer.append(closeButton).append(confirmButton); form.append(passwordContainer).append(passwordConfirmationContainer); // Append header and message to section section.append(header).append(message).append(form).append(buttonContainer); // Append section and action to container container.append(section); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Server cannot decrypt Modal this.server_cannot_decrypt = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create warning var warning = $(''); // Create action section var action = $('
'); // Create close button var closeButton = $('').on('click', function () { closeButton.attr('disabled', 'disabled'); self.onStop(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append warning to header header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Create the overlay this.overlay = $('
'); // Create the modal container this.modal = $(''); $('body').append(this.overlay) // Append overlay to body .append(this.modal); // Append modal to body }; Modal.prototype.render = function (params) { $(document).trigger('ai1wm-import-status', params); // Show modal switch (params.type) { case 'pro': this.pro(params); break; case 'error': this.error(params); break; case 'confirm': this.confirm(params); break; case 'disk_space_confirm': this.diskSpaceConfirm(params); break; case 'blogs': this.blogs(params); break; case 'progress': this.progress(params); break; case 'info': this.info(params); break; case 'done': this.done(params); break; case 'backup_is_encrypted': this.backup_is_encrypted(params); break; case 'server_cannot_decrypt': this.server_cannot_decrypt(params); break; } }; Modal.prototype.destroy = function () { this.modal.hide(); this.overlay.hide(); // Reset progress bar this.progress.progressBarMeter = null; this.progress.progressBarPercent = null; }; module.exports = Modal; /***/ }), /***/ 814: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Import = __webpack_require__(936), $ = jQuery; var FileUploader = function FileUploader() {}; FileUploader.prototype.setDefaultValues = function () { this.model = new Import(); this.stopUpload = false; }; FileUploader.prototype.init = function () { var _this = this; var formElement = $('#ai1wm-import-form'); var selectElement = $('#ai1wm-import-file'); var dropElement = $('#ai1wm-drag-drop-area'); selectElement.on('change', function (e) { _this.setDefaultValues(); var file = e.target.files.item(0); if (file) { _this.fileSize = file.size; if (_this.fileSize > ai1wm_uploader.max_file_size) { _this.model.setStatus({ type: 'pro', message: ai1wm_locale.import_from_file }); } else { _this.model.checkDiskSpace(_this.fileSize, function () { try { _this.onFilesAdded(file); _this.onBeforeUpload(file); _this.upload(file); } catch (error) { _this.onError(error); } }); } } formElement.trigger('reset'); e.preventDefault(); }); dropElement.on('dragenter', function (e) { dropElement.addClass('ai1wm-drag-over'); e.preventDefault(); }); dropElement.on('dragover', function (e) { dropElement.addClass('ai1wm-drag-over'); e.preventDefault(); }); dropElement.on('dragleave', function (e) { dropElement.removeClass('ai1wm-drag-over'); e.preventDefault(); }); dropElement.on('drop', function (e) { _this.setDefaultValues(); dropElement.removeClass('ai1wm-drag-over'); var file = e.originalEvent.dataTransfer.files.item(0); if (file) { _this.fileSize = file.size; if (_this.fileSize > ai1wm_uploader.max_file_size) { _this.model.setStatus({ type: 'pro', message: ai1wm_locale.import_from_file }); } else { _this.model.checkDiskSpace(_this.fileSize, function () { try { _this.onFilesAdded(file); _this.onBeforeUpload(file); _this.upload(file); } catch (error) { _this.onError(error); } }); } } formElement.trigger('reset'); e.preventDefault(); }); }; // Check extension FileUploader.prototype.c1 = function (file) { if (file.name.substr(-6) !== 'wpress') { throw new Error(ai1wm_locale.invalid_archive_extension); } }; // Check compatibility FileUploader.prototype.c3 = function () { if (ai1wm_compatibility.messages.length > 0) { throw new Error(ai1wm_compatibility.messages.join()); } }; FileUploader.prototype.onFilesAdded = function (file) { this.c1(file); this.c3(file); // Initializing beforeunload event $(window).bind('beforeunload', function () { return ai1wm_locale.stop_importing_your_website; }); }; FileUploader.prototype.onBeforeUpload = function (file) { var self = this; var storage = Ai1wm.Util.random(12); var options = Ai1wm.Util.form('#ai1wm-import-form').concat({ name: 'storage', value: storage }).concat({ name: 'archive', value: file.name }).concat({ name: 'file', value: 1 }); // Set global params this.model.setParams(options); // Set multipart params $.extend(ai1wm_uploader.params, { storage: storage, archive: file.name }); // Set stop this.model.onStop = function () { self.stopUpload = true; // Clean storage self.model.clean(); }; // Set status this.model.setStatus({ type: 'progress', percent: '0.00' }); }; FileUploader.prototype.upload = function (file) { var self = this; var formData = new FormData(); formData.append('upload-file', file); for (var name in ai1wm_uploader.params) { formData.append(name, ai1wm_uploader.params[name]); } $.ajax({ url: ai1wm_uploader.url, type: 'POST', data: formData, cache: false, contentType: false, processData: false, xhr: function xhr() { var handle = $.ajaxSettings.xhr(); if (handle.upload) { handle.upload.addEventListener('progress', function (event) { var percent = event.loaded / event.total * 100; self.model.setStatus({ type: 'progress', percent: percent.toFixed(2) }); }); } return handle; }, success: function success() { if (self.stopUpload) { return; } self.onFileUploaded(); }, error: function error(jqXHR, textStatus) { throw new Error(textStatus); } }); }; FileUploader.prototype.onUploadProgress = function (percent) { this.model.setStatus({ type: 'progress', percent: percent }); }; FileUploader.prototype.onFileUploaded = function () { this.model.start(); }; FileUploader.prototype.onError = function (error) { this.model.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); }; module.exports = FileUploader; /***/ }), /***/ 332: /***/ (function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ jQuery(document).ready(function ($) { 'use strict'; // Idea $('#ai1wm-feedback-type-link-1').on('click', function () { var radio = $('#ai1wm-feedback-type-1'); if (radio.is(':checked')) { radio.attr('checked', false); } else { radio.attr('checked', true); } }); // Help $('#ai1wm-feedback-type-2').on('click', function () { // Hide other options $('#ai1wm-feedback-type-1').closest('li').hide(); // Change placeholder message $('.ai1wm-feedback-form').find('.ai1wm-feedback-message').attr('placeholder', ai1wm_locale.how_may_we_help_you); // Show feedback form $('.ai1wm-feedback-form').fadeIn(); }); // Cancel feedback form $('#ai1wm-feedback-cancel').on('click', function (e) { $('.ai1wm-feedback-form').fadeOut(function () { $('.ai1wm-feedback-type').attr('checked', false).closest('li').show(); }); e.preventDefault(); }); // Send feedback form $('#ai1wm-feedback-submit').on('click', function (e) { var self = $(this); var spinner = self.next(); var type = $('.ai1wm-feedback-type:checked').val(); var email = $('.ai1wm-feedback-email').val(); var message = $('.ai1wm-feedback-message').val(); var terms = $('.ai1wm-feedback-terms').is(':checked'); self.attr('disabled', true); spinner.css('visibility', 'visible'); $.ajax({ url: ai1wm_feedback.ajax.url, type: 'POST', dataType: 'json', async: true, data: { secret_key: ai1wm_feedback.secret_key, ai1wm_type: type, ai1wm_email: email, ai1wm_message: message, ai1wm_terms: +terms }, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (data) { self.attr('disabled', false); spinner.css('visibility', 'hidden'); if (data.errors.length > 0) { $('.ai1wm-feedback .ai1wm-message').remove(); var errorMessage = $('
').addClass('ai1wm-message ai1wm-error-message'); $.each(data.errors, function (key, value) { errorMessage.append($('

').text(value)); }); $('.ai1wm-feedback').prepend(errorMessage); } else { var successMessage = $('

').addClass('ai1wm-message ai1wm-success-message'); successMessage.append($('

').text(ai1wm_locale.thanks_for_submitting_your_feedback)); $('.ai1wm-feedback').html(successMessage); } }); e.preventDefault(); }); }); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/global */ /******/ !function() { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. !function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var FileUploader = __webpack_require__(814), Feedback = __webpack_require__(332), Import = __webpack_require__(936); jQuery(document).ready(function ($) { 'use strict'; var uploader; if (Ai1wm.MultisiteExtensionUploader) { uploader = new Ai1wm.MultisiteExtensionUploader(); } else if (Ai1wm.UnlimitedExtensionUploader) { uploader = new Ai1wm.UnlimitedExtensionUploader(); } else if (Ai1wm.FileExtensionUploader) { uploader = new Ai1wm.FileExtensionUploader(); } else { uploader = new Ai1wm.FileUploader(); } uploader.init(); // Expands/Collapses Import from $('.ai1wm-expandable > div.ai1wm-button-main').on('click', function () { $(this).parent().toggleClass('ai1wm-open'); }); }); __webpack_require__.g.Ai1wm = jQuery.extend({}, __webpack_require__.g.Ai1wm, { FileUploader: FileUploader, Feedback: Feedback, Import: Import }); }(); /******/ })() ;PK'ZlL L %view/assets/javascript/backups.min.jsnuW+A/******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 874: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Import = __webpack_require__(936); var Restore = function Restore() { var model = new Import(); model.setStatus({ type: 'pro', message: ai1wm_locale.restore_from_file }); }; module.exports = Restore; /***/ }), /***/ 12: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Modal = __webpack_require__(326), $ = jQuery; var Export = function Export() { var self = this; // Set params this.params = []; // Set modal this.modal = new Modal(); // Set stop listener this.modal.onStop = function (options) { self.onStop(options); }; }; Export.prototype.setParams = function (params) { this.params = Ai1wm.Util.list(params); }; Export.prototype.start = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopExport(false); } // Stop running export if (this.isExportStopped()) { return; } // Initializing beforeunload event $(window).bind('beforeunload', function () { return ai1wm_locale.stop_exporting_your_website; }); // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.preparing_to_export }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_export.secret_key }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Export $.ajax({ url: ai1wm_export.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: ai1wm_locale.unable_to_start_the_export }); return; } retries++; setTimeout(self.start.bind(self, options, retries), timeout); }); }; Export.prototype.run = function (params, retries) { var self = this; retries = retries || 0; // Stop running export if (this.isExportStopped()) { return; } // Export $.ajax({ url: ai1wm_export.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: ai1wm_locale.unable_to_run_the_export }); return; } retries++; setTimeout(self.run.bind(self, params, retries), timeout); }); }; Export.prototype.clean = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopExport(true); } // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_export }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_export.secret_key }).concat({ name: 'priority', value: 300 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Clean $.ajax({ url: ai1wm_export.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { // Unbinding the beforeunload event when we stop exporting $(window).unbind('beforeunload'); // Destroy modal self.modal.destroy(); }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: ai1wm_locale.unable_to_stop_the_export }); return; } retries++; setTimeout(self.clean.bind(self, options, retries), timeout); }); }; Export.prototype.getStatus = function () { var self = this; // Stop getting status if (this.isExportStopped()) { return; } this.statusXhr = $.ajax({ url: ai1wm_export.status.url, type: 'GET', dataType: 'json', cache: false, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (params) { if (params) { self.setStatus(params); // Next status switch (params.type) { case 'done': case 'error': case 'download': // Unbinding beforeunload event when any case is performed $(window).unbind('beforeunload'); return; } } // Export is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }).fail(function () { // Export is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }); }; Export.prototype.setStatus = function (params) { this.modal.render(params); }; Export.prototype.onStop = function (options) { this.clean(options); }; Export.prototype.stopExport = function (isStopped) { try { if (isStopped && this.statusXhr) { this.statusXhr.abort(); } } finally { this.isStopped = isStopped; } }; Export.prototype.isExportStopped = function () { return this.isStopped; }; module.exports = Export; /***/ }), /***/ 326: /***/ (function(module) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var $ = jQuery; var Modal = function Modal() { var self = this; // Error Modal this.error = function (params) { // Create the modal container var container = $('

'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-red').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_export); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Info Modal this.info = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold loader var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create loader var loader = $(''); // Create stop export var stopButton = $('').on('click', function () { stopButton.attr('disabled', 'disabled'); self.onStop(); }); // Append text to stop button stopButton.append(' ' + ai1wm_locale.stop_export); // Append stop button to action action.append(stopButton); // Append loader to header header.append(loader); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Done Modal this.done = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-green').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_export); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Download Modal this.download = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); var counter = $('.ai1wm-menu-count'); // Update counter text counter.text(+counter.text() + 1); if (counter.text() > 1) { counter.prop('title', ai1wm_locale.backups_count_plural.replace('%d', counter.text())); } else { counter.removeClass('ai1wm-menu-hide'); counter.prop('title', ai1wm_locale.backups_count_singular.replace('%d', counter.text())); } // Append text to close button closeButton.append(ai1wm_locale.close_export); // Append close button to action action.append(closeButton); // Append message to section section.append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Create the overlay this.overlay = $('
'); // Create the modal container this.modal = $(''); $('body').append(this.overlay) // Append overlay to body .append(this.modal); // Append modal to body }; Modal.prototype.render = function (params) { $(document).trigger('ai1wm-export-status', params); // Show modal switch (params.type) { case 'error': this.error(params); break; case 'info': this.info(params); break; case 'done': this.done(params); break; case 'download': this.download(params); break; } }; Modal.prototype.destroy = function () { this.modal.hide(); this.overlay.hide(); }; module.exports = Modal; /***/ }), /***/ 936: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Modal = __webpack_require__(544), $ = jQuery; var Import = function Import() { var self = this; // Set params this.params = []; // Set modal this.modal = new Modal(); // Set confirm listener this.modal.onConfirm = function (options) { self.onConfirm(options); }; // Set blogs listener this.modal.onBlogs = function (options) { self.onBlogs(options); }; // Set stop listener this.modal.onStop = function (options) { self.onStop(options); }; // Set disk space listener this.modal.onDiskSpaceConfirm = function (options) { self.onDiskSpaceConfirm(options); }; // Set decrypt password listener this.modal.onDecryptPassword = function (password, options) { self.onDecryptPassword(password, options); }; }; Import.prototype.setParams = function (params) { this.params = Ai1wm.Util.list(params); }; Import.prototype.start = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopImport(false); } // Stop running import if (this.isImportStopped()) { return; } // Initializing beforeunload event $(window).bind('beforeunload', function () { return ai1wm_locale.stop_importing_your_website; }); // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.preparing_to_import }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Import $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_start_the_import }); return; } retries++; setTimeout(self.start.bind(self, options, retries), timeout); }); }; Import.prototype.run = function (params, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } // Import $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} retries++; setTimeout(self.run.bind(self, params, retries), timeout); }); }; Import.prototype.decryptPassword = function (options, password, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } this.params = this.params.concat({ name: 'decryption_password', value: password }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 90 }); $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_check_decryption_password }); return; } retries++; setTimeout(self.decryptPassword.bind(self, options, password, retries), timeout); }); }; Import.prototype.confirm = function (options, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 150 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Confirm $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_confirm_the_import }); return; } retries++; setTimeout(self.confirm.bind(self, options, retries), timeout); }); }; Import.prototype.checkDiskSpace = function (fileSize, callback) { this.diskSpaceCallback = callback; var diskSpaceFree = parseInt(ai1wm_disk_space.free, 10); var diskSpaceFactor = parseInt(ai1wm_disk_space.factor, 10); var diskSpaceExtra = parseInt(ai1wm_disk_space.extra, 10); if (diskSpaceFree >= 0) { var diskSpaceRequired = fileSize * diskSpaceFactor + diskSpaceExtra; if (diskSpaceRequired > diskSpaceFree) { this.setStatus({ type: 'disk_space_confirm', message: ai1wm_locale.out_of_disk_space.replace('%s', Ai1wm.Util.sizeFormat(diskSpaceRequired - diskSpaceFree)) }); return; } } callback(); }; Import.prototype.blogs = function (options, retries) { var self = this; retries = retries || 0; // Stop running import if (this.isImportStopped()) { return; } // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 150 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Blogs $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_prepare_blogs_on_import }); return; } retries++; setTimeout(self.blogs.bind(self, options, retries), timeout); }); }; Import.prototype.clean = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopImport(true); } // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_import }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 400 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Clean $.ajax({ url: ai1wm_import.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { // Unbinding the beforeunload event when we stop importing $(window).unbind('beforeunload'); // Destroy modal self.modal.destroy(); }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopImport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_import, message: ai1wm_locale.unable_to_stop_the_import }); return; } retries++; setTimeout(self.clean.bind(self, options, retries), timeout); }); }; Import.prototype.getStatus = function () { var self = this; // Stop getting status if (this.isImportStopped()) { return; } this.statusXhr = $.ajax({ url: ai1wm_import.status.url, type: 'GET', dataType: 'json', cache: false, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (params) { if (params) { self.setStatus(params); // Next status switch (params.type) { case 'done': case 'error': // Unbinding the beforeunload event when any case is performed $(window).unbind('beforeunload'); return; case 'confirm': case 'disk_space_confirm': case 'blogs': case 'backup_is_encrypted': return; } } // Import is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }).fail(function () { // Import is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }); }; Import.prototype.setStatus = function (params) { this.modal.render(params); }; Import.prototype.onConfirm = function (options) { this.confirm(options); }; Import.prototype.onDecryptPassword = function (password, options) { this.decryptPassword(options, password); }; Import.prototype.onBlogs = function (options) { this.blogs(options); }; Import.prototype.onStop = function (options) { this.clean(options); }; Import.prototype.onDiskSpaceConfirm = function (options) { this.diskSpaceCallback(options); }; Import.prototype.stopImport = function (isStopped) { try { if (isStopped && this.statusXhr) { this.statusXhr.abort(); } } finally { this.isStopped = isStopped; } }; Import.prototype.isImportStopped = function () { return this.isStopped; }; module.exports = Import; /***/ }), /***/ 544: /***/ (function(module) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var $ = jQuery; var Modal = function Modal() { var self = this; // Error Modal this.error = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-red').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Progress Modal this.progress = function (params) { // Update progress bar meter if (this.progress.progressBarMeter) { this.progress.progressBarMeter.width(params.percent + '%'); } // Update progress bar percent if (this.progress.progressBarPercent) { this.progress.progressBarPercent.text(params.percent + '%'); return; } // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold progress bar var header = $('

'); // Create action section var action = $('
'); // Create progress bar var progressBar = $(''); // Create progress bar meter this.progress.progressBarMeter = $('').width(params.percent + '%'); // Create progress bar percent this.progress.progressBarPercent = $('').text(params.percent + '%'); // Create stop import var stopButton = $('').on('click', function () { stopButton.attr('disabled', 'disabled'); self.onStop(); }); // Append text to stop button stopButton.append(' ' + ai1wm_locale.stop_import); // Append progress meter and progress percent progressBar.append(this.progress.progressBarMeter).append(this.progress.progressBarPercent); // Append stop button to action action.append(stopButton); // Append progress bar to section header.append(progressBar); // Append header to section section.append(header); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Pro Modal this.pro = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold warning var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create warning var warning = $(''); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append warning to section header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Confirm Modal this.confirm = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold warning var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create warning var warning = $(''); // Create close button var closeButton = $('').on('click', function () { closeButton.attr('disabled', 'disabled'); self.onStop(); }); // Create confirm button var confirmButton = $('').on('click', function () { confirmButton.attr('disabled', 'disabled'); self.onConfirm(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append text to confirm button confirmButton.append(ai1wm_locale.confirm_import + ' >'); // Append close button to action action.append(closeButton); // Append confirm button to action action.append(confirmButton); // Append warning to section header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Disk space Confirm Modal this.diskSpaceConfirm = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold warning var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create warning var warning = $(''); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Create confirm button var confirmButton = $('').on('click', function () { $(this).attr('disabled', 'disabled'); self.onDiskSpaceConfirm(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append text to confirm button confirmButton.append(ai1wm_locale.confirm_disk_space); // Append close button to action action.append(closeButton); // Append confirm button to action action.append(confirmButton); // Append warning to section header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Blogs Modal this.blogs = function (params) { // Create the modal container var container = $('
').on('submit', function (e) { e.preventDefault(); continueButton.attr('disabled', 'disabled'); self.onBlogs(container.serializeArray()); }); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-grey').text(params.title); // Create continue button var continueButton = $(''); // Append text to continue button continueButton.append(ai1wm_locale.continue_import); // Append continue button to action action.append(continueButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Info Modal this.info = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold loader var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create loader var loader = $(''); // Create warning var warning = $('

').html(ai1wm_locale.please_do_not_close_this_browser); // Create notice to be displayed during import process var notice = $('
'); // Append warning to notice notice.append(warning); // Append stop button to action action.append(notice); // Append loader to header header.append(loader); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Done Modal this.done = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-green').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.finish_import + ' >'); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; this.backup_is_encrypted = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

').html(ai1wm_locale.backup_encrypted); var message = $('

').html(ai1wm_locale.backup_encrypted_message); var confirmButton = $('').on('click', function () { var password = $('#ai1wm-backup-decrypt-password'); var passwordConfirmation = $('#ai1wm-backup-decrypt-password-confirmation'); if (password.val().length && password.val() === passwordConfirmation.val()) { confirmButton.attr('disabled', 'disabled'); self.onDecryptPassword(password.val()); } else { passwordConfirmation.parent().addClass('ai1wm-has-error'); password.parent().addClass('ai1wm-has-error'); } }); var closeButton = $('').on('click', function () { closeButton.attr('disabled', 'disabled'); self.onStop(); }); var form = $('
'); var passwordContainer = $('
'); var passwordInput = $('').prop('placeholder', ai1wm_locale.enter_password).on('keyup', function () { var password = $(this); var passwordConfirmation = $('#ai1wm-backup-decrypt-password-confirmation'); if (password.val() !== passwordConfirmation.val()) { passwordConfirmation.parent().addClass('ai1wm-has-error'); password.parent().addClass('ai1wm-has-error'); } else { password.parent().removeClass('ai1wm-has-error'); passwordConfirmation.parent().removeClass('ai1wm-has-error'); } }); var passwordView = $('').on('click', function () { $(this).toggleClass('ai1wm-icon-eye ai1wm-icon-eye-blocked'); $(this).prev().prop('type', function (index, oldPropertyValue) { return oldPropertyValue === 'text' ? 'password' : 'text'; }); return false; }); passwordContainer.append(passwordInput).append(passwordView); if (params.error) { passwordContainer.addClass('ai1wm-has-error'); var passwordError = $('
').html(params.error); passwordContainer.append(passwordError); } var passwordConfirmationContainer = $('
'); var passwordConfirmationInput = $('').prop('placeholder', ai1wm_locale.repeat_password).on('keyup', function () { var passwordConfirmation = $(this); var password = $('#ai1wm-backup-decrypt-password'); if (passwordInput.val() !== passwordConfirmation.val()) { password.parent().addClass('ai1wm-has-error'); passwordConfirmation.parent().addClass('ai1wm-has-error'); } else { password.parent().removeClass('ai1wm-has-error'); passwordConfirmation.parent().removeClass('ai1wm-has-error'); } }); var passwordConfirmationView = $('').on('click', function () { $(this).toggleClass('ai1wm-icon-eye ai1wm-icon-eye-blocked'); $(this).prev().prop('type', function (index, oldPropertyValue) { return oldPropertyValue === 'text' ? 'password' : 'text'; }); return false; }); var passwordConfirmationError = $('
').html(ai1wm_locale.passwords_do_not_match); passwordConfirmationContainer.append(passwordConfirmationInput).append(passwordConfirmationView).append(passwordConfirmationError); confirmButton.append(ai1wm_locale.submit); closeButton.append(ai1wm_locale.close_import); var buttonContainer = $('
'); buttonContainer.append(closeButton).append(confirmButton); form.append(passwordContainer).append(passwordConfirmationContainer); // Append header and message to section section.append(header).append(message).append(form).append(buttonContainer); // Append section and action to container container.append(section); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Server cannot decrypt Modal this.server_cannot_decrypt = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create warning var warning = $(''); // Create action section var action = $('
'); // Create close button var closeButton = $('').on('click', function () { closeButton.attr('disabled', 'disabled'); self.onStop(); }); // Append text to close button closeButton.append(ai1wm_locale.close_import); // Append close button to action action.append(closeButton); // Append warning to header header.append(warning); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Create the overlay this.overlay = $('
'); // Create the modal container this.modal = $(''); $('body').append(this.overlay) // Append overlay to body .append(this.modal); // Append modal to body }; Modal.prototype.render = function (params) { $(document).trigger('ai1wm-import-status', params); // Show modal switch (params.type) { case 'pro': this.pro(params); break; case 'error': this.error(params); break; case 'confirm': this.confirm(params); break; case 'disk_space_confirm': this.diskSpaceConfirm(params); break; case 'blogs': this.blogs(params); break; case 'progress': this.progress(params); break; case 'info': this.info(params); break; case 'done': this.done(params); break; case 'backup_is_encrypted': this.backup_is_encrypted(params); break; case 'server_cannot_decrypt': this.server_cannot_decrypt(params); break; } }; Modal.prototype.destroy = function () { this.modal.hide(); this.overlay.hide(); // Reset progress bar this.progress.progressBarMeter = null; this.progress.progressBarPercent = null; }; module.exports = Modal; /***/ }), /***/ 332: /***/ (function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ jQuery(document).ready(function ($) { 'use strict'; // Idea $('#ai1wm-feedback-type-link-1').on('click', function () { var radio = $('#ai1wm-feedback-type-1'); if (radio.is(':checked')) { radio.attr('checked', false); } else { radio.attr('checked', true); } }); // Help $('#ai1wm-feedback-type-2').on('click', function () { // Hide other options $('#ai1wm-feedback-type-1').closest('li').hide(); // Change placeholder message $('.ai1wm-feedback-form').find('.ai1wm-feedback-message').attr('placeholder', ai1wm_locale.how_may_we_help_you); // Show feedback form $('.ai1wm-feedback-form').fadeIn(); }); // Cancel feedback form $('#ai1wm-feedback-cancel').on('click', function (e) { $('.ai1wm-feedback-form').fadeOut(function () { $('.ai1wm-feedback-type').attr('checked', false).closest('li').show(); }); e.preventDefault(); }); // Send feedback form $('#ai1wm-feedback-submit').on('click', function (e) { var self = $(this); var spinner = self.next(); var type = $('.ai1wm-feedback-type:checked').val(); var email = $('.ai1wm-feedback-email').val(); var message = $('.ai1wm-feedback-message').val(); var terms = $('.ai1wm-feedback-terms').is(':checked'); self.attr('disabled', true); spinner.css('visibility', 'visible'); $.ajax({ url: ai1wm_feedback.ajax.url, type: 'POST', dataType: 'json', async: true, data: { secret_key: ai1wm_feedback.secret_key, ai1wm_type: type, ai1wm_email: email, ai1wm_message: message, ai1wm_terms: +terms }, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (data) { self.attr('disabled', false); spinner.css('visibility', 'hidden'); if (data.errors.length > 0) { $('.ai1wm-feedback .ai1wm-message').remove(); var errorMessage = $('
').addClass('ai1wm-message ai1wm-error-message'); $.each(data.errors, function (key, value) { errorMessage.append($('

').text(value)); }); $('.ai1wm-feedback').prepend(errorMessage); } else { var successMessage = $('

').addClass('ai1wm-message ai1wm-success-message'); successMessage.append($('

').text(ai1wm_locale.thanks_for_submitting_your_feedback)); $('.ai1wm-feedback').html(successMessage); } }); e.preventDefault(); }); }); /***/ }), /***/ 162: /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof __webpack_require__.g&&__webpack_require__.g.global===__webpack_require__.g?__webpack_require__.g:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),"string"==typeof b)return c(b,d,e);var h="application/octet-stream"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\/[\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&"undefined"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g, true&&(module.exports=g)}); //# sourceMappingURL=FileSaver.min.js.map /***/ }), /***/ 317: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; /*! * Vue.js v2.7.5 * (c) 2014-2022 Evan You * Released under the MIT License. */ /*! * Vue.js v2.7.5 * (c) 2014-2022 Evan You * Released under the MIT License. */ const t=Object.freeze({}),e=Array.isArray;function n(t){return null==t}function o(t){return null!=t}function r(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function i(t){return"function"==typeof t}function c(t){return null!==t&&"object"==typeof t}const a=Object.prototype.toString;function l(t){return"[object Object]"===a.call(t)}function u(t){const e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===a?JSON.stringify(t,null,2):String(t)}function p(t){const e=parseFloat(t);return isNaN(e)?t:e}function h(t,e){const n=Object.create(null),o=t.split(",");for(let t=0;tn[t.toLowerCase()]:t=>n[t]}const m=h("slot,component",!0),g=h("key,ref,slot,slot-scope,is");function v(t,e){if(t.length){const n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}const y=Object.prototype.hasOwnProperty;function _(t,e){return y.call(t,e)}function $(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const b=/-(\w)/g,w=$((t=>t.replace(b,((t,e)=>e?e.toUpperCase():"")))),x=$((t=>t.charAt(0).toUpperCase()+t.slice(1))),C=/\B([A-Z])/g,k=$((t=>t.replace(C,"-$1").toLowerCase()));const S=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){const o=arguments.length;return o?o>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function O(t,e){e=e||0;let n=t.length-e;const o=new Array(n);for(;n--;)o[n]=t[n+e];return o}function T(t,e){for(const n in e)t[n]=e[n];return t}function A(t){const e={};for(let n=0;n!1,N=t=>t;function D(t,e){if(t===e)return!0;const n=c(t),o=c(e);if(!n||!o)return!n&&!o&&String(t)===String(e);try{const n=Array.isArray(t),o=Array.isArray(e);if(n&&o)return t.length===e.length&&t.every(((t,n)=>D(t,e[n])));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(n||o)return!1;{const n=Object.keys(t),o=Object.keys(e);return n.length===o.length&&n.every((n=>D(t[n],e[n])))}}catch(t){return!1}}function M(t,e){for(let n=0;n0,Z=J&&J.indexOf("edge/")>0;J&&J.indexOf("android");const G=J&&/iphone|ipad|ipod|ios/.test(J);J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J);const X=J&&J.match(/firefox\/(\d+)/),Y={}.watch;let Q,tt=!1;if(K)try{const t={};Object.defineProperty(t,"passive",{get(){tt=!0}}),window.addEventListener("test-passive",null,t)}catch(t){}const et=()=>(void 0===Q&&(Q=!K&&"undefined"!=typeof __webpack_require__.g&&(__webpack_require__.g.process&&"server"===__webpack_require__.g.process.env.VUE_ENV)),Q),nt=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ot(t){return"function"==typeof t&&/native code/.test(t.toString())}const rt="undefined"!=typeof Symbol&&ot(Symbol)&&"undefined"!=typeof Reflect&&ot(Reflect.ownKeys);let st;st="undefined"!=typeof Set&&ot(Set)?Set:class{constructor(){this.set=Object.create(null)}has(t){return!0===this.set[t]}add(t){this.set[t]=!0}clear(){this.set=Object.create(null)}};let it=null;function ct(t=null){t||it&&it._scope.off(),it=t,t&&t._scope.on()}class at{constructor(t,e,n,o,r,s,i,c){this.tag=t,this.data=e,this.children=n,this.text=o,this.elm=r,this.ns=void 0,this.context=s,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=i,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}get child(){return this.componentInstance}}const lt=(t="")=>{const e=new at;return e.text=t,e.isComment=!0,e};function ut(t){return new at(void 0,void 0,void 0,String(t))}function ft(t){const e=new at(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}let dt=0;class pt{constructor(){this.id=dt++,this.subs=[]}addSub(t){this.subs.push(t)}removeSub(t){v(this.subs,t)}depend(t){pt.target&&pt.target.addDep(this)}notify(t){const e=this.subs.slice();for(let t=0,n=e.length;t{const t=e[n];if(Pt(t))return t.value;{const e=t&&t.__ob__;return e&&e.dep.depend(),t}},set:t=>{const o=e[n];Pt(o)&&!Pt(t)?o.value=t:e[n]=t}})}function Lt(t,e,n){const o=t[e];if(Pt(o))return o;const r={get value(){const o=t[e];return void 0===o?n:o},set value(n){t[e]=n}};return U(r,"__v_isRef",!0),r}function Ft(t){return Ht(t,!1)}function Ht(t,e){if(!l(t))return t;if(Mt(t))return t;const n=e?"__v_rawToShallowReadonly":"__v_rawToReadonly",o=t[n];if(o)return o;const r=Object.create(Object.getPrototypeOf(t));U(t,n,r),U(r,"__v_isReadonly",!0),U(r,"__v_raw",t),Pt(t)&&U(r,"__v_isRef",!0),(e||Dt(t))&&U(r,"__v_isShallow",!0);const s=Object.keys(t);for(let n=0;n{const e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),o="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=o?t.slice(1):t,once:n,capture:o,passive:e}}));function zt(t,n){function o(){const t=o.fns;if(!e(t))return en(t,null,arguments,n,"v-on handler");{const e=t.slice();for(let t=0;t0&&(l=Zt(l,`${i||""}_${a}`),Wt(l[0])&&Wt(f)&&(c[u]=ut(f.text+l[0].text),l.shift()),c.push.apply(c,l)):s(l)?Wt(f)?c[u]=ut(f.text+l):""!==l&&c.push(ut(l)):Wt(l)&&Wt(f)?c[u]=ut(f.text+l.text):(r(t._isVList)&&o(l.tag)&&n(l.key)&&o(i)&&(l.key=`__vlist${i}_${a}__`),c.push(l)));return c}function Gt(t,n,a,l,u,f){return(e(a)||s(a))&&(u=l,l=a,a=void 0),r(f)&&(u=2),function(t,n,r,s,a){if(o(r)&&o(r.__ob__))return lt();o(r)&&o(r.is)&&(n=r.is);if(!n)return lt();e(s)&&i(s[0])&&((r=r||{}).scopedSlots={default:s[0]},s.length=0);2===a?s=qt(s):1===a&&(s=function(t){for(let n=0;n0,c=n?!!n.$stable:!i,a=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(c&&r&&r!==t&&a===r.$key&&!i&&!r.$hasNormal)return r;s={};for(const t in n)n[t]&&"$"!==t[0]&&(s[t]=ve(e,o,t,n[t]))}else s={};for(const t in o)t in s||(s[t]=ye(o,t));return n&&Object.isExtensible(n)&&(n._normalized=s),U(s,"$stable",c),U(s,"$key",a),U(s,"$hasNormal",i),s}function ve(t,n,o,r){const s=function(){const n=it;ct(t);let o=arguments.length?r.apply(null,arguments):r({});o=o&&"object"==typeof o&&!e(o)?[o]:qt(o);const s=o&&o[0];return ct(n),o&&(!s||1===o.length&&s.isComment&&!me(s))?void 0:o};return r.proxy&&Object.defineProperty(n,o,{get:s,enumerable:!0,configurable:!0}),s}function ye(t,e){return()=>t[e]}function _e(e){return{get attrs(){return function(e){if(!e._attrsProxy){const n=e._attrsProxy={};U(n,"_v_attr_proxy",!0),$e(n,e.$attrs,t,e)}return e._attrsProxy}(e)},get slots(){return function(t){t._slotsProxy||we(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:S(e.$emit,e),expose(t){t&&Object.keys(t).forEach((n=>Rt(e,t,n)))}}}function $e(t,e,n,o){let r=!1;for(const s in e)s in t?e[s]!==n[s]&&(r=!0):(r=!0,be(t,s,o));for(const n in t)n in e||(r=!0,delete t[n]);return r}function be(t,e,n){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:()=>n.$attrs[e]})}function we(t,e){for(const n in e)t[n]=e[n];for(const n in t)n in e||delete t[n]}function xe(){const t=it;return t._setupContext||(t._setupContext=_e(t))}let Ce,ke=null;function Se(t,e){return(t.__esModule||rt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),c(t)?e.extend(t):t}function Oe(t){if(e(t))for(let e=0;e{Ne=e}}function Me(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Pe(t,e){if(e){if(t._directInactive=!1,Me(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(let e=0;edocument.createEvent("Event").timeStamp&&(Ke=()=>t.now())}function Je(){let t,e;for(Ve=Ke(),Ue=!0,Le.sort(((t,e)=>t.id-e.id)),ze=0;zeze&&Le[e].id>t.id;)e--;Le.splice(e+1,0,t)}else Le.push(t);Be||(Be=!0,un(Je))}}function We(t,e){return Ge(t,null,{flush:"post"})}const Ze={};function Ge(n,o,{immediate:r,deep:s,flush:c="pre",onTrack:a,onTrigger:l}=t){const u=it,f=(t,e,n=null)=>en(t,null,n,u,e);let d,p,h=!1,m=!1;if(Pt(n)?(d=()=>n.value,h=Dt(n)):Nt(n)?(d=()=>(n.__ob__.dep.depend(),n),s=!0):e(n)?(m=!0,h=n.some((t=>Nt(t)||Dt(t))),d=()=>n.map((t=>Pt(t)?t.value:Nt(t)?Sn(t):i(t)?f(t,"watcher getter"):void 0))):d=i(n)?o?()=>f(n,"watcher getter"):()=>{if(!u||!u._isDestroyed)return p&&p(),f(n,"watcher",[g])}:j,o&&s){const t=d;d=()=>Sn(t())}let g=t=>{p=v.onStop=()=>{f(t,"watcher cleanup")}};if(et())return g=j,o?r&&f(o,"watcher callback",[d(),m?[]:void 0,g]):d(),j;const v=new An(it,d,j,{lazy:!0});v.noRecurse=!o;let y=m?[]:Ze;return v.run=()=>{if(v.active||"pre"===c&&u&&u._isBeingDestroyed)if(o){const t=v.get();(s||h||(m?t.some(((t,e)=>I(t,y[e]))):I(t,y)))&&(p&&p(),f(o,"watcher callback",[t,y===Ze?void 0:y,g]),y=t)}else v.get()},"sync"===c?v.update=v.run:"post"===c?(v.id=1/0,v.update=()=>qe(v)):v.update=()=>{if(u&&u===it&&!u._isMounted){const t=u._preWatchers||(u._preWatchers=[]);t.indexOf(v)<0&&t.push(v)}else qe(v)},o?r?v.run():y=v.get():"post"===c&&u?u.$once("hook:mounted",(()=>v.get())):v.get(),()=>{v.teardown()}}let Xe;class Ye{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Xe&&(this.parent=Xe,this.index=(Xe.scopes||(Xe.scopes=[])).push(this)-1)}run(t){if(this.active){const e=Xe;try{return Xe=this,t()}finally{Xe=e}}}on(){Xe=this}off(){Xe=this.parent}stop(t){if(this.active){let e,n;for(e=0,n=this.effects.length;etn(t,o,r+" (Promise/async)"))),s._handled=!0)}catch(t){tn(t,o,r)}return s}function nn(t,e,n){if(F.errorHandler)try{return F.errorHandler.call(null,t,e,n)}catch(e){e!==t&&on(e)}on(t)}function on(t,e,n){if(!K||"undefined"==typeof console)throw t;console.error(t)}let rn=!1;const sn=[];let cn,an=!1;function ln(){an=!1;const t=sn.slice(0);sn.length=0;for(let e=0;e{t.then(ln),G&&setTimeout(j)},rn=!0}else if(q||"undefined"==typeof MutationObserver||!ot(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())cn="undefined"!=typeof setImmediate&&ot(setImmediate)?()=>{setImmediate(ln)}:()=>{setTimeout(ln,0)};else{let t=1;const e=new MutationObserver(ln),n=document.createTextNode(String(t));e.observe(n,{characterData:!0}),cn=()=>{t=(t+1)%2,n.data=String(t)},rn=!0}function un(t,e){let n;if(sn.push((()=>{if(t)try{t.call(e)}catch(t){tn(t,e,"nextTick")}else n&&n(e)})),an||(an=!0,cn()),!t&&"undefined"!=typeof Promise)return new Promise((t=>{n=t}))}function fn(t){return(e,n=it)=>{if(n)return function(t,e,n){const o=t.$options;o[e]=Qn(o[e],n)}(n,t,e)}}const dn=fn("beforeMount"),pn=fn("mounted"),hn=fn("beforeUpdate"),mn=fn("updated"),gn=fn("beforeDestroy"),vn=fn("destroyed"),yn=fn("errorCaptured"),_n=fn("activated"),$n=fn("deactivated"),bn=fn("serverPrefetch"),wn=fn("renderTracked"),xn=fn("renderTriggered");var Cn=Object.freeze({__proto__:null,version:"2.7.5",defineComponent:function(t){return t},ref:function(t){return It(t,!1)},shallowRef:function(t){return It(t,!0)},isRef:Pt,toRef:Lt,toRefs:function(t){const n=e(t)?new Array(t.length):{};for(const e in t)n[e]=Lt(t,e);return n},unref:function(t){return Pt(t)?t.value:t},proxyRefs:function(t){if(Nt(t))return t;const e={},n=Object.keys(t);for(let o=0;o{e.depend()}),(()=>{e.notify()})),r={get value(){return n()},set value(t){o(t)}};return U(r,"__v_isRef",!0),r},triggerRef:function(t){t.dep&&t.dep.notify()},reactive:function(t){return Et(t,!1),t},isReactive:Nt,isReadonly:Mt,isShallow:Dt,isProxy:function(t){return Nt(t)||Mt(t)},shallowReactive:jt,markRaw:function(t){return U(t,"__v_skip",!0),t},toRaw:function t(e){const n=e&&e.__v_raw;return n?t(n):e},readonly:Ft,shallowReadonly:function(t){return Ht(t,!0)},computed:function(t,e){let n,o;const r=i(t);r?(n=t,o=j):(n=t.get,o=t.set);const s=et()?null:new An(it,n,j,{lazy:!0}),c={effect:s,get value(){return s?(s.dirty&&s.evaluate(),pt.target&&s.depend(),s.value):n()},set value(t){o(t)}};return U(c,"__v_isRef",!0),U(c,"__v_isReadonly",r),c},watch:function(t,e,n){return Ge(t,e,n)},watchEffect:function(t,e){return Ge(t,null,e)},watchPostEffect:We,watchSyncEffect:function(t,e){return Ge(t,null,{flush:"sync"})},EffectScope:Ye,effectScope:function(t){return new Ye(t)},onScopeDispose:function(t){Xe&&Xe.cleanups.push(t)},getCurrentScope:function(){return Xe},provide:Qe,inject:function(t,e,n=!1){const o=it;if(o){const r=o.$parent&&o.$parent._provided;if(r&&t in r)return r[t];if(arguments.length>1)return n&&i(e)?e.call(o):e}},h:function(t,e,n){return Gt(it,t,e,n,2,!0)},getCurrentInstance:function(){return it&&{proxy:it}},useSlots:function(){return xe().slots},useAttrs:function(){return xe().attrs},mergeDefaults:function(t,n){const o=e(t)?t.reduce(((t,e)=>(t[e]={},t)),{}):t;for(const t in n){const r=o[t];r?e(r)||i(r)?o[t]={type:r,default:n[t]}:r.default=n[t]:null===r&&(o[t]={default:n[t]})}return o},nextTick:un,set:Ot,del:Tt,useCssModule:function(e="$style"){{if(!it)return t;const n=it[e];return n||t}},useCssVars:function(t){if(!K)return;const e=it;e&&We((()=>{const n=e.$el,o=t(e,e._setupProxy);if(n&&1===n.nodeType){const t=n.style;for(const e in o)t.setProperty(`--${e}`,o[e])}}))},defineAsyncComponent:function(t){i(t)&&(t={loader:t});const{loader:e,loadingComponent:n,errorComponent:o,delay:r=200,timeout:s,suspensible:c=!1,onError:a}=t;let l=null,u=0;const f=()=>{let t;return l||(t=l=e().catch((t=>{if(t=t instanceof Error?t:new Error(String(t)),a)return new Promise(((e,n)=>{a(t,(()=>e((u++,l=null,f()))),(()=>n(t)),u+1)}));throw t})).then((e=>t!==l&&l?l:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e))))};return()=>({component:f(),delay:r,timeout:s,error:o,loading:n})},onBeforeMount:dn,onMounted:pn,onBeforeUpdate:hn,onUpdated:mn,onBeforeUnmount:gn,onUnmounted:vn,onErrorCaptured:yn,onActivated:_n,onDeactivated:$n,onServerPrefetch:bn,onRenderTracked:wn,onRenderTriggered:xn});const kn=new st;function Sn(t){return On(t,kn),kn.clear(),t}function On(t,n){let o,r;const s=e(t);if(!(!s&&!c(t)||Object.isFrozen(t)||t instanceof at)){if(t.__ob__){const e=t.__ob__.dep.id;if(n.has(e))return;n.add(e)}if(s)for(o=t.length;o--;)On(t[o],n);else if(Pt(t))On(t.value,n);else for(r=Object.keys(t),o=r.length;o--;)On(t[r[o]],n)}}let Tn=0;class An{constructor(t,e,n,o,r){!function(t,e=Xe){e&&e.active&&e.effects.push(t)}(this,Xe||(t?t._scope:void 0)),(this.vm=t)&&r&&(t._watcher=this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Tn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new st,this.newDepIds=new st,this.expression="",i(e)?this.getter=e:(this.getter=function(t){if(z.test(t))return;const e=t.split(".");return function(t){for(let n=0;n(this.$slots||ge(i,n.scopedSlots,this.$slots=pe(s,i)),this.$slots),Object.defineProperty(this,"scopedSlots",{enumerable:!0,get(){return ge(i,n.scopedSlots,this.slots())}}),u&&(this.$options=a,this.$slots=this.slots(),this.$scopedSlots=ge(i,n.scopedSlots,this.$slots)),a._scopeId?this._c=(t,n,o,r)=>{const s=Gt(l,t,n,o,r,f);return s&&!e(s)&&(s.fnScopeId=a._scopeId,s.fnContext=i),s}:this._c=(t,e,n,o)=>Gt(l,t,e,n,o,f)}function Un(t,e,n,o,r){const s=ft(t);return s.fnContext=n,s.fnOptions=o,e.slot&&((s.data||(s.data={})).slot=e.slot),s}function zn(t,e){for(const n in e)t[w(n)]=e[n]}function Vn(t){return t.name||t.__name||t._componentTag}de(Bn.prototype);const Kn={init(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){const e=t;Kn.prepatch(e,e)}else{(t.componentInstance=function(t,e){const n={_isComponent:!0,_parentVnode:t,parent:e},r=t.data.inlineTemplate;o(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,Ne)).$mount(e?t.elm:void 0,e)}},prepatch(e,n){const o=n.componentOptions;!function(e,n,o,r,s){const i=r.data.scopedSlots,c=e.$scopedSlots,a=!!(i&&!i.$stable||c!==t&&!c.$stable||i&&e.$scopedSlots.$key!==i.$key||!i&&e.$scopedSlots.$key);let l=!!(s||e.$options._renderChildren||a);const u=e.$vnode;e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=s;const f=r.data.attrs||t;if(e._attrsProxy&&$e(e._attrsProxy,f,u.data&&u.data.attrs||t,e)&&(l=!0),e.$attrs=f,e.$listeners=o||t,n&&e.$options.props){wt(!1);const t=e._props,o=e.$options._propKeys||[];for(let r=0;rv(r,s)));const u=t=>{for(let t=0,e=r.length;t{t.resolved=Se(n,e),i?r.length=0:u(!0)})),p=P((e=>{o(t.errorComp)&&(t.error=!0,u(!0))})),h=t(d,p);return c(h)&&(f(h)?n(t.resolved)&&h.then(d,p):f(h.component)&&(h.component.then(d,p),o(h.error)&&(t.errorComp=Se(h.error,e)),o(h.loading)&&(t.loadingComp=Se(h.loading,e),0===h.delay?t.loading=!0:a=setTimeout((()=>{a=null,n(t.resolved)&&n(t.error)&&(t.loading=!0,u(!1))}),h.delay||200)),o(h.timeout)&&(l=setTimeout((()=>{l=null,n(t.resolved)&&p(null)}),h.timeout)))),i=!1,t.loading?t.loadingComp:t.resolved}}(p,d),void 0===s))return function(t,e,n,o,r){const s=lt();return s.asyncFactory=t,s.asyncMeta={data:e,context:n,children:o,tag:r},s}(p,i,a,l,u);i=i||{},Hn(s),o(i.model)&&function(t,n){const r=t.model&&t.model.prop||"value",s=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[r]=n.model.value;const i=n.on||(n.on={}),c=i[s],a=n.model.callback;o(c)?(e(c)?-1===c.indexOf(a):c!==a)&&(i[s]=[a].concat(c)):i[s]=a}(s.options,i);const h=function(t,e,r){const s=e.options.props;if(n(s))return;const i={},{attrs:c,props:a}=t;if(o(c)||o(a))for(const t in s){const e=k(t);Jt(i,a,t,e,!0)||Jt(i,c,t,e,!1)}return i}(i,s);if(r(s.options.functional))return function(n,r,s,i,c){const a=n.options,l={},u=a.props;if(o(u))for(const e in u)l[e]=ro(e,u,r||t);else o(s.attrs)&&zn(l,s.attrs),o(s.props)&&zn(l,s.props);const f=new Bn(s,l,c,i,n),d=a.render.call(null,f._c,f);if(d instanceof at)return Un(d,s,f.parent,a);if(e(d)){const t=qt(d)||[],e=new Array(t.length);for(let n=0;n{t(n,o),e(n,o)};return n._merged=!0,n}let Zn=j;const Gn=F.optionMergeStrategies;function Xn(t,e){if(!e)return t;let n,o,r;const s=rt?Reflect.ownKeys(e):Object.keys(e);for(let i=0;i{Gn[t]=Qn})),R.forEach((function(t){Gn[t+"s"]=to})),Gn.watch=function(t,n,o,r){if(t===Y&&(t=void 0),n===Y&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;const s={};T(s,t);for(const t in n){let o=s[t];const r=n[t];o&&!e(o)&&(o=[o]),s[t]=o?o.concat(r):e(r)?r:[r]}return s},Gn.props=Gn.methods=Gn.inject=Gn.computed=function(t,e,n,o){if(!t)return e;const r=Object.create(null);return T(r,t),e&&T(r,e),r},Gn.provide=Yn;const eo=function(t,e){return void 0===e?t:e};function no(t,n,o){if(i(n)&&(n=n.options),function(t,n){const o=t.props;if(!o)return;const r={};let s,i,c;if(e(o))for(s=o.length;s--;)i=o[s],"string"==typeof i&&(c=w(i),r[c]={type:null});else if(l(o))for(const t in o)i=o[t],c=w(t),r[c]=l(i)?i:{type:i};t.props=r}(n),function(t,n){const o=t.inject;if(!o)return;const r=t.inject={};if(e(o))for(let t=0;t-1)if(s&&!_(r,"default"))c=!1;else if(""===c||c===k(t)){const t=ao(String,r.type);(t<0||a-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(o=t,"[object RegExp]"===a.call(o)&&t.test(n));var o}function ho(t,e){const{cache:n,keys:o,_vnode:r}=t;for(const t in n){const s=n[t];if(s){const i=s.name;i&&!e(i)&&mo(n,t,o,r)}}}function mo(t,e,n,o){const r=t[e];!r||o&&r.tag===o.tag||r.componentInstance.$destroy(),t[e]=null,v(n,e)}!function(e){e.prototype._init=function(e){const n=this;n._uid=Fn++,n._isVue=!0,n.__v_skip=!0,n._scope=new Ye(!0),e&&e._isComponent?function(t,e){const n=t.$options=Object.create(t.constructor.options),o=e._parentVnode;n.parent=e.parent,n._parentVnode=o;const r=o.componentOptions;n.propsData=r.propsData,n._parentListeners=r.listeners,n._renderChildren=r.children,n._componentTag=r.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=no(Hn(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){const e=t.$options;let n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;const e=t.$options._parentListeners;e&&Ee(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;const n=e.$options,o=e.$vnode=n._parentVnode,r=o&&o.context;e.$slots=pe(n._renderChildren,r),e.$scopedSlots=t,e._c=(t,n,o,r)=>Gt(e,t,n,o,r,!1),e.$createElement=(t,n,o,r)=>Gt(e,t,n,o,r,!0);const s=o&&o.data;St(e,"$attrs",s&&s.attrs||t,null,!0),St(e,"$listeners",n._parentListeners||t,null,!0)}(n),Re(n,"beforeCreate",void 0,!1),function(t){const e=Ln(t.$options.inject,t);e&&(wt(!1),Object.keys(e).forEach((n=>{St(t,n,e[n])})),wt(!0))}(n),Nn(n),function(t){const e=t.$options.provide;if(e){const n=i(e)?e.call(t):e;if(!c(n))return;const o=rt?Reflect.ownKeys(n):Object.keys(n);ct(t);for(let t=0;t1?O(n):n;const o=O(arguments,1),r=`event handler for "${t}"`;for(let t=0,s=n.length;tparseInt(this.max)&&mo(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created(){this.cache=Object.create(null),this.keys=[]},destroyed(){for(const t in this.cache)mo(this.cache,t,this.keys)},mounted(){this.cacheVNode(),this.$watch("include",(t=>{ho(this,(e=>po(t,e)))})),this.$watch("exclude",(t=>{ho(this,(e=>!po(t,e)))}))},updated(){this.cacheVNode()},render(){const t=this.$slots.default,e=Oe(t),n=e&&e.componentOptions;if(n){const t=fo(n),{include:o,exclude:r}=this;if(o&&(!t||!po(o,t))||r&&t&&po(r,t))return e;const{cache:s,keys:i}=this,c=null==e.key?n.Ctor.cid+(n.tag?`::${n.tag}`:""):e.key;s[c]?(e.componentInstance=s[c].componentInstance,v(i,c),i.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){const e={get:()=>F};Object.defineProperty(t,"config",e),t.util={warn:Zn,extend:T,mergeOptions:no,defineReactive:St},t.set=Ot,t.delete=Tt,t.nextTick=un,t.observable=t=>(kt(t),t),t.options=Object.create(null),R.forEach((e=>{t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,vo),function(t){t.use=function(t){const e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;const n=O(arguments,1);return n.unshift(this),i(t.install)?t.install.apply(t,n):i(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=no(this.options,t),this}}(t),uo(t),function(t){R.forEach((e=>{t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&i(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(lo),Object.defineProperty(lo.prototype,"$isServer",{get:et}),Object.defineProperty(lo.prototype,"$ssrContext",{get(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(lo,"FunctionalRenderContext",{value:Bn}),lo.version="2.7.5";const yo=h("style,class"),_o=h("input,textarea,option,select,progress"),$o=(t,e,n)=>"value"===n&&_o(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t,bo=h("contenteditable,draggable,spellcheck"),wo=h("events,caret,typing,plaintext-only"),xo=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Co="http://www.w3.org/1999/xlink",ko=t=>":"===t.charAt(5)&&"xlink"===t.slice(0,5),So=t=>ko(t)?t.slice(6,t.length):"",Oo=t=>null==t||!1===t;function To(t){let e=t.data,n=t,r=t;for(;o(r.componentInstance);)r=r.componentInstance._vnode,r&&r.data&&(e=Ao(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=Ao(e,n.data));return function(t,e){if(o(t)||o(e))return jo(t,Eo(e));return""}(e.staticClass,e.class)}function Ao(t,e){return{staticClass:jo(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function jo(t,e){return t?e?t+" "+e:t:e||""}function Eo(t){return Array.isArray(t)?function(t){let e,n="";for(let r=0,s=t.length;rDo(t)||Mo(t);function Io(t){return Mo(t)?"svg":"math"===t?"math":void 0}const Ro=Object.create(null);const Lo=h("text,number,password,search,email,tel,url");function Fo(t){if("string"==typeof t){const e=document.querySelector(t);return e||document.createElement("div")}return t}var Ho=Object.freeze({__proto__:null,createElement:function(t,e){const n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(No[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),Bo={create(t,e){Uo(e)},update(t,e){t.data.ref!==e.data.ref&&(Uo(t,!0),Uo(e))},destroy(t){Uo(t,!0)}};function Uo(t,n){const r=t.data.ref;if(!o(r))return;const s=t.context,c=t.componentInstance||t.elm,a=n?null:c,l=n?void 0:c;if(i(r))return void en(r,s,[a],s,"template ref function");const u=t.data.refInFor,f="string"==typeof r||"number"==typeof r,d=Pt(r),p=s.$refs;if(f||d)if(u){const t=f?p[r]:r.value;n?e(t)&&v(t,c):e(t)?t.includes(c)||t.push(c):f?(p[r]=[c],zo(s,r,p[r])):r.value=[c]}else if(f){if(n&&p[r]!==c)return;p[r]=l,zo(s,r,a)}else if(d){if(n&&r.value!==c)return;r.value=a}}function zo({_setupState:t},e,n){t&&_(t,e)&&(Pt(t[e])?t[e].value=n:t[e]=n)}const Vo=new at("",{},[]),Ko=["create","activate","update","remove","destroy"];function Jo(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&function(t,e){if("input"!==t.tag)return!0;let n;const r=o(n=t.data)&&o(n=n.attrs)&&n.type,s=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===s||Lo(r)&&Lo(s)}(t,e)||r(t.isAsyncPlaceholder)&&n(e.asyncFactory.error))}function qo(t,e,n){let r,s;const i={};for(r=e;r<=n;++r)s=t[r].key,o(s)&&(i[s]=r);return i}var Wo={create:Zo,update:Zo,destroy:function(t){Zo(t,Vo)}};function Zo(t,e){(t.data.directives||e.data.directives)&&function(t,e){const n=t===Vo,o=e===Vo,r=Xo(t.data.directives,t.context),s=Xo(e.data.directives,e.context),i=[],c=[];let a,l,u;for(a in s)l=r[a],u=s[a],l?(u.oldValue=l.value,u.oldArg=l.arg,Qo(u,"update",e,t),u.def&&u.def.componentUpdated&&c.push(u)):(Qo(u,"bind",e,t),u.def&&u.def.inserted&&i.push(u));if(i.length){const o=()=>{for(let n=0;n{for(let n=0;n-1?or(t,e,n):xo(e)?Oo(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):bo(e)?t.setAttribute(e,((t,e)=>Oo(e)||"false"===e?"false":"contenteditable"===t&&wo(e)?e:"true")(e,n)):ko(e)?Oo(n)?t.removeAttributeNS(Co,So(e)):t.setAttributeNS(Co,e,n):or(t,e,n)}function or(t,e,n){if(Oo(n))t.removeAttribute(e);else{if(q&&!W&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){const e=n=>{n.stopImmediatePropagation(),t.removeEventListener("input",e)};t.addEventListener("input",e),t.__ieph=!0}t.setAttribute(e,n)}}var rr={create:er,update:er};function sr(t,e){const r=e.elm,s=e.data,i=t.data;if(n(s.staticClass)&&n(s.class)&&(n(i)||n(i.staticClass)&&n(i.class)))return;let c=To(e);const a=r._transitionClasses;o(a)&&(c=jo(c,Eo(a))),c!==r._prevClass&&(r.setAttribute("class",c),r._prevClass=c)}var ir={create:sr,update:sr};const cr=/[\w).+\-_$\]]/;function ar(t){let e,n,o,r,s,i=!1,c=!1,a=!1,l=!1,u=0,f=0,d=0,p=0;for(o=0;o=0&&(e=t.charAt(n)," "===e);n--);e&&cr.test(e)||(l=!0)}}else void 0===r?(p=o+1,r=t.slice(0,o).trim()):h();function h(){(s||(s=[])).push(t.slice(p,o).trim()),p=o+1}if(void 0===r?r=t.slice(0,o).trim():0!==p&&h(),s)for(o=0;ot[e])).filter((t=>t)):[]}function dr(t,e,n,o,r){(t.props||(t.props=[])).push(br({name:e,value:n,dynamic:r},o)),t.plain=!1}function pr(t,e,n,o,r){(r?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(br({name:e,value:n,dynamic:r},o)),t.plain=!1}function hr(t,e,n,o){t.attrsMap[e]=n,t.attrsList.push(br({name:e,value:n},o))}function mr(t,e,n,o,r,s,i,c){(t.directives||(t.directives=[])).push(br({name:e,rawName:n,value:o,arg:r,isDynamicArg:s,modifiers:i},c)),t.plain=!1}function gr(t,e,n){return n?`_p(${e},"${t}")`:t+e}function vr(e,n,o,r,s,i,c,a){let l;(r=r||t).right?a?n=`(${n})==='click'?'contextmenu':(${n})`:"click"===n&&(n="contextmenu",delete r.right):r.middle&&(a?n=`(${n})==='click'?'mouseup':(${n})`:"click"===n&&(n="mouseup")),r.capture&&(delete r.capture,n=gr("!",n,a)),r.once&&(delete r.once,n=gr("~",n,a)),r.passive&&(delete r.passive,n=gr("&",n,a)),r.native?(delete r.native,l=e.nativeEvents||(e.nativeEvents={})):l=e.events||(e.events={});const u=br({value:o.trim(),dynamic:a},c);r!==t&&(u.modifiers=r);const f=l[n];Array.isArray(f)?s?f.unshift(u):f.push(u):l[n]=f?s?[u,f]:[f,u]:u,e.plain=!1}function yr(t,e,n){const o=_r(t,":"+e)||_r(t,"v-bind:"+e);if(null!=o)return ar(o);if(!1!==n){const n=_r(t,e);if(null!=n)return JSON.stringify(n)}}function _r(t,e,n){let o;if(null!=(o=t.attrsMap[e])){const n=t.attrsList;for(let t=0,o=n.length;t-1?{exp:t.slice(0,Or),key:'"'+t.slice(Or+1)+'"'}:{exp:t,key:null};kr=t,Or=Tr=Ar=0;for(;!Er();)Sr=jr(),Nr(Sr)?Mr(Sr):91===Sr&&Dr(Sr);return{exp:t.slice(0,Tr),key:t.slice(Tr+1,Ar)}}(t);return null===n.key?`${t}=${e}`:`$set(${n.exp}, ${n.key}, ${e})`}let Cr,kr,Sr,Or,Tr,Ar;function jr(){return kr.charCodeAt(++Or)}function Er(){return Or>=Cr}function Nr(t){return 34===t||39===t}function Dr(t){let e=1;for(Tr=Or;!Er();)if(Nr(t=jr()))Mr(t);else if(91===t&&e++,93===t&&e--,0===e){Ar=Or;break}}function Mr(t){const e=t;for(;!Er()&&(t=jr())!==e;);}let Pr;function Ir(t,e,n){const o=Pr;return function r(){const s=e.apply(null,arguments);null!==s&&Fr(t,r,n,o)}}const Rr=rn&&!(X&&Number(X[1])<=53);function Lr(t,e,n,o){if(Rr){const t=Ve,n=e;e=n._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=t||e.timeStamp<=0||e.target.ownerDocument!==document)return n.apply(this,arguments)}}Pr.addEventListener(t,e,tt?{capture:n,passive:o}:n)}function Fr(t,e,n,o){(o||Pr).removeEventListener(t,e._wrapper||e,n)}function Hr(t,e){if(n(t.data.on)&&n(e.data.on))return;const r=e.data.on||{},s=t.data.on||{};Pr=e.elm||t.elm,function(t){if(o(t.__r)){const e=q?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(r),Vt(r,s,Lr,Fr,Ir,e.context),Pr=void 0}var Br={create:Hr,update:Hr,destroy:t=>Hr(t,Vo)};let Ur;function zr(t,e){if(n(t.data.domProps)&&n(e.data.domProps))return;let s,i;const c=e.elm,a=t.data.domProps||{};let l=e.data.domProps||{};for(s in(o(l.__ob__)||r(l._v_attr_proxy))&&(l=e.data.domProps=T({},l)),a)s in l||(c[s]="");for(s in l){if(i=l[s],"textContent"===s||"innerHTML"===s){if(e.children&&(e.children.length=0),i===a[s])continue;1===c.childNodes.length&&c.removeChild(c.childNodes[0])}if("value"===s&&"PROGRESS"!==c.tagName){c._value=i;const t=n(i)?"":String(i);Vr(c,t)&&(c.value=t)}else if("innerHTML"===s&&Mo(c.tagName)&&n(c.innerHTML)){Ur=Ur||document.createElement("div"),Ur.innerHTML=`${i}`;const t=Ur.firstChild;for(;c.firstChild;)c.removeChild(c.firstChild);for(;t.firstChild;)c.appendChild(t.firstChild)}else if(i!==a[s])try{c[s]=i}catch(t){}}}function Vr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){let n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){const n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return p(n)!==p(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Kr={create:zr,update:zr};const Jr=$((function(t){const e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){const o=t.split(n);o.length>1&&(e[o[0].trim()]=o[1].trim())}})),e}));function qr(t){const e=Wr(t.style);return t.staticStyle?T(t.staticStyle,e):e}function Wr(t){return Array.isArray(t)?A(t):"string"==typeof t?Jr(t):t}const Zr=/^--/,Gr=/\s*!important$/,Xr=(t,e,n)=>{if(Zr.test(e))t.style.setProperty(e,n);else if(Gr.test(n))t.style.setProperty(k(e),n.replace(Gr,""),"important");else{const o=ts(e);if(Array.isArray(n))for(let e=0,r=n.length;e-1?e.split(os).forEach((e=>t.classList.add(e))):t.classList.add(e);else{const n=` ${t.getAttribute("class")||""} `;n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function ss(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(os).forEach((e=>t.classList.remove(e))):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{let n=` ${t.getAttribute("class")||""} `;const o=" "+e+" ";for(;n.indexOf(o)>=0;)n=n.replace(o," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function is(t){if(t){if("object"==typeof t){const e={};return!1!==t.css&&T(e,cs(t.name||"v")),T(e,t),e}return"string"==typeof t?cs(t):void 0}}const cs=$((t=>({enterClass:`${t}-enter`,enterToClass:`${t}-enter-to`,enterActiveClass:`${t}-enter-active`,leaveClass:`${t}-leave`,leaveToClass:`${t}-leave-to`,leaveActiveClass:`${t}-leave-active`}))),as=K&&!W;let ls="transition",us="transitionend",fs="animation",ds="animationend";as&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ls="WebkitTransition",us="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(fs="WebkitAnimation",ds="webkitAnimationEnd"));const ps=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:t=>t();function hs(t){ps((()=>{ps(t)}))}function ms(t,e){const n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),rs(t,e))}function gs(t,e){t._transitionClasses&&v(t._transitionClasses,e),ss(t,e)}function vs(t,e,n){const{type:o,timeout:r,propCount:s}=_s(t,e);if(!o)return n();const i="transition"===o?us:ds;let c=0;const a=()=>{t.removeEventListener(i,l),n()},l=e=>{e.target===t&&++c>=s&&a()};setTimeout((()=>{c0&&(l="transition",u=s,f=r.length):"animation"===e?a>0&&(l="animation",u=a,f=c.length):(u=Math.max(s,a),l=u>0?s>a?"transition":"animation":null,f=l?"transition"===l?r.length:c.length:0);return{type:l,timeout:u,propCount:f,hasTransform:"transition"===l&&ys.test(n[ls+"Property"])}}function $s(t,e){for(;t.lengthbs(e)+bs(t[n]))))}function bs(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function ws(t,e){const r=t.elm;o(r._leaveCb)&&(r._leaveCb.cancelled=!0,r._leaveCb());const s=is(t.data.transition);if(n(s))return;if(o(r._enterCb)||1!==r.nodeType)return;const{css:a,type:l,enterClass:u,enterToClass:f,enterActiveClass:d,appearClass:h,appearToClass:m,appearActiveClass:g,beforeEnter:v,enter:y,afterEnter:_,enterCancelled:$,beforeAppear:b,appear:w,afterAppear:x,appearCancelled:C,duration:k}=s;let S=Ne,O=Ne.$vnode;for(;O&&O.parent;)S=O.context,O=O.parent;const T=!S._isMounted||!t.isRootInsert;if(T&&!w&&""!==w)return;const A=T&&h?h:u,j=T&&g?g:d,E=T&&m?m:f,N=T&&b||v,D=T&&i(w)?w:y,M=T&&x||_,I=T&&C||$,R=p(c(k)?k.enter:k),L=!1!==a&&!W,F=ks(D),H=r._enterCb=P((()=>{L&&(gs(r,E),gs(r,j)),H.cancelled?(L&&gs(r,A),I&&I(r)):M&&M(r),r._enterCb=null}));t.data.show||Kt(t,"insert",(()=>{const e=r.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),D&&D(r,H)})),N&&N(r),L&&(ms(r,A),ms(r,j),hs((()=>{gs(r,A),H.cancelled||(ms(r,E),F||(Cs(R)?setTimeout(H,R):vs(r,l,H)))}))),t.data.show&&(e&&e(),D&&D(r,H)),L||F||H()}function xs(t,e){const r=t.elm;o(r._enterCb)&&(r._enterCb.cancelled=!0,r._enterCb());const s=is(t.data.transition);if(n(s)||1!==r.nodeType)return e();if(o(r._leaveCb))return;const{css:i,type:a,leaveClass:l,leaveToClass:u,leaveActiveClass:f,beforeLeave:d,leave:h,afterLeave:m,leaveCancelled:g,delayLeave:v,duration:y}=s,_=!1!==i&&!W,$=ks(h),b=p(c(y)?y.leave:y),w=r._leaveCb=P((()=>{r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[t.key]=null),_&&(gs(r,u),gs(r,f)),w.cancelled?(_&&gs(r,l),g&&g(r)):(e(),m&&m(r)),r._leaveCb=null}));function x(){w.cancelled||(!t.data.show&&r.parentNode&&((r.parentNode._pending||(r.parentNode._pending={}))[t.key]=t),d&&d(r),_&&(ms(r,l),ms(r,f),hs((()=>{gs(r,l),w.cancelled||(ms(r,u),$||(Cs(b)?setTimeout(w,b):vs(r,a,w)))}))),h&&h(r,w),_||$||w())}v?v(x):x()}function Cs(t){return"number"==typeof t&&!isNaN(t)}function ks(t){if(n(t))return!1;const e=t.fns;return o(e)?ks(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function Ss(t,e){!0!==e.data.show&&ws(e)}const Os=function(t){let i,c;const a={},{modules:l,nodeOps:u}=t;for(i=0;im?(f=n(r[y+1])?null:r[y+1].elm,$(t,f,r,h,y,s)):h>y&&w(e,p,m)}(f,m,g,s,l):o(g)?(o(t.text)&&u.setTextContent(f,""),$(f,null,g,0,g.length-1,s)):o(m)?w(m,0,m.length-1):o(t.text)&&u.setTextContent(f,""):t.text!==e.text&&u.setTextContent(f,e.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(t,e)}function S(t,e,n){if(r(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(let t=0;t{const t=document.activeElement;t&&t.vmodel&&Ps(t,"input")}));const Ts={inserted(t,e,n,o){"select"===n.tag?(o.elm&&!o.elm._vOptions?Kt(n,"postpatch",(()=>{Ts.componentUpdated(t,e,n)})):As(t,e,n.context),t._vOptions=[].map.call(t.options,Ns)):("textarea"===n.tag||Lo(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",Ds),t.addEventListener("compositionend",Ms),t.addEventListener("change",Ms),W&&(t.vmodel=!0)))},componentUpdated(t,e,n){if("select"===n.tag){As(t,e,n.context);const o=t._vOptions,r=t._vOptions=[].map.call(t.options,Ns);if(r.some(((t,e)=>!D(t,o[e])))){(t.multiple?e.value.some((t=>Es(t,r))):e.value!==e.oldValue&&Es(e.value,r))&&Ps(t,"change")}}}};function As(t,e,n){js(t,e),(q||Z)&&setTimeout((()=>{js(t,e)}),0)}function js(t,e,n){const o=e.value,r=t.multiple;if(r&&!Array.isArray(o))return;let s,i;for(let e=0,n=t.options.length;e-1,i.selected!==s&&(i.selected=s);else if(D(Ns(i),o))return void(t.selectedIndex!==e&&(t.selectedIndex=e));r||(t.selectedIndex=-1)}function Es(t,e){return e.every((e=>!D(e,t)))}function Ns(t){return"_value"in t?t._value:t.value}function Ds(t){t.target.composing=!0}function Ms(t){t.target.composing&&(t.target.composing=!1,Ps(t.target,"input"))}function Ps(t,e){const n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Is(t){return!t.componentInstance||t.data&&t.data.transition?t:Is(t.componentInstance._vnode)}var Rs={bind(t,{value:e},n){const o=(n=Is(n)).data&&n.data.transition,r=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;e&&o?(n.data.show=!0,ws(n,(()=>{t.style.display=r}))):t.style.display=e?r:"none"},update(t,{value:e,oldValue:n},o){if(!e==!n)return;(o=Is(o)).data&&o.data.transition?(o.data.show=!0,e?ws(o,(()=>{t.style.display=t.__vOriginalDisplay})):xs(o,(()=>{t.style.display="none"}))):t.style.display=e?t.__vOriginalDisplay:"none"},unbind(t,e,n,o,r){r||(t.style.display=t.__vOriginalDisplay)}},Ls={model:Ts,show:Rs};const Fs={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Hs(t){const e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Hs(Oe(e.children)):t}function Bs(t){const e={},n=t.$options;for(const o in n.propsData)e[o]=t[o];const o=n._parentListeners;for(const t in o)e[w(t)]=o[t];return e}function Us(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}const zs=t=>t.tag||me(t),Vs=t=>"show"===t.name;var Ks={name:"transition",props:Fs,abstract:!0,render(t){let e=this.$slots.default;if(!e)return;if(e=e.filter(zs),!e.length)return;const n=this.mode,o=e[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;const r=Hs(o);if(!r)return o;if(this._leaving)return Us(t,o);const i=`__transition-${this._uid}-`;r.key=null==r.key?r.isComment?i+"comment":i+r.tag:s(r.key)?0===String(r.key).indexOf(i)?r.key:i+r.key:r.key;const c=(r.data||(r.data={})).transition=Bs(this),a=this._vnode,l=Hs(a);if(r.data.directives&&r.data.directives.some(Vs)&&(r.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(r,l)&&!me(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){const e=l.data.transition=T({},c);if("out-in"===n)return this._leaving=!0,Kt(e,"afterLeave",(()=>{this._leaving=!1,this.$forceUpdate()})),Us(t,o);if("in-out"===n){if(me(r))return a;let t;const n=()=>{t()};Kt(c,"afterEnter",n),Kt(c,"enterCancelled",n),Kt(e,"delayLeave",(e=>{t=e}))}}return o}};const Js=T({tag:String,moveClass:String},Fs);delete Js.mode;var qs={props:Js,beforeMount(){const t=this._update;this._update=(e,n)=>{const o=De(this);this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept,o(),t.call(this,e,n)}},render(t){const e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),o=this.prevChildren=this.children,r=this.$slots.default||[],s=this.children=[],i=Bs(this);for(let t=0;t{if(t.data.moved){const n=t.elm,o=n.style;ms(n,e),o.transform=o.WebkitTransform=o.transitionDuration="",n.addEventListener(us,n._moveCb=function t(o){o&&o.target!==n||o&&!/transform$/.test(o.propertyName)||(n.removeEventListener(us,t),n._moveCb=null,gs(n,e))})}})))},methods:{hasMove(t,e){if(!as)return!1;if(this._hasMove)return this._hasMove;const n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((t=>{ss(n,t)})),rs(n,e),n.style.display="none",this.$el.appendChild(n);const o=_s(n);return this.$el.removeChild(n),this._hasMove=o.hasTransform}}};function Ws(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Zs(t){t.data.newPos=t.elm.getBoundingClientRect()}function Gs(t){const e=t.data.pos,n=t.data.newPos,o=e.left-n.left,r=e.top-n.top;if(o||r){t.data.moved=!0;const e=t.elm.style;e.transform=e.WebkitTransform=`translate(${o}px,${r}px)`,e.transitionDuration="0s"}}var Xs={Transition:Ks,TransitionGroup:qs};lo.config.mustUseProp=$o,lo.config.isReservedTag=Po,lo.config.isReservedAttr=yo,lo.config.getTagNamespace=Io,lo.config.isUnknownElement=function(t){if(!K)return!0;if(Po(t))return!1;if(t=t.toLowerCase(),null!=Ro[t])return Ro[t];const e=document.createElement(t);return t.indexOf("-")>-1?Ro[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Ro[t]=/HTMLUnknownElement/.test(e.toString())},T(lo.options.directives,Ls),T(lo.options.components,Xs),lo.prototype.__patch__=K?Os:j,lo.prototype.$mount=function(t,e){return function(t,e,n){let o;t.$el=e,t.$options.render||(t.$options.render=lt),Re(t,"beforeMount"),o=()=>{t._update(t._render(),n)},new An(t,o,j,{before(){t._isMounted&&!t._isDestroyed&&Re(t,"beforeUpdate")}},!0),n=!1;const r=t._preWatchers;if(r)for(let t=0;t{F.devtools&&nt&&nt.emit("init",lo)}),0);const Ys=/\{\{((?:.|\r?\n)+?)\}\}/g,Qs=/[-.*+?^${}()|[\]\/\\]/g,ti=$((t=>{const e=t[0].replace(Qs,"\\$&"),n=t[1].replace(Qs,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}));var ei={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;const n=_r(t,"class");n&&(t.staticClass=JSON.stringify(n.replace(/\s+/g," ").trim()));const o=yr(t,"class",!1);o&&(t.classBinding=o)},genData:function(t){let e="";return t.staticClass&&(e+=`staticClass:${t.staticClass},`),t.classBinding&&(e+=`class:${t.classBinding},`),e}};var ni={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;const n=_r(t,"style");n&&(t.staticStyle=JSON.stringify(Jr(n)));const o=yr(t,"style",!1);o&&(t.styleBinding=o)},genData:function(t){let e="";return t.staticStyle&&(e+=`staticStyle:${t.staticStyle},`),t.styleBinding&&(e+=`style:(${t.styleBinding}),`),e}};let oi;var ri={decode:t=>(oi=oi||document.createElement("div"),oi.innerHTML=t,oi.textContent)};const si=h("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),ii=h("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),ci=h("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),ai=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,li=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ui=`[a-zA-Z_][\\-\\.0-9_a-zA-Z${H.source}]*`,fi=`((?:${ui}\\:)?${ui})`,di=new RegExp(`^<${fi}`),pi=/^\s*(\/?)>/,hi=new RegExp(`^<\\/${fi}[^>]*>`),mi=/^]+>/i,gi=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},bi=/&(?:lt|gt|quot|amp|#39);/g,wi=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,xi=h("pre,textarea",!0),Ci=(t,e)=>t&&xi(t)&&"\n"===e[0];function ki(t,e){const n=e?wi:bi;return t.replace(n,(t=>$i[t]))}const Si=/^@|^v-on:/,Oi=/^v-|^@|^:|^#/,Ti=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Ai=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ji=/^\(|\)$/g,Ei=/^\[.*\]$/,Ni=/:(.*)$/,Di=/^:|^\.|^v-bind:/,Mi=/\.[^.\]]+(?=[^\]]*$)/g,Pi=/^v-slot(:|$)|^#/,Ii=/[\r\n]/,Ri=/[ \f\t\r\n]+/g,Li=$(ri.decode);let Fi,Hi,Bi,Ui,zi,Vi,Ki,Ji;function qi(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:tc(e),rawAttrsMap:{},parent:n,children:[]}}function Wi(t,e){Fi=e.warn||ur,Vi=e.isPreTag||E,Ki=e.mustUseProp||E,Ji=e.getTagNamespace||E,e.isReservedTag,Bi=fr(e.modules,"transformNode"),Ui=fr(e.modules,"preTransformNode"),zi=fr(e.modules,"postTransformNode"),Hi=e.delimiters;const n=[],o=!1!==e.preserveWhitespace,r=e.whitespace;let s,i,c=!1,a=!1;function l(t){if(u(t),c||t.processed||(t=Zi(t,e)),n.length||t===s||s.if&&(t.elseif||t.else)&&Xi(s,{exp:t.elseif,block:t}),i&&!t.forbidden)if(t.elseif||t.else)!function(t,e){const n=function(t){let e=t.length;for(;e--;){if(1===t[e].type)return t[e];t.pop()}}(e.children);n&&n.if&&Xi(n,{exp:t.elseif,block:t})}(t,i);else{if(t.slotScope){const e=t.slotTarget||'"default"';(i.scopedSlots||(i.scopedSlots={}))[e]=t}i.children.push(t),t.parent=i}t.children=t.children.filter((t=>!t.slotScope)),u(t),t.pre&&(c=!1),Vi(t.tag)&&(a=!1);for(let n=0;n]*>)","i")),s=t.replace(r,(function(t,r,s){return n=s.length,yi(o)||"noscript"===o||(r=r.replace(//g,"$1").replace(//g,"$1")),Ci(o,r)&&(r=r.slice(1)),e.chars&&e.chars(r),""}));a+=t.length-s.length,t=s,d(o,a-n,a)}else{let n,o,r,s=t.indexOf("<");if(0===s){if(gi.test(t)){const n=t.indexOf("--\x3e");if(n>=0){e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,n),a,a+n+3),l(n+3);continue}}if(vi.test(t)){const e=t.indexOf("]>");if(e>=0){l(e+2);continue}}const n=t.match(mi);if(n){l(n[0].length);continue}const o=t.match(hi);if(o){const t=a;l(o[0].length),d(o[1],t,a);continue}const r=u();if(r){f(r),Ci(r.tagName,t)&&l(1);continue}}if(s>=0){for(o=t.slice(s);!(hi.test(o)||di.test(o)||gi.test(o)||vi.test(o)||(r=o.indexOf("<",1),r<0));)s+=r,o=t.slice(s);n=t.substring(0,s)}s<0&&(n=t),n&&l(n.length),e.chars&&n&&e.chars(n,a-n.length,a)}if(t===i){e.chars&&e.chars(t);break}}function l(e){a+=e,t=t.substring(e)}function u(){const e=t.match(di);if(e){const n={tagName:e[1],attrs:[],start:a};let o,r;for(l(e[0].length);!(o=t.match(pi))&&(r=t.match(li)||t.match(ai));)r.start=a,l(r[0].length),r.end=a,n.attrs.push(r);if(o)return n.unarySlash=o[1],l(o[0].length),n.end=a,n}}function f(t){const i=t.tagName,a=t.unarySlash;o&&("p"===c&&ci(i)&&d(c),s(i)&&c===i&&d(i));const l=r(i)||!!a,u=t.attrs.length,f=new Array(u);for(let n=0;n=0&&n[s].lowerCasedTag!==i;s--);else s=0;if(s>=0){for(let t=n.length-1;t>=s;t--)e.end&&e.end(n[t].tag,o,r);n.length=s,c=s&&n[s-1].tag}else"br"===i?e.start&&e.start(t,[],!0,o,r):"p"===i&&(e.start&&e.start(t,[],!1,o,r),e.end&&e.end(t,o,r))}d()}(t,{warn:Fi,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start(t,o,r,u,f){const d=i&&i.ns||Ji(t);q&&"svg"===d&&(o=function(t){const e=[];for(let n=0;na&&(r.push(c=t.slice(a,i)),o.push(JSON.stringify(c)));const e=ar(s[1].trim());o.push(`_s(${e})`),r.push({"@binding":e}),a=i+s[0].length}return a{if(!t.slotScope)return t.parent=s,!0})),s.slotScope=e.value||"_empty_",t.children=[],t.plain=!1}}}(t),"slot"===(n=t).tag&&(n.slotName=yr(n,"name")),function(t){let e;(e=yr(t,"is"))&&(t.component=e);null!=_r(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(let n=0;n{t[e.slice(1)]=!0})),t}}function tc(t){const e={};for(let n=0,o=t.length;n-1`+("true"===s?`:(${e})`:`:_q(${e},${s})`)),vr(t,"change",`var $$a=${e},$$el=$event.target,$$c=$$el.checked?(${s}):(${i});if(Array.isArray($$a)){var $$v=${o?"_n("+r+")":r},$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(${xr(e,"$$a.concat([$$v])")})}else{$$i>-1&&(${xr(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")})}}else{${xr(e,"$$c")}}`,null,!0)}(t,o,r);else if("input"===s&&"radio"===i)!function(t,e,n){const o=n&&n.number;let r=yr(t,"value")||"null";r=o?`_n(${r})`:r,dr(t,"checked",`_q(${e},${r})`),vr(t,"change",xr(e,r),null,!0)}(t,o,r);else if("input"===s||"textarea"===s)!function(t,e,n){const o=t.attrsMap.type,{lazy:r,number:s,trim:i}=n||{},c=!r&&"range"!==o,a=r?"change":"range"===o?"__r":"input";let l="$event.target.value";i&&(l="$event.target.value.trim()");s&&(l=`_n(${l})`);let u=xr(e,l);c&&(u=`if($event.target.composing)return;${u}`);dr(t,"value",`(${e})`),vr(t,a,u,null,!0),(i||s)&&vr(t,"blur","$forceUpdate()")}(t,o,r);else if(!F.isReservedTag(s))return wr(t,o,r),!1;return!0},text:function(t,e){e.value&&dr(t,"textContent",`_s(${e.value})`,e)},html:function(t,e){e.value&&dr(t,"innerHTML",`_s(${e.value})`,e)}},isPreTag:t=>"pre"===t,isUnaryTag:si,mustUseProp:$o,canBeLeftOpenTag:ii,isReservedTag:Po,getTagNamespace:Io,staticKeys:function(t){return t.reduce(((t,e)=>t.concat(e.staticKeys||[])),[]).join(",")}(rc)};let ic,cc;const ac=$((function(t){return h("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function lc(t,e){t&&(ic=ac(e.staticKeys||""),cc=e.isReservedTag||E,uc(t),fc(t,!1))}function uc(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||m(t.tag)||!cc(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(ic)))}(t),1===t.type){if(!cc(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(let e=0,n=t.children.length;e|^function(?:\s+[\w$]+)?\s*\(/,pc=/\([^)]*?\);*$/,hc=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,mc={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},gc={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},vc=t=>`if(${t})return null;`,yc={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:vc("$event.target !== $event.currentTarget"),ctrl:vc("!$event.ctrlKey"),shift:vc("!$event.shiftKey"),alt:vc("!$event.altKey"),meta:vc("!$event.metaKey"),left:vc("'button' in $event && $event.button !== 0"),middle:vc("'button' in $event && $event.button !== 1"),right:vc("'button' in $event && $event.button !== 2")};function _c(t,e){const n=e?"nativeOn:":"on:";let o="",r="";for(const e in t){const n=$c(t[e]);t[e]&&t[e].dynamic?r+=`${e},${n},`:o+=`"${e}":${n},`}return o=`{${o.slice(0,-1)}}`,r?n+`_d(${o},[${r.slice(0,-1)}])`:n+o}function $c(t){if(!t)return"function(){}";if(Array.isArray(t))return`[${t.map((t=>$c(t))).join(",")}]`;const e=hc.test(t.value),n=dc.test(t.value),o=hc.test(t.value.replace(pc,""));if(t.modifiers){let r="",s="";const i=[];for(const e in t.modifiers)if(yc[e])s+=yc[e],mc[e]&&i.push(e);else if("exact"===e){const e=t.modifiers;s+=vc(["ctrl","shift","alt","meta"].filter((t=>!e[t])).map((t=>`$event.${t}Key`)).join("||"))}else i.push(e);i.length&&(r+=function(t){return`if(!$event.type.indexOf('key')&&${t.map(bc).join("&&")})return null;`}(i)),s&&(r+=s);return`function($event){${r}${e?`return ${t.value}.apply(null, arguments)`:n?`return (${t.value}).apply(null, arguments)`:o?`return ${t.value}`:t.value}}`}return e||n?t.value:`function($event){${o?`return ${t.value}`:t.value}}`}function bc(t){const e=parseInt(t,10);if(e)return`$event.keyCode!==${e}`;const n=mc[t],o=gc[t];return`_k($event.keyCode,${JSON.stringify(t)},${JSON.stringify(n)},$event.key,${JSON.stringify(o)})`}var wc={on:function(t,e){t.wrapListeners=t=>`_g(${t},${e.value})`},bind:function(t,e){t.wrapData=n=>`_b(${n},'${t.tag}',${e.value},${e.modifiers&&e.modifiers.prop?"true":"false"}${e.modifiers&&e.modifiers.sync?",true":""})`},cloak:j};class xc{constructor(t){this.options=t,this.warn=t.warn||ur,this.transforms=fr(t.modules,"transformCode"),this.dataGenFns=fr(t.modules,"genData"),this.directives=T(T({},wc),t.directives);const e=t.isReservedTag||E;this.maybeComponent=t=>!!t.component||!e(t.tag),this.onceId=0,this.staticRenderFns=[],this.pre=!1}}function Cc(t,e){const n=new xc(e);return{render:`with(this){return ${t?"script"===t.tag?"null":kc(t,n):'_c("div")'}}`,staticRenderFns:n.staticRenderFns}}function kc(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Oc(t,e);if(t.once&&!t.onceProcessed)return Tc(t,e);if(t.for&&!t.forProcessed)return Ec(t,e);if(t.if&&!t.ifProcessed)return Ac(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){const n=t.slotName||'"default"',o=Pc(t,e);let r=`_t(${n}${o?`,function(){return ${o}}`:""}`;const s=t.attrs||t.dynamicAttrs?Lc((t.attrs||[]).concat(t.dynamicAttrs||[]).map((t=>({name:w(t.name),value:t.value,dynamic:t.dynamic})))):null,i=t.attrsMap["v-bind"];!s&&!i||o||(r+=",null");s&&(r+=`,${s}`);i&&(r+=`${s?"":",null"},${i}`);return r+")"}(t,e);{let n;if(t.component)n=function(t,e,n){const o=e.inlineTemplate?null:Pc(e,n,!0);return`_c(${t},${Nc(e,n)}${o?`,${o}`:""})`}(t.component,t,e);else{let o,r;(!t.plain||t.pre&&e.maybeComponent(t))&&(o=Nc(t,e));const s=e.options.bindings;s&&!1!==s.__isScriptSetup&&(r=Sc(s,t.tag)||Sc(s,w(t.tag))||Sc(s,x(w(t.tag)))),r||(r=`'${t.tag}'`);const i=t.inlineTemplate?null:Pc(t,e,!0);n=`_c(${r}${o?`,${o}`:""}${i?`,${i}`:""})`}for(let o=0;o{const n=e[t];return n.slotTargetDynamic||n.if||n.for||Dc(n)})),r=!!t.if;if(!o){let e=t.parent;for(;e;){if(e.slotScope&&"_empty_"!==e.slotScope||e.for){o=!0;break}e.if&&(r=!0),e=e.parent}}const s=Object.keys(e).map((t=>Mc(e[t],n))).join(",");return`scopedSlots:_u([${s}]${o?",null,true":""}${!o&&r?`,null,false,${function(t){let e=5381,n=t.length;for(;n;)e=33*e^t.charCodeAt(--n);return e>>>0}(s)}`:""})`}(t,t.scopedSlots,e)},`),t.model&&(n+=`model:{value:${t.model.value},callback:${t.model.callback},expression:${t.model.expression}},`),t.inlineTemplate){const o=function(t,e){const n=t.children[0];if(n&&1===n.type){const t=Cc(n,e.options);return`inlineTemplate:{render:function(){${t.render}},staticRenderFns:[${t.staticRenderFns.map((t=>`function(){${t}}`)).join(",")}]}`}}(t,e);o&&(n+=`${o},`)}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n=`_b(${n},"${t.tag}",${Lc(t.dynamicAttrs)})`),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Dc(t){return 1===t.type&&("slot"===t.tag||t.children.some(Dc))}function Mc(t,e){const n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return Ac(t,e,Mc,"null");if(t.for&&!t.forProcessed)return Ec(t,e,Mc);const o="_empty_"===t.slotScope?"":String(t.slotScope),r=`function(${o}){return ${"template"===t.tag?t.if&&n?`(${t.if})?${Pc(t,e)||"undefined"}:undefined`:Pc(t,e)||"undefined":kc(t,e)}}`,s=o?"":",proxy:true";return`{key:${t.slotTarget||'"default"'},fn:${r}${s}}`}function Pc(t,e,n,o,r){const s=t.children;if(s.length){const t=s[0];if(1===s.length&&t.for&&"template"!==t.tag&&"slot"!==t.tag){const r=n?e.maybeComponent(t)?",1":",0":"";return`${(o||kc)(t,e)}${r}`}const i=n?function(t,e){let n=0;for(let o=0;oIc(t.block)))){n=2;break}(e(r)||r.ifConditions&&r.ifConditions.some((t=>e(t.block))))&&(n=1)}}return n}(s,e.maybeComponent):0,c=r||Rc;return`[${s.map((t=>c(t,e))).join(",")}]${i?`,${i}`:""}`}}function Ic(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function Rc(t,e){return 1===t.type?kc(t,e):3===t.type&&t.isComment?function(t){return`_e(${JSON.stringify(t.text)})`}(t):function(t){return`_v(${2===t.type?t.expression:Fc(JSON.stringify(t.text))})`}(t)}function Lc(t){let e="",n="";for(let o=0;oHc(t,a))),e[s]=c}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");const Uc=(zc=function(t,e){const n=Wi(t.trim(),e);!1!==e.optimize&&lc(n,e);const o=Cc(n,e);return{ast:n,render:o.render,staticRenderFns:o.staticRenderFns}},function(t){function e(e,n){const o=Object.create(t),r=[],s=[];if(n){n.modules&&(o.modules=(t.modules||[]).concat(n.modules)),n.directives&&(o.directives=T(Object.create(t.directives||null),n.directives));for(const t in n)"modules"!==t&&"directives"!==t&&(o[t]=n[t])}o.warn=(t,e,n)=>{(n?s:r).push(t)};const i=zc(e.trim(),o);return i.errors=r,i.tips=s,i}return{compile:e,compileToFunctions:Bc(e)}});var zc;const{compile:Vc,compileToFunctions:Kc}=Uc(sc);let Jc;function qc(t){return Jc=Jc||document.createElement("div"),Jc.innerHTML=t?'':'

',Jc.innerHTML.indexOf(" ")>0}const Wc=!!K&&qc(!1),Zc=!!K&&qc(!0),Gc=$((t=>{const e=Fo(t);return e&&e.innerHTML})),Xc=lo.prototype.$mount;lo.prototype.$mount=function(t,e){if((t=t&&Fo(t))===document.body||t===document.documentElement)return this;const n=this.$options;if(!n.render){let e=n.template;if(e)if("string"==typeof e)"#"===e.charAt(0)&&(e=Gc(e));else{if(!e.nodeType)return this;e=e.innerHTML}else t&&(e=function(t){if(t.outerHTML)return t.outerHTML;{const e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}}(t));if(e){const{render:t,staticRenderFns:o}=Kc(e,{outputSourceRange:!1,shouldDecodeNewlines:Wc,shouldDecodeNewlinesForHref:Zc,delimiters:n.delimiters,comments:n.comments},this);n.render=t,n.staticRenderFns=o}}return Xc.call(this,t,e)},lo.compile=Kc,T(lo,Cn),lo.effect=function(t,e){const n=new An(it,t,j,{sync:!0});e&&(n.update=()=>{e((()=>n.run()))})},module.exports=lo; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/global */ /******/ !function() { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. !function() { "use strict"; // EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js var vue_common_prod = __webpack_require__(317); var vue_common_prod_default = /*#__PURE__*/__webpack_require__.n(vue_common_prod); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/utils/event-bus.js /* harmony default export */ var event_bus = (new (vue_common_prod_default())()); ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/archive/browser.vue?vue&type=template&id=727e58b0& var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.archive ? _c("div", { staticClass: "ai1wm-overlay", staticStyle: { display: "block" } }, [_c("div", { staticClass: "ai1wm-modal-container ai1wm-modal-container-v2", "class": { "ai1wm-modal-loading": _vm.loading }, attrs: { role: "dialog", tabindex: "-1" }, on: { click: function click($event) { $event.stopPropagation(); } } }, [_vm.error ? _c("div", { staticClass: "ai1wm-folder-container" }, [_c("h1", [_vm._v("\n " + _vm._s(_vm.__("archive_browser_error")) + "\n "), _c("a", { attrs: { href: "#" }, on: { click: function click($event) { $event.preventDefault(); _vm.archive = null; } } }, [_c("i", { staticClass: "ai1wm-icon-close" })])]), _vm._v(" "), _c("p", [_vm._v(_vm._s(_vm.error))])]) : _vm.loading ? _c("ai1wm-spinner") : _vm.processing ? _c("progress-bar", { attrs: { title: _vm.__("progress_bar_title"), total: _vm.total, processed: _vm.processed } }) : _c("div", { staticClass: "ai1wm-folder-container" }, [_c("h1", [_vm._v("\n " + _vm._s(_vm.__("archive_browser_title")) + "\n "), _c("a", { attrs: { href: "#" }, on: { click: function click($event) { $event.preventDefault(); _vm.archive = null; } } }, [_c("i", { staticClass: "ai1wm-icon-close" })])]), _vm._v(" "), _c("folder", { attrs: { folder: _vm.tree.root, index: 0 } })], 1)], 1)]) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/archive/browser.vue?vue&type=template&id=727e58b0& ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/archive/folder.vue?vue&type=template&id=ceb1e49c& var foldervue_type_template_id_ceb1e49c_render = function render() { var _vm = this, _c = _vm._self._c; return _c("ul", [_vm.tree.expanded ? _c("li", [_c("a", { style: { "padding-left": _vm.index + "rem" }, attrs: { href: "#" }, on: { click: function click($event) { $event.preventDefault(); return _vm.__toggle.apply(null, arguments); } } }, [_c("i", { staticClass: "ai1wm-icon-folder-secondary-open" }), _vm._v(" " + _vm._s(_vm.__name(_vm.tree.name)) + "\n ")]), _vm._v(" "), _vm._l(_vm.tree.children, function (child) { return _c("folder", { key: "folder_" + child.name, attrs: { folder: child, index: _vm.index + 1 } }); }), _vm._v(" "), _vm._l(_vm.tree.files, function (file) { return _c("ul", { key: "files_" + file.name }, [_c("li", [_c("a", { style: { "padding-left": _vm.index + 1 + "rem" }, attrs: { href: "#" }, on: { click: function click($event) { $event.preventDefault(); return _vm.download(file); } } }, [_c("i", { staticClass: "ai1wm-icon-file" }), _vm._v(" "), _c("span", { staticClass: "ai1wm-archive-browser-filename" }, [_vm._v(_vm._s(_vm.__name(file.name)))]), _vm._v(" "), _c("span", { staticClass: "ai1wm-archive-browser-filesize" }, [_vm._v(_vm._s(_vm.__size(file.size)))]), _vm._v(" "), _c("i", { staticClass: "ai1wm-icon-arrow-down" })])])]); })], 2) : _c("li", [_c("a", { style: { "padding-left": _vm.index + "rem" }, attrs: { href: "#" }, on: { click: function click($event) { $event.preventDefault(); _vm.tree.expanded = !_vm.tree.expanded; } } }, [_c("i", { staticClass: "ai1wm-icon-folder-secondary" }), _vm._v(" " + _vm._s(_vm.__name(_vm.tree.name)) + "\n ")])])]); }; var foldervue_type_template_id_ceb1e49c_staticRenderFns = []; foldervue_type_template_id_ceb1e49c_render._withStripped = true; ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/archive/folder.vue?vue&type=template&id=ceb1e49c& ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/archive/folder.vue?vue&type=script&lang=js& /* harmony default export */ var foldervue_type_script_lang_js_ = ({ name: 'Folder', props: { folder: { type: Object, required: true }, index: { type: Number, "default": 0 } }, data: function data() { return { tree: this.folder }; }, methods: { download: function download(file) { event_bus.$emit('ai1wm-download-file', file); }, __toggle: function __toggle() { if (this.index > 0) { this.tree.expanded = !this.tree.expanded; } }, __name: function __name(filename) { return Ai1wm.Util.basename(filename); }, __size: function __size(size) { return Ai1wm.Util.sizeFormat(size); } } }); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/archive/folder.vue?vue&type=script&lang=js& /* harmony default export */ var archive_foldervue_type_script_lang_js_ = (foldervue_type_script_lang_js_); ;// CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js /* globals __VUE_SSR_CONTEXT__ */ // IMPORTANT: Do NOT use ES2015 features in this file (except for modules). // This module is a runtime utility for cleaner component module output and will // be included in the final webpack user bundle. function normalizeComponent( scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier /* server only */, shadowMode /* vue-cli only */ ) { // Vue.extend constructor export interop var options = typeof scriptExports === 'function' ? scriptExports.options : scriptExports // render functions if (render) { options.render = render options.staticRenderFns = staticRenderFns options._compiled = true } // functional template if (functionalTemplate) { options.functional = true } // scopedId if (scopeId) { options._scopeId = 'data-v-' + scopeId } var hook if (moduleIdentifier) { // server build hook = function (context) { // 2.3 injection context = context || // cached call (this.$vnode && this.$vnode.ssrContext) || // stateful (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional // 2.2 with runInNewContext: true if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { context = __VUE_SSR_CONTEXT__ } // inject component styles if (injectStyles) { injectStyles.call(this, context) } // register component module identifier for async chunk inferrence if (context && context._registeredComponents) { context._registeredComponents.add(moduleIdentifier) } } // used by ssr in case component is cached and beforeCreate // never gets called options._ssrRegister = hook } else if (injectStyles) { hook = shadowMode ? function () { injectStyles.call( this, (options.functional ? this.parent : this).$root.$options.shadowRoot ) } : injectStyles } if (hook) { if (options.functional) { // for template-only hot-reload because in that case the render fn doesn't // go through the normalizer options._injectStyles = hook // register for functional component in vue file var originalRender = options.render options.render = function renderWithStyleInjection(h, context) { hook.call(context) return originalRender(h, context) } } else { // inject component registration as beforeCreate hook var existing = options.beforeCreate options.beforeCreate = existing ? [].concat(existing, hook) : [hook] } } return { exports: scriptExports, options: options } } ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/archive/folder.vue /* normalize component */ ; var component = normalizeComponent( archive_foldervue_type_script_lang_js_, foldervue_type_template_id_ceb1e49c_render, foldervue_type_template_id_ceb1e49c_staticRenderFns, false, null, null, null ) /* harmony default export */ var folder = (component.exports); ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/progress-bar.vue?vue&type=template&id=8b61c75e& var progress_barvue_type_template_id_8b61c75e_render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "ai1wm-progress-bar-v2" }, [_c("h1", { domProps: { textContent: _vm._s(_vm.title) } }), _vm._v(" "), _c("div", { staticClass: "ai1wm-progress-bar-v2-container" }, [_c("div", { key: "progres" + _vm.progress, staticClass: "ai1wm-progress-bar-v2-meter" }, [_c("div", { staticClass: "ai1wm-progress-bar-v2-percent", style: { left: _vm.progress + "%" } }, [_vm._v("\n " + _vm._s(_vm.progress) + "%\n ")]), _vm._v(" "), _c("span", { staticClass: "ai1wm-progress-bar-v2-slider", style: { width: _vm.progress + "%" } })])])]); }; var progress_barvue_type_template_id_8b61c75e_staticRenderFns = []; progress_barvue_type_template_id_8b61c75e_render._withStripped = true; ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/progress-bar.vue?vue&type=template&id=8b61c75e& ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/progress-bar.vue?vue&type=script&lang=js& /* harmony default export */ var progress_barvue_type_script_lang_js_ = ({ props: { title: { type: String, required: true }, total: { type: Number, required: true }, processed: { type: Number, required: true } }, computed: { progress: function progress() { if (this.total > 0) { return parseInt(this.processed / this.total * 100); } return 0; } } }); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/progress-bar.vue?vue&type=script&lang=js& /* harmony default export */ var vue_components_progress_barvue_type_script_lang_js_ = (progress_barvue_type_script_lang_js_); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/progress-bar.vue /* normalize component */ ; var progress_bar_component = normalizeComponent( vue_components_progress_barvue_type_script_lang_js_, progress_barvue_type_template_id_8b61c75e_render, progress_barvue_type_template_id_8b61c75e_staticRenderFns, false, null, null, null ) /* harmony default export */ var progress_bar = (progress_bar_component.exports); ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/ai1wm-spinner.vue?vue&type=template&id=62088451& var ai1wm_spinnervue_type_template_id_62088451_render = function render() { var _vm = this, _c = _vm._self._c; return _vm._m(0); }; var ai1wm_spinnervue_type_template_id_62088451_staticRenderFns = [function () { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "ai1wm-spin-container" }, [_c("div", { staticClass: "ai1wm-spinner ai1wm-spin-right" }, [_c("img", { attrs: { src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAF1QTFRFAAAAkpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWakpWaDpDRYAAAAB90Uk5TABAwsM/A/9h/Tz/v37+fIPBQQG/McIDgr2CQ0KCPX6xBX1EAAALLSURBVHic7Zp/c7MgDMfFVh43rVr3SOuP9f2/zFnbmqAIiMTb3fr9Y7e7Uj+GhBBCg+C3iu3ACA/0DHaMdmBwckjPIIfcGdSQgUEMeTBoIU8GKeTF4P/i+OOTZkWODJ4Mf9NTHNIxnpDhv+yDiIEgd4Pi3BskLBYgvTJvGESZQnqMrzAAyhzCk7NvigLC+cnTnL0oSghPSq8UNYTzL5+U/2UlokJByTxSHrkrrw6UlDFBsuoyoVy9UXAWri9EtsipvpK903iiTEqiPJIotR/KLIcIab143wCeOuMpOxJBpCTtyy0GCtWEBSGCnKggQY0ovhL/XA1AUjJI0O5hCnILnVeCbocACxjEMdlawfmF0PX5Hq5HXiGcrzN9muwFric87Xd7OAUymKCDQHx1dJBghFCeLMcsqVyOLH5pU70BpYvq09LPbDaWkE1xId4QCsgmx+uji/lZRnoIrNVNu1qif9VW/w52gvlQ91zB0A2HZdi11OEjDJ9bCRa8ej+Bl9jgeWgmqTsUMJ0LAywE28llYQR4vnKFwJQvLTaYT+dSIx0fsbRfoILZMb7QGWWxWIGDv2NVDoYsp6ZqoykQn5qCCJWyLqmFgSGFZhg6YDgsSGH3bWTK+mMM7BW80NaoyJR0ZTHLUENPPw3YlHURhrvTekPkXsyq3lWGvmgq3NjFjYIZ5vyKYt2ewjCjsAiZBlOOVt7H/rDsqrX4GzYt5VJqFNvVOrncVPw2GMO+peGtZeSHMiW56Qbf5H63KXoRhctKFzG3VB5p4/SX6gmFJ5nCN2E27dqvYcxmbOBcv9CV3OftOr8XWMdQUgadBqnvHdrV9UfeKh+k0cGlPdCYn4vlWOGU0zsFjVrnLhoT5qcPKpwLtbvyzkzoM8nWZo0RUwgf93J5pQm0tvbWcgpFpCJElb9734fOogNSETXC072iSnlZ7vELnLfe+mv6AYyEOZ4mvtpBAAAAAElFTkSuQmCC" } })]), _vm._v(" "), _c("div", { staticClass: "ai1wm-spinner ai1wm-spin-left" }, [_c("img", { attrs: { src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAFpQTFRFAAAABp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/jBp/j79BQvAAAAB50Uk5TACA/f19Pn9//EO9vMM9gkMDgQIDwr7BwoL/QUPSTc7QwrgAAAa9JREFUeJztmGuXgiAQQFE3AyMzZdVy9///zdXaYJRHLqDn7DlzPwbN5TEDFCEIgiAIgiAI8s9J0mziI022MhzyI5Uc8wOLbmAZMDwpssiaU7FURNfws0kxceaxHKVxGr+TOUVy2BUT+Q6OKJa3DkovoQ6uhayu2kd1mIPNquN6eSZTUlYzSRGWyQ0IJUrQwGeazxBHAgK1i+F2ItKC9SpMrzVyYLn5OxKXg5AaTMX/WO5kjLtxazv3INahUsuy5iqbC1+HWq3K0gNUqu9JqUIMyybWTPdjmn7JLt/pxN8LRhaJcA0AYpuxg8r1XZPFnB4rJY2ptY/iIGenRLMIrxOMuiULi/DLL/dyjSl2D3coia2coUXL8pW0rwBHWw8mS760dXmHukysS/E6ib0dZHi389IScMszKSnsJzl37Nkq1L467tcyzAGPDseiD2HPCCZWWQKBj5VIj14dOBV62+rnFbjFR/LDNpb7zEKLWx74JjWRCLrAXpj+aC/uLSTaPbuJhAxiBwnh1x0khPU7SMa3dbWDZNS0O0jGkulasbnkIarraP9BIAiCIAiCIIiNHyohJRyvfZJVAAAAAElFTkSuQmCC" } })])]); }]; ai1wm_spinnervue_type_template_id_62088451_render._withStripped = true; ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/ai1wm-spinner.vue?vue&type=template&id=62088451& ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/ai1wm-spinner.vue?vue&type=script&lang=js& /* harmony default export */ var ai1wm_spinnervue_type_script_lang_js_ = ({}); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/ai1wm-spinner.vue?vue&type=script&lang=js& /* harmony default export */ var vue_components_ai1wm_spinnervue_type_script_lang_js_ = (ai1wm_spinnervue_type_script_lang_js_); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/ai1wm-spinner.vue /* normalize component */ ; var ai1wm_spinner_component = normalizeComponent( vue_components_ai1wm_spinnervue_type_script_lang_js_, ai1wm_spinnervue_type_template_id_62088451_render, ai1wm_spinnervue_type_template_id_62088451_staticRenderFns, false, null, null, null ) /* harmony default export */ var ai1wm_spinner = (ai1wm_spinner_component.exports); // EXTERNAL MODULE: ./node_modules/file-saver/dist/FileSaver.min.js var FileSaver_min = __webpack_require__(162); ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./lib/view/assets-development/javascript/vue-components/archive/browser.vue?vue&type=script&lang=js& function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Tree = /*#__PURE__*/_createClass(function Tree(name) { _classCallCheck(this, Tree); this.root = new Node(name, true); this.root.parent = null; this.root.tree = this; }); var Node = /*#__PURE__*/function () { function Node(name, expanded) { _classCallCheck(this, Node); this.name = name; this.children = []; this.files = []; this.expanded = !!expanded; } _createClass(Node, [{ key: "addChild", value: function addChild(child) { child.parent = this; this.children.push(child); return child; } }, { key: "findNode", value: function findNode(name) { if (this.name === name) { return this; } return this.children.find(function (child) { return child.findNode(name); }); } }, { key: "getRootNode", value: function getRootNode() { if (this.parent === null) { return this; } return this.parent.getRootNode(); } }]); return Node; }(); var $ = jQuery; /* harmony default export */ var browservue_type_script_lang_js_ = ({ components: { Ai1wmSpinner: ai1wm_spinner, ProgressBar: progress_bar, Folder: folder }, data: function data() { return { error: null, loading: true, processing: true, archive: null, tree: null, total: 100, processed: 0 }; }, watch: { processed: function processed(newValue) { var _this2 = this; if (newValue >= this.total) { setTimeout(function () { return _this2.processing = false; }, 100); } } }, mounted: function mounted() { event_bus.$on('ai1wm-list-content', this.listContent); event_bus.$on('ai1wm-download-file', this.downloadFile); }, methods: { listContent: function listContent(archive) { this.error = null; this.loading = true; this.processing = true; this.tree = new Tree(archive); var _this = this; this.archive = archive; _this.processed = 0; $.ajax({ url: ai1wm_list.ajax.url, type: 'POST', dataType: 'json', data: { secret_key: ai1wm_list.secret_key, archive: archive } }).done(function (data) { if (data.error) { _this.error = data.error; _this.loading = false; _this.processing = true; return; } setTimeout(function () { _this.total = data.length; _this.loading = false; }, 5); data.forEach(function (d) { setTimeout(function () { _this.addFile(d); _this.processed += 1; }, 50); }); }).fail(function () { _this.error = _this.__('archive_browser_list_error'); _this.loading = false; _this.processing = false; }); }, downloadFile: function downloadFile(file) { var params = { secret_key: ai1wm_list.secret_key, archive: this.archive, file_name: file.name, file_size: file.size, offset: file.offset }; var request = new XMLHttpRequest(); request.addEventListener('readystatechange', function () { if (request.readyState === 2 && request.status === 200) {// Download is being started } else if (request.readyState === 3) {// Download is under progress } else if (request.readyState === 4) { // Downloading has finished if (request.status < 400) { (0,FileSaver_min.saveAs)(request.response, Ai1wm.Util.basename(file.name)); } else { /* eslint-disable no-alert */ alert(ai1wm_locale.archive_browser_download_error); /* eslint-enable no-alert */ } } }); request.responseType = 'blob'; var formData = new FormData(); for (var key in params) { formData.append(key, params[key]); } request.open('post', ai1wm_list.download.url); request.send(formData); }, addFile: function addFile(f) { var node = this.tree.root; var name = f.filename; var size = f.size; var offset = f.offset; var prefix = name.match(/[\\|/]/) ? this.getPrefix(name) : ''; if (prefix.length > 0) { var parent = ''; prefix.split('/').forEach(function (path) { parent += '/' + path; var foundNode = node.findNode(parent); node = foundNode ? foundNode : node.addChild(new Node(parent)); }); } node.files.push({ name: name, size: size, offset: offset }); }, getPrefix: function getPrefix(filename) { return Ai1wm.Util.dirname(filename); }, __: function __(key) { return ai1wm_locale[key]; } } }); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/archive/browser.vue?vue&type=script&lang=js& /* harmony default export */ var archive_browservue_type_script_lang_js_ = (browservue_type_script_lang_js_); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/vue-components/archive/browser.vue /* normalize component */ ; var browser_component = normalizeComponent( archive_browservue_type_script_lang_js_, render, staticRenderFns, false, null, null, null ) /* harmony default export */ var browser = (browser_component.exports); ;// CONCATENATED MODULE: ./lib/view/assets-development/javascript/backups.js /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Feedback = __webpack_require__(332); var Import = __webpack_require__(936); var Export = __webpack_require__(12); var Restore = __webpack_require__(874); // Vue.config.devtools = true; vue_common_prod_default().component('ArchiveBrowser', browser); window.addEventListener('DOMContentLoaded', function () { new (vue_common_prod_default())({ el: '#ai1wm-backups-list-archive-browser' }); }); jQuery(document).ready(function ($) { 'use strict'; // 3 dots menu $('#ai1wm-backups-list').on('click', '.ai1wm-backup-dots', function (e) { e.preventDefault(); e.stopPropagation(); var menu = $(this).next('div.ai1wm-backup-dots-menu'); $('div.ai1wm-backup-dots-menu').not(menu).hide(); $(menu).toggle(); }); $(document).on('click', 'body', function () { $('div.ai1wm-backup-dots-menu').hide(); }); // Delete file $('#ai1wm-backups-list').on('click', '.ai1wm-backup-delete', function (e) { var self = $(this); var counter = $('.ai1wm-menu-count'); // Delete file /* eslint-disable no-alert */ if (confirm(ai1wm_locale.want_to_delete_this_file)) { /* eslint-enable no-alert */ $.ajax({ url: ai1wm_backups.ajax.url, type: 'POST', dataType: 'json', data: { secret_key: ai1wm_backups.secret_key, archive: self.data('archive') }, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (data) { if (data.errors.length === 0) { self.closest('tr').remove(); counter.text(+counter.text() - 1); if (counter.text() > 1) { counter.prop('title', ai1wm_locale.backups_count_plural.replace('%d', counter.text())); } else { if (+counter.text() === 0) { counter.addClass('ai1wm-menu-hide'); } counter.prop('title', ai1wm_locale.backups_count_singular.replace('%d', counter.text())); } if ($('.ai1wm-backups tbody tr').length === 1) { $('.ai1wm-backups').hide(); $('.ai1wm-backups-empty').show(); } } }); } e.preventDefault(); }); // Restore from file $('#ai1wm-backups-list').on('click', '.ai1wm-backup-restore', function (e) { e.preventDefault(); /* eslint-disable no-unused-vars */ if (Ai1wm.MultisiteExtensionRestore) { var restore = new Ai1wm.MultisiteExtensionRestore($(this).data('archive'), $(this).data('size')); } else if (Ai1wm.UnlimitedExtensionRestore) { var _restore = new Ai1wm.UnlimitedExtensionRestore($(this).data('archive'), $(this).data('size')); } else if (Ai1wm.FreeExtensionRestore) { var _restore2 = new Ai1wm.FreeExtensionRestore($(this).data('archive'), $(this).data('size')); } else { var _restore3 = new Ai1wm.Restore($(this).data('archive'), $(this).data('size')); } /* eslint-enable no-unused-vars */ }); // List file content $('#ai1wm-backups-list').on('click', '.ai1wm-backup-list-content', function (e) { e.preventDefault(); event_bus.$emit('ai1wm-list-content', $(this).data('archive')); }); $('#ai1wm-backups-list').on('click', '.ai1wm-backup-label-description, .ai1wm-backup-label-text', function () { $(this).hide(); $(this).closest('.ai1wm-column-name').find('.ai1wm-backup-label-holder').show(); $(this).closest('.ai1wm-column-name').find('.ai1wm-backup-label-field').trigger('focus'); }); $('#ai1wm-backups-list').on('keydown', '.ai1wm-backup-label-field', function (e) { var self = $(this); var spinner = $(''); // Update backup label if (e.which === 13) { e.preventDefault(); self.hide(); self.closest('.ai1wm-backup-label-holder').append(spinner); $.ajax({ url: ai1wm_backups.labels.url, type: 'POST', dataType: 'json', data: { secret_key: ai1wm_backups.secret_key, archive: self.data('archive'), label: self.val() }, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (data) { if (data.errors.length === 0) { spinner.remove(); self.show(); if (self.val()) { self.closest('.ai1wm-backup-label-holder').hide(); self.closest('.ai1wm-column-name').find('.ai1wm-backup-label-text').show(); self.closest('.ai1wm-column-name').find('.ai1wm-backup-label-colored').text(self.val()); } else { self.closest('.ai1wm-backup-label-holder').hide(); self.closest('.ai1wm-column-name').find('.ai1wm-backup-label-description').removeClass('ai1wm-backup-label-selected').removeAttr('style'); } self.data('value', self.val()); } }); } else if (e.which === 27) { e.preventDefault(); if (self.data('value')) { self.closest('.ai1wm-backup-label-holder').hide(); self.closest('.ai1wm-column-name').find('.ai1wm-backup-label-text').show(); } else { self.closest('.ai1wm-backup-label-holder').hide(); self.closest('.ai1wm-column-name').find('.ai1wm-backup-label-text').hide(); self.closest('.ai1wm-column-name').find('.ai1wm-backup-label-description').removeClass('ai1wm-backup-label-selected').removeAttr('style'); } self.val(self.data('value')); } }); $(document).on('ai1wm-export-status', function (e, params) { if (params.type === 'download') { if ($('.ai1wm-backups tbody tr').length > 1) { $('.ai1wm-backups-list-spinner-holder').show(); } else { $('.ai1wm-backups-empty').hide(); $('.ai1wm-backups-empty-spinner-holder').show(); } $.get(ai1wm_backups.backups.url, { secret_key: ai1wm_backups.secret_key }).done(function (data) { $('#ai1wm-backups-create').find('.ai1wm-backups-empty').hide(); $('#ai1wm-backups-create').find('.ai1wm-backups-empty-spinner-holder').hide(); $('#ai1wm-backups-list').html(data); }); } }); var model = new Export(); $('#ai1wm-create-backup').on('click', function (e) { var storage = Ai1wm.Util.random(12); var options = Ai1wm.Util.form('#ai1wm-export-form').concat({ name: 'storage', value: storage }).concat({ name: 'file', value: 1 }); // Set global params model.setParams(options); // Start export model.start(); e.preventDefault(); }); }); __webpack_require__.g.Ai1wm = jQuery.extend({}, __webpack_require__.g.Ai1wm, { Feedback: Feedback, Import: Import, Restore: Restore, Export: Export }); }(); /******/ })() ;PK'Z"view/assets/javascript/util.min.jsnuW+A/******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 139: /***/ (function(module) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var $ = jQuery; module.exports = { random: function random(len, suffix) { var text = ''; var possible = 'abcdefghijklmnopqrstuvwxyz0123456789'; for (var i = 0; i < len; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } if (suffix) { return text + suffix; } return text; }, form: function form(id) { return $(id).serializeArray(); }, ucfirst: function ucfirst(text) { return text.charAt(0).toUpperCase() + text.slice(1); }, list: function list(input) { // Convert object to list if ($.isPlainObject(input)) { var result = []; var params = decodeURIComponent($.param(input)).split('&'); // Loop over params $.each(params, function (index, item) { var value = item.split('='); // Add item result.push({ name: value[0], value: value[1] }); }); return result; } return input; }, json: function json(input) { if (typeof input === 'string') { var result = input.match(/{[\s\S]+}/); if (result !== null) { return result[0]; } } return false; }, sizeFormat: function sizeFormat(bytes) { if (parseInt(bytes) === 0) { return '0 B'; } var i = Math.floor(Math.log(bytes) / Math.log(1024)); var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; var size = (bytes / Math.pow(1024, i)).toFixed(2) * 1; if (isNaN(size)) { return '0 B'; } return size + ' ' + sizes[i]; }, dirname: function dirname(path) { return path.replace(/\\/g, '/').replace(/\/[^/]*\/?$/, ''); }, basename: function basename(path) { return path.replace(/\\/g, '/').replace(/.*\//, ''); } }; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/global */ /******/ !function() { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. !function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Util = __webpack_require__(139); __webpack_require__.g.Ai1wm = jQuery.extend({}, __webpack_require__.g.Ai1wm, { Util: Util }); }(); /******/ })() ;PK'ZX$view/assets/javascript/export.min.jsnuW+A/******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 12: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Modal = __webpack_require__(326), $ = jQuery; var Export = function Export() { var self = this; // Set params this.params = []; // Set modal this.modal = new Modal(); // Set stop listener this.modal.onStop = function (options) { self.onStop(options); }; }; Export.prototype.setParams = function (params) { this.params = Ai1wm.Util.list(params); }; Export.prototype.start = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopExport(false); } // Stop running export if (this.isExportStopped()) { return; } // Initializing beforeunload event $(window).bind('beforeunload', function () { return ai1wm_locale.stop_exporting_your_website; }); // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.preparing_to_export }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_export.secret_key }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Export $.ajax({ url: ai1wm_export.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { self.getStatus(); }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: ai1wm_locale.unable_to_start_the_export }); return; } retries++; setTimeout(self.start.bind(self, options, retries), timeout); }); }; Export.prototype.run = function (params, retries) { var self = this; retries = retries || 0; // Stop running export if (this.isExportStopped()) { return; } // Export $.ajax({ url: ai1wm_export.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (result) { if (result) { self.run(result); } }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: ai1wm_locale.unable_to_run_the_export }); return; } retries++; setTimeout(self.run.bind(self, params, retries), timeout); }); }; Export.prototype.clean = function (options, retries) { var self = this; retries = retries || 0; // Reset stop flag if (retries === 0) { this.stopExport(true); } // Set initial status this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_export }); // Set params var params = this.params.concat({ name: 'secret_key', value: ai1wm_export.secret_key }).concat({ name: 'priority', value: 300 }); // Set additional params if (options) { params = params.concat(Ai1wm.Util.list(options)); } // Clean $.ajax({ url: ai1wm_export.ajax.url, type: 'POST', dataType: 'json', data: params, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { // Unbinding the beforeunload event when we stop exporting $(window).unbind('beforeunload'); // Destroy modal self.modal.destroy(); }).fail(function (xhr) { var timeout = retries * 1000; try { var json = Ai1wm.Util.json(xhr.responseText); if (json) { var result = JSON.parse(json); var error = result.errors.pop(); if (error.message) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: error.message }); return; } } } catch (e) {} if (retries >= 5) { self.stopExport(true); self.setStatus({ type: 'error', title: ai1wm_locale.unable_to_export, message: ai1wm_locale.unable_to_stop_the_export }); return; } retries++; setTimeout(self.clean.bind(self, options, retries), timeout); }); }; Export.prototype.getStatus = function () { var self = this; // Stop getting status if (this.isExportStopped()) { return; } this.statusXhr = $.ajax({ url: ai1wm_export.status.url, type: 'GET', dataType: 'json', cache: false, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (params) { if (params) { self.setStatus(params); // Next status switch (params.type) { case 'done': case 'error': case 'download': // Unbinding beforeunload event when any case is performed $(window).unbind('beforeunload'); return; } } // Export is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }).fail(function () { // Export is not done yet, let's check status in 3 seconds setTimeout(self.getStatus.bind(self), 3000); }); }; Export.prototype.setStatus = function (params) { this.modal.render(params); }; Export.prototype.onStop = function (options) { this.clean(options); }; Export.prototype.stopExport = function (isStopped) { try { if (isStopped && this.statusXhr) { this.statusXhr.abort(); } } finally { this.isStopped = isStopped; } }; Export.prototype.isExportStopped = function () { return this.isStopped; }; module.exports = Export; /***/ }), /***/ 326: /***/ (function(module) { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var $ = jQuery; var Modal = function Modal() { var self = this; // Error Modal this.error = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-red').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_export); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Info Modal this.info = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold loader var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create loader var loader = $(''); // Create stop export var stopButton = $('').on('click', function () { stopButton.attr('disabled', 'disabled'); self.onStop(); }); // Append text to stop button stopButton.append(' ' + ai1wm_locale.stop_export); // Append stop button to action action.append(stopButton); // Append loader to header header.append(loader); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Done Modal this.done = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create header to hold title var header = $('

'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create title var title = $('').addClass('ai1wm-title-green').text(params.title); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); // Append text to close button closeButton.append(ai1wm_locale.close_export); // Append close button to action action.append(closeButton); // Append title to section header.append(title); // Append header and message to section section.append(header).append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Download Modal this.download = function (params) { // Create the modal container var container = $('
'); // Create section to hold title, message and action var section = $('
'); // Create paragraph to hold mesage var message = $('

').html(params.message); // Create action section var action = $('
'); // Create close button var closeButton = $('').on('click', function () { self.destroy(); }); var counter = $('.ai1wm-menu-count'); // Update counter text counter.text(+counter.text() + 1); if (counter.text() > 1) { counter.prop('title', ai1wm_locale.backups_count_plural.replace('%d', counter.text())); } else { counter.removeClass('ai1wm-menu-hide'); counter.prop('title', ai1wm_locale.backups_count_singular.replace('%d', counter.text())); } // Append text to close button closeButton.append(ai1wm_locale.close_export); // Append close button to action action.append(closeButton); // Append message to section section.append(message); // Append section and action to container container.append(section).append(action); // Render modal self.modal.html(container).show(); self.modal.trigger('focus'); self.overlay.show(); }; // Create the overlay this.overlay = $('
'); // Create the modal container this.modal = $(''); $('body').append(this.overlay) // Append overlay to body .append(this.modal); // Append modal to body }; Modal.prototype.render = function (params) { $(document).trigger('ai1wm-export-status', params); // Show modal switch (params.type) { case 'error': this.error(params); break; case 'info': this.info(params); break; case 'done': this.done(params); break; case 'download': this.download(params); break; } }; Modal.prototype.destroy = function () { this.modal.hide(); this.overlay.hide(); }; module.exports = Modal; /***/ }), /***/ 813: /***/ (function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ (function ($) { $.fn.ai1wm_find_replace = function () { $(this).on('click', function (e) { e.preventDefault(); var row = $('#ai1wm-queries > li:first').clone(); // Reset input values row.find('input').val(''); // Reset ai1wm-query-find-text row.find('.ai1wm-query-find-text').html('<text>'); // Reset ai1wm-query-replace-text row.find('.ai1wm-query-replace-text').html('<another-text>'); $('#ai1wm-queries > li').removeClass('ai1wm-open'); $(row).addClass('ai1wm-open'); // Add new replace fields $('#ai1wm-queries').append(row); $(row).ai1wm_query(); $(row).find('p:first').on('click', function () { $(this).parent().toggleClass('ai1wm-open'); }); }); return this; }; })(jQuery); /***/ }), /***/ 88: /***/ (function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ (function ($) { $.fn.ai1wm_query = function () { var findInput = $(this).find('input.ai1wm-query-find-input'), replaceInput = $(this).find('input.ai1wm-query-replace-input'), findText = $(this).find('small.ai1wm-query-find-text'), replaceText = $(this).find('small.ai1wm-query-replace-text'); findInput.on('change paste input keypress keydown keyup', function () { var _inputValue = $(this).val().length > 0 ? $(this).val() : ''; findText.text(_inputValue); }); replaceInput.on('change paste input keypress keydown keyup', function () { var _inputValue = $(this).val().length > 0 ? $(this).val() : ''; replaceText.text(_inputValue); }); return this; }; })(jQuery); /***/ }), /***/ 332: /***/ (function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ jQuery(document).ready(function ($) { 'use strict'; // Idea $('#ai1wm-feedback-type-link-1').on('click', function () { var radio = $('#ai1wm-feedback-type-1'); if (radio.is(':checked')) { radio.attr('checked', false); } else { radio.attr('checked', true); } }); // Help $('#ai1wm-feedback-type-2').on('click', function () { // Hide other options $('#ai1wm-feedback-type-1').closest('li').hide(); // Change placeholder message $('.ai1wm-feedback-form').find('.ai1wm-feedback-message').attr('placeholder', ai1wm_locale.how_may_we_help_you); // Show feedback form $('.ai1wm-feedback-form').fadeIn(); }); // Cancel feedback form $('#ai1wm-feedback-cancel').on('click', function (e) { $('.ai1wm-feedback-form').fadeOut(function () { $('.ai1wm-feedback-type').attr('checked', false).closest('li').show(); }); e.preventDefault(); }); // Send feedback form $('#ai1wm-feedback-submit').on('click', function (e) { var self = $(this); var spinner = self.next(); var type = $('.ai1wm-feedback-type:checked').val(); var email = $('.ai1wm-feedback-email').val(); var message = $('.ai1wm-feedback-message').val(); var terms = $('.ai1wm-feedback-terms').is(':checked'); self.attr('disabled', true); spinner.css('visibility', 'visible'); $.ajax({ url: ai1wm_feedback.ajax.url, type: 'POST', dataType: 'json', async: true, data: { secret_key: ai1wm_feedback.secret_key, ai1wm_type: type, ai1wm_email: email, ai1wm_message: message, ai1wm_terms: +terms }, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (data) { self.attr('disabled', false); spinner.css('visibility', 'hidden'); if (data.errors.length > 0) { $('.ai1wm-feedback .ai1wm-message').remove(); var errorMessage = $('
').addClass('ai1wm-message ai1wm-error-message'); $.each(data.errors, function (key, value) { errorMessage.append($('

').text(value)); }); $('.ai1wm-feedback').prepend(errorMessage); } else { var successMessage = $('

').addClass('ai1wm-message ai1wm-success-message'); successMessage.append($('

').text(ai1wm_locale.thanks_for_submitting_your_feedback)); $('.ai1wm-feedback').html(successMessage); } }); e.preventDefault(); }); }); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/global */ /******/ !function() { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. !function() { /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ var Query = __webpack_require__(88), FindReplace = __webpack_require__(813), Feedback = __webpack_require__(332), Export = __webpack_require__(12); jQuery(document).ready(function ($) { 'use strict'; var model = new Export(); // Export to file $('#ai1wm-export-file').on('click', function (e) { if ($('#ai1wm-encrypt-backups').is(':checked')) { var passwordInput = $('#ai1wm-backup-encrypt-password'); var passwordConfirmationInput = $('#ai1wm-backup-encrypt-password-confirmation'); if (!passwordInput.val().length) { passwordInput.parent().addClass('ai1wm-has-error'); passwordInput.focus(); return false; } if (passwordInput.val() !== passwordConfirmationInput.val()) { passwordConfirmationInput.parent().addClass('ai1wm-has-error'); passwordConfirmationInput.focus(); return false; } } var storage = Ai1wm.Util.random(12); var options = Ai1wm.Util.form('#ai1wm-export-form').concat({ name: 'storage', value: storage }).concat({ name: 'file', value: 1 }); // Set global params model.setParams(options); // Start export model.start(); e.preventDefault(); }); $('.ai1wm-accordion > .ai1wm-title').on('click', function () { $(this).parent().toggleClass('ai1wm-active'); }); $('#ai1wm-add-new-replace-button').ai1wm_find_replace(); $('.ai1wm-expandable > p:first, .ai1wm-expandable > h4:first, .ai1wm-expandable > div.ai1wm-button-main').on('click', function () { $(this).parent().toggleClass('ai1wm-open'); }); $('.ai1wm-query').ai1wm_query(); $('.ai1wm-toggle-password-visibility').on('click', function () { $(this).toggleClass('ai1wm-icon-eye ai1wm-icon-eye-blocked'); $(this).prev().prop('type', function (index, oldPropertyValue) { return oldPropertyValue === 'text' ? 'password' : 'text'; }); return false; }); $('#ai1wm-encrypt-backups').on('click', function () { $('.ai1wm-encrypt-backups-passwords-toggle').toggle(); }); $('#ai1wm-backup-encrypt-password').on('keyup', function () { var passwordInput = $(this); var passwordConfirmationInput = $('#ai1wm-backup-encrypt-password-confirmation'); if (passwordInput.val() !== passwordConfirmationInput.val()) { passwordConfirmationInput.parent().addClass('ai1wm-has-error'); } if (passwordInput.val().length) { passwordInput.parent().removeClass('ai1wm-has-error'); } }); $('#ai1wm-backup-encrypt-password-confirmation').on('keyup', function () { var passwordConfirmationInput = $(this); var passwordInput = $('#ai1wm-backup-encrypt-password'); if (passwordInput.val() !== passwordConfirmationInput.val()) { passwordConfirmationInput.parent().addClass('ai1wm-has-error'); } else { passwordConfirmationInput.parent().removeClass('ai1wm-has-error'); } }); }); __webpack_require__.g.Ai1wm = jQuery.extend({}, __webpack_require__.g.Ai1wm, { Query: Query, FindReplace: FindReplace, Feedback: Feedback, Export: Export }); }(); /******/ })() ;PK'Z_0 %view/assets/javascript/updater.min.jsnuW+A/******/ (function() { // webpackBootstrap var __webpack_exports__ = {}; /** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ jQuery(document).ready(function ($) { 'use strict'; $('.ai1wm-purchase-add').on('click', function (e) { var self = $(this); self.attr('disabled', true); var dialog = self.closest('.ai1wm-modal-dialog'); var error = dialog.find('.ai1wm-modal-error'); var index = dialog.attr('id').split('-').pop(); var purchaseId = dialog.find('.ai1wm-purchase-id').val(); var updateLink = dialog.find('.ai1wm-update-link').val(); // Check Purchase ID $.ajax({ url: 'https://servmask.com/purchase/' + purchaseId + '/check', type: 'GET', dataType: 'json', dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function (product) { // Update Purchase ID $.ajax({ url: ai1wm_updater.ajax.url, type: 'POST', dataType: 'json', data: { ai1wm_uuid: product.uuid, ai1wm_extension: product.extension }, dataFilter: function dataFilter(data) { return Ai1wm.Util.json(data); } }).done(function () { window.location.hash = ''; // Update plugin row $('#ai1wm-update-section-' + index).html($('').attr('href', updateLink).text(ai1wm_locale.check_for_updates)); self.attr('disabled', false); }); }).fail(function () { self.attr('disabled', false); error.html(ai1wm_locale.invalid_purchase_id); }); e.preventDefault(); }); $('.ai1wm-purchase-discard').on('click', function (e) { window.location.hash = ''; e.preventDefault(); }); }); /******/ })() ;PK'ZAFyview/assets/font/servmask.ttfnuW+A 0OS/2cZ`cmapKIgaspglyf'head6hhea $hmtxNJ loca{Vmaxp7  name%t@post LfGLf@   (   0Sd  /SdZSQ z797979 ")>54&#".#".#";3532654&#5#7/!  2 !2  5KK5@p!/&@Ppp !/&'K55K``/!,z``pp#%!53067#"3!26='7'"1>C   3*M**'+OR  `*[P L H*$05=!";5#5!#32654&#"&546323"&54632%!5!3353'fffffv  +  O4}M_M|224U      e{{+12#5267>54&'.#"3'367>76#53 .))==)).#AA##A]ppR;&&@=))..))=0A##A/)##4@`7V%4'.'&#"327>76%47>7632#"'.'&764'&"54&#"'&"27F./55/.FF./55/.F08&&++&&88&&++&&8  I I    5/.FF./55/.FF./5+&&88&&++&&88&&l  J  J    qf\7\u?'75793171#957'7abb*bb*abbaMWQ[RWRRTWM[R[N))"327>7654'.'&##5#53533#-''::''--''::''-4gg4gg;''-,'';;'',-'';gg5gg5'.4;.#"38126?23267>76&'%./81 '.# };!P9saq/È@2g7> '5Em 7F7[_"'.'&547>7632"327>7654'.'&1#04546312654&#"#.54632#535/.FF./55/.FF./5+'&99&'++'&99&'. 26''6(..E//55./EE/.55//E9&&+,&&99&&,+&&9 %   '66' 2h/l '.'76&/.#"./.+"'.#"326?;26?>7326?>/>?>=4&''.#"#'.'.'.#"'7>'.'./57>7>76&/73267>7>?3326?'"32654&"&54632'"32654&"&546321   )   ,   )  1  1  )   ,   )   1  7 *   ,   * 11 *   ,   * 11.BB..BB.)99))99)%%%%  ) 1  1 )   ,   ) 1  1 )   , U  * 11 *   ,  * 11 *  , B..BB..B9))99))9%%%&p #)'.+"3!2654&''210#!33<0`~ <\`<` 0< #!"3!2654&!!3#3#3#53#$``@ !:%#"/&54?'&54?632:           !!!73 @@ @ @  #';DY3##3#;##3#;##3#3#;26=#537'.+"3!2654&#5#!"&546;:30000000000000000000 @ @@H (p"RZ p  H P0) R[59="3267>54&'.#512#"'.'&547>763#3#*LL**LL*5/.FF./55/.FF./@@@@L**LL**L0F./55/.FF./55/.F@@S%81'781>76&/.81'81.'&81817>7817816?>'.I  II  IE II  II  Xh%3#"&'77>54&'467.57>32*#"'2616�#"&1"03'2616�#"&#%!"3!2654&#"'.'&547>7632;  5*: [0< U2%C  F $% *F $J#33#T#33=))..))==))..))=О4U  .'Z8g&.   >P{3##33#T#3.))==))..))==)) #5?;ff;$;f;gg;$:f;@|^326?'&" MM   # ^ $ ML #  n@3^&"326764/764'3 #   LL ^  # LM $ 3 )%"&546312#5"&546312#"&546312#>S]4#0130"1265"&'.'.5467>7>32%467#*10232.'?>'7"&5.'.5467>74632&*ii*&P    !!:@) < LkP((PkK ;!!<  767&'.'&#"&'.'>7>732654&'1#"&54632*&'BB'&**&'BB'&T&&@""@&&K55K~ *$$* *$$* U&&&&  5KK5  (9Cb&".#"3267642.546>7>7.'%4&'326721#"&'327>767.'e)*&'B,P<& ! I  5K#&&@"&0*&'B1e *$4O<`&  %##  K#&&& *$"8'pP@pP@ 7'77'''bebǑ,e,acaď,c, 7#5355#5337!#5``@ @@``@```` @%5#535#'!#5!35`` @@@`@``@``  `@%]k%#"&'&6326767&"476&7>''1>76&'.=4&'.#">7>32326727'#"&5463*q4J26E/d// >  4,S ; @%5'!+ >  :"% 3.$ = ,%  `6(6   2&00   '@+q7.5467>7>5467>7>3276#"&'1'.'.5467>7>5647>76267>7>32#"'.&'1   #<  VB{  !   $:   B    1B#     ##   /,%     , Za_< SS*) I! n ` \64@Z4\v 0 l   & j* i9~ Q   p A  # Y 4servmaskservmaskVersion 1.0Version 1.0servmaskservmaskservmaskservmaskRegularRegularservmaskservmaskFont generated by IcoMoon.Font generated by IcoMoon.PK'Z5@@view/assets/font/servmask.woffnuW+AwOFF@ OS/2``cZcmaphKIgasp4glyf<'head66hheaH$$ hmtxlNJlocaVV{maxpl 7 name%tpost LfGLf@   (   0Sd  /SdZSQ z797979 ")>54&#".#".#";3532654&#5#7/!  2 !2  5KK5@p!/&@Ppp !/&'K55K``/!,z``pp#%!53067#"3!26='7'"1>C   3*M**'+OR  `*[P L H*$05=!";5#5!#32654&#"&546323"&54632%!5!3353'fffffv  +  O4}M_M|224U      e{{+12#5267>54&'.#"3'367>76#53 .))==)).#AA##A]ppR;&&@=))..))=0A##A/)##4@`7V%4'.'&#"327>76%47>7632#"'.'&764'&"54&#"'&"27F./55/.FF./55/.F08&&++&&88&&++&&8  I I    5/.FF./55/.FF./5+&&88&&++&&88&&l  J  J    qf\7\u?'75793171#957'7abb*bb*abbaMWQ[RWRRTWM[R[N))"327>7654'.'&##5#53533#-''::''--''::''-4gg4gg;''-,'';;'',-'';gg5gg5'.4;.#"38126?23267>76&'%./81 '.# };!P9saq/È@2g7> '5Em 7F7[_"'.'&547>7632"327>7654'.'&1#04546312654&#"#.54632#535/.FF./55/.FF./5+'&99&'++'&99&'. 26''6(..E//55./EE/.55//E9&&+,&&99&&,+&&9 %   '66' 2h/l '.'76&/.#"./.+"'.#"326?;26?>7326?>/>?>=4&''.#"#'.'.'.#"'7>'.'./57>7>76&/73267>7>?3326?'"32654&"&54632'"32654&"&546321   )   ,   )  1  1  )   ,   )   1  7 *   ,   * 11 *   ,   * 11.BB..BB.)99))99)%%%%  ) 1  1 )   ,   ) 1  1 )   , U  * 11 *   ,  * 11 *  , B..BB..B9))99))9%%%&p #)'.+"3!2654&''210#!33<0`~ <\`<` 0< #!"3!2654&!!3#3#3#53#$``@ !:%#"/&54?'&54?632:           !!!73 @@ @ @  #';DY3##3#;##3#;##3#3#;26=#537'.+"3!2654&#5#!"&546;:30000000000000000000 @ @@H (p"RZ p  H P0) R[59="3267>54&'.#512#"'.'&547>763#3#*LL**LL*5/.FF./55/.FF./@@@@L**LL**L0F./55/.FF./55/.F@@S%81'781>76&/.81'81.'&81817>7817816?>'.I  II  IE II  II  Xh%3#"&'77>54&'467.57>32*#"'2616�#"&1"03'2616�#"&#%!"3!2654&#"'.'&547>7632;  5*: [0< U2%C  F $% *F $J#33#T#33=))..))==))..))=О4U  .'Z8g&.   >P{3##33#T#3.))==))..))==)) #5?;ff;$;f;gg;$:f;@|^326?'&" MM   # ^ $ ML #  n@3^&"326764/764'3 #   LL ^  # LM $ 3 )%"&546312#5"&546312#"&546312#>S]4#0130"1265"&'.'.5467>7>32%467#*10232.'?>'7"&5.'.5467>74632&*ii*&P    !!:@) < LkP((PkK ;!!<  767&'.'&#"&'.'>7>732654&'1#"&54632*&'BB'&**&'BB'&T&&@""@&&K55K~ *$$* *$$* U&&&&  5KK5  (9Cb&".#"3267642.546>7>7.'%4&'326721#"&'327>767.'e)*&'B,P<& ! I  5K#&&@"&0*&'B1e *$4O<`&  %##  K#&&& *$"8'pP@pP@ 7'77'''bebǑ,e,acaď,c, 7#5355#5337!#5``@ @@``@```` @%5#535#'!#5!35`` @@@`@``@``  `@%]k%#"&'&6326767&"476&7>''1>76&'.=4&'.#">7>32326727'#"&5463*q4J26E/d// >  4,S ; @%5'!+ >  :"% 3.$ = ,%  `6(6   2&00   '@+q7.5467>7>5467>7>3276#"&'1'.'.5467>7>5647>76267>7>32#"'.&'1   #<  VB{  !   $:   B    1B#     ##   /,%     , Za_< SS*) I! n ` \64@Z4\v 0 l   & j* i9~ Q   p A  # Y 4servmaskservmaskVersion 1.0Version 1.0servmaskservmaskservmaskservmaskRegularRegularservmaskservmaskFont generated by IcoMoon.Font generated by IcoMoon.PK'ZEqc`view/assets/font/servmask.eotnuW+ALPaZservmaskRegularVersion 1.0servmask 0OS/2cZ`cmapKIgaspglyf'head6hhea $hmtxNJ loca{Vmaxp7  name%t@post LfGLf@   (   0Sd  /SdZSQ z797979 ")>54&#".#".#";3532654&#5#7/!  2 !2  5KK5@p!/&@Ppp !/&'K55K``/!,z``pp#%!53067#"3!26='7'"1>C   3*M**'+OR  `*[P L H*$05=!";5#5!#32654&#"&546323"&54632%!5!3353'fffffv  +  O4}M_M|224U      e{{+12#5267>54&'.#"3'367>76#53 .))==)).#AA##A]ppR;&&@=))..))=0A##A/)##4@`7V%4'.'&#"327>76%47>7632#"'.'&764'&"54&#"'&"27F./55/.FF./55/.F08&&++&&88&&++&&8  I I    5/.FF./55/.FF./5+&&88&&++&&88&&l  J  J    qf\7\u?'75793171#957'7abb*bb*abbaMWQ[RWRRTWM[R[N))"327>7654'.'&##5#53533#-''::''--''::''-4gg4gg;''-,'';;'',-'';gg5gg5'.4;.#"38126?23267>76&'%./81 '.# };!P9saq/È@2g7> '5Em 7F7[_"'.'&547>7632"327>7654'.'&1#04546312654&#"#.54632#535/.FF./55/.FF./5+'&99&'++'&99&'. 26''6(..E//55./EE/.55//E9&&+,&&99&&,+&&9 %   '66' 2h/l '.'76&/.#"./.+"'.#"326?;26?>7326?>/>?>=4&''.#"#'.'.'.#"'7>'.'./57>7>76&/73267>7>?3326?'"32654&"&54632'"32654&"&546321   )   ,   )  1  1  )   ,   )   1  7 *   ,   * 11 *   ,   * 11.BB..BB.)99))99)%%%%  ) 1  1 )   ,   ) 1  1 )   , U  * 11 *   ,  * 11 *  , B..BB..B9))99))9%%%&p #)'.+"3!2654&''210#!33<0`~ <\`<` 0< #!"3!2654&!!3#3#3#53#$``@ !:%#"/&54?'&54?632:           !!!73 @@ @ @  #';DY3##3#;##3#;##3#3#;26=#537'.+"3!2654&#5#!"&546;:30000000000000000000 @ @@H (p"RZ p  H P0) R[59="3267>54&'.#512#"'.'&547>763#3#*LL**LL*5/.FF./55/.FF./@@@@L**LL**L0F./55/.FF./55/.F@@S%81'781>76&/.81'81.'&81817>7817816?>'.I  II  IE II  II  Xh%3#"&'77>54&'467.57>32*#"'2616�#"&1"03'2616�#"&#%!"3!2654&#"'.'&547>7632;  5*: [0< U2%C  F $% *F $J#33#T#33=))..))==))..))=О4U  .'Z8g&.   >P{3##33#T#3.))==))..))==)) #5?;ff;$;f;gg;$:f;@|^326?'&" MM   # ^ $ ML #  n@3^&"326764/764'3 #   LL ^  # LM $ 3 )%"&546312#5"&546312#"&546312#>S]4#0130"1265"&'.'.5467>7>32%467#*10232.'?>'7"&5.'.5467>74632&*ii*&P    !!:@) < LkP((PkK ;!!<  767&'.'&#"&'.'>7>732654&'1#"&54632*&'BB'&**&'BB'&T&&@""@&&K55K~ *$$* *$$* U&&&&  5KK5  (9Cb&".#"3267642.546>7>7.'%4&'326721#"&'327>767.'e)*&'B,P<& ! I  5K#&&@"&0*&'B1e *$4O<`&  %##  K#&&& *$"8'pP@pP@ 7'77'''bebǑ,e,acaď,c, 7#5355#5337!#5``@ @@``@```` @%5#535#'!#5!35`` @@@`@``@``  `@%]k%#"&'&6326767&"476&7>''1>76&'.=4&'.#">7>32326727'#"&5463*q4J26E/d// >  4,S ; @%5'!+ >  :"% 3.$ = ,%  `6(6   2&00   '@+q7.5467>7>5467>7>3276#"&'1'.'.5467>7>5647>76267>7>32#"'.&'1   #<  VB{  !   $:   B    1B#     ##   /,%     , Za_< SS*) I! n ` \64@Z4\v 0 l   & j* i9~ Q   p A  # Y 4servmaskservmaskVersion 1.0Version 1.0servmaskservmaskservmaskservmaskRegularRegularservmaskservmaskFont generated by IcoMoon.Font generated by IcoMoon.PK'Z7+ZZview/assets/font/servmask.svgnuW+A Generated by IcoMoon PK'Z+MM"view/assets/css/export.min.rtl.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}.ai1wm-accordion{margin:1em 0;display:block}.ai1wm-accordion h4{cursor:pointer;color:rgba(0,116,162,.8);margin:0}.ai1wm-accordion h4 small{color:#444;font-weight:400}.ai1wm-accordion h4 small:after,.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-accordion .ai1wm-icon-arrow-right{transition:transform .1s ease-out;transition:transform .1s ease-out,-webkit-transform .1s ease-out;display:inline-block}.ai1wm-accordion ul{margin:0;padding:0;list-style:none;visibility:hidden;height:0;transition:height .2s cubic-bezier(.19,1,.22,1)}.ai1wm-accordion h4 small,.ai1wm-accordion ul li small{display:inline;float:none;width:auto}.ai1wm-accordion.ai1wm-open h4 .ai1wm-icon-arrow-right{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.ai1wm-accordion.ai1wm-open ul{height:auto;margin:.6em 2em 0 0;visibility:visible}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:right}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 25px 6px 50px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:right;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;left:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;right:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;right:0}.ai1wm-line-third{top:100%;right:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 26px 5px 25px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:100% 0}.ai1wm-message-close-button{position:absolute;left:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:right;width:25px;height:25px;border-radius:50%;background:100% 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:right;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:left}.ai1wm-encrypt-backups-container-disabled a,.ai1wm-import-info a,.ai1wm-no-underline{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 8px 6px 0}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:right;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-left:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:right;width:100%}.ai1wm-right{float:left;width:377px;margin-left:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:right;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-right:10px!important}.ai1wm-right,.ai1wm-row{margin-left:0!important}.ai1wm-right{float:right!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 2px 0 20px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea,.ai1wm-query div input{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-right:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;right:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;right:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(240px,-94px);transform:translate(240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);max-height:400px;overflow-y:auto;text-align:right;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:right}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:right}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:right}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:right;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:left}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-left:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}#ai1wm-export-form{margin-top:1.95rem}.ai1wm-query-arrow{position:relative;top:4px;float:left}.ai1wm-query.ai1wm-open{background:#ebebeb!important}.ai1wm-query.ai1wm-open p small{border-bottom:1px dashed #000}.ai1wm-query.ai1wm-open div{visibility:visible!important;height:5rem!important;margin-top:8px}.ai1wm-query.ai1wm-open .ai1wm-query-arrow{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.ai1wm-query{width:100%;margin:0 0 10px;list-style:none;background:100% 0;border:1px solid #d8d8d8;padding:10px;border-radius:5px;box-sizing:border-box}.ai1wm-query div{transition:height .2s cubic-bezier(.19,1,.22,1);visibility:hidden;height:0}.ai1wm-query div input{font-size:.8rem;padding:0 10px;height:2.3rem;line-height:2.3rem;margin-bottom:4px;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;transition:.05s border-color ease-in-out;border-radius:5px}.ai1wm-query div input:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.ai1wm-query p{margin:0;cursor:pointer}.ai1wm-query p small{display:inline;width:auto;float:none}.ai1wm-query-arrow{transition:transform .1s ease-out;transition:transform .1s ease-out,-webkit-transform .1s ease-out}#ai1wm-queries{padding:0}.ai1wm-encrypt-backups-container-disabled{color:#aaa}.ai1wm-encrypt-backups-container-disabled a span{margin-right:8px;color:#00aff0}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle,.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container .ai1wm-error-message{display:none}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;gap:12px;width:100%;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:8px 0}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:216px}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container input{padding:8px 12px;line-height:normal;width:100%;height:32px}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;left:10px;top:8px;outline:0;box-shadow:none}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400}PK'Za,7L7Lview/assets/css/import.min.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:left}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 50px 6px 25px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:left;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;right:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;left:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;left:0}.ai1wm-line-third{top:100%;left:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 25px 5px 26px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:0 0}.ai1wm-message-close-button{position:absolute;right:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:left;width:25px;height:25px;border-radius:50%;background:0 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:left;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:right}.ai1wm-import-info a,.ai1wm-no-underline,.ai1wm-unlimited-import a{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 0 6px 8px}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:left;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-right:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:left;width:100%}.ai1wm-right{float:right;width:377px;margin-right:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:left;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-left:10px!important}.ai1wm-right,.ai1wm-row{margin-right:0!important}.ai1wm-right{float:left!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 20px 0 2px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-left:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;left:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(-240px,-94px);transform:translate(-240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-height:400px;overflow-y:auto;text-align:left;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:left}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:left}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:left}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:left;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:right}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-right:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}section.ai1wm-decrypt-backup-section,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}section.ai1wm-decrypt-backup-section{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;gap:16px;box-sizing:border-box;padding:16px}section.ai1wm-decrypt-backup-section h1{font-size:20px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section p{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding:0;margin:0}section.ai1wm-decrypt-backup-section form{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:8px}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container input{width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;right:10px;top:8px;outline:0;box-shadow:none}div.ai1wm-expandable input,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-error-message{display:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400;text-align:left;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container,section.ai1wm-decrypt-backup-section form{display:-webkit-flex;display:-ms-flexbox;display:flex;width:75%;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:16px;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.ai1wm-drag-drop-area{border:3px dashed #ddd;height:200px;margin:1em 0;background:#fff;text-align:center;border-radius:30px}.ai1wm-drag-drop-area>*{pointer-events:none}div.ai1wm-expandable.ai1wm-open input{display:inline-block}#ai1wm-import-file,.ai1wm-import-form{position:relative}#ai1wm-import-file input[type=file]{position:absolute;width:100%;height:21px;cursor:pointer;opacity:0;z-index:9999;padding:0;margin:0;top:0;left:0}#ai1wm-import-file input[type=file]::-webkit-file-upload-button{cursor:pointer}.ai1wm-drag-drop-area.dragover{background:rgba(255,255,255,.4);border-color:green}.ai1wm-drag-over.ai1wm-drag-drop-area{border-color:#83b4d8}#ai1wm-import-form{margin-top:1.95rem}#ai1wm-import-init{position:absolute;top:10px;left:10%;width:80%;text-align:center;z-index:1}#ai1wm-import-init p{font-size:18px;color:#9e9e9e}#ai1wm-import-init p i{font-size:46px}#ai1wm-import-init div.ai1wm-button-import{pointer-events:all;background:#fff}.ai1wm-max-upload-size{border-bottom:1px solid #000}.ai1wm-progress-bar{position:relative;display:inline-block;background-color:#bdc3c7;height:32px;width:100%;border-radius:15px;top:35px}.ai1wm-progress-bar-meter,.ai1wm-progress-bar-percent{display:inline-block;float:left;height:32px;line-height:32px;color:#fff}.ai1wm-progress-bar-meter{background-color:#2ecc71;border-radius:15px;width:0;text-align:center}.ai1wm-progress-bar-percent{position:absolute;width:50px;left:50%;-webkit-transform:translate(-24px,0);transform:translate(-24px,0);font-size:.5em;background:0 0}PK'Zq{{#view/assets/css/updater.min.rtl.cssnuW+A@charset "UTF-8";.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:right}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 25px 6px 50px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:right;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;left:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;right:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;right:0}.ai1wm-line-third{top:100%;right:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 26px 5px 25px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:100% 0}.ai1wm-message-close-button{position:absolute;left:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:right;width:25px;height:25px;border-radius:50%;background:100% 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-icon-update{font-size:13px;padding:0;margin:0;font-weight:400}.ai1wm-icon-update:before{color:#d54e21;content:"\f463";display:inline-block;font:20px/1 "dashicons";speak:none;padding:0;margin:0;vertical-align:top}.ai1wm-modal-dialog{position:fixed;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,.7);z-index:99999;opacity:0;transition:opacity 400ms ease-in;pointer-events:none}.ai1wm-modal-dialog:target{opacity:1;pointer-events:auto}.ai1wm-modal-dialog .ai1wm-modal-container{position:fixed;top:50%;right:50%;z-index:100002;width:480px;height:auto;padding:6px 16px 10px;-webkit-transform:translate(240px,-94px);transform:translate(240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-modal-error{color:red}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-modal-buttons{text-align:right}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-purchase-id{width:100%;padding:6px}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-help-link{font-weight:700}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-purchase-discard{margin-right:1em}.ai1wm-error-message,.ai1wm-update-message{padding:0;margin:0;color:red}PK'ZT+^ppview/assets/css/updater.min.cssnuW+A@charset "UTF-8";.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:left}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 50px 6px 25px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:left;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;right:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;left:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;left:0}.ai1wm-line-third{top:100%;left:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 25px 5px 26px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:0 0}.ai1wm-message-close-button{position:absolute;right:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:left;width:25px;height:25px;border-radius:50%;background:0 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-icon-update{font-size:13px;padding:0;margin:0;font-weight:400}.ai1wm-icon-update:before{color:#d54e21;content:"\f463";display:inline-block;font:20px/1 "dashicons";speak:none;padding:0;margin:0;vertical-align:top}.ai1wm-modal-dialog{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.7);z-index:99999;opacity:0;transition:opacity 400ms ease-in;pointer-events:none}.ai1wm-modal-dialog:target{opacity:1;pointer-events:auto}.ai1wm-modal-dialog .ai1wm-modal-container{position:fixed;top:50%;left:50%;z-index:100002;width:480px;height:auto;padding:6px 16px 10px;-webkit-transform:translate(-240px,-94px);transform:translate(-240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-modal-error{color:red}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-modal-buttons{text-align:left}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-purchase-id{width:100%;padding:6px}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-help-link{font-weight:700}.ai1wm-modal-dialog .ai1wm-modal-container .ai1wm-purchase-discard{margin-left:1em}.ai1wm-error-message,.ai1wm-update-message{padding:0;margin:0;color:red}PK'Z?{view/assets/css/encrypt.min.cssnuW+Asection.ai1wm-decrypt-backup-section,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}section.ai1wm-decrypt-backup-section{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;gap:16px;box-sizing:border-box;padding:16px}section.ai1wm-decrypt-backup-section h1{font-size:20px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section p{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding:0;margin:0}section.ai1wm-decrypt-backup-section form{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:8px}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container input{width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;right:10px;top:8px;outline:0;box-shadow:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-error-message{display:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400;text-align:left;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container,section.ai1wm-decrypt-backup-section form{display:-webkit-flex;display:-ms-flexbox;display:flex;width:75%;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:16px;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}PK'Z= g g#view/assets/css/backups.min.rtl.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:right}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 25px 6px 50px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:right;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;left:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;right:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;right:0}.ai1wm-line-third{top:100%;right:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 26px 5px 25px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:100% 0}.ai1wm-message-close-button{position:absolute;left:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:right;width:25px;height:25px;border-radius:50%;background:100% 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:right;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:left}.ai1wm-import-info a,.ai1wm-no-underline{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 8px 6px 0}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:right;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-left:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:right;width:100%}.ai1wm-right{float:left;width:377px;margin-left:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:right;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-right:10px!important}.ai1wm-right,.ai1wm-row{margin-left:0!important}.ai1wm-right{float:right!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 2px 0 20px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-right:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;right:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;right:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(240px,-94px);transform:translate(240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);max-height:400px;overflow-y:auto;text-align:right;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:right}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:right}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:right}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:right;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:left}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-left:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}.ai1wm-progress-bar-v2{background-color:#63637e;display:block;height:60px;padding:3em}.ai1wm-progress-bar-v2 h1{text-transform:none;color:#fff;margin:0 0 1.4em}.ai1wm-progress-bar-v2-container{position:relative;width:100%;overflow:visible}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter{position:absolute;right:0;top:0;height:5px;background-color:#3d3d4e;width:100%}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter .ai1wm-progress-bar-v2-percent{position:absolute;background-color:#fff;padding:0 .5em;border-radius:3px;font-size:10px;line-height:24px;-webkit-transform:translate(1.1em,-3em);transform:translate(1.1em,-3em)}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter .ai1wm-progress-bar-v2-percent::after{content:" ";position:absolute;top:100%;right:50%;margin-right:-3px;border-width:3px;border-style:solid;border-color:#fff transparent transparent}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter .ai1wm-progress-bar-v2-slider{display:inline-block;background-color:#fff;position:absolute;height:5px;max-width:100%}.ai1wm-spin-container{height:50px;width:50px;position:relative;display:block;padding:1.5em}.ai1wm-spinner{display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:50px;height:50px;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.ai1wm-spinner.ai1wm-spin-left{-webkit-animation-duration:2000ms;animation-duration:2000ms;-webkit-animation-name:ai1wm-spin-left;animation-name:ai1wm-spin-left}.ai1wm-spinner.ai1wm-spin-right{-webkit-animation-duration:4000ms;animation-duration:4000ms;-webkit-animation-name:ai1wm-spin-right;animation-name:ai1wm-spin-right}.ai1wm-folder-container,section.ai1wm-decrypt-backup-section form{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ai1wm-folder-container{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2em 3em}.ai1wm-folder-container ul li a,.ai1wm-folder-container>h1{color:#3c434a;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.ai1wm-folder-container>h1{font-weight:700;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.ai1wm-folder-container>h1 a{text-decoration:none;color:inherit;font-size:.5em}.ai1wm-folder-container ul li{margin:0}.ai1wm-folder-container ul li a{padding:5px;text-decoration:none;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;font-size:1rem}.ai1wm-folder-container ul li a>i{margin:0 5px}.ai1wm-folder-container ul li a>i.ai1wm-icon-arrow-down{margin-right:10px;display:none}.ai1wm-folder-container ul li a:hover{background-color:rgba(0,0,0,.1)}.ai1wm-folder-container ul li a:hover i.ai1wm-icon-arrow-down{display:block}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a>i,.ai1wm-folder-container ul li .ai1wm-archive-browser-filename{margin-left:10px}.ai1wm-folder-container ul li .ai1wm-archive-browser-filesize{color:#718096;font-size:.75rem;white-space:nowrap}section.ai1wm-decrypt-backup-section,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}section.ai1wm-decrypt-backup-section{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;gap:16px;box-sizing:border-box;padding:16px}section.ai1wm-decrypt-backup-section h1{font-size:20px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section p{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding:0;margin:0}section.ai1wm-decrypt-backup-section form{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:8px}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container input{width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;left:10px;top:8px;outline:0;box-shadow:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-error-message{display:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400;text-align:right;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container,section.ai1wm-decrypt-backup-section form{display:-webkit-flex;display:-ms-flexbox;display:flex;width:75%;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:16px;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}#ai1wm-backups-list{width:100%;margin-top:1.95rem;overflow-x:auto}div#ai1wm-backups-list::-webkit-scrollbar{-webkit-appearance:none;height:4px}div#ai1wm-backups-list::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(77,77,77,.5);-webkit-box-shadow:0 0 1px rgba(255,255,255,.5)}.ai1wm-backups{width:100%;margin:1em 0;padding:0;border-collapse:collapse}.ai1wm-backups .ai1wm-column-name{text-align:right;white-space:nowrap}.ai1wm-backups .ai1wm-column-date,.ai1wm-backups .ai1wm-column-size{text-align:center;white-space:nowrap}.ai1wm-backups .ai1wm-column-actions{text-align:left;white-space:nowrap}.ai1wm-backups thead th{padding:4px 6px;text-align:right;font-size:1.2em}.ai1wm-backups tbody tr{border-top:1px solid #ccc;border-bottom:1px solid #ccc}.ai1wm-backups tbody tr:hover{background:rgba(0,0,0,.1)}.ai1wm-backups tbody tr:hover .ai1wm-backup-label-description:not(.ai1wm-backup-label-selected){display:inline}.ai1wm-backups tbody td{padding:4px 6px;box-sizing:border-box;line-height:24px}.ai1wm-backups tbody td.ai1wm-backup-actions{text-align:left;width:50px}.ai1wm-backups tbody td.ai1wm-backup-actions a:focus{outline-style:none;box-shadow:none;border-color:transparent}.ai1wm-backups tbody td.ai1wm-backup-actions>div{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots{border-radius:100%;margin:0;padding:10px;color:gray;font-size:1.5em;text-decoration:none;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots:focus,.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots:hover{background-color:#f0f0f1}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu{position:absolute;background:100% 0;display:none;-webkit-transform:translate(35px,30px);transform:translate(35px,30px);left:0}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul{position:relative;z-index:10;margin:0;background:#f9f9f9;border-radius:5px;box-shadow:rgba(0,0,0,.16) 0 3px 6px,rgba(0,0,0,.23) 0 3px 6px}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li{display:block;padding:0;margin:0}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li.divider{border-top:1px solid rgba(0,0,0,.1)}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li:first-child>a{border-top-right-radius:5px;border-top-left-radius:5px}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li:last-child>a{border-bottom-right-radius:5px;border-bottom-left-radius:5px}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li.ai1wm-disabled{opacity:.5}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li.ai1wm-disabled>a{cursor:not-allowed}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a{text-decoration:none;color:#23282d;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.5em 2em}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a:focus,.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a:hover{background-color:rgba(0,0,0,.1)}.ai1wm-backups .spinner{visibility:visible;margin:0}.ai1wm-backups .ai1wm-backups-list-spinner{text-align:center;line-height:37px}.ai1wm-backups .ai1wm-backups-list-spinner .spinner{float:none;visibility:visible;margin:0 0 0 6px;position:relative;top:-2px}.ai1wm-backups .ai1wm-backup-label-text{cursor:pointer}.ai1wm-backups .ai1wm-backup-label-text .ai1wm-backup-label-colored{display:inline-block;padding:.25em .4em;font-size:85%;font-weight:400;line-height:1;text-align:center;vertical-align:baseline;border-radius:.25rem;color:#000;background-color:#fad390;cursor:pointer;word-wrap:break-word;word-break:break-all;white-space:normal}.ai1wm-backups .ai1wm-backup-label-description:hover .ai1wm-icon-edit-pencil,.ai1wm-backups .ai1wm-backup-label-text:hover .ai1wm-icon-edit-pencil{display:inline}.ai1wm-backups .ai1wm-backup-label-description{font-size:12px;cursor:pointer;font-style:italic}.ai1wm-backups .ai1wm-backup-label-holder .spinner{float:none}.ai1wm-backups .ai1wm-backup-label-holder .ai1wm-backup-label-field{border-radius:5px;border:1px solid #ccc}.ai1wm-backups-empty,.ai1wm-backups-empty-spinner-holder{line-height:2em}.ai1wm-backups-empty-spinner-holder .spinner{float:none;visibility:visible;margin:0 0 0 6px;position:relative;top:-2px}PK'ZR@߽%view/assets/css/whats-new.min.rtl.cssnuW+A@charset "UTF-8";.ai1wm-whats-new-container,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex:none;-ms-flex:none;flex:none}.ai1wm-whats-new-container,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-order:0;-ms-flex-order:0;order:0}.ai1wm-whats-new-container{gap:80px;padding:80px 40px;background:#fff;margin:10px 2px 0 20px}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;padding:0;gap:56px;-webkit-flex:none;-ms-flex:none;flex:none}.ai1wm-whats-new-container .ai1wm-whats-new-block img,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container img{border-radius:4px;width:696px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:24px;width:400px;-webkit-order:1;-ms-flex-order:1;order:1}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text .ai1wm-whats-new-hero-date{font-size:12px;color:#9595b1;-webkit-flex:none;-ms-flex:none;flex:none;-webkit-order:0;-ms-flex-order:0;order:0;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text .ai1wm-whats-new-hero-title{font-weight:800;font-size:40px;line-height:56px;letter-spacing:.02em;color:#121217;-webkit-flex:none;-ms-flex:none;flex:none;-webkit-order:1;-ms-flex-order:1;order:1}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text .ai1wm-whats-new-hero-content{font-weight:500;font-size:16px;line-height:32px;color:#4e4e5f;-webkit-flex:none;-ms-flex:none;flex:none;-webkit-order:2;-ms-flex-order:2;order:2}.ai1wm-whats-new-container .ai1wm-whats-new-line{width:1152px;border:1px solid #dddde9}.ai1wm-whats-new-container .ai1wm-whats-new-block,.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0}.ai1wm-whats-new-container .ai1wm-whats-new-block{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;gap:32px}.ai1wm-whats-new-container .ai1wm-whats-new-block img{width:560px}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:16px;width:560px}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text .ai1wm-whats-new-block-title{font-weight:600;font-size:32px;line-height:48px;letter-spacing:.02em;color:#121217}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text .ai1wm-whats-new-block-content{font-weight:500;font-size:16px;line-height:32px;color:#4e4e5f}.ai1wm-whats-new-container .ai1wm-whats-new-block-reverse{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}@media (min-width:1900px){.ai1wm-whats-new-container{padding:80px 160px}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container img{width:1011px}.ai1wm-whats-new-container .ai1wm-whats-new-line{width:1467px}.ai1wm-whats-new-container .ai1wm-whats-new-block img{width:877px}}@media (max-width:1439px){.ai1wm-whats-new-container .ai1wm-whats-new-hero-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:40px}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text,.ai1wm-whats-new-container .ai1wm-whats-new-block img,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container img,.ai1wm-whats-new-container .ai1wm-whats-new-line{width:100%}.ai1wm-whats-new-container .ai1wm-whats-new-block{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:32px}}@media (max-width:767px){.ai1wm-whats-new-container{padding:40px 24px}.ai1wm-whats-new-container .ai1wm-whats-new-line{width:100%}}PK'Z&8E8E view/assets/css/servmask.min.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.ai1wm-accordion{margin:1em 0;display:block}.ai1wm-accordion h4{cursor:pointer;color:rgba(0,116,162,.8);margin:0}.ai1wm-accordion h4 small{color:#444;font-weight:400}.ai1wm-accordion h4 small:after,.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-accordion .ai1wm-icon-arrow-right{transition:transform .1s ease-out;transition:transform .1s ease-out,-webkit-transform .1s ease-out;display:inline-block}.ai1wm-accordion ul{margin:0;padding:0;list-style:none;visibility:hidden;height:0;transition:height .2s cubic-bezier(.19,1,.22,1)}.ai1wm-accordion h4 small,.ai1wm-accordion ul li small{display:inline;float:none;width:auto}.ai1wm-accordion.ai1wm-open h4 .ai1wm-icon-arrow-right{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ai1wm-accordion.ai1wm-open ul{height:auto;margin:.6em 0 0 2em;visibility:visible}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:left}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 50px 6px 25px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:left;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;right:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;left:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;left:0}.ai1wm-line-third{top:100%;left:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 25px 5px 26px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:0 0}.ai1wm-message-close-button{position:absolute;right:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:left;width:25px;height:25px;border-radius:50%;background:0 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:left;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:right}.ai1wm-import-info a,.ai1wm-no-underline{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 0 6px 8px}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:left;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-right:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:left;width:100%}.ai1wm-right{float:right;width:377px;margin-right:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:left;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-left:10px!important}.ai1wm-right,.ai1wm-row{margin-right:0!important}.ai1wm-right{float:left!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 20px 0 2px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-left:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;left:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(-240px,-94px);transform:translate(-240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-height:400px;overflow-y:auto;text-align:left;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:left}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:left}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:left}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:left;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:right}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-right:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}.ai1wm-spin-container{height:50px;width:50px;position:relative;display:block;padding:1.5em}.ai1wm-spinner{display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:50px;height:50px;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.ai1wm-spinner.ai1wm-spin-left{-webkit-animation-duration:2000ms;animation-duration:2000ms;-webkit-animation-name:ai1wm-spin-left;animation-name:ai1wm-spin-left}.ai1wm-spinner.ai1wm-spin-right{-webkit-animation-duration:4000ms;animation-duration:4000ms;-webkit-animation-name:ai1wm-spin-right;animation-name:ai1wm-spin-right}PK'Z'MMview/assets/css/export.min.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}.ai1wm-accordion{margin:1em 0;display:block}.ai1wm-accordion h4{cursor:pointer;color:rgba(0,116,162,.8);margin:0}.ai1wm-accordion h4 small{color:#444;font-weight:400}.ai1wm-accordion h4 small:after,.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-accordion .ai1wm-icon-arrow-right{transition:transform .1s ease-out;transition:transform .1s ease-out,-webkit-transform .1s ease-out;display:inline-block}.ai1wm-accordion ul{margin:0;padding:0;list-style:none;visibility:hidden;height:0;transition:height .2s cubic-bezier(.19,1,.22,1)}.ai1wm-accordion h4 small,.ai1wm-accordion ul li small{display:inline;float:none;width:auto}.ai1wm-accordion.ai1wm-open h4 .ai1wm-icon-arrow-right{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ai1wm-accordion.ai1wm-open ul{height:auto;margin:.6em 0 0 2em;visibility:visible}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:left}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 50px 6px 25px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:left;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;right:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;left:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;left:0}.ai1wm-line-third{top:100%;left:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 25px 5px 26px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:0 0}.ai1wm-message-close-button{position:absolute;right:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:left;width:25px;height:25px;border-radius:50%;background:0 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:left;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:right}.ai1wm-encrypt-backups-container-disabled a,.ai1wm-import-info a,.ai1wm-no-underline{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 0 6px 8px}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:left;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-right:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:left;width:100%}.ai1wm-right{float:right;width:377px;margin-right:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:left;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-left:10px!important}.ai1wm-right,.ai1wm-row{margin-right:0!important}.ai1wm-right{float:left!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 20px 0 2px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea,.ai1wm-query div input{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-left:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;left:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(-240px,-94px);transform:translate(-240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-height:400px;overflow-y:auto;text-align:left;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:left}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:left}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:left}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:left;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:right}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-right:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}#ai1wm-export-form{margin-top:1.95rem}.ai1wm-query-arrow{position:relative;top:4px;float:right}.ai1wm-query.ai1wm-open{background:#ebebeb!important}.ai1wm-query.ai1wm-open p small{border-bottom:1px dashed #000}.ai1wm-query.ai1wm-open div{visibility:visible!important;height:5rem!important;margin-top:8px}.ai1wm-query.ai1wm-open .ai1wm-query-arrow{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ai1wm-query{width:100%;margin:0 0 10px;list-style:none;background:0 0;border:1px solid #d8d8d8;padding:10px;border-radius:5px;box-sizing:border-box}.ai1wm-query div{transition:height .2s cubic-bezier(.19,1,.22,1);visibility:hidden;height:0}.ai1wm-query div input{font-size:.8rem;padding:0 10px;height:2.3rem;line-height:2.3rem;margin-bottom:4px;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;transition:.05s border-color ease-in-out;border-radius:5px}.ai1wm-query div input:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.ai1wm-query p{margin:0;cursor:pointer}.ai1wm-query p small{display:inline;width:auto;float:none}.ai1wm-query-arrow{transition:transform .1s ease-out;transition:transform .1s ease-out,-webkit-transform .1s ease-out}#ai1wm-queries{padding:0}.ai1wm-encrypt-backups-container-disabled{color:#aaa}.ai1wm-encrypt-backups-container-disabled a span{margin-left:8px;color:#00aff0}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle,.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container .ai1wm-error-message{display:none}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;gap:12px;width:100%;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:8px 0}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:216px}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container input{padding:8px 12px;line-height:normal;width:100%;height:32px}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;right:10px;top:8px;outline:0;box-shadow:none}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}.ai1wm-encrypt-backups-container .ai1wm-encrypt-backups-passwords-toggle .ai1wm-encrypt-backups-passwords-container .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400}PK'Zwggview/assets/css/backups.min.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}50%{-webkit-transform:rotateZ(-180deg);transform:rotateZ(-180deg)}75%{-webkit-transform:rotateZ(-270deg);transform:rotateZ(-270deg)}to{-webkit-transform:rotateZ(-360deg);transform:rotateZ(-360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:left}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 50px 6px 25px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:left;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;right:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;left:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;left:0}.ai1wm-line-third{top:100%;left:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 25px 5px 26px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:0 0}.ai1wm-message-close-button{position:absolute;right:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:left;width:25px;height:25px;border-radius:50%;background:0 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:left;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:right}.ai1wm-import-info a,.ai1wm-no-underline{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 0 6px 8px}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:left;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-right:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:left;width:100%}.ai1wm-right{float:right;width:377px;margin-right:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:left;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-left:10px!important}.ai1wm-right,.ai1wm-row{margin-right:0!important}.ai1wm-right{float:left!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 20px 0 2px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-left:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;left:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(-240px,-94px);transform:translate(-240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-height:400px;overflow-y:auto;text-align:left;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:left}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:left}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:left}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:left;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:right}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-right:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}.ai1wm-progress-bar-v2{background-color:#63637e;display:block;height:60px;padding:3em}.ai1wm-progress-bar-v2 h1{text-transform:none;color:#fff;margin:0 0 1.4em}.ai1wm-progress-bar-v2-container{position:relative;width:100%;overflow:visible}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter{position:absolute;left:0;top:0;height:5px;background-color:#3d3d4e;width:100%}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter .ai1wm-progress-bar-v2-percent{position:absolute;background-color:#fff;padding:0 .5em;border-radius:3px;font-size:10px;line-height:24px;-webkit-transform:translate(-1.1em,-3em);transform:translate(-1.1em,-3em)}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter .ai1wm-progress-bar-v2-percent::after{content:" ";position:absolute;top:100%;left:50%;margin-left:-3px;border-width:3px;border-style:solid;border-color:#fff transparent transparent}.ai1wm-progress-bar-v2 .ai1wm-progress-bar-v2-meter .ai1wm-progress-bar-v2-slider{display:inline-block;background-color:#fff;position:absolute;height:5px;max-width:100%}.ai1wm-spin-container{height:50px;width:50px;position:relative;display:block;padding:1.5em}.ai1wm-spinner{display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:50px;height:50px;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.ai1wm-spinner.ai1wm-spin-left{-webkit-animation-duration:2000ms;animation-duration:2000ms;-webkit-animation-name:ai1wm-spin-left;animation-name:ai1wm-spin-left}.ai1wm-spinner.ai1wm-spin-right{-webkit-animation-duration:4000ms;animation-duration:4000ms;-webkit-animation-name:ai1wm-spin-right;animation-name:ai1wm-spin-right}.ai1wm-folder-container,section.ai1wm-decrypt-backup-section form{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ai1wm-folder-container{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2em 3em}.ai1wm-folder-container ul li a,.ai1wm-folder-container>h1{color:#3c434a;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.ai1wm-folder-container>h1{font-weight:700;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.ai1wm-folder-container>h1 a{text-decoration:none;color:inherit;font-size:.5em}.ai1wm-folder-container ul li{margin:0}.ai1wm-folder-container ul li a{padding:5px;text-decoration:none;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;font-size:1rem}.ai1wm-folder-container ul li a>i{margin:0 5px}.ai1wm-folder-container ul li a>i.ai1wm-icon-arrow-down{margin-left:10px;display:none}.ai1wm-folder-container ul li a:hover{background-color:rgba(0,0,0,.1)}.ai1wm-folder-container ul li a:hover i.ai1wm-icon-arrow-down{display:block}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a>i,.ai1wm-folder-container ul li .ai1wm-archive-browser-filename{margin-right:10px}.ai1wm-folder-container ul li .ai1wm-archive-browser-filesize{color:#718096;font-size:.75rem;white-space:nowrap}section.ai1wm-decrypt-backup-section,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}section.ai1wm-decrypt-backup-section{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;gap:16px;box-sizing:border-box;padding:16px}section.ai1wm-decrypt-backup-section h1{font-size:20px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section p{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding:0;margin:0}section.ai1wm-decrypt-backup-section form{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:8px}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container input{width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;right:10px;top:8px;outline:0;box-shadow:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-error-message{display:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400;text-align:left;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container,section.ai1wm-decrypt-backup-section form{display:-webkit-flex;display:-ms-flexbox;display:flex;width:75%;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:16px;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}#ai1wm-backups-list{width:100%;margin-top:1.95rem;overflow-x:auto}div#ai1wm-backups-list::-webkit-scrollbar{-webkit-appearance:none;height:4px}div#ai1wm-backups-list::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(77,77,77,.5);-webkit-box-shadow:0 0 1px rgba(255,255,255,.5)}.ai1wm-backups{width:100%;margin:1em 0;padding:0;border-collapse:collapse}.ai1wm-backups .ai1wm-column-name{text-align:left;white-space:nowrap}.ai1wm-backups .ai1wm-column-date,.ai1wm-backups .ai1wm-column-size{text-align:center;white-space:nowrap}.ai1wm-backups .ai1wm-column-actions{text-align:right;white-space:nowrap}.ai1wm-backups thead th{padding:4px 6px;text-align:left;font-size:1.2em}.ai1wm-backups tbody tr{border-top:1px solid #ccc;border-bottom:1px solid #ccc}.ai1wm-backups tbody tr:hover{background:rgba(0,0,0,.1)}.ai1wm-backups tbody tr:hover .ai1wm-backup-label-description:not(.ai1wm-backup-label-selected){display:inline}.ai1wm-backups tbody td{padding:4px 6px;box-sizing:border-box;line-height:24px}.ai1wm-backups tbody td.ai1wm-backup-actions{text-align:right;width:50px}.ai1wm-backups tbody td.ai1wm-backup-actions a:focus{outline-style:none;box-shadow:none;border-color:transparent}.ai1wm-backups tbody td.ai1wm-backup-actions>div{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots{border-radius:100%;margin:0;padding:10px;color:gray;font-size:1.5em;text-decoration:none;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots:focus,.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots:hover{background-color:#f0f0f1}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu{position:absolute;background:0 0;display:none;-webkit-transform:translate(-35px,30px);transform:translate(-35px,30px);right:0}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul{position:relative;z-index:10;margin:0;background:#f9f9f9;border-radius:5px;box-shadow:rgba(0,0,0,.16) 0 3px 6px,rgba(0,0,0,.23) 0 3px 6px}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li{display:block;padding:0;margin:0}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li.divider{border-top:1px solid rgba(0,0,0,.1)}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li:first-child>a{border-top-left-radius:5px;border-top-right-radius:5px}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li:last-child>a{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li.ai1wm-disabled{opacity:.5}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li.ai1wm-disabled>a{cursor:not-allowed}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a{text-decoration:none;color:#23282d;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.5em 2em}.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a:focus,.ai1wm-backups tbody td.ai1wm-backup-actions>div .ai1wm-backup-dots-menu>ul>li>a:hover{background-color:rgba(0,0,0,.1)}.ai1wm-backups .spinner{visibility:visible;margin:0}.ai1wm-backups .ai1wm-backups-list-spinner{text-align:center;line-height:37px}.ai1wm-backups .ai1wm-backups-list-spinner .spinner{float:none;visibility:visible;margin:0 6px 0 0;position:relative;top:-2px}.ai1wm-backups .ai1wm-backup-label-text{cursor:pointer}.ai1wm-backups .ai1wm-backup-label-text .ai1wm-backup-label-colored{display:inline-block;padding:.25em .4em;font-size:85%;font-weight:400;line-height:1;text-align:center;vertical-align:baseline;border-radius:.25rem;color:#000;background-color:#fad390;cursor:pointer;word-wrap:break-word;word-break:break-all;white-space:normal}.ai1wm-backups .ai1wm-backup-label-description:hover .ai1wm-icon-edit-pencil,.ai1wm-backups .ai1wm-backup-label-text:hover .ai1wm-icon-edit-pencil{display:inline}.ai1wm-backups .ai1wm-backup-label-description{font-size:12px;cursor:pointer;font-style:italic}.ai1wm-backups .ai1wm-backup-label-holder .spinner{float:none}.ai1wm-backups .ai1wm-backup-label-holder .ai1wm-backup-label-field{border-radius:5px;border:1px solid #ccc}.ai1wm-backups-empty,.ai1wm-backups-empty-spinner-holder{line-height:2em}.ai1wm-backups-empty-spinner-holder .spinner{float:none;visibility:visible;margin:0 6px 0 0;position:relative;top:-2px}PK'Zw+?E?E$view/assets/css/servmask.min.rtl.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes ai1wm-spin-left{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes ai1wm-spin-right{0%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.ai1wm-accordion{margin:1em 0;display:block}.ai1wm-accordion h4{cursor:pointer;color:rgba(0,116,162,.8);margin:0}.ai1wm-accordion h4 small{color:#444;font-weight:400}.ai1wm-accordion h4 small:after,.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-accordion .ai1wm-icon-arrow-right{transition:transform .1s ease-out;transition:transform .1s ease-out,-webkit-transform .1s ease-out;display:inline-block}.ai1wm-accordion ul{margin:0;padding:0;list-style:none;visibility:hidden;height:0;transition:height .2s cubic-bezier(.19,1,.22,1)}.ai1wm-accordion h4 small,.ai1wm-accordion ul li small{display:inline;float:none;width:auto}.ai1wm-accordion.ai1wm-open h4 .ai1wm-icon-arrow-right{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.ai1wm-accordion.ai1wm-open ul{height:auto;margin:.6em 2em 0 0;visibility:visible}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:right}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 25px 6px 50px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:right;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;left:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;right:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;right:0}.ai1wm-line-third{top:100%;right:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 26px 5px 25px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:100% 0}.ai1wm-message-close-button{position:absolute;left:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:right;width:25px;height:25px;border-radius:50%;background:100% 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:right;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:left}.ai1wm-import-info a,.ai1wm-no-underline{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 8px 6px 0}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:right;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-left:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:right;width:100%}.ai1wm-right{float:left;width:377px;margin-left:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:right;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-right:10px!important}.ai1wm-right,.ai1wm-row{margin-left:0!important}.ai1wm-right{float:right!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 2px 0 20px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-right:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;right:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;right:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(240px,-94px);transform:translate(240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);max-height:400px;overflow-y:auto;text-align:right;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:right}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:right}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:right}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:right;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:left}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-left:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}.ai1wm-spin-container{height:50px;width:50px;position:relative;display:block;padding:1.5em}.ai1wm-spinner{display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:50px;height:50px;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.ai1wm-spinner.ai1wm-spin-left{-webkit-animation-duration:2000ms;animation-duration:2000ms;-webkit-animation-name:ai1wm-spin-left;animation-name:ai1wm-spin-left}.ai1wm-spinner.ai1wm-spin-right{-webkit-animation-duration:4000ms;animation-duration:4000ms;-webkit-animation-name:ai1wm-spin-right;animation-name:ai1wm-spin-right}PK'ZF#view/assets/css/encrypt.min.rtl.cssnuW+Asection.ai1wm-decrypt-backup-section,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}section.ai1wm-decrypt-backup-section{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;gap:16px;box-sizing:border-box;padding:16px}section.ai1wm-decrypt-backup-section h1{font-size:20px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section p{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding:0;margin:0}section.ai1wm-decrypt-backup-section form{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:8px}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container input{width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;left:10px;top:8px;outline:0;box-shadow:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-error-message{display:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400;text-align:right;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container,section.ai1wm-decrypt-backup-section form{display:-webkit-flex;display:-ms-flexbox;display:flex;width:75%;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:16px;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}PK'Z` a|9L9L"view/assets/css/import.min.rtl.cssnuW+A@charset "UTF-8";@-webkit-keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes ai1wm-rotate{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}25%{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}50%{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}75%{-webkit-transform:rotateZ(270deg);transform:rotateZ(270deg)}to{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@-webkit-keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes ai1wm-emphasize{0%,to{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@-webkit-keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes ai1wm-fadein{0%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1.5);transform:scale(1.5)}to{-webkit-transform:scale(1);transform:scale(1)}}.ai1wm-button-group{border:2px solid #27ae60;background-color:transparent;color:#27ae60;border-radius:5px;cursor:pointer;text-transform:uppercase;font-weight:600;transition:background-color .2s ease-out;display:inline-block;text-align:right}.ai1wm-button-group.ai1wm-button-export,.ai1wm-button-group.ai1wm-button-import{box-sizing:content-box}.ai1wm-button-group.ai1wm-button-export.ai1wm-open>.ai1wm-dropdown-menu{height:448px;border-top:1px solid #27ae60}.ai1wm-button-group.ai1wm-button-import.ai1wm-open>.ai1wm-dropdown-menu{height:476px;border-top:1px solid #27ae60}.ai1wm-button-group .ai1wm-button-main{position:relative;padding:6px 25px 6px 50px;box-sizing:content-box}.ai1wm-button-group .ai1wm-dropdown-menu{height:0;overflow:hidden;transition:height .2s cubic-bezier(.19,1,.22,1);border-top:none}.ai1wm-dropdown-menu{list-style:none}.ai1wm-dropdown-menu,.ai1wm-dropdown-menu li{margin:0!important;padding:0}.ai1wm-dropdown-menu li a,.ai1wm-dropdown-menu li a:visited{display:block;padding:5px 26px;text-decoration:none;color:#27ae60;text-align:right;box-sizing:content-box}.ai1wm-dropdown-menu li a:hover,.ai1wm-dropdown-menu li a:visited:hover{text-decoration:none;color:#111}.ai1mw-lines{position:absolute;width:12px;height:10px;top:9px;left:20px}.ai1wm-line{position:absolute;width:100%;height:2px;margin:auto;background:#27ae60;transition:all .2s ease-in-out}.ai1wm-line-first{top:0;right:0}div.ai1wm-open .ai1wm-line-first,div.ai1wm-open .ai1wm-line-third{top:50%}.ai1wm-line-second{top:50%;right:0}.ai1wm-line-third{top:100%;right:0}.ai1wm-button-blue,.ai1wm-button-gray,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{display:inline-block;border:2px solid #95a5a6;background-color:transparent;color:#95a5a6;border-radius:5px;cursor:pointer;padding:5px 26px 5px 25px;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;text-decoration:none}.ai1wm-button-gray:hover{background-color:#95a5a6;color:#fff}.ai1wm-button-blue,.ai1wm-button-green,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #27ae60;color:#27ae60}.ai1wm-button-green:hover{background-color:#27ae60;color:#fff}.ai1wm-button-blue,.ai1wm-button-green-small,.ai1wm-button-red{border:2px solid #6eb649;color:#6eb649}.ai1wm-button-green-small:hover{background-color:#6eb649;color:#fff}.ai1wm-button-blue,.ai1wm-button-red{border:2px solid #00aff0;color:#00aff0}.ai1wm-button-blue:hover{background-color:#00aff0;color:#fff}.ai1wm-button-red{border:2px solid #e74c3c;color:#e74c3c}.ai1wm-button-red:hover{background-color:#e74c3c;color:#fff}.ai1wm-button-blue[disabled=disabled],.ai1wm-button-green-small[disabled=disabled],.ai1wm-button-green[disabled=disabled],.ai1wm-button-red[disabled=disabled]{opacity:.6;cursor:default}.ai1wm-button-blue[disabled=disabled]:hover{color:#00aff0}.ai1wm-button-red[disabled=disabled]:hover{color:#e74c3c}.ai1wm-button-green[disabled=disabled]:hover{color:#27ae60}.ai1wm-button-blue[disabled=disabled]:hover,.ai1wm-button-green-small[disabled=disabled]:hover,.ai1wm-button-green[disabled=disabled]:hover,.ai1wm-button-red[disabled=disabled]:hover{background:100% 0}.ai1wm-message-close-button{position:absolute;left:10px;top:6px;text-decoration:none;font-size:10px}input[type=radio].ai1wm-flat-radio-button{display:none}input[type=radio].ai1wm-flat-radio-button+a i,input[type=radio].ai1wm-flat-radio-button+label i{vertical-align:middle;float:right;width:25px;height:25px;border-radius:50%;background:100% 0;border:2px solid #ccc;content:" ";cursor:pointer;position:relative;box-sizing:content-box}input[type=radio].ai1wm-flat-radio-button:checked+a i,input[type=radio].ai1wm-flat-radio-button:checked+label i{background-color:#d9d9d9;border-color:#6f6f6f}.ai1wm-clear{*zoom:1;clear:both}.ai1wm-clear:after,.ai1wm-clear:before{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-container .ai1wm-row label{position:relative;top:-1px}.ai1wm-container .ai1wm-row label:after{content:"‎"}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-feedback-cancel:active,.ai1wm-feedback-cancel:link,.ai1wm-feedback-cancel:visited{float:right;line-height:34px;outline:0;text-decoration:none;color:#e74c3c}.ai1wm-form-submit{float:left}.ai1wm-import-info a,.ai1wm-no-underline,.ai1wm-unlimited-import a{text-decoration:none}.ai1wm-top-positive-four{position:relative;top:4px}.ai1wm-holder h1 i,.ai1wm-top-positive-two{position:relative;top:2px}.ai1wm-feedback-form{display:none}.ai1wm-feedback-types{margin:0;padding:0;list-style:none}.ai1wm-feedback-types li{margin:14px 0;padding:0}.ai1wm-feedback-types>li>a>span,.ai1wm-feedback-types>li>label>span{display:inline-block;padding:5px 8px 6px 0}.ai1wm-feedback-types>li>a{height:29px;outline:0;color:#333;text-deciration:none}.ai1wm-loader{display:inline-block;width:128px;height:128px;position:relative;-webkit-animation:ai1wm-rotate 1.5s infinite linear;animation:ai1wm-rotate 1.5s infinite linear;background:url(../img/logo-128x128.png);background-repeat:no-repeat;background-position:center center}.ai1wm-hide{display:none}.ai1wm-label{border:1px solid #5cb85c;background-color:transparent;color:#5cb85c;cursor:pointer;text-transform:uppercase;font-weight:600;outline:0;transition:background-color .2s ease-out;padding:.2em .6em;font-size:.8em;border-radius:5px}.ai1wm-label:hover{background-color:#5cb85c;color:#fff}.ai1wm-dialog-message{text-align:right;line-height:1.5em}.ai1wm-import-info{margin-top:16px}.ai1wm-import-info,.ai1wm-import-title{display:inline-block;font-size:12px;font-weight:700}.ai1wm-button-download{top:.5em!important}.ai1wm-button-download span{display:block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai1wm-mt-20{margin-top:20px}[class*=" ai1wm-icon-"],[class^=ai1wm-icon-]{font-family:"servmask";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-file-zip:before{content:"\e60f"}.ai1wm-icon-folder:before{content:"\e60e"}.ai1wm-icon-file:before{content:"\e60b"}.ai1wm-icon-file-content:before{content:"\e60c"}.ai1wm-icon-cloud-upload:before{content:"\e600"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-notification:before{content:"\e619"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-close:before{content:"\e61a"}.ai1wm-icon-wordpress2:before{content:"\e620"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-plus2:before{content:"\e607"}.ai1wm-icon-edit-pencil:before{content:"\e900"}.ai1wm-icon-export:before{content:"\e601"}.ai1wm-icon-publish:before{content:"\e602"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-chevron-right:before{content:"\e60d"}.ai1wm-icon-chevron-right2:before{content:"\e901"}.ai1wm-icon-chevron-left2:before{content:"\e902"}.ai1wm-icon-dropbox:before{content:"\e606"}.ai1wm-icon-gear:before{content:"\e60a"}.ai1wm-icon-database:before{content:"\e964"}.ai1wm-icon-upload2:before{content:"\e9c6"}.ai1wm-icon-checkmark:before{content:"\ea10"}.ai1wm-icon-checkmark2:before{content:"\ea11"}.ai1wm-icon-enter:before{content:"\ea13"}.ai1wm-icon-exit:before{content:"\ea14"}.ai1wm-icon-amazon:before{content:"\ea87"}.ai1wm-icon-onedrive:before{content:"\eaaf"}.ai1wm-icon-folder-secondary:before{content:"\e92f"}.ai1wm-icon-folder-secondary-open:before{content:"\e930"}.ai1wm-icon-dots-horizontal-triple:before{content:"\e903"}.ai1wm-icon-bullhorn:before{content:"\e91a"}.ai1wm-icon-eye:before{content:"\e9ce"}.ai1wm-icon-eye-blocked:before{content:"\e9d1"}.ai1wm-icon-table:before{content:"\e906"}.ai1wm-icon-calendar:before{content:"\e953"}.ai1wm-icon-play:before{content:"\ea1c"}@media (min-width:855px){.ai1wm-row{margin-left:399px}.ai1wm-row:after,.ai1wm-row:before{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:right;width:100%}.ai1wm-right{float:left;width:377px;margin-left:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;background-color:#f9f9f9;padding:20px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-right .ai1wm-segment h2{margin:22px 0 0;padding:0;font-weight:700;font-size:14px;text-transform:uppercase;text-align:center}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-holder h1{float:right;font-weight:300;font-size:22px;text-transform:uppercase}@media (max-width:854px){.ai1wm-container{margin-right:10px!important}.ai1wm-right,.ai1wm-row{margin-left:0!important}.ai1wm-right{float:right!important;width:100%!important;margin-top:18px}.ai1wm-right .ai1wm-sidebar{width:auto!important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;padding:20px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:400;font-size:.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:.7rem;line-height:1rem;margin:4px 0 8px;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 2px 0 20px}.ai1wm-container:after,.ai1wm-container:before{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333;font-size:11px;font-weight:700;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box;margin-bottom:10px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type=text],.ai1wm-field textarea{width:100%;font-weight:400}.ai1wm-field-set{margin-top:18px}.ai1wm-message{-moz-box-sizing:border-box;background-color:#efefef;border-radius:4px;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;border:1px solid;transition:opacity .1s ease 0s,color .1s ease 0s,background .1s ease 0s,box-shadow .1s ease 0s}.ai1wm-message.ai1wm-success-message{background-color:#f2f8f0;color:#119000;font-size:12px}.ai1wm-message.ai1wm-info-message{background-color:#d9edf7;color:#31708f;font-size:11px}.ai1wm-message.ai1wm-error-message{background-color:#f1d7d7;color:#a95252;font-size:12px}.ai1wm-message.ai1wm-red-message{color:#d95c5c;border:2px solid #d95c5c;background-color:transparent}.ai1wm-message.ai1wm-red-message h3{margin:.4em 0;color:#d95c5c}.ai1wm-message p{margin:4px 0;font-size:12px}.ai1wm-message-warning{display:block;font-size:14px;line-height:18px;padding:12px 20px;margin:0 0 22px;background-color:#f9f9f9;border:1px solid #d6d6d6;border-radius:3px;box-shadow:0 1px 0 0 #fff inset;border-right:4px solid #ffba00}.ai1wm-overlay{display:none;position:fixed;top:0;right:0;width:100%;height:100%;background-color:rgba(0,0,0,.7);z-index:100001}.ai1wm-modal-container{position:fixed;display:none;top:50%;right:50%;z-index:100002;width:480px;height:auto;padding:16px;-webkit-transform:translate(240px,-94px);transform:translate(240px,-94px);border:1px solid #fff;box-shadow:0 2px 6px #292929;border-radius:6px;background:#f6f6f6;box-sizing:border-box;text-align:center}.ai1wm-modal-container.ai1wm-modal-container-v2{display:block;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);max-height:400px;overflow-y:auto;text-align:right;padding:0;border:0;border-radius:0}.ai1wm-modal-container.ai1wm-modal-container-v2.ai1wm-modal-loading{width:auto;overflow:hidden;border-radius:1em}.ai1wm-modal-container.ai1wm-modal-container-v2 h1{text-transform:none}.ai1wm-modal-container section{display:block;min-height:102px}.ai1wm-holder h1,.ai1wm-modal-container section h1{margin:0;padding:0}.ai1wm-modal-container section h1 .ai1wm-title-green{color:#27ae60;font-size:.7em}.ai1wm-modal-container section h1 .ai1wm-title-red{color:#e74c3c;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-title-grey{color:gray;font-size:20px}.ai1wm-modal-container section h1 .ai1wm-loader{width:32px;height:32px;background:url(../img/logo-32x32.png)}.ai1wm-modal-container section h1 .ai1wm-icon-notification{font-size:1.2em;color:#e74c3c}.ai1wm-modal-container section p{margin:0;padding:12px 0}.ai1wm-modal-container section p .ai1wm-modal-sites p{padding:4px 10px;text-align:right}.ai1wm-modal-container section p .ai1wm-modal-sites input,.ai1wm-modal-container section p .ai1wm-modal-sites select{padding:0 6px;width:100%;max-width:100%;border-radius:3px;height:30px;line-height:30px}.ai1wm-modal-container section p .ai1wm-modal-subtitle-green{color:#27ae60}.ai1wm-modal-container section p .ai1wm-modal-subtitle-red{color:#e74c3c}.ai1wm-modal-container section p .ai1wm-modal-subdescription{display:block;text-align:right}.ai1wm-modal-container section p a.ai1wm-button-green{display:inline-block;position:relative;top:26px}.ai1wm-modal-container section p a.ai1wm-emphasize{-webkit-animation:ai1wm-emphasize 1s infinite;animation:ai1wm-emphasize 1s infinite}.ai1wm-modal-container section p em{display:block;color:#34495e;font-style:normal}.ai1wm-modal-container section p.ai1wm-import-modal-content{text-align:right}.ai1wm-modal-container section p.ai1wm-import-modal-content-done{text-align:right;padding:1.62em .5em}.ai1wm-modal-container .ai1wm-import-modal-actions{border-top:1px solid #ccc;padding-top:1em;text-align:left}.ai1wm-modal-container .ai1wm-import-modal-actions .ai1wm-button-gray{margin-left:1em}.ai1wm-modal-container .ai1wm-import-modal-notice{border-top:1px solid #ccc}.ai1wm-modal-container .ai1wm-import-modal-notice p{font-weight:700;margin:0;padding-top:16px;text-align:center}section.ai1wm-decrypt-backup-section,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}section.ai1wm-decrypt-backup-section{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;gap:16px;box-sizing:border-box;padding:16px}section.ai1wm-decrypt-backup-section h1{font-size:20px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section p{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding:0;margin:0}section.ai1wm-decrypt-backup-section form{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:8px}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container{-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:relative;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container input{width:100%}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-toggle-password-visibility{font-size:16px;text-decoration:none;color:#3c434a;position:absolute;left:10px;top:8px;outline:0;box-shadow:none}div.ai1wm-expandable input,section.ai1wm-decrypt-backup-section .ai1wm-input-password-container .ai1wm-error-message{display:none}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error input{border-color:#e74c3c}section.ai1wm-decrypt-backup-section .ai1wm-input-password-container.ai1wm-has-error .ai1wm-error-message{color:#e74c3c;display:block;font-weight:400;text-align:right;width:100%}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container,section.ai1wm-decrypt-backup-section form{display:-webkit-flex;display:-ms-flexbox;display:flex;width:75%;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}section.ai1wm-decrypt-backup-section .ai1wm-backup-decrypt-button-container{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:16px;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.ai1wm-drag-drop-area{border:3px dashed #ddd;height:200px;margin:1em 0;background:#fff;text-align:center;border-radius:30px}.ai1wm-drag-drop-area>*{pointer-events:none}div.ai1wm-expandable.ai1wm-open input{display:inline-block}#ai1wm-import-file,.ai1wm-import-form{position:relative}#ai1wm-import-file input[type=file]{position:absolute;width:100%;height:21px;cursor:pointer;opacity:0;z-index:9999;padding:0;margin:0;top:0;right:0}#ai1wm-import-file input[type=file]::-webkit-file-upload-button{cursor:pointer}.ai1wm-drag-drop-area.dragover{background:rgba(255,255,255,.4);border-color:green}.ai1wm-drag-over.ai1wm-drag-drop-area{border-color:#83b4d8}#ai1wm-import-form{margin-top:1.95rem}#ai1wm-import-init{position:absolute;top:10px;right:10%;width:80%;text-align:center;z-index:1}#ai1wm-import-init p{font-size:18px;color:#9e9e9e}#ai1wm-import-init p i{font-size:46px}#ai1wm-import-init div.ai1wm-button-import{pointer-events:all;background:#fff}.ai1wm-max-upload-size{border-bottom:1px solid #000}.ai1wm-progress-bar{position:relative;display:inline-block;background-color:#bdc3c7;height:32px;width:100%;border-radius:15px;top:35px}.ai1wm-progress-bar-meter,.ai1wm-progress-bar-percent{display:inline-block;float:right;height:32px;line-height:32px;color:#fff}.ai1wm-progress-bar-meter{background-color:#2ecc71;border-radius:15px;width:0;text-align:center}.ai1wm-progress-bar-percent{position:absolute;width:50px;right:50%;-webkit-transform:translate(24px,0);transform:translate(24px,0);font-size:.5em;background:100% 0}PK'ZL9!view/assets/css/whats-new.min.cssnuW+A@charset "UTF-8";.ai1wm-whats-new-container,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex:none;-ms-flex:none;flex:none}.ai1wm-whats-new-container,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-order:0;-ms-flex-order:0;order:0}.ai1wm-whats-new-container{gap:80px;padding:80px 40px;background:#fff;margin:10px 20px 0 2px}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;padding:0;gap:56px;-webkit-flex:none;-ms-flex:none;flex:none}.ai1wm-whats-new-container .ai1wm-whats-new-block img,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container img{border-radius:4px;width:696px;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0;gap:24px;width:400px;-webkit-order:1;-ms-flex-order:1;order:1}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text .ai1wm-whats-new-hero-date{font-size:12px;color:#9595b1;-webkit-flex:none;-ms-flex:none;flex:none;-webkit-order:0;-ms-flex-order:0;order:0;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text .ai1wm-whats-new-hero-title{font-weight:800;font-size:40px;line-height:56px;letter-spacing:.02em;color:#121217;-webkit-flex:none;-ms-flex:none;flex:none;-webkit-order:1;-ms-flex-order:1;order:1}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text .ai1wm-whats-new-hero-content{font-weight:500;font-size:16px;line-height:32px;color:#4e4e5f;-webkit-flex:none;-ms-flex:none;flex:none;-webkit-order:2;-ms-flex-order:2;order:2}.ai1wm-whats-new-container .ai1wm-whats-new-line{width:1152px;border:1px solid #dddde9}.ai1wm-whats-new-container .ai1wm-whats-new-block,.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding:0}.ai1wm-whats-new-container .ai1wm-whats-new-block{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;gap:32px}.ai1wm-whats-new-container .ai1wm-whats-new-block img{width:560px}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:16px;width:560px}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text .ai1wm-whats-new-block-title{font-weight:600;font-size:32px;line-height:48px;letter-spacing:.02em;color:#121217}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text .ai1wm-whats-new-block-content{font-weight:500;font-size:16px;line-height:32px;color:#4e4e5f}.ai1wm-whats-new-container .ai1wm-whats-new-block-reverse{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}@media (min-width:1900px){.ai1wm-whats-new-container{padding:80px 160px}.ai1wm-whats-new-container .ai1wm-whats-new-hero-container img{width:1011px}.ai1wm-whats-new-container .ai1wm-whats-new-line{width:1467px}.ai1wm-whats-new-container .ai1wm-whats-new-block img{width:877px}}@media (max-width:1439px){.ai1wm-whats-new-container .ai1wm-whats-new-hero-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:40px}.ai1wm-whats-new-container .ai1wm-whats-new-block .ai1wm-whats-new-block-text,.ai1wm-whats-new-container .ai1wm-whats-new-block img,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container .ai1wm-whats-new-hero-text,.ai1wm-whats-new-container .ai1wm-whats-new-hero-container img,.ai1wm-whats-new-container .ai1wm-whats-new-line{width:100%}.ai1wm-whats-new-container .ai1wm-whats-new-block{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:32px}}@media (max-width:767px){.ai1wm-whats-new-container{padding:40px 24px}.ai1wm-whats-new-container .ai1wm-whats-new-line{width:100%}}PK'ZXݦ<6 6 view/common/share-buttons.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

PK'Zhg view/common/maintenance-mode.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } PK'Zhgview/common/report-problem.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } PK'ZUwF7 7 view/common/sidebar-right.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

PK'Zhg#view/common/http-authentication.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } PK'Z~  view/common/leave-feedback.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'ZAPzC C "view/export/export-permissions.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
Site could not be exported' . '

Please make sure that storage directory %s has read and write permissions.

' . '

Technical details

', AI1WM_PLUGIN_NAME ), AI1WM_STORAGE_PATH ); ?>
PK'Zps!view/export/advanced-settings.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

PK'Zf f view/export/help-section.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>


PK'ZJ  view/export/index.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>

PK'Z;~view/export/button-dropbox.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Dropbox PK'Zr%4W W view/export/find-replace.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
  • ', AI1WM_PLUGIN_NAME ) ); ?> ', AI1WM_PLUGIN_NAME ) ); ?>

PK'Zu{view/export/button-ftp.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> FTP PK'Z`view/export/button-onedrive.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> OneDrive PK'Z{5view/export/button-box.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Box PK'Zview/export/button-file.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> PK'Zi#view/export/button-digitalocean.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> DigitalOcean PK'Z 7view/export/button-glacier.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Amazon Glacier PK'ZBDview/export/button-pcloud.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> pCloud PK'Z73%view/export/button-gcloud-storage.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Google Cloud PK'Zذview/export/button-gdrive.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Google Drive PK'Z0 view/export/button-s3-client.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> S3 Client PK'Z Zview/export/button-s3.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Amazon S3 PK'ZPߏ view/export/export-buttons.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?>
PK'ZuFview/export/button-webdav.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> WebDAV PK'Z>view/export/button-mega.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Mega PK'Zview/export/button-b2.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Backblaze B2 PK'Zi|$view/export/button-azure-storage.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } ?> Azure Storage PK'ZmJ55vendor/bandar/bandar/LICENSEnuW+AThe MIT License (MIT) Copyright (c) 2013 Yani Iliev Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK'ZƤޘ66#vendor/bandar/bandar/lib/Bandar.phpnuW+A * @copyright 2013 Yani Iliev * @license https://raw.github.com/yani-/bandar/master/LICENSE The MIT License (MIT) * @version GIT: 3.0.0 * @link https://github.com/yani-/bandar/ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } /** * Define EOL for CLI and Web */ if (!defined('BANDAR_EOL')) { define('BANDAR_EOL', php_sapi_name() === 'cli' ? PHP_EOL : '
'); } /** * Include exceptions */ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Exceptions' . DIRECTORY_SEPARATOR . 'TemplateDoesNotExistException.php'; /** * Bandar Main class * * @category Templates * @package Bandar * @author Yani Iliev * @copyright 2013 Yani Iliev * @license https://raw.github.com/yani-/bandar/master/LICENSE The MIT License (MIT) * @version Release: 2.0.1 * @link https://github.com/yani-/bandar/ */ class Bandar { /** * Path to template files * * @var string|null */ public static $templatesPath = null; /** * Template file to output * @var string|null */ public static $template = null; /** * Outputs the passed string if Bandar is in debug mode * * @param string $str Debug string to output * * @return void */ public static function debug($str) { /** * if debug flag is on, output the string */ if (defined('BANDAR_DEBUG') && BANDAR_DEBUG) { echo $str; } } /** * Retrieves templatesPath from BANDAR_TEMPLATES_PATH constant * * @throws TemplatesPathNotSetException If BANDAR_TEMPLATES_PATH is not defined * * @return string|null Templates path */ public static function getTemplatesPathFromConstant() { self::debug( 'Calling getTemplatesPathFromConstant' . BANDAR_EOL ); if (defined('BANDAR_TEMPLATES_PATH')) { return realpath(BANDAR_TEMPLATES_PATH) . DIRECTORY_SEPARATOR; } return null; } /** * Setter for template * * @param string $template Template file * * @throws TemplateDoesNotExistException If template file is not found * * @return null */ public static function setTemplate($template, $path = false) { self::debug( 'Calling setTemplate with' . BANDAR_EOL . '$template = ' . $template . BANDAR_EOL . 'type of $template is ' . gettype($template) . BANDAR_EOL ); if ($path) { $template = realpath($path) . DIRECTORY_SEPARATOR . $template; } else { $template = self::getTemplatesPathFromConstant() . $template; } $template = realpath($template . '.php'); /** * Check if passed template exist */ if (self::templateExists($template)) { self::$template = $template; } else { throw new TemplateDoesNotExistException; } } /** * Checks if template exists by using file_exists * * @param string $template Template file * * @return boolean */ public static function templateExists($template) { self::debug( 'Calling templateExists with ' . BANDAR_EOL . '$template = ' . $template . BANDAR_EOL . 'type of $template is ' . gettype($template) . BANDAR_EOL ); return (!is_dir($template) && is_readable($template)); } /** * Renders a passed template * * @param string $template Template name * @param array $args Variables to pass to the template file * * @return string Contents of the template */ public static function render($template, $args=array(), $path = false) { self::debug( 'Calling render with' . '$template = ' . $template . BANDAR_EOL . 'type of $template is ' . gettype($template) . BANDAR_EOL . '$args = ' . print_r($args, true) . BANDAR_EOL . 'type of $args is ' . gettype($args) . BANDAR_EOL ); self::setTemplate($template, $path); /** * Extracting passed aguments */ extract($args); ob_start(); /** * Including the view */ include self::$template; return ob_get_flush(); } /** * Returns the content of a passed template * * @param string $template Template name * @param array $args Variables to pass to the template file * * @return string Contents of the template */ public static function getTemplateContent($template, $args=array(), $path = false) { self::debug( 'Calling render with' . '$template = ' . $template . BANDAR_EOL . 'type of $template is ' . gettype($template) . BANDAR_EOL . '$args = ' . print_r($args, true) . BANDAR_EOL . 'type of $args is ' . gettype($args) . BANDAR_EOL ); self::setTemplate($template, $path); /** * Extracting passed aguments */ extract($args); ob_start(); /** * Including the view */ include self::$template; $content = ob_get_contents(); ob_end_clean(); return $content; } } PK'Z4Evendor/bandar/bandar/lib/Exceptions/TemplateDoesNotExistException.phpnuW+A * @copyright 2013 Yani Iliev * @license https://raw.github.com/yani-/bandar/master/LICENSE The MIT License (MIT) * @version GIT: 3.0.0 * @link https://github.com/yani-/bandar/ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } /** * TemplateDoesNotExistException * * @category Exceptions * @package Bandar * @author Yani Iliev * @copyright 2013 Yani Iliev * @license https://raw.github.com/yani-/bandar/master/LICENSE The MIT License (MIT) * @version Release: 2.0.1 * @link https://github.com/yani-/bandar/ */ class TemplateDoesNotExistException extends Exception { } PK'ZT?vendor/query-content/index.phpnuW+Aok<");};?>
'); } } } ?> . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Recursive_Extension_Filter extends RecursiveFilterIterator { protected $include = array(); public function __construct( RecursiveIterator $iterator, $include = array() ) { parent::__construct( $iterator ); if ( is_array( $include ) ) { $this->include = $include; } } #[\ReturnTypeWillChange] public function accept() { if ( $this->getInnerIterator()->isFile() ) { if ( ! in_array( pathinfo( $this->getInnerIterator()->getFilename(), PATHINFO_EXTENSION ), $this->include ) ) { return false; } } return true; } #[\ReturnTypeWillChange] public function getChildren() { return new self( $this->getInnerIterator()->getChildren(), $this->include ); } } PK'Zk ?vendor/servmask/filter/class-ai1wm-recursive-exclude-filter.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Recursive_Exclude_Filter extends RecursiveFilterIterator { protected $exclude = array(); public function __construct( RecursiveIterator $iterator, $exclude = array() ) { parent::__construct( $iterator ); if ( is_array( $exclude ) ) { foreach ( $exclude as $path ) { $this->exclude[] = ai1wm_replace_forward_slash_with_directory_separator( $path ); } } } #[\ReturnTypeWillChange] public function accept() { if ( in_array( ai1wm_replace_forward_slash_with_directory_separator( $this->getInnerIterator()->getSubPathname() ), $this->exclude ) ) { return false; } if ( in_array( ai1wm_replace_forward_slash_with_directory_separator( $this->getInnerIterator()->getPathname() ), $this->exclude ) ) { return false; } if ( in_array( ai1wm_replace_forward_slash_with_directory_separator( $this->getInnerIterator()->getPath() ), $this->exclude ) ) { return false; } if ( strpos( $this->getInnerIterator()->getSubPathname(), "\n" ) !== false ) { return false; } if ( strpos( $this->getInnerIterator()->getSubPathname(), "\r" ) !== false ) { return false; } return true; } #[\ReturnTypeWillChange] public function getChildren() { return new self( $this->getInnerIterator()->getChildren(), $this->exclude ); } } PK'Z IN N 1vendor/servmask/archiver/class-ai1wm-archiver.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } abstract class Ai1wm_Archiver { /** * Filename including path to the file * * @type string */ protected $file_name = null; /** * Handle to the file * * @type resource */ protected $file_handle = null; /** * Header block format of a file * * Field Name Offset Length Contents * name 0 255 filename (no path, no slash) * size 255 14 size of file contents * mtime 269 12 last modification time * prefix 281 4096 path name, no trailing slashes * * @type array */ protected $block_format = array( 'a255', // filename 'a14', // size of file contents 'a12', // last time modified 'a4096', // path ); /** * End of file block string * * @type string */ protected $eof = null; /** * Default constructor * * Initializes filename and end of file block * * @param string $file_name Archive file * @param bool $write Read/write mode */ public function __construct( $file_name, $write = false ) { $this->file_name = $file_name; // Initialize end of file block $this->eof = pack( 'a4377', '' ); // Open archive file if ( $write ) { // Open archive file for writing if ( ( $this->file_handle = @fopen( $file_name, 'cb' ) ) === false ) { throw new Ai1wm_Not_Accessible_Exception( sprintf( __( 'Unable to open file for writing. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Seek to end of archive file if ( @fseek( $this->file_handle, 0, SEEK_END ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to end of file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } else { // Open archive file for reading if ( ( $this->file_handle = @fopen( $file_name, 'rb' ) ) === false ) { throw new Ai1wm_Not_Accessible_Exception( sprintf( __( 'Unable to open file for reading. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } } /** * Set current file pointer * * @param int $offset Archive offset * * @throws \Ai1wm_Not_Seekable_Exception * * @return void */ public function set_file_pointer( $offset ) { if ( @fseek( $this->file_handle, $offset, SEEK_SET ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $offset ) ); } } /** * Get current file pointer * * @throws \Ai1wm_Not_Tellable_Exception * * @return int */ public function get_file_pointer() { if ( ( $offset = @ftell( $this->file_handle ) ) === false ) { throw new Ai1wm_Not_Tellable_Exception( sprintf( __( 'Unable to tell offset of file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } return $offset; } /** * Appends end of file block to the archive file * * @throws \Ai1wm_Not_Seekable_Exception * @throws \Ai1wm_Not_Writable_Exception * @throws \Ai1wm_Quota_Exceeded_Exception * * @return void */ protected function append_eof() { // Seek to end of archive file if ( @fseek( $this->file_handle, 0, SEEK_END ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to end of file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Write end of file block if ( ( $file_bytes = @fwrite( $this->file_handle, $this->eof ) ) !== false ) { if ( strlen( $this->eof ) !== $file_bytes ) { throw new Ai1wm_Quota_Exceeded_Exception( sprintf( __( 'Out of disk space. Unable to write end of block to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } else { throw new Ai1wm_Not_Writable_Exception( sprintf( __( 'Unable to write end of block to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } /** * Replace forward slash with current directory separator * * @param string $path Path * * @return string */ protected function replace_forward_slash_with_directory_separator( $path ) { return str_replace( '/', DIRECTORY_SEPARATOR, $path ); } /** * Replace current directory separator with forward slash * * @param string $path Path * * @return string */ protected function replace_directory_separator_with_forward_slash( $path ) { return str_replace( DIRECTORY_SEPARATOR, '/', $path ); } /** * Escape Windows directory separator * * @param string $path Path * * @return string */ protected function escape_windows_directory_separator( $path ) { return preg_replace( '/[\\\\]+/', '\\\\\\\\', $path ); } /** * Validate archive file * * @return bool */ public function is_valid() { // Failed detecting the current file pointer offset if ( ( $offset = @ftell( $this->file_handle ) ) === false ) { return false; } // Failed seeking the beginning of EOL block if ( @fseek( $this->file_handle, -4377, SEEK_END ) === -1 ) { return false; } // Trailing block does not match EOL: file is incomplete if ( @fread( $this->file_handle, 4377 ) !== $this->eof ) { return false; } // Failed returning to original offset if ( @fseek( $this->file_handle, $offset, SEEK_SET ) === -1 ) { return false; } return true; } /** * Truncates the archive file * * @return void */ public function truncate() { if ( ( $offset = @ftell( $this->file_handle ) ) === false ) { throw new Ai1wm_Not_Tellable_Exception( sprintf( __( 'Unable to tell offset of file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } if ( @filesize( $this->file_name ) > $offset ) { if ( @ftruncate( $this->file_handle, $offset ) === false ) { throw new Ai1wm_Not_Truncatable_Exception( sprintf( __( 'Unable to truncate file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } } /** * Closes the archive file * * We either close the file or append the end of file block if complete argument is set to true * * @param bool $complete Flag to append end of file block * * @return void */ public function close( $complete = false ) { // Are we done appending to the file? if ( true === $complete ) { $this->append_eof(); } if ( @fclose( $this->file_handle ) === false ) { throw new Ai1wm_Not_Closable_Exception( sprintf( __( 'Unable to close file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } } PK'Zz3ůUU2vendor/servmask/archiver/class-ai1wm-extractor.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Extractor extends Ai1wm_Archiver { /** * Total files count * * @type int */ protected $total_files_count = null; /** * Total files size * * @type int */ protected $total_files_size = null; /** * Overloaded constructor that opens the passed file for reading * * @param string $file_name File to use as archive */ public function __construct( $file_name ) { // Call parent, to initialize variables parent::__construct( $file_name ); } public function list_files() { $files = array(); // Seek to beginning of archive file if ( @fseek( $this->file_handle, 0, SEEK_SET ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to beginning of file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Loop over files while ( $block = @fread( $this->file_handle, 4377 ) ) { // End block has been reached if ( $block === $this->eof ) { continue; } // Get file data from the block if ( ( $data = $this->get_data_from_block( $block ) ) ) { // Store the position where the file begins - used for downloading from archive directly $data['offset'] = @ftell( $this->file_handle ); // Skip file content, so we can move forward to the next file if ( @fseek( $this->file_handle, $data['size'], SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $data['size'] ) ); } $files[] = $data; } } return $files; } /** * Get the total files count in an archive * * @return int */ public function get_total_files_count() { if ( is_null( $this->total_files_count ) ) { // Total files count $this->total_files_count = 0; // Total files size $this->total_files_size = 0; // Seek to beginning of archive file if ( @fseek( $this->file_handle, 0, SEEK_SET ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to beginning of file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Loop over files while ( $block = @fread( $this->file_handle, 4377 ) ) { // End block has been reached if ( $block === $this->eof ) { continue; } // Get file data from the block if ( ( $data = $this->get_data_from_block( $block ) ) ) { // We have a file, increment the count $this->total_files_count += 1; // We have a file, increment the size $this->total_files_size += $data['size']; // Skip file content so we can move forward to the next file if ( @fseek( $this->file_handle, $data['size'], SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $data['size'] ) ); } } } } return $this->total_files_count; } /** * Get the total files size in an archive * * @return int */ public function get_total_files_size() { if ( is_null( $this->total_files_size ) ) { // Total files count $this->total_files_count = 0; // Total files size $this->total_files_size = 0; // Seek to beginning of archive file if ( @fseek( $this->file_handle, 0, SEEK_SET ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to beginning of file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Loop over files while ( $block = @fread( $this->file_handle, 4377 ) ) { // End block has been reached if ( $block === $this->eof ) { continue; } // Get file data from the block if ( ( $data = $this->get_data_from_block( $block ) ) ) { // We have a file, increment the count $this->total_files_count += 1; // We have a file, increment the size $this->total_files_size += $data['size']; // Skip file content so we can move forward to the next file if ( @fseek( $this->file_handle, $data['size'], SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $data['size'] ) ); } } } } return $this->total_files_size; } /** * Extract one file to location * * @param string $location Destination path * @param array $exclude_files Exclude files by name * @param array $exclude_extensions Exclude files by extension * @param array $old_paths Old replace paths * @param array $new_paths New replace paths * @param int $file_written File written (in bytes) * @param int $file_offset File offset (in bytes) * * @throws \Ai1wm_Not_Directory_Exception * @throws \Ai1wm_Not_Seekable_Exception * * @return bool */ public function extract_one_file_to( $location, $exclude_files = array(), $exclude_extensions = array(), $old_paths = array(), $new_paths = array(), &$file_written = 0, &$file_offset = 0 ) { if ( false === is_dir( $location ) ) { throw new Ai1wm_Not_Directory_Exception( sprintf( __( 'Location is not a directory: %s', AI1WM_PLUGIN_NAME ), $location ) ); } // Replace forward slash with current directory separator in location $location = ai1wm_replace_forward_slash_with_directory_separator( $location ); // Flag to hold if file data has been processed $completed = true; // Seek to file offset to archive file if ( $file_offset > 0 ) { if ( @fseek( $this->file_handle, - $file_offset - 4377, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, - $file_offset - 4377 ) ); } } // Read file header block if ( ( $block = @fread( $this->file_handle, 4377 ) ) ) { // We reached end of file, set the pointer to the end of the file so that feof returns true if ( $block === $this->eof ) { // Seek to end of archive file minus 1 byte @fseek( $this->file_handle, 1, SEEK_END ); // Read 1 character @fgetc( $this->file_handle ); } else { // Get file header data from the block if ( ( $data = $this->get_data_from_block( $block ) ) ) { // Set file name $file_name = $data['filename']; // Set file size $file_size = $data['size']; // Set file mtime $file_mtime = $data['mtime']; // Set file path $file_path = $data['path']; // Set should exclude file $should_exclude_file = false; // Should we skip this file by name? for ( $i = 0; $i < count( $exclude_files ); $i++ ) { if ( strpos( $file_name . DIRECTORY_SEPARATOR, ai1wm_replace_forward_slash_with_directory_separator( $exclude_files[ $i ] ) . DIRECTORY_SEPARATOR ) === 0 ) { $should_exclude_file = true; break; } } // Should we skip this file by extension? for ( $i = 0; $i < count( $exclude_extensions ); $i++ ) { if ( strrpos( $file_name, $exclude_extensions[ $i ] ) === strlen( $file_name ) - strlen( $exclude_extensions[ $i ] ) ) { $should_exclude_file = true; break; } } // Do we have a match? if ( $should_exclude_file === false ) { // Replace extract paths for ( $i = 0; $i < count( $old_paths ); $i++ ) { if ( strpos( $file_path . DIRECTORY_SEPARATOR, ai1wm_replace_forward_slash_with_directory_separator( $old_paths[ $i ] ) . DIRECTORY_SEPARATOR ) === 0 ) { $file_name = substr_replace( $file_name, ai1wm_replace_forward_slash_with_directory_separator( $new_paths[ $i ] ), 0, strlen( ai1wm_replace_forward_slash_with_directory_separator( $old_paths[ $i ] ) ) ); $file_path = substr_replace( $file_path, ai1wm_replace_forward_slash_with_directory_separator( $new_paths[ $i ] ), 0, strlen( ai1wm_replace_forward_slash_with_directory_separator( $old_paths[ $i ] ) ) ); break; } } // Escape Windows directory separator in file path if ( path_is_absolute( $file_path ) ) { $file_path = ai1wm_escape_windows_directory_separator( $file_path ); } else { $file_path = ai1wm_escape_windows_directory_separator( $location . DIRECTORY_SEPARATOR . $file_path ); } // Escape Windows directory separator in file name if ( path_is_absolute( $file_name ) ) { $file_name = ai1wm_escape_windows_directory_separator( $file_name ); } else { $file_name = ai1wm_escape_windows_directory_separator( $location . DIRECTORY_SEPARATOR . $file_name ); } // Check if location doesn't exist, then create it if ( false === is_dir( $file_path ) ) { @mkdir( $file_path, $this->get_permissions_for_directory(), true ); } $file_written = 0; // We have a match, let's extract the file if ( ( $completed = $this->extract_to( $file_name, $file_size, $file_mtime, $file_written, $file_offset ) ) ) { $file_offset = 0; } } else { // We don't have a match, skip file content if ( @fseek( $this->file_handle, $file_size, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $file_size ) ); } } } } } return $completed; } /** * Extract specific files from archive * * @param string $location Location where to extract files * @param array $include_files Include files by name * @param array $exclude_files Exclude files by name * @param array $exclude_extensions Exclude files by extension * @param int $file_written File written (in bytes) * @param int $file_offset File offset (in bytes) * * @throws \Ai1wm_Not_Directory_Exception * @throws \Ai1wm_Not_Seekable_Exception * * @return bool */ public function extract_by_files_array( $location, $include_files = array(), $exclude_files = array(), $exclude_extensions = array(), &$file_written = 0, &$file_offset = 0 ) { if ( false === is_dir( $location ) ) { throw new Ai1wm_Not_Directory_Exception( sprintf( __( 'Location is not a directory: %s', AI1WM_PLUGIN_NAME ), $location ) ); } // Replace forward slash with current directory separator in location $location = ai1wm_replace_forward_slash_with_directory_separator( $location ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Seek to file offset to archive file if ( $file_offset > 0 ) { if ( @fseek( $this->file_handle, - $file_offset - 4377, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, - $file_offset - 4377 ) ); } } // We read until we reached the end of the file, or the files we were looking for were found while ( ( $block = @fread( $this->file_handle, 4377 ) ) ) { // We reached end of file, set the pointer to the end of the file so that feof returns true if ( $block === $this->eof ) { // Seek to end of archive file minus 1 byte @fseek( $this->file_handle, 1, SEEK_END ); // Read 1 character @fgetc( $this->file_handle ); } else { // Get file header data from the block if ( ( $data = $this->get_data_from_block( $block ) ) ) { // Set file name $file_name = $data['filename']; // Set file size $file_size = $data['size']; // Set file mtime $file_mtime = $data['mtime']; // Set file path $file_path = $data['path']; // Set should include file $should_include_file = false; // Should we extract this file by name? for ( $i = 0; $i < count( $include_files ); $i++ ) { if ( strpos( $file_name . DIRECTORY_SEPARATOR, ai1wm_replace_forward_slash_with_directory_separator( $include_files[ $i ] ) . DIRECTORY_SEPARATOR ) === 0 ) { $should_include_file = true; break; } } // Should we skip this file name? for ( $i = 0; $i < count( $exclude_files ); $i++ ) { if ( strpos( $file_name . DIRECTORY_SEPARATOR, ai1wm_replace_forward_slash_with_directory_separator( $exclude_files[ $i ] ) . DIRECTORY_SEPARATOR ) === 0 ) { $should_include_file = false; break; } } // Should we skip this file by extension? for ( $i = 0; $i < count( $exclude_extensions ); $i++ ) { if ( strrpos( $file_name, $exclude_extensions[ $i ] ) === strlen( $file_name ) - strlen( $exclude_extensions[ $i ] ) ) { $should_include_file = false; break; } } // Do we have a match? if ( $should_include_file === true ) { // Escape Windows directory separator in file path $file_path = ai1wm_escape_windows_directory_separator( $location . DIRECTORY_SEPARATOR . $file_path ); // Escape Windows directory separator in file name $file_name = ai1wm_escape_windows_directory_separator( $location . DIRECTORY_SEPARATOR . $file_name ); // Check if location doesn't exist, then create it if ( false === is_dir( $file_path ) ) { @mkdir( $file_path, $this->get_permissions_for_directory(), true ); } $file_written = 0; // We have a match, let's extract the file and remove it from the array if ( ( $completed = $this->extract_to( $file_name, $file_size, $file_mtime, $file_written, $file_offset ) ) ) { $file_offset = 0; } } else { // We don't have a match, skip file content if ( @fseek( $this->file_handle, $file_size, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $file_size ) ); } } // Time elapsed if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } } } return $completed; } /** * Extract file to * * @param string $file_name File name * @param array $file_size File size (in bytes) * @param array $file_mtime File modified time (in seconds) * @param int $file_written File written (in bytes) * @param int $file_offset File offset (in bytes) * * @throws \Ai1wm_Not_Seekable_Exception * @throws \Ai1wm_Not_Readable_Exception * @throws \Ai1wm_Quota_Exceeded_Exception * * @return bool */ private function extract_to( $file_name, $file_size, $file_mtime, &$file_written = 0, &$file_offset = 0 ) { global $ai1wm_params; $file_written = 0; // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Seek to file offset to archive file if ( $file_offset > 0 ) { if ( @fseek( $this->file_handle, $file_offset, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $file_size ) ); } } // Set file size $file_size -= $file_offset; // Should the extract overwrite the file if it exists? (fopen may return null for quarantined files) if ( ( $file_handle = @fopen( $file_name, ( $file_offset === 0 ? 'wb' : 'ab' ) ) ) ) { $file_bytes = 0; // Is the filesize more than 0 bytes? while ( $file_size > 0 ) { // Read the file in chunks of 512KB $chunk_size = $file_size > 512000 ? 512000 : $file_size; if ( ! empty( $ai1wm_params['decryption_password'] ) && basename( $file_name ) !== 'package.json' ) { if ( $file_size > 512000 ) { $chunk_size += ai1wm_crypt_iv_length() * 2; $chunk_size = $chunk_size > $file_size ? $file_size : $chunk_size; } } // Read data chunk by chunk from archive file if ( $chunk_size > 0 ) { $file_content = null; // Read the file in chunks of 512KB from archiver if ( ( $file_content = @fread( $this->file_handle, $chunk_size ) ) === false ) { throw new Ai1wm_Not_Readable_Exception( sprintf( __( 'Unable to read content from file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Remove the amount of bytes we read $file_size -= $chunk_size; if ( ! empty( $ai1wm_params['decryption_password'] ) && basename( $file_name ) !== 'package.json' ) { $file_content = ai1wm_decrypt_string( $file_content, $ai1wm_params['decryption_password'], $file_name ); } // Write file contents if ( ( $file_bytes = @fwrite( $file_handle, $file_content ) ) !== false ) { if ( strlen( $file_content ) !== $file_bytes ) { throw new Ai1wm_Quota_Exceeded_Exception( sprintf( __( 'Out of disk space. Unable to write content to file. File: %s', AI1WM_PLUGIN_NAME ), $file_name ) ); } } // Set file written $file_written += $chunk_size; } // Time elapsed if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Set file offset $file_offset += $file_written; // Close the handle @fclose( $file_handle ); // Let's apply last modified date @touch( $file_name, $file_mtime ); // All files should chmoded to 644 @chmod( $file_name, $this->get_permissions_for_file() ); } else { // We don't have file permissions, skip file content if ( @fseek( $this->file_handle, $file_size, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset of file. File: %s Offset: %d', AI1WM_PLUGIN_NAME ), $this->file_name, $file_size ) ); } } return $completed; } /** * Get file header data from the block * * @param string $block Binary file header * * @return array */ private function get_data_from_block( $block ) { $data = false; // prepare our array keys to unpack $format = array( $this->block_format[0] . 'filename/', $this->block_format[1] . 'size/', $this->block_format[2] . 'mtime/', $this->block_format[3] . 'path', ); $format = implode( '', $format ); // Unpack file header data if ( ( $data = unpack( $format, $block ) ) ) { // Set file details $data['filename'] = trim( $data['filename'] ); $data['size'] = trim( $data['size'] ); $data['mtime'] = trim( $data['mtime'] ); $data['path'] = trim( $data['path'] ); // Set file name $data['filename'] = ( $data['path'] === '.' ? $data['filename'] : $data['path'] . DIRECTORY_SEPARATOR . $data['filename'] ); // Set file path $data['path'] = ( $data['path'] === '.' ? '' : $data['path'] ); // Replace forward slash with current directory separator in file name $data['filename'] = ai1wm_replace_forward_slash_with_directory_separator( $data['filename'] ); // Replace forward slash with current directory separator in file path $data['path'] = ai1wm_replace_forward_slash_with_directory_separator( $data['path'] ); } return $data; } /** * Check if file has reached end of file * Returns true if file has reached eof, false otherwise * * @return bool */ public function has_reached_eof() { return @feof( $this->file_handle ); } /** * Check if file has reached end of file * Returns true if file has NOT reached eof, false otherwise * * @return bool */ public function has_not_reached_eof() { return ! @feof( $this->file_handle ); } /** * Get directory permissions * * @return int */ public function get_permissions_for_directory() { if ( defined( 'FS_CHMOD_DIR' ) ) { return FS_CHMOD_DIR; } return 0755; } /** * Get file permissions * * @return int */ public function get_permissions_for_file() { if ( defined( 'FS_CHMOD_FILE' ) ) { return FS_CHMOD_FILE; } return 0644; } } PK'Zx!x!3vendor/servmask/archiver/class-ai1wm-compressor.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Compressor extends Ai1wm_Archiver { /** * Overloaded constructor that opens the passed file for writing * * @param string $file_name File to use as archive */ public function __construct( $file_name ) { parent::__construct( $file_name, true ); } /** * Add a file to the archive * * @param string $file_name File to add to the archive * @param string $new_file_name Write the file with a different name * @param int $file_written File written (in bytes) * @param int $file_offset File offset (in bytes) * * @throws \Ai1wm_Not_Seekable_Exception * @throws \Ai1wm_Not_Writable_Exception * @throws \Ai1wm_Quota_Exceeded_Exception * * @return bool */ public function add_file( $file_name, $new_file_name = '', &$file_written = 0, &$file_offset = 0 ) { global $ai1wm_params; $file_written = 0; // Replace forward slash with current directory separator in file name $file_name = ai1wm_replace_forward_slash_with_directory_separator( $file_name ); // Escape Windows directory separator in file name $file_name = ai1wm_escape_windows_directory_separator( $file_name ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Open the file for reading in binary mode (fopen may return null for quarantined files) if ( ( $file_handle = @fopen( $file_name, 'rb' ) ) ) { $file_bytes = 0; // Get header block if ( ( $block = $this->get_file_block( $file_name, $new_file_name ) ) ) { // Write header block if ( $file_offset === 0 ) { if ( ( $file_bytes = @fwrite( $this->file_handle, $block ) ) !== false ) { if ( strlen( $block ) !== $file_bytes ) { throw new Ai1wm_Quota_Exceeded_Exception( sprintf( __( 'Out of disk space. Unable to write header to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } else { throw new Ai1wm_Not_Writable_Exception( sprintf( __( 'Unable to write header to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } // Set file offset if ( @fseek( $file_handle, $file_offset, SEEK_SET ) !== -1 ) { // Read the file in 512KB chunks while ( false === @feof( $file_handle ) ) { // Read the file in chunks of 512KB if ( ( $file_content = @fread( $file_handle, 512000 ) ) !== false ) { // Don't encrypt package.json if ( isset( $ai1wm_params['options']['encrypt_backups'] ) && basename( $file_name ) !== 'package.json' ) { $file_content = ai1wm_encrypt_string( $file_content, $ai1wm_params['options']['encrypt_password'] ); } if ( ( $file_bytes = @fwrite( $this->file_handle, $file_content ) ) !== false ) { if ( strlen( $file_content ) !== $file_bytes ) { throw new Ai1wm_Quota_Exceeded_Exception( sprintf( __( 'Out of disk space. Unable to write content to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } else { throw new Ai1wm_Not_Writable_Exception( sprintf( __( 'Unable to write content to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Set file written $file_written += $file_bytes; } // Time elapsed if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } } // Set file offset $file_offset += $file_written; // Write file size to file header if ( ( $block = $this->get_file_size_block( $file_offset ) ) ) { // Seek to beginning of file size if ( @fseek( $this->file_handle, - $file_offset - 4096 - 12 - 14, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( __( 'Your PHP is 32-bit. In order to export your file, please change your PHP version to 64-bit and try again. Technical details', AI1WM_PLUGIN_NAME ) ); } // Write file size to file header if ( ( $file_bytes = @fwrite( $this->file_handle, $block ) ) !== false ) { if ( strlen( $block ) !== $file_bytes ) { throw new Ai1wm_Quota_Exceeded_Exception( sprintf( __( 'Out of disk space. Unable to write size to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } } else { throw new Ai1wm_Not_Writable_Exception( sprintf( __( 'Unable to write size to file. File: %s', AI1WM_PLUGIN_NAME ), $this->file_name ) ); } // Seek to end of file content if ( @fseek( $this->file_handle, + $file_offset + 4096 + 12, SEEK_CUR ) === -1 ) { throw new Ai1wm_Not_Seekable_Exception( __( 'Your PHP is 32-bit. In order to export your file, please change your PHP version to 64-bit and try again. Technical details', AI1WM_PLUGIN_NAME ) ); } } } // Close the handle @fclose( $file_handle ); } return $completed; } /** * Generate binary block header for a file * * @param string $file_name Filename to generate block header for * @param string $new_file_name Write the file with a different name * * @return string */ private function get_file_block( $file_name, $new_file_name = '' ) { $block = ''; // Get stats about the file if ( ( $stat = @stat( $file_name ) ) !== false ) { // Filename of the file we are accessing if ( empty( $new_file_name ) ) { $name = ai1wm_basename( $file_name ); } else { $name = ai1wm_basename( $new_file_name ); } // Size in bytes of the file $size = $stat['size']; // Last time the file was modified $date = $stat['mtime']; // Replace current directory separator with backward slash in file path if ( empty( $new_file_name ) ) { $path = ai1wm_replace_directory_separator_with_forward_slash( ai1wm_dirname( $file_name ) ); } else { $path = ai1wm_replace_directory_separator_with_forward_slash( ai1wm_dirname( $new_file_name ) ); } // Concatenate block format parts $format = implode( '', $this->block_format ); // Pack file data into binary string $block = pack( $format, $name, $size, $date, $path ); } return $block; } /** * Generate file size binary block header for a file * * @param int $file_size File size * * @return string */ public function get_file_size_block( $file_size ) { $block = ''; // Pack file data into binary string if ( isset( $this->block_format[1] ) ) { $block = pack( $this->block_format[1], $file_size ); } return $block; } } PK'ZIΊ)vendor/servmask/cron/class-ai1wm-cron.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Cron { /** * Schedules a hook which will be executed by the WordPress * actions core on a specific interval * * @param string $hook Event hook * @param string $recurrence How often the event should reoccur * @param integer $timestamp Preferred timestamp (when the event shall be run) * @param array $args Arguments to pass to the hook function(s) * @return mixed */ public static function add( $hook, $recurrence, $timestamp, $args = array() ) { $schedules = wp_get_schedules(); // Schedule event if ( isset( $schedules[ $recurrence ] ) && ( $current = $schedules[ $recurrence ] ) ) { if ( $timestamp <= ( $current_timestamp = time() ) ) { while ( $timestamp <= $current_timestamp ) { $timestamp += $current['interval']; } } return wp_schedule_event( $timestamp, $recurrence, $hook, $args ); } } /** * Un-schedules all previously-scheduled cron jobs using a particular * hook name or a specific combination of hook name and arguments. * * @param string $hook Event hook * @return boolean */ public static function clear( $hook ) { $cron = get_option( AI1WM_CRON, array() ); if ( empty( $cron ) ) { return false; } foreach ( $cron as $timestamp => $hooks ) { if ( isset( $hooks[ $hook ] ) ) { unset( $cron[ $timestamp ][ $hook ] ); // Unset empty timestamps if ( empty( $cron[ $timestamp ] ) ) { unset( $cron[ $timestamp ] ); } } } return update_option( AI1WM_CRON, $cron ); } /** * Checks whether cronjob already exists * * @param string $hook Event hook * @param array $args Event callback arguments * @return boolean */ public static function exists( $hook, $args = array() ) { $cron = get_option( AI1WM_CRON, array() ); if ( empty( $cron ) ) { return false; } foreach ( $cron as $timestamp => $hooks ) { if ( empty( $args ) ) { if ( isset( $hooks[ $hook ] ) ) { return true; } } else { if ( isset( $hooks[ $hook ][ md5( serialize( $args ) ) ] ) ) { return true; } } } return false; } /** * Deletes cron event(s) if it exists * * @param string $hook Event hook * @param array $args Event callback arguments * @return boolean */ public static function delete( $hook, $args = array() ) { $cron = get_option( AI1WM_CRON, array() ); if ( empty( $cron ) ) { return false; } $key = md5( serialize( $args ) ); foreach ( $cron as $timestamp => $hooks ) { if ( isset( $cron[ $timestamp ][ $hook ][ $key ] ) ) { unset( $cron[ $timestamp ][ $hook ][ $key ] ); } if ( isset( $cron[ $timestamp ][ $hook ] ) && empty( $cron[ $timestamp ][ $hook ] ) ) { unset( $cron[ $timestamp ][ $hook ] ); } if ( empty( $cron[ $timestamp ] ) ) { unset( $cron[ $timestamp ] ); } } return update_option( AI1WM_CRON, $cron ); } } PK'Z*6vendor/servmask/command/class-ai1wm-wp-cli-command.phpnuW+A. */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } if ( defined( 'WP_CLI' ) ) { class Ai1wm_WP_CLI_Command extends WP_CLI_Command { public function __invoke() { if ( is_multisite() ) { WP_CLI::error_multi_line( array( __( 'WordPress Multisite is supported via our All-in-One WP Migration Multisite Extension.', AI1WM_PLUGIN_NAME ), __( 'You can get a copy of it here: https://servmask.com/products/multisite-extension', AI1WM_PLUGIN_NAME ), ) ); exit; } WP_CLI::error_multi_line( array( __( 'WordPress CLI is supported via our All-in-One WP Migration Unlimited Extension.', AI1WM_PLUGIN_NAME ), __( 'You can get a copy of it here: https://servmask.com/products/unlimited-extension', AI1WM_PLUGIN_NAME ), ) ); exit; } } } PK'ZwEDvendor/servmask/iterator/class-ai1wm-recursive-iterator-iterator.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Recursive_Iterator_Iterator extends RecursiveIteratorIterator { } PK'ZGH1 1 Evendor/servmask/iterator/class-ai1wm-recursive-directory-iterator.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Recursive_Directory_Iterator extends RecursiveDirectoryIterator { public function __construct( $path ) { parent::__construct( $path ); // Skip current and parent directory $this->skipdots(); } #[\ReturnTypeWillChange] public function rewind() { parent::rewind(); // Skip current and parent directory $this->skipdots(); } #[\ReturnTypeWillChange] public function next() { parent::next(); // Skip current and parent directory $this->skipdots(); } /** * Returns whether current entry is a directory and not '.' or '..' * * Explicitly set allow links flag, because RecursiveDirectoryIterator::FOLLOW_SYMLINKS * is not supported by <= PHP 5.3.0 * * @return bool */ #[\ReturnTypeWillChange] public function hasChildren( $allow_links = true ) { return parent::hasChildren( $allow_links ); } protected function skipdots() { while ( $this->isDot() ) { parent::next(); } } } PK'ZPh//9vendor/servmask/database/class-ai1wm-database-utility.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Database_Utility { /** * Replace all occurrences of the search string with the replacement string. * This function is case-sensitive. * * @param array $from List of string we're looking to replace. * @param array $to What we want it to be replaced with. * @param string $data Data to replace. * @return mixed The original string with all elements replaced as needed. */ public static function replace_values( $from = array(), $to = array(), $data = '' ) { if ( ! empty( $from ) && ! empty( $to ) ) { return strtr( $data, array_combine( $from, $to ) ); } return $data; } /** * Take a serialized array and unserialize it replacing elements as needed and * unserializing any subordinate arrays and performing the replace on those too. * This function is case-sensitive. * * @param array $from List of string we're looking to replace. * @param array $to What we want it to be replaced with. * @param mixed $data Used to pass any subordinate arrays back to in. * @param bool $serialized Does the array passed via $data need serializing. * @return mixed The original array with all elements replaced as needed. */ public static function replace_serialized_values( $from = array(), $to = array(), $data = '', $serialized = false ) { try { // Some unserialized data cannot be re-serialized eg. SimpleXMLElements if ( is_serialized( $data ) && ( $unserialized = @unserialize( $data ) ) !== false ) { $data = self::replace_serialized_values( $from, $to, $unserialized, true ); } elseif ( is_array( $data ) ) { $tmp = array(); foreach ( $data as $key => $value ) { $tmp[ $key ] = self::replace_serialized_values( $from, $to, $value, false ); } $data = $tmp; unset( $tmp ); } elseif ( is_object( $data ) ) { if ( ! ( $data instanceof __PHP_Incomplete_Class ) ) { $tmp = $data; $props = get_object_vars( $data ); foreach ( $props as $key => $value ) { if ( ! empty( $tmp->$key ) ) { $tmp->$key = self::replace_serialized_values( $from, $to, $value, false ); } } $data = $tmp; unset( $tmp ); } } else { if ( is_string( $data ) ) { if ( ! empty( $from ) && ! empty( $to ) ) { $data = strtr( $data, array_combine( $from, $to ) ); } } } if ( $serialized ) { return serialize( $data ); } } catch ( Exception $e ) { } return $data; } /** * Escape MySQL special characters * * @param string $data Data to escape * @return string */ public static function escape_mysql( $data ) { return strtr( $data, array_combine( array( "\x00", "\n", "\r", '\\', "'", '"', "\x1a" ), array( '\\0', '\\n', '\\r', '\\\\', "\\'", '\\"', '\\Z' ) ) ); } /** * Unescape MySQL special characters * * @param string $data Data to unescape * @return string */ public static function unescape_mysql( $data ) { return strtr( $data, array_combine( array( '\\0', '\\n', '\\r', '\\\\', "\\'", '\\"', '\\Z' ), array( "\x00", "\n", "\r", '\\', "'", '"', "\x1a" ) ) ); } /** * Encode base64 characters * * @param string $data Data to encode * @return string */ public static function base64_encode( $data ) { return base64_encode( $data ); } /** * Encode base64 characters * * @param string $data Data to decode * @return string */ public static function base64_decode( $data ) { return base64_decode( $data ); } /** * Validate base64 data * * @param string $data Data to validate * @return boolean */ public static function base64_validate( $data ) { return base64_encode( base64_decode( $data ) ) === $data; } } PK'ZJ888vendor/servmask/database/class-ai1wm-database-mysqli.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Database_Mysqli extends Ai1wm_Database { /** * Run MySQL query * * @param string $input SQL query * @return mixed */ public function query( $input ) { if ( ! mysqli_real_query( $this->wpdb->dbh, $input ) ) { $mysqli_errno = 0; // Get MySQL error code if ( ! empty( $this->wpdb->dbh ) ) { if ( $this->wpdb->dbh instanceof mysqli ) { $mysqli_errno = mysqli_errno( $this->wpdb->dbh ); } else { $mysqli_errno = 2006; } } // MySQL server has gone away, try to reconnect if ( empty( $this->wpdb->dbh ) || 2006 === $mysqli_errno ) { if ( ! $this->wpdb->check_connection( false ) ) { throw new Ai1wm_Database_Exception( __( 'Error reconnecting to the database. Technical details', AI1WM_PLUGIN_NAME ), 503 ); } mysqli_real_query( $this->wpdb->dbh, $input ); } } // Copy results from the internal mysqlnd buffer into the PHP variables fetched if ( defined( 'MYSQLI_STORE_RESULT_COPY_DATA' ) ) { return mysqli_store_result( $this->wpdb->dbh, MYSQLI_STORE_RESULT_COPY_DATA ); } return mysqli_store_result( $this->wpdb->dbh ); } /** * Escape string input for mysql query * * @param string $input String to escape * @return string */ public function escape( $input ) { return mysqli_real_escape_string( $this->wpdb->dbh, $input ); } /** * Return the error code for the most recent function call * * @return integer */ public function errno() { return mysqli_errno( $this->wpdb->dbh ); } /** * Return a string description of the last error * * @return string */ public function error() { return mysqli_error( $this->wpdb->dbh ); } /** * Return server version * * @return string */ public function version() { return mysqli_get_server_info( $this->wpdb->dbh ); } /** * Return the result from MySQL query as associative array * * @param resource $result MySQL resource * @return array */ public function fetch_assoc( $result ) { return mysqli_fetch_assoc( $result ); } /** * Return the result from MySQL query as row * * @param resource $result MySQL resource * @return array */ public function fetch_row( $result ) { return mysqli_fetch_row( $result ); } /** * Return the number for rows from MySQL results * * @param resource $result MySQL resource * @return integer */ public function num_rows( $result ) { return mysqli_num_rows( $result ); } /** * Free MySQL result memory * * @param resource $result MySQL resource * @return boolean */ public function free_result( $result ) { return mysqli_free_result( $result ); } } PK'Z1vendor/servmask/database/class-ai1wm-database.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } abstract class Ai1wm_Database { /** * WordPress database handler * * @var object */ protected $wpdb = null; /** * WordPress database base tables * * @var array */ protected $base_tables = null; /** * WordPress database views * * @var array */ protected $views = null; /** * WordPress database tables * * @var array */ protected $tables = null; /** * Old table prefixes * * @var array */ protected $old_table_prefixes = array(); /** * New table prefixes * * @var array */ protected $new_table_prefixes = array(); /** * Old column prefixes * * @var array */ protected $old_column_prefixes = array(); /** * New column prefixes * * @var array */ protected $new_column_prefixes = array(); /** * Reserved column prefixes * * @var array */ protected $reserved_column_prefixes = array(); /** * Old replace values * * @var array */ protected $old_replace_values = array(); /** * New replace values * * @var array */ protected $new_replace_values = array(); /** * Old raw replace values * * @var array */ protected $old_replace_raw_values = array(); /** * New raw replace values * * @var array */ protected $new_replace_raw_values = array(); /** * Table where query * * @var array */ protected $table_where_query = array(); /** * Table select columns * * @var array */ protected $table_select_columns = array(); /** * Table prefix columns * * @var array */ protected $table_prefix_columns = array(); /** * Table prefix filters * * @var array */ protected $table_prefix_filters = array(); /** * List all tables that should not be affected by the timeout of the current request * * @var array */ protected $atomic_tables = array(); /** * Visual Composer * * @var boolean */ protected $visual_composer = false; /** * Oxygen Builder * * @var boolean */ protected $oxygen_builder = false; /** * BeTheme Responsive * * @var boolean */ protected $betheme_responsive = false; /** * Optimize Press * * @var boolean */ protected $optimize_press = false; /** * Avada Fusion Builder * * @var boolean */ protected $avada_fusion_builder = false; /** * Constructor * * @param object $wpdb WPDB instance */ public function __construct( $wpdb ) { $this->wpdb = $wpdb; // Check Microsoft SQL Server support if ( is_resource( $this->wpdb->dbh ) ) { if ( get_resource_type( $this->wpdb->dbh ) === 'SQL Server Connection' ) { throw new Ai1wm_Database_Exception( __( 'Your WordPress installation uses Microsoft SQL Server. ' . 'To use All-in-One WP Migration, please change your installation to MySQL and try again. ' . 'Technical details', AI1WM_PLUGIN_NAME ), 501 ); } } // Set database host (HyberDB) if ( empty( $this->wpdb->dbhost ) ) { if ( isset( $this->wpdb->last_used_server['host'] ) ) { $this->wpdb->dbhost = $this->wpdb->last_used_server['host']; } } // Set database name (HyperDB) if ( empty( $this->wpdb->dbname ) ) { if ( isset( $this->wpdb->last_used_server['name'] ) ) { $this->wpdb->dbname = $this->wpdb->last_used_server['name']; } } } /** * Set old table prefixes * * @param array $prefixes List of table prefixes * @return object */ public function set_old_table_prefixes( $prefixes ) { $this->old_table_prefixes = $prefixes; return $this; } /** * Get old table prefixes * * @return array */ public function get_old_table_prefixes() { return $this->old_table_prefixes; } /** * Set new table prefixes * * @param array $prefixes List of table prefixes * @return object */ public function set_new_table_prefixes( $prefixes ) { $this->new_table_prefixes = $prefixes; return $this; } /** * Get new table prefixes * * @return array */ public function get_new_table_prefixes() { return $this->new_table_prefixes; } /** * Set old column prefixes * * @param array $prefixes List of column prefixes * @return object */ public function set_old_column_prefixes( $prefixes ) { $this->old_column_prefixes = $prefixes; return $this; } /** * Get old column prefixes * * @return array */ public function get_old_column_prefixes() { return $this->old_column_prefixes; } /** * Set new column prefixes * * @param array $prefixes List of column prefixes * @return object */ public function set_new_column_prefixes( $prefixes ) { $this->new_column_prefixes = $prefixes; return $this; } /** * Get new column prefixes * * @return array */ public function get_new_column_prefixes() { return $this->new_column_prefixes; } /** * Set reserved column prefixes * * @param array $prefixes List of column prefixes * @return object */ public function set_reserved_column_prefixes( $prefixes ) { $this->reserved_column_prefixes = $prefixes; return $this; } /** * Get reserved column prefixes * * @return array */ public function get_reserved_column_prefixes() { return $this->reserved_column_prefixes; } /** * Set old replace values * * @param array $values List of values * @return object */ public function set_old_replace_values( $values ) { $this->old_replace_values = $values; return $this; } /** * Get old replace values * * @return array */ public function get_old_replace_values() { return $this->old_replace_values; } /** * Set new replace values * * @param array $values List of values * @return object */ public function set_new_replace_values( $values ) { $this->new_replace_values = $values; return $this; } /** * Get new replace values * * @return array */ public function get_new_replace_values() { return $this->new_replace_values; } /** * Set old replace raw values * * @param array $values List of values * @return object */ public function set_old_replace_raw_values( $values ) { $this->old_replace_raw_values = $values; return $this; } /** * Get old replace raw values * * @return array */ public function get_old_replace_raw_values() { return $this->old_replace_raw_values; } /** * Set new replace raw values * * @param array $values List of values * @return object */ public function set_new_replace_raw_values( $values ) { $this->new_replace_raw_values = $values; return $this; } /** * Get new replace raw values * * @return array */ public function get_new_replace_raw_values() { return $this->new_replace_raw_values; } /** * Set table where query * * @param string $table_name Table name * @param array $where_$query Table query * @return object */ public function set_table_where_query( $table_name, $where_query ) { $this->table_where_query[ strtolower( $table_name ) ] = $where_query; return $this; } /** * Get table where query * * @param string $table_name Table name * @return string */ public function get_table_where_query( $table_name ) { if ( isset( $this->table_where_query[ strtolower( $table_name ) ] ) ) { return $this->table_where_query[ strtolower( $table_name ) ]; } } /** * Set table select columns * * @param string $table_name Table name * @param array $column_names Column names * @return object */ public function set_table_select_columns( $table_name, $column_names ) { foreach ( $column_names as $column_name => $column_expression ) { $this->table_select_columns[ strtolower( $table_name ) ][ strtolower( $column_name ) ] = $column_expression; } return $this; } /** * Get table select columns * * @param string $table_name Table name * @return array */ public function get_table_select_columns( $table_name ) { if ( isset( $this->table_select_columns[ strtolower( $table_name ) ] ) ) { return $this->table_select_columns[ strtolower( $table_name ) ]; } } /** * Set table prefix columns * * @param string $table_name Table name * @param array $column_names Column names * @return object */ public function set_table_prefix_columns( $table_name, $column_names ) { foreach ( $column_names as $column_name ) { $this->table_prefix_columns[ strtolower( $table_name ) ][ strtolower( $column_name ) ] = true; } return $this; } /** * Get table prefix columns * * @param string $table_name Table name * @return array */ public function get_table_prefix_columns( $table_name ) { if ( isset( $this->table_prefix_columns[ strtolower( $table_name ) ] ) ) { return $this->table_prefix_columns[ strtolower( $table_name ) ]; } } /** * Add table prefix filter * * @param string $table_prefix Table prefix * @param string $exclude_prefix Exclude prefix * @return object */ public function add_table_prefix_filter( $table_prefix, $exclude_prefix = null ) { $this->table_prefix_filters[] = array( $table_prefix, $exclude_prefix ); return $this; } /** * Get table prefix filter * * @return array */ public function get_table_prefix_filters() { return $this->table_prefix_filters; } /** * Set atomic tables * * @param array $tables List of tables * @return object */ public function set_atomic_tables( $tables ) { $this->atomic_tables = $tables; return $this; } /** * Get atomic tables * * @return array */ public function get_atomic_tables() { return $this->atomic_tables; } /** * Set Visual Composer * * @param boolean $active Is Visual Composer Active? * @return object */ public function set_visual_composer( $active ) { $this->visual_composer = $active; return $this; } /** * Get Visual Composer * * @return boolean */ public function get_visual_composer() { return $this->visual_composer; } /** * Set Oxygen Builder * * @param boolean $active Is Oxygen Builder Active? * @return object */ public function set_oxygen_builder( $active ) { $this->oxygen_builder = $active; return $this; } /** * Get Oxygen Builder * * @return boolean */ public function get_oxygen_builder() { return $this->oxygen_builder; } /** * Set BeTheme Responsive * * @param boolean $active Is BeTheme Responsive Active? * @return object */ public function set_betheme_responsive( $active ) { $this->betheme_responsive = $active; return $this; } /** * Get BeTheme Responsive * * @return boolean */ public function get_betheme_responsive() { return $this->betheme_responsive; } /** * Set Optimize Press * * @param boolean $active Is Optimize Press Active? * @return object */ public function set_optimize_press( $active ) { $this->optimize_press = $active; return $this; } /** * Get Optimize Press * * @return boolean */ public function get_optimize_press() { return $this->optimize_press; } /** * Set Avada Fusion Builder * * @param boolean $active Is Avada Fusion Builder Active? * @return object */ public function set_avada_fusion_builder( $active ) { $this->avada_fusion_builder = $active; return $this; } /** * Get Avada Fusion Builder * * @return boolean */ public function get_avada_fusion_builder() { return $this->avada_fusion_builder; } /** * Get views * * @return array */ protected function get_views() { if ( is_null( $this->views ) ) { $where_query = array(); // Get lower case table names $lower_case_table_names = $this->get_lower_case_table_names(); // Loop over table prefixes if ( $this->get_table_prefix_filters() ) { foreach ( $this->get_table_prefix_filters() as $prefix_filter ) { if ( isset( $prefix_filter[0], $prefix_filter[1] ) ) { if ( $lower_case_table_names ) { $where_query[] = sprintf( "(`Tables_in_%s` REGEXP '^%s' AND `Tables_in_%s` NOT REGEXP '^%s')", $this->wpdb->dbname, $prefix_filter[0], $this->wpdb->dbname, $prefix_filter[1] ); } else { $where_query[] = sprintf( "(CAST(`Tables_in_%s` AS BINARY) REGEXP BINARY '^%s' AND CAST(`Tables_in_%s` AS BINARY) NOT REGEXP BINARY '^%s')", $this->wpdb->dbname, $prefix_filter[0], $this->wpdb->dbname, $prefix_filter[1] ); } } else { if ( $lower_case_table_names ) { $where_query[] = sprintf( "`Tables_in_%s` REGEXP '^%s'", $this->wpdb->dbname, $prefix_filter[0] ); } else { $where_query[] = sprintf( "CAST(`Tables_in_%s` AS BINARY) REGEXP BINARY '^%s'", $this->wpdb->dbname, $prefix_filter[0] ); } } } } else { $where_query[] = 1; } $this->views = array(); // Loop over views $result = $this->query( sprintf( "SHOW FULL TABLES FROM `%s` WHERE `Table_type` = 'VIEW' AND (%s)", $this->wpdb->dbname, implode( ' OR ', $where_query ) ) ); while ( $row = $this->fetch_row( $result ) ) { if ( isset( $row[0] ) ) { $this->views[] = $row[0]; } } // Close result cursor $this->free_result( $result ); } return $this->views; } /** * Get base tables * * @return array */ protected function get_base_tables() { if ( is_null( $this->base_tables ) ) { $where_query = array(); // Get lower case table names $lower_case_table_names = $this->get_lower_case_table_names(); // Loop over table prefixes if ( $this->get_table_prefix_filters() ) { foreach ( $this->get_table_prefix_filters() as $prefix_filter ) { if ( isset( $prefix_filter[0], $prefix_filter[1] ) ) { if ( $lower_case_table_names ) { $where_query[] = sprintf( "(`Tables_in_%s` REGEXP '^%s' AND `Tables_in_%s` NOT REGEXP '^%s')", $this->wpdb->dbname, $prefix_filter[0], $this->wpdb->dbname, $prefix_filter[1] ); } else { $where_query[] = sprintf( "(CAST(`Tables_in_%s` AS BINARY) REGEXP BINARY '^%s' AND CAST(`Tables_in_%s` AS BINARY) NOT REGEXP BINARY '^%s')", $this->wpdb->dbname, $prefix_filter[0], $this->wpdb->dbname, $prefix_filter[1] ); } } else { if ( $lower_case_table_names ) { $where_query[] = sprintf( "`Tables_in_%s` REGEXP '^%s'", $this->wpdb->dbname, $prefix_filter[0] ); } else { $where_query[] = sprintf( "CAST(`Tables_in_%s` AS BINARY) REGEXP BINARY '^%s'", $this->wpdb->dbname, $prefix_filter[0] ); } } } } else { $where_query[] = 1; } $this->base_tables = array(); // Loop over base tables $result = $this->query( sprintf( "SHOW FULL TABLES FROM `%s` WHERE `Table_type` = 'BASE TABLE' AND (%s)", $this->wpdb->dbname, implode( ' OR ', $where_query ) ) ); while ( $row = $this->fetch_row( $result ) ) { if ( isset( $row[0] ) ) { $this->base_tables[] = $row[0]; } } // Close result cursor $this->free_result( $result ); } return $this->base_tables; } /** * Set tables * * @param array $tables List of tables * @return object */ public function set_tables( $tables ) { $this->tables = $tables; return $this; } /** * Get tables * * @return array */ public function get_tables() { if ( is_null( $this->tables ) ) { return array_merge( $this->get_base_tables(), $this->get_views() ); } return $this->tables; } /** * Export database into a file * * @param string $file_name File name * @param integer $query_offset Query offset * @param integer $table_index Table index * @param integer $table_offset Table offset * @param integer $table_rows Table rows * @return boolean */ public function export( $file_name, &$query_offset = 0, &$table_index = 0, &$table_offset = 0, &$table_rows = 0 ) { // Set file handler $file_handler = ai1wm_open( $file_name, 'cb' ); // Start time $start = microtime( true ); // Flag to hold if all tables have been processed $completed = true; // Set SQL mode $this->query( "SET SESSION sql_mode = ''" ); // Get tables $tables = $this->get_tables(); // Get views $views = $this->get_views(); // Set file pointer at the query offset if ( fseek( $file_handler, $query_offset ) !== -1 ) { // Write headers if ( $query_offset === 0 ) { ai1wm_write( $file_handler, $this->get_header() ); } // Export tables for ( ; $table_index < count( $tables ); ) { // Get table name $table_name = $tables[ $table_index ]; // Replace table name prefixes $new_table_name = $this->replace_table_prefixes( $table_name, 0 ); // Loop over tables and views if ( in_array( $table_name, $views ) ) { // Get create view statement if ( $table_offset === 0 ) { // Write view drop statement $drop_view = "\nDROP VIEW IF EXISTS `{$new_table_name}`;\n"; // Write drop view statement ai1wm_write( $file_handler, $drop_view ); // Get create view statement $create_view = $this->get_create_view( $table_name ); // Replace create view name $create_view = $this->replace_view_name( $create_view, $table_name, $new_table_name ); // Replace create view identifiers $create_view = $this->replace_view_identifiers( $create_view ); // Replace create view options $create_view = $this->replace_view_options( $create_view ); // Write create view statement ai1wm_write( $file_handler, $create_view ); // Write end of statement ai1wm_write( $file_handler, ";\n\n" ); } // Set curent table index $table_index++; // Set current table offset $table_offset = 0; } else { // Get create table statement if ( $table_offset === 0 ) { // Write table drop statement $drop_table = "\nDROP TABLE IF EXISTS `{$new_table_name}`;\n"; // Write table statement ai1wm_write( $file_handler, $drop_table ); // Get create table statement $create_table = $this->get_create_table( $table_name ); // Replace create table name $create_table = $this->replace_table_name( $create_table, $table_name, $new_table_name ); // Replace create table comments $create_table = $this->replace_table_comments( $create_table ); // Replace create table constraints $create_table = $this->replace_table_constraints( $create_table ); // Replace create table options $create_table = $this->replace_table_options( $create_table ); // Write create table statement ai1wm_write( $file_handler, $create_table ); // Write end of statement ai1wm_write( $file_handler, ";\n\n" ); } // Get primary keys $primary_keys = $this->get_primary_keys( $table_name ); // Get column types $column_types = $this->get_column_types( $table_name ); // Get prefix columns $prefix_columns = $this->get_table_prefix_columns( $table_name ); do { // Set query if ( $primary_keys ) { // Set table keys $table_keys = array(); foreach ( $primary_keys as $key ) { $table_keys[] = sprintf( '`%s`', $key ); } $table_keys = implode( ', ', $table_keys ); // Set table where query if ( ! ( $table_where = $this->get_table_where_query( $table_name ) ) ) { $table_where = 1; } // Set table select columns if ( ! ( $select_columns = $this->get_table_select_columns( $table_name ) ) ) { $select_columns = array( 't1.*' ); } $select_columns = implode( ', ', $select_columns ); // Set query with offset and rows count $query = sprintf( 'SELECT %s FROM `%s` AS t1 JOIN (SELECT %s FROM `%s` WHERE %s ORDER BY %s LIMIT %d, %d) AS t2 USING (%s)', $select_columns, $table_name, $table_keys, $table_name, $table_where, $table_keys, $table_offset, AI1WM_MAX_SELECT_RECORDS, $table_keys ); } else { $table_keys = 1; // Set table where query if ( ! ( $table_where = $this->get_table_where_query( $table_name ) ) ) { $table_where = 1; } // Set table select columns if ( ! ( $select_columns = $this->get_table_select_columns( $table_name ) ) ) { $select_columns = array( '*' ); } $select_columns = implode( ', ', $select_columns ); // Set query with offset and rows count $query = sprintf( 'SELECT %s FROM `%s` WHERE %s ORDER BY %s LIMIT %d, %d', $select_columns, $table_name, $table_where, $table_keys, $table_offset, AI1WM_MAX_SELECT_RECORDS ); } // Run SQL query $result = $this->query( $query ); // Repair table data if ( $this->errno() === 1194 ) { // Current table is marked as crashed and should be repaired $this->repair_table( $table_name ); // Run SQL query $result = $this->query( $query ); } // Generate insert statements if ( $num_rows = $this->num_rows( $result ) ) { // Loop over table rows while ( $row = $this->fetch_assoc( $result ) ) { // Write start transaction if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES === 0 ) { ai1wm_write( $file_handler, "START TRANSACTION;\n" ); } $items = array(); foreach ( $row as $key => $value ) { // Replace table prefix columns if ( isset( $prefix_columns[ strtolower( $key ) ] ) ) { $value = $this->replace_column_prefixes( $value, 0 ); } $items[] = $this->prepare_table_values( $value, $column_types[ strtolower( $key ) ] ); } // Set table values $table_values = implode( ',', $items ); // Set insert statement $table_insert = "INSERT INTO `{$new_table_name}` VALUES ({$table_values});\n"; // Write insert statement ai1wm_write( $file_handler, $table_insert ); // Set current table offset $table_offset++; // Set current table rows $table_rows++; // Write end of transaction if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES === 0 ) { ai1wm_write( $file_handler, "COMMIT;\n" ); } } } else { // Write end of transaction if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES !== 0 ) { ai1wm_write( $file_handler, "COMMIT;\n" ); } // Set curent table index $table_index++; // Set current table offset $table_offset = 0; } // Close result cursor $this->free_result( $result ); // Time elapsed if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break 2; } } } while ( $num_rows > 0 ); } } } // Set query offset $query_offset = ftell( $file_handler ); // Close file handler ai1wm_close( $file_handler ); return $completed; } /** * Import database from a file * * @param string $file_name File name * @param integer $query_offset Query offset * @return boolean */ public function import( $file_name, &$query_offset = 0 ) { // Set max allowed packet $max_allowed_packet = $this->get_max_allowed_packet(); // Set file handler $file_handler = ai1wm_open( $file_name, 'rb' ); // Start time $start = microtime( true ); // Flag to hold if all tables have been processed $completed = true; // Set SQL Mode $this->query( "SET SESSION sql_mode = ''" ); // Set file pointer at the query offset if ( fseek( $file_handler, $query_offset ) !== -1 ) { $query = null; // Start transaction $this->query( 'START TRANSACTION' ); // Read database file line by line while ( ( $line = fgets( $file_handler ) ) !== false ) { $query .= $line; // End of query if ( preg_match( '/;\s*$/S', $query ) ) { $query = trim( $query ); // Check max allowed packet if ( strlen( $query ) <= $max_allowed_packet ) { // Skip cache query if ( ! $this->is_cache_query( $query ) ) { // Replace table prefixes $query = $this->replace_table_prefixes( $query ); // Replace table collations $query = $this->replace_table_collations( $query ); // Replace table values $query = $this->replace_table_values( $query ); // Replace raw values $query = $this->replace_raw_values( $query ); // Run SQL query $this->query( $query ); // Replace table engines (Azure) if ( $this->errno() === 1030 ) { // Replace table engines $query = $this->replace_table_engines( $query ); // Run SQL query $this->query( $query ); } // Replace table row format (MyISAM and InnoDB) if ( $this->errno() === 1071 || $this->errno() === 1709 ) { // Replace table row format $query = $this->replace_table_row_format( $query ); // Run SQL query $this->query( $query ); } // Replace table full-text indexes (MySQL <= 5.5) if ( $this->errno() === 1214 ) { // Full-text searches are supported for MyISAM tables only. // In MySQL 5.6 and up, they can also be used with InnoDB tables $query = $this->replace_table_fulltext_indexes( $query ); // Run SQL query $this->query( $query ); } // Check tablespace exists if ( $this->errno() === 1813 ) { throw new Ai1wm_Database_Exception( __( 'Error importing database table. Technical details', AI1WM_PLUGIN_NAME ), 503 ); } // Check max queries per hour if ( $this->errno() === 1226 ) { if ( stripos( $this->error(), 'max_queries_per_hour' ) !== false ) { throw new Ai1wm_Database_Exception( __( 'Your WordPress installation has reached the maximum allowed queries per hour set by your server admin or hosting provider. ' . 'To use All-in-One WP Migration, please increase MySQL max_queries_per_hour limit. ' . 'Technical details', AI1WM_PLUGIN_NAME ), 503 ); } elseif ( stripos( $this->error(), 'max_updates_per_hour' ) !== false ) { throw new Ai1wm_Database_Exception( __( 'Your WordPress installation has reached the maximum allowed updates per hour set by your server admin or hosting provider. ' . 'To use All-in-One WP Migration, please increase MySQL max_updates_per_hour limit. ' . 'Technical details', AI1WM_PLUGIN_NAME ), 503 ); } elseif ( stripos( $this->error(), 'max_connections_per_hour' ) !== false ) { throw new Ai1wm_Database_Exception( __( 'Your WordPress installation has reached the maximum allowed connections per hour set by your server admin or hosting provider. ' . 'To use All-in-One WP Migration, please increase MySQL max_connections_per_hour limit. ' . 'Technical details', AI1WM_PLUGIN_NAME ), 503 ); } elseif ( stripos( $this->error(), 'max_user_connections' ) !== false ) { throw new Ai1wm_Database_Exception( __( 'Your WordPress installation has reached the maximum allowed user connections set by your server admin or hosting provider. ' . 'To use All-in-One WP Migration, please increase MySQL max_user_connections limit. ' . 'Technical details', AI1WM_PLUGIN_NAME ), 503 ); } } } // Time elapsed if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ! $this->is_atomic_query( $query ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } } $query = null; } } // End transaction $this->query( 'COMMIT' ); } // Set query offset $query_offset = ftell( $file_handler ); // Close file handler ai1wm_close( $file_handler ); return $completed; } /** * Flush database * * @return void */ public function flush() { $views = $this->get_views(); foreach ( $this->get_tables() as $table_name ) { if ( in_array( $table_name, $views ) ) { $this->query( "DROP VIEW IF EXISTS `{$table_name}`" ); } else { $this->query( "DROP TABLE IF EXISTS `{$table_name}`" ); } } } /** * Get MySQL version * * @return string */ protected function get_version() { $result = $this->query( "SHOW VARIABLES LIKE 'version'" ); $row = $this->fetch_assoc( $result ); // Close result cursor $this->free_result( $result ); // Get version if ( isset( $row['Value'] ) ) { return $row['Value']; } } /** * Get MySQL max allowed packet * * @return integer */ protected function get_max_allowed_packet() { $result = $this->query( "SHOW VARIABLES LIKE 'max_allowed_packet'" ); $row = $this->fetch_assoc( $result ); // Close result cursor $this->free_result( $result ); // Get max allowed packet if ( isset( $row['Value'] ) ) { return $row['Value']; } } /** * Get MySQL lower case table names * * @return integer */ protected function get_lower_case_table_names() { $result = $this->query( "SHOW VARIABLES LIKE 'lower_case_table_names'" ); $row = $this->fetch_assoc( $result ); // Close result cursor $this->free_result( $result ); // Get lower case table names if ( isset( $row['Value'] ) ) { return $row['Value']; } } /** * Get MySQL collation name * * @param string $collation_name Collation name * @return string */ protected function get_collation( $collation_name ) { $result = $this->query( "SHOW COLLATION LIKE '{$collation_name}'" ); $row = $this->fetch_assoc( $result ); // Close result cursor $this->free_result( $result ); // Get collation name if ( isset( $row['Collation'] ) ) { return $row['Collation']; } } /** * Get MySQL create view * * @param string $view_name View name * @return string */ protected function get_create_view( $view_name ) { $result = $this->query( "SHOW CREATE VIEW `{$view_name}`" ); $row = $this->fetch_assoc( $result ); // Close result cursor $this->free_result( $result ); // Get create view if ( isset( $row['Create View'] ) ) { return $row['Create View']; } } /** * Get MySQL create table * * @param string $table_name Table name * @return string */ protected function get_create_table( $table_name ) { $result = $this->query( "SHOW CREATE TABLE `{$table_name}`" ); $row = $this->fetch_assoc( $result ); // Close result cursor $this->free_result( $result ); // Get create table if ( isset( $row['Create Table'] ) ) { return $row['Create Table']; } } /** * Repair MySQL table * * @param string $table_name Table name * @return void */ protected function repair_table( $table_name ) { $this->query( "REPAIR TABLE `{$table_name}`" ); } /** * Get MySQL primary keys * * @param string $table_name Table name * @return array */ protected function get_primary_keys( $table_name ) { $primary_keys = array(); // Get primary keys $result = $this->query( "SHOW KEYS FROM `{$table_name}` WHERE `Key_name` = 'PRIMARY'" ); while ( $row = $this->fetch_assoc( $result ) ) { if ( isset( $row['Column_name'] ) ) { $primary_keys[] = $row['Column_name']; } } // Close result cursor $this->free_result( $result ); return $primary_keys; } /** * Get MySQL unique keys * * @param string $table_name Table name * @return array */ protected function get_unique_keys( $table_name ) { $unique_keys = array(); // Get unique keys $result = $this->query( "SHOW KEYS FROM `{$table_name}` WHERE `Non_unique` = 0" ); while ( $row = $this->fetch_assoc( $result ) ) { if ( isset( $row['Column_name'] ) ) { $unique_keys[] = $row['Column_name']; } } // Close result cursor $this->free_result( $result ); return $unique_keys; } /** * Get MySQL column types * * @param string $table_name Table name * @return array */ protected function get_column_types( $table_name ) { $column_types = array(); // Get column types $result = $this->query( "SHOW COLUMNS FROM `{$table_name}`" ); while ( $row = $this->fetch_assoc( $result ) ) { if ( isset( $row['Field'] ) ) { $column_types[ strtolower( $row['Field'] ) ] = $row['Type']; } } // Close result cursor $this->free_result( $result ); return $column_types; } /** * Get MySQL column names * * @param string $table_name Table name * @return array */ public function get_column_names( $table_name ) { $column_names = array(); // Get column types $result = $this->query( "SHOW COLUMNS FROM `{$table_name}`" ); while ( $row = $this->fetch_assoc( $result ) ) { if ( isset( $row['Field'] ) ) { $column_names[ strtolower( $row['Field'] ) ] = $row['Field']; } } // Close result cursor $this->free_result( $result ); return $column_names; } /** * Replace table name * * @param string $input Table value * @param string $old_table_name Old table name * @param string $new_table_name New table name * @return string */ protected function replace_table_name( $input, $old_table_name, $new_table_name ) { $position = stripos( $input, "`$old_table_name`" ); if ( $position !== false ) { $input = substr_replace( $input, "`$new_table_name`", $position, strlen( "`$old_table_name`" ) ); } return $input; } /** * Replace view name * * @param string $input View value * @param string $old_view_name Old view name * @param string $new_view_name New view name * @return string */ protected function replace_view_name( $input, $old_view_name, $new_view_name ) { $position = stripos( $input, "`$old_view_name`" ); if ( $position !== false ) { $input = substr_replace( $input, "`$new_view_name`", $position, strlen( "`$old_view_name`" ) ); } return $input; } /** * Replace view identifiers * * @param string $input Table value * @return string */ protected function replace_view_identifiers( $input ) { $base_tables = $this->get_base_tables(); foreach ( $base_tables as $table_name ) { if ( ( $new_table_name = $this->replace_table_prefixes( $table_name, 0 ) ) ) { $input = str_ireplace( "`$table_name`", "`$new_table_name`", $input ); } } return $input; } /** * Replace view options * * @param string $input Table value * @return string */ protected function replace_view_options( $input ) { return preg_replace( '/CREATE(.+?)VIEW/i', 'CREATE VIEW', $input ); } /** * Replace table prefixes * * @param string $input Table value * @param mixed $position Replace first occurrence at a specified position * @return string */ protected function replace_table_prefixes( $input, $position = false ) { $search = $this->get_old_table_prefixes(); $replace = $this->get_new_table_prefixes(); // Replace first occurrence at a specified position if ( $position !== false ) { for ( $i = 0; $i < count( $search ); $i++ ) { $current = stripos( $input, $search[ $i ], $position ); if ( $current === $position ) { $input = substr_replace( $input, $replace[ $i ], $current, strlen( $search[ $i ] ) ); } } return $input; } return str_ireplace( $search, $replace, $input ); } /** * Replace column prefixes * * @param string $input Column value * @param mixed $position Replace first occurrence at a specified position * @return string */ protected function replace_column_prefixes( $input, $position = false ) { $search = $this->get_old_column_prefixes(); $replace = $this->get_new_column_prefixes(); $reserved = $this->get_reserved_column_prefixes(); // Replace first occurrence at a specified position if ( $position !== false ) { for ( $i = 0; $i < count( $reserved ); $i++ ) { $current = stripos( $input, $reserved[ $i ], $position ); if ( $current === $position ) { return $input; } } for ( $i = 0; $i < count( $search ); $i++ ) { $current = stripos( $input, $search[ $i ], $position ); if ( $current === $position ) { $input = substr_replace( $input, $replace[ $i ], $current, strlen( $search[ $i ] ) ); } } return $input; } return str_ireplace( $search, $replace, $input ); } /** * Replace table values * * @param string $input Table value * @return string */ protected function replace_table_values( $input ) { // Replace base64 encoded values (Visual Composer) if ( $this->get_visual_composer() ) { $input = preg_replace_callback( '/\[vc_raw_html\]([a-zA-Z0-9\/+]+={0,2})\[\/vc_raw_html\]/S', array( $this, 'replace_visual_composer_values_callback' ), $input ); } // Replace base64 encoded values (Oxygen Builder) if ( $this->get_oxygen_builder() ) { $input = preg_replace_callback( '/\\\\"(code-php|code-css|code-js)\\\\":\\\\"([a-zA-Z0-9\/+]+={0,2})\\\\"/S', array( $this, 'replace_oxygen_builder_values_callback' ), $input ); } // Replace base64 encoded values (BeTheme Responsive, Optimize Press and Avada Fusion Builder) if ( $this->get_betheme_responsive() || $this->get_optimize_press() || $this->get_avada_fusion_builder() ) { $input = preg_replace_callback( "/'([a-zA-Z0-9\/+]+={0,2})'/S", array( $this, 'replace_base64_values_callback' ), $input ); } // Replace serialized values foreach ( $this->get_old_replace_values() as $old_value ) { if ( strpos( $input, $this->escape( $old_value ) ) !== false ) { $input = preg_replace_callback( "/'(.*?)(?get_old_replace_values(), $this->get_new_replace_values(), $matches[1] ); // Encode base64 characters $matches[1] = Ai1wm_Database_Utility::base64_encode( $matches[1] ); } return '[vc_raw_html]' . $matches[1] . '[/vc_raw_html]'; } /** * Replace base64 values callback (Oxygen Builder) * * @param array $matches List of matches * @return string */ protected function replace_oxygen_builder_values_callback( $matches ) { // Validate base64 data if ( Ai1wm_Database_Utility::base64_validate( $matches[2] ) ) { // Decode base64 characters $matches[2] = Ai1wm_Database_Utility::base64_decode( $matches[2] ); // Replace values $matches[2] = Ai1wm_Database_Utility::replace_values( $this->get_old_replace_values(), $this->get_new_replace_values(), $matches[2] ); // Encode base64 characters $matches[2] = Ai1wm_Database_Utility::base64_encode( $matches[2] ); } return '\"' . $matches[1] . '\":\"' . $matches[2] . '\"'; } /** * Replace base64 values callback (BeTheme Responsive and Optimize Press) * * @param array $matches List of matches * @return string */ protected function replace_base64_values_callback( $matches ) { // Validate base64 data if ( Ai1wm_Database_Utility::base64_validate( $matches[1] ) ) { // Decode base64 characters $matches[1] = Ai1wm_Database_Utility::base64_decode( $matches[1] ); // Replace serialized values $matches[1] = Ai1wm_Database_Utility::replace_serialized_values( $this->get_old_replace_values(), $this->get_new_replace_values(), $matches[1] ); // Encode base64 characters $matches[1] = Ai1wm_Database_Utility::base64_encode( $matches[1] ); } return "'" . $matches[1] . "'"; } /** * Replace table values callback * * @param array $matches List of matches * @return string */ protected function replace_table_values_callback( $matches ) { // Unescape MySQL special characters $matches[1] = Ai1wm_Database_Utility::unescape_mysql( $matches[1] ); // Replace serialized values $matches[1] = Ai1wm_Database_Utility::replace_serialized_values( $this->get_old_replace_values(), $this->get_new_replace_values(), $matches[1] ); // Escape MySQL special characters $matches[1] = Ai1wm_Database_Utility::escape_mysql( $matches[1] ); return "'" . $matches[1] . "'"; } /** * Replace table collations * * @param string $input SQL statement * @return string */ protected function replace_table_collations( $input ) { static $search = array(); static $replace = array(); // Replace table collations if ( empty( $search ) || empty( $replace ) ) { if ( ! $this->wpdb->has_cap( 'utf8mb4_520' ) ) { if ( ! $this->wpdb->has_cap( 'utf8mb4' ) ) { $search = array( 'utf8mb4_0900_ai_ci', 'utf8mb4_unicode_520_ci', 'utf8mb4' ); $replace = array( 'utf8_unicode_ci', 'utf8_unicode_ci', 'utf8' ); } else { $search = array( 'utf8mb4_0900_ai_ci', 'utf8mb4_unicode_520_ci' ); $replace = array( 'utf8mb4_unicode_ci', 'utf8mb4_unicode_ci' ); } } else { $search = array( 'utf8mb4_0900_ai_ci' ); $replace = array( 'utf8mb4_unicode_520_ci' ); } } return str_replace( $search, $replace, $input ); } /** * Replace raw values * * @param string $input SQL statement * @return string */ protected function replace_raw_values( $input ) { return Ai1wm_Database_Utility::replace_values( $this->get_old_replace_raw_values(), $this->get_new_replace_raw_values(), $input ); } /** * Replace table comments * * @param string $input SQL statement * @return string */ protected function replace_table_comments( $input ) { return preg_replace( '/\/\*(.+?)\*\//s', '', $input ); } /** * Replace table constraints * * @param string $input SQL statement * @return string */ protected function replace_table_constraints( $input ) { $pattern = array( '/\s+CONSTRAINT(.+)REFERENCES(.+),/i', '/,\s+CONSTRAINT(.+)REFERENCES(.+)/i', ); return preg_replace( $pattern, '', $input ); } /** * Check whether input is transient query * * @param string $input SQL statement * @return boolean */ protected function is_transient_query( $input ) { return strpos( $input, "'_transient_" ) !== false; } /** * Check whether input is site transient query * * @param string $input SQL statement * @return boolean */ protected function is_site_transient_query( $input ) { return strpos( $input, "'_site_transient_" ) !== false; } /** * Check whether input is WooCommerce session query * * @param string $input SQL statement * @return boolean */ protected function is_wc_session_query( $input ) { return strpos( $input, "'_wc_session_" ) !== false; } /** * Check whether input is START TRANSACTION query * * @param string $input SQL statement * @return boolean */ protected function is_start_transaction_query( $input ) { return strpos( $input, 'START TRANSACTION' ) === 0; } /** * Check whether input is COMMIT query * * @param string $input SQL statement * @return boolean */ protected function is_commit_query( $input ) { return strpos( $input, 'COMMIT' ) === 0; } /** * Check whether input is DROP TABLE query * * @param string $input SQL statement * @return boolean */ protected function is_drop_table_query( $input ) { return strpos( $input, 'DROP TABLE' ) === 0; } /** * Check whether input is CREATE TABLE query * * @param string $input SQL statement * @return boolean */ protected function is_create_table_query( $input ) { return strpos( $input, 'CREATE TABLE' ) === 0; } /** * Check whether input is INSERT INTO query * * @param string $input SQL statement * @param string $table_name Table name (case insensitive) * @return boolean */ protected function is_insert_into_query( $input, $table_name ) { return stripos( $input, sprintf( 'INSERT INTO `%s`', $table_name ) ) === 0; } /** * Check whether input is cache query * * @param string $input SQL statement * @return boolean */ public function is_cache_query( $input ) { $cache = false; // Skip cache based on table query switch ( true ) { case $this->is_transient_query( $input ): case $this->is_site_transient_query( $input ): case $this->is_wc_session_query( $input ): $cache = true; break; } return $cache; } /** * Check whether input is atomic query * * @param string $input SQL statement * @return boolean */ protected function is_atomic_query( $input ) { $atomic = false; // Skip timeout based on table query switch ( true ) { case $this->is_drop_table_query( $input ): case $this->is_create_table_query( $input ): case $this->is_start_transaction_query( $input ): case $this->is_commit_query( $input ): $atomic = true; break; default: // Skip timeout based on table query and table name foreach ( $this->get_atomic_tables() as $table_name ) { if ( $this->is_insert_into_query( $input, $table_name ) ) { $atomic = true; break; } } } return $atomic; } /** * Replace table options * * @param string $input SQL statement * @return string */ protected function replace_table_options( $input ) { $search = array( 'TYPE=InnoDB', 'TYPE=MyISAM', 'ENGINE=Aria', 'TRANSACTIONAL=0', 'TRANSACTIONAL=1', 'PAGE_CHECKSUM=0', 'PAGE_CHECKSUM=1', 'TABLE_CHECKSUM=0', 'TABLE_CHECKSUM=1', 'ROW_FORMAT=PAGE', 'ROW_FORMAT=FIXED', 'ROW_FORMAT=DYNAMIC', ); $replace = array( 'ENGINE=InnoDB', 'ENGINE=MyISAM', 'ENGINE=MyISAM', '', '', '', '', '', '', '', '', '', ); return str_ireplace( $search, $replace, $input ); } /** * Replace table engines * * @param string $input SQL statement * @return string */ protected function replace_table_engines( $input ) { $search = array( 'ENGINE=MyISAM', 'ENGINE=Aria', ); $replace = array( 'ENGINE=InnoDB', 'ENGINE=InnoDB', ); return str_ireplace( $search, $replace, $input ); } /** * Replace table row format * * @param string $input SQL statement * @return string */ protected function replace_table_row_format( $input ) { $search = array( 'ENGINE=InnoDB', 'ENGINE=MyISAM', ); $replace = array( 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC', 'ENGINE=MyISAM ROW_FORMAT=DYNAMIC', ); return str_ireplace( $search, $replace, $input ); } /** * Replace table full-text indexes (MySQL <= 5.5) * * @param string $input SQL statement * @return string */ protected function replace_table_fulltext_indexes( $input ) { $pattern = array( '/\s+FULLTEXT KEY(.+),/i', '/,\s+FULLTEXT KEY(.+)/i', ); return preg_replace( $pattern, '', $input ); } /** * Returns header for dump file * * @return string */ protected function get_header() { // Some info about software, source and time $header = sprintf( "-- All-in-One WP Migration SQL Dump\n" . "-- https://servmask.com/\n" . "--\n" . "-- Host: %s\n" . "-- Database: %s\n" . "-- Class: %s\n" . "--\n", $this->wpdb->dbhost, $this->wpdb->dbname, get_class( $this ) ); return $header; } /** * Prepare table values * * @param string $input Table value * @param integer $column_type Column type * @return string */ protected function prepare_table_values( $input, $column_type ) { switch ( true ) { case is_null( $input ): return 'NULL'; case stripos( $column_type, 'tinyint' ) === 0: case stripos( $column_type, 'smallint' ) === 0: case stripos( $column_type, 'mediumint' ) === 0: case stripos( $column_type, 'int' ) === 0: case stripos( $column_type, 'bigint' ) === 0: case stripos( $column_type, 'float' ) === 0: case stripos( $column_type, 'double' ) === 0: case stripos( $column_type, 'decimal' ) === 0: case stripos( $column_type, 'bit' ) === 0: return $input; case stripos( $column_type, 'binary' ) === 0: case stripos( $column_type, 'varbinary' ) === 0: case stripos( $column_type, 'tinyblob' ) === 0: case stripos( $column_type, 'mediumblob' ) === 0: case stripos( $column_type, 'longblob' ) === 0: case stripos( $column_type, 'blob' ) === 0: return '0x' . bin2hex( $input ); default: return "'" . $this->escape( $input ) . "'"; } } /** * Run MySQL query * * @param string $input SQL query * @return resource */ abstract public function query( $input ); /** * Escape string input for mysql query * * @param string $input String to escape * @return string */ abstract public function escape( $input ); /** * Return the error code for the most recent function call * * @return integer */ abstract public function errno(); /** * Return a string description of the last error * * @return string */ abstract public function error(); /** * Return server version * * @return string */ abstract public function version(); /** * Return the result from MySQL query as associative array * * @param resource $result MySQL resource * @return array */ abstract public function fetch_assoc( $result ); /** * Return the result from MySQL query as row * * @param resource $result MySQL resource * @return array */ abstract public function fetch_row( $result ); /** * Return the number for rows from MySQL results * * @param resource $result MySQL resource * @return integer */ abstract public function num_rows( $result ); /** * Free MySQL result memory * * @param resource $result MySQL resource * @return boolean */ abstract public function free_result( $result ); } PK'Z#Q447vendor/servmask/database/class-ai1wm-database-mysql.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Database_Mysql extends Ai1wm_Database { /** * Run MySQL query * * @param string $input SQL query * @return mixed */ public function query( $input ) { if ( ! ( $result = mysql_query( $input, $this->wpdb->dbh ) ) ) { $mysql_errno = 0; // Get MySQL error code if ( ! empty( $this->wpdb->dbh ) ) { if ( is_resource( $this->wpdb->dbh ) ) { $mysql_errno = mysql_errno( $this->wpdb->dbh ); } else { $mysql_errno = 2006; } } // MySQL server has gone away, try to reconnect if ( empty( $this->wpdb->dbh ) || 2006 === $mysql_errno ) { if ( ! $this->wpdb->check_connection( false ) ) { throw new Ai1wm_Database_Exception( __( 'Error reconnecting to the database. Technical details', AI1WM_PLUGIN_NAME ), 503 ); } $result = mysql_query( $input, $this->wpdb->dbh ); } } return $result; } /** * Escape string input for mysql query * * @param string $input String to escape * @return string */ public function escape( $input ) { return mysql_real_escape_string( $input, $this->wpdb->dbh ); } /** * Return the error code for the most recent function call * * @return integer */ public function errno() { return mysql_errno( $this->wpdb->dbh ); } /** * Return a string description of the last error * * @return string */ public function error() { return mysql_error( $this->wpdb->dbh ); } /** * Return server version * * @return string */ public function version() { return mysql_get_server_info( $this->wpdb->dbh ); } /** * Return the result from MySQL query as associative array * * @param resource $result MySQL resource * @return array */ public function fetch_assoc( $result ) { return mysql_fetch_assoc( $result ); } /** * Return the result from MySQL query as row * * @param resource $result MySQL resource * @return array */ public function fetch_row( $result ) { return mysql_fetch_row( $result ); } /** * Return the number for rows from MySQL results * * @param resource $result MySQL resource * @return integer */ public function num_rows( $result ) { return mysql_num_rows( $result ); } /** * Free MySQL result memory * * @param resource $result MySQL resource * @return boolean */ public function free_result( $result ) { return mysql_free_result( $result ); } } PK'ZJ8 /vendor/servmask/filesystem/class-ai1wm-file.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_File { /** * Create a file with content * * @param string $path Path to the file * @param string $content Content of the file * @return boolean */ public static function create( $path, $content ) { if ( ! @file_exists( $path ) ) { if ( ! @is_writable( dirname( $path ) ) ) { return false; } if ( ! @touch( $path ) ) { return false; } } elseif ( ! @is_writable( $path ) ) { return false; } // No changes were added if ( function_exists( 'md5_file' ) ) { if ( @md5_file( $path ) === md5( $content ) ) { return true; } } $is_written = false; if ( ( $handle = @fopen( $path, 'w' ) ) !== false ) { if ( @fwrite( $handle, $content ) !== false ) { $is_written = true; } @fclose( $handle ); } return $is_written; } /** * Create a file with marker and content * * @param string $path Path to the file * @param string $marker Name of the marker * @param string $content Content of the file * @return boolean */ public static function create_with_markers( $path, $marker, $content ) { return @insert_with_markers( $path, $marker, $content ); } /** * Delete a file by path * * @param string $path Path to the file * @return boolean */ public static function delete( $path ) { if ( ! @file_exists( $path ) ) { return false; } return @unlink( $path ); } } PK'ZE6vendor/servmask/filesystem/class-ai1wm-file-robots.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_File_Robots { /** * Create robots.txt file * * @param string $path Path to file * @return boolean */ public static function create( $path ) { return Ai1wm_File::create( $path, implode( PHP_EOL, array( 'User-agent: *', 'Disallow: /ai1wm-backups/', 'Disallow: /wp-content/ai1wm-backups/', ) ) ); } } PK'ZJ 4vendor/servmask/filesystem/class-ai1wm-directory.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Directory { /** * Create directory (recursively) * * @param string $path Path to the directory * @return boolean */ public static function create( $path ) { if ( @is_dir( $path ) ) { return true; } return @mkdir( $path, 0777, true ); } /** * Delete directory (recursively) * * @param string $path Path to the directory * @return boolean */ public static function delete( $path ) { if ( @is_dir( $path ) ) { try { // Iterate over directory $iterator = new Ai1wm_Recursive_Directory_Iterator( $path ); // Recursively iterate over directory $iterator = new Ai1wm_Recursive_Iterator_Iterator( $iterator, RecursiveIteratorIterator::CHILD_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD ); // Remove files and directories foreach ( $iterator as $item ) { if ( $item->isDir() ) { @rmdir( $item->getPathname() ); } else { @unlink( $item->getPathname() ); } } } catch ( Exception $e ) { } return @rmdir( $path ); } return false; } } PK'Z ^#qq5vendor/servmask/filesystem/class-ai1wm-file-index.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_File_Index { /** * Create index file * * @param string $path Path to file * @return boolean */ public static function create( $path ) { return Ai1wm_File::create( $path, 'Kangaroos cannot jump here' ); } } PK'Zŕ  9vendor/servmask/filesystem/class-ai1wm-file-webconfig.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_File_Webconfig { /** * Create web.config file * * @param string $path Path to file * @return boolean */ public static function create( $path ) { return Ai1wm_File::create( $path, implode( PHP_EOL, array( '', '', '', '', '', '', '', '', '', '', '', '', '', ) ) ); } } PK'Zxc 8vendor/servmask/filesystem/class-ai1wm-file-htaccess.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_File_Htaccess { /** * Create .htaccess file (ServMask) * * @param string $path Path to file * @return boolean */ public static function create( $path ) { return Ai1wm_File::create( $path, implode( PHP_EOL, array( '', 'AddType application/octet-stream .wpress', '', '', 'DirectoryIndex index.php', '', '', 'Options -Indexes', '', ) ) ); } /** * Create .htaccess file (LiteSpeed) * * @param string $path Path to file * @return boolean */ public static function litespeed( $path ) { return Ai1wm_File::create_with_markers( $path, 'LiteSpeed', array( '', 'SetEnv noabort 1', '', ) ); } } PK'Zj//,controller/class-ai1wm-export-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Controller { public static function index() { Ai1wm_Template::render( 'export/index' ); } public static function export( $params = array() ) { global $ai1wm_params; ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( array_merge( $_GET, $_POST ) ); } // Set priority if ( ! isset( $params['priority'] ) ) { $params['priority'] = 5; } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } try { // Ensure that unauthorized people cannot access export action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } $ai1wm_params = $params; // Loop over filters if ( ( $filters = ai1wm_get_filters( 'ai1wm_export' ) ) ) { while ( $hooks = current( $filters ) ) { if ( intval( $params['priority'] ) === key( $filters ) ) { foreach ( $hooks as $hook ) { try { // Run function hook $params = call_user_func_array( $hook['function'], array( $params ) ); } catch ( Ai1wm_Database_Exception $e ) { if ( defined( 'WP_CLI' ) ) { WP_CLI::error( sprintf( __( 'Unable to export. Error code: %s. %s', AI1WM_PLUGIN_NAME ), $e->getCode(), $e->getMessage() ) ); } else { status_header( $e->getCode() ); ai1wm_json_response( array( 'errors' => array( array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) ) ) ); } Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); // Check if export is performed from scheduled event if ( isset( $params['event_id'] ) ) { $params['error_message'] = $e->getMessage(); do_action( 'ai1wm_status_export_fail', $params ); } exit; } catch ( Exception $e ) { if ( defined( 'WP_CLI' ) ) { WP_CLI::error( sprintf( __( 'Unable to export: %s', AI1WM_PLUGIN_NAME ), $e->getMessage() ) ); } else { Ai1wm_Status::error( __( 'Unable to export', AI1WM_PLUGIN_NAME ), $e->getMessage() ); Ai1wm_Notification::error( __( 'Unable to export', AI1WM_PLUGIN_NAME ), $e->getMessage() ); } Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); // Check if export is performed from scheduled event if ( isset( $params['event_id'] ) ) { $params['error_message'] = $e->getMessage(); do_action( 'ai1wm_status_export_fail', $params ); } exit; } } // Set completed $completed = true; if ( isset( $params['completed'] ) ) { $completed = (bool) $params['completed']; } // Do request if ( $completed === false || ( $next = next( $filters ) ) && ( $params['priority'] = key( $filters ) ) ) { if ( defined( 'WP_CLI' ) ) { if ( ! defined( 'DOING_CRON' ) ) { continue; } } if ( isset( $params['ai1wm_manual_export'] ) ) { ai1wm_json_response( $params ); exit; } wp_remote_request( apply_filters( 'ai1wm_http_export_url', add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_export' ) ) ), array( 'method' => apply_filters( 'ai1wm_http_export_method', 'POST' ), 'timeout' => apply_filters( 'ai1wm_http_export_timeout', 10 ), 'blocking' => apply_filters( 'ai1wm_http_export_blocking', false ), 'sslverify' => apply_filters( 'ai1wm_http_export_sslverify', false ), 'headers' => apply_filters( 'ai1wm_http_export_headers', array() ), 'body' => apply_filters( 'ai1wm_http_export_body', $params ), ) ); exit; } } next( $filters ); } } return $params; } public static function buttons() { $active_filters = array(); $static_filters = array(); // All-in-One WP Migration if ( defined( 'AI1WM_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_file', Ai1wm_Template::get_content( 'export/button-file' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_file', Ai1wm_Template::get_content( 'export/button-file' ) ); } // Add FTP Extension if ( defined( 'AI1WMFE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_ftp', Ai1wm_Template::get_content( 'export/button-ftp' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_ftp', Ai1wm_Template::get_content( 'export/button-ftp' ) ); } // Add Dropbox Extension if ( defined( 'AI1WMDE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_dropbox', Ai1wm_Template::get_content( 'export/button-dropbox' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_dropbox', Ai1wm_Template::get_content( 'export/button-dropbox' ) ); } // Add Google Drive Extension if ( defined( 'AI1WMGE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_gdrive', Ai1wm_Template::get_content( 'export/button-gdrive' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_gdrive', Ai1wm_Template::get_content( 'export/button-gdrive' ) ); } // Add Amazon S3 Extension if ( defined( 'AI1WMSE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_s3', Ai1wm_Template::get_content( 'export/button-s3' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_s3', Ai1wm_Template::get_content( 'export/button-s3' ) ); } // Add Backblaze B2 Extension if ( defined( 'AI1WMAE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_b2', Ai1wm_Template::get_content( 'export/button-b2' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_b2', Ai1wm_Template::get_content( 'export/button-b2' ) ); } // Add OneDrive Extension if ( defined( 'AI1WMOE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_onedrive', Ai1wm_Template::get_content( 'export/button-onedrive' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_onedrive', Ai1wm_Template::get_content( 'export/button-onedrive' ) ); } // Add Box Extension if ( defined( 'AI1WMBE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_box', Ai1wm_Template::get_content( 'export/button-box' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_box', Ai1wm_Template::get_content( 'export/button-box' ) ); } // Add Mega Extension if ( defined( 'AI1WMEE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_mega', Ai1wm_Template::get_content( 'export/button-mega' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_mega', Ai1wm_Template::get_content( 'export/button-mega' ) ); } // Add DigitalOcean Spaces Extension if ( defined( 'AI1WMIE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_digitalocean', Ai1wm_Template::get_content( 'export/button-digitalocean' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_digitalocean', Ai1wm_Template::get_content( 'export/button-digitalocean' ) ); } // Add Google Cloud Storage Extension if ( defined( 'AI1WMCE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_gcloud_storage', Ai1wm_Template::get_content( 'export/button-gcloud-storage' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_gcloud_storage', Ai1wm_Template::get_content( 'export/button-gcloud-storage' ) ); } // Add Microsoft Azure Extension if ( defined( 'AI1WMZE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_azure_storage', Ai1wm_Template::get_content( 'export/button-azure-storage' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_azure_storage', Ai1wm_Template::get_content( 'export/button-azure-storage' ) ); } // Add Amazon Glacier Extension if ( defined( 'AI1WMRE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_glacier', Ai1wm_Template::get_content( 'export/button-glacier' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_glacier', Ai1wm_Template::get_content( 'export/button-glacier' ) ); } // Add pCloud Extension if ( defined( 'AI1WMPE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_pcloud', Ai1wm_Template::get_content( 'export/button-pcloud' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_pcloud', Ai1wm_Template::get_content( 'export/button-pcloud' ) ); } // Add WebDAV Extension if ( defined( 'AI1WMWE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_webdav', Ai1wm_Template::get_content( 'export/button-webdav' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_webdav', Ai1wm_Template::get_content( 'export/button-webdav' ) ); } // Add S3 Client Extension if ( defined( 'AI1WMNE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_export_s3_client', Ai1wm_Template::get_content( 'export/button-s3-client' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_export_s3_client', Ai1wm_Template::get_content( 'export/button-s3-client' ) ); } return array_merge( $active_filters, $static_filters ); } public static function http_export_headers( $headers = array() ) { if ( ( $user = get_option( AI1WM_AUTH_USER ) ) && ( $password = get_option( AI1WM_AUTH_PASSWORD ) ) ) { if ( ( $hash = base64_encode( sprintf( '%s:%s', $user, $password ) ) ) ) { $headers['Authorization'] = sprintf( 'Basic %s', $hash ); } } return $headers; } public static function cleanup() { try { // Iterate over storage directory $iterator = new Ai1wm_Recursive_Directory_Iterator( AI1WM_STORAGE_PATH ); // Exclude index.php $iterator = new Ai1wm_Recursive_Exclude_Filter( $iterator, array( 'index.php', 'index.html' ) ); // Loop over folders and files foreach ( $iterator as $item ) { try { if ( $item->getMTime() < ( time() - AI1WM_MAX_STORAGE_CLEANUP ) ) { if ( $item->isDir() ) { Ai1wm_Directory::delete( $item->getPathname() ); } else { Ai1wm_File::delete( $item->getPathname() ); } } } catch ( Exception $e ) { } } } catch ( Exception $e ) { } } } PK'Z] }/}/,controller/class-ai1wm-import-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Controller { public static function index() { Ai1wm_Template::render( 'import/index' ); } public static function import( $params = array() ) { global $ai1wm_params; ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( array_merge( $_GET, $_POST ) ); } // Set priority if ( ! isset( $params['priority'] ) ) { $params['priority'] = 10; } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } try { // Ensure that unauthorized people cannot access import action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } $ai1wm_params = $params; // Loop over filters if ( ( $filters = ai1wm_get_filters( 'ai1wm_import' ) ) ) { while ( $hooks = current( $filters ) ) { if ( intval( $params['priority'] ) === key( $filters ) ) { foreach ( $hooks as $hook ) { try { // Run function hook $params = call_user_func_array( $hook['function'], array( $params ) ); } catch ( Ai1wm_Import_Retry_Exception $e ) { if ( defined( 'WP_CLI' ) ) { WP_CLI::error( sprintf( __( 'Unable to import. Error code: %s. %s', AI1WM_PLUGIN_NAME ), $e->getCode(), $e->getMessage() ) ); } else { status_header( $e->getCode() ); ai1wm_json_response( array( 'errors' => array( array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) ) ) ); } exit; } catch ( Ai1wm_Database_Exception $e ) { if ( defined( 'WP_CLI' ) ) { WP_CLI::error( sprintf( __( 'Unable to import. Error code: %s. %s', AI1WM_PLUGIN_NAME ), $e->getCode(), $e->getMessage() ) ); } else { status_header( $e->getCode() ); ai1wm_json_response( array( 'errors' => array( array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) ) ) ); } Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); exit; } catch ( Exception $e ) { if ( defined( 'WP_CLI' ) ) { WP_CLI::error( sprintf( __( 'Unable to import: %s', AI1WM_PLUGIN_NAME ), $e->getMessage() ) ); } else { Ai1wm_Status::error( __( 'Unable to import', AI1WM_PLUGIN_NAME ), $e->getMessage() ); Ai1wm_Notification::error( __( 'Unable to import', AI1WM_PLUGIN_NAME ), $e->getMessage() ); } Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); exit; } } // Set completed $completed = true; if ( isset( $params['completed'] ) ) { $completed = (bool) $params['completed']; } // Do request if ( $completed === false || ( $next = next( $filters ) ) && ( $params['priority'] = key( $filters ) ) ) { if ( defined( 'WP_CLI' ) ) { if ( ! defined( 'DOING_CRON' ) ) { continue; } } if ( isset( $params['ai1wm_manual_import'] ) || isset( $params['ai1wm_manual_restore'] ) ) { ai1wm_json_response( $params ); exit; } wp_remote_request( apply_filters( 'ai1wm_http_import_url', add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_import' ) ) ), array( 'method' => apply_filters( 'ai1wm_http_import_method', 'POST' ), 'timeout' => apply_filters( 'ai1wm_http_import_timeout', 10 ), 'blocking' => apply_filters( 'ai1wm_http_import_blocking', false ), 'sslverify' => apply_filters( 'ai1wm_http_import_sslverify', false ), 'headers' => apply_filters( 'ai1wm_http_import_headers', array() ), 'body' => apply_filters( 'ai1wm_http_import_body', $params ), ) ); exit; } } next( $filters ); } } return $params; } public static function buttons() { $active_filters = array(); $static_filters = array(); // All-in-One WP Migration if ( defined( 'AI1WM_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_file', Ai1wm_Template::get_content( 'import/button-file' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_file', Ai1wm_Template::get_content( 'import/button-file' ) ); } // Add URL Extension if ( defined( 'AI1WMLE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_url', Ai1wm_Template::get_content( 'import/button-url' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_url', Ai1wm_Template::get_content( 'import/button-url' ) ); } // Add FTP Extension if ( defined( 'AI1WMFE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_ftp', Ai1wm_Template::get_content( 'import/button-ftp' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_ftp', Ai1wm_Template::get_content( 'import/button-ftp' ) ); } // Add Dropbox Extension if ( defined( 'AI1WMDE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_dropbox', Ai1wm_Template::get_content( 'import/button-dropbox' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_dropbox', Ai1wm_Template::get_content( 'import/button-dropbox' ) ); } // Add Google Drive Extension if ( defined( 'AI1WMGE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_gdrive', Ai1wm_Template::get_content( 'import/button-gdrive' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_gdrive', Ai1wm_Template::get_content( 'import/button-gdrive' ) ); } // Add Amazon S3 Extension if ( defined( 'AI1WMSE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_s3', Ai1wm_Template::get_content( 'import/button-s3' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_s3', Ai1wm_Template::get_content( 'import/button-s3' ) ); } // Add Backblaze B2 Extension if ( defined( 'AI1WMAE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_b2', Ai1wm_Template::get_content( 'import/button-b2' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_b2', Ai1wm_Template::get_content( 'import/button-b2' ) ); } // Add OneDrive Extension if ( defined( 'AI1WMOE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_onedrive', Ai1wm_Template::get_content( 'import/button-onedrive' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_onedrive', Ai1wm_Template::get_content( 'import/button-onedrive' ) ); } // Add Box Extension if ( defined( 'AI1WMBE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_box', Ai1wm_Template::get_content( 'import/button-box' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_box', Ai1wm_Template::get_content( 'import/button-box' ) ); } // Add Mega Extension if ( defined( 'AI1WMEE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_mega', Ai1wm_Template::get_content( 'import/button-mega' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_mega', Ai1wm_Template::get_content( 'import/button-mega' ) ); } // Add DigitalOcean Spaces Extension if ( defined( 'AI1WMIE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_digitalocean', Ai1wm_Template::get_content( 'import/button-digitalocean' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_digitalocean', Ai1wm_Template::get_content( 'import/button-digitalocean' ) ); } // Add Google Cloud Storage Extension if ( defined( 'AI1WMCE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_gcloud_storage', Ai1wm_Template::get_content( 'import/button-gcloud-storage' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_gcloud_storage', Ai1wm_Template::get_content( 'import/button-gcloud-storage' ) ); } // Add Microsoft Azure Extension if ( defined( 'AI1WMZE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_azure_storage', Ai1wm_Template::get_content( 'import/button-azure-storage' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_azure_storage', Ai1wm_Template::get_content( 'import/button-azure-storage' ) ); } // Add Amazon Glacier Extension if ( defined( 'AI1WMRE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_glacier', Ai1wm_Template::get_content( 'import/button-glacier' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_glacier', Ai1wm_Template::get_content( 'import/button-glacier' ) ); } // Add pCloud Extension if ( defined( 'AI1WMPE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_pcloud', Ai1wm_Template::get_content( 'import/button-pcloud' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_pcloud', Ai1wm_Template::get_content( 'import/button-pcloud' ) ); } // Add WebDAV Extension if ( defined( 'AI1WMWE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_webdav', Ai1wm_Template::get_content( 'import/button-webdav' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_webdav', Ai1wm_Template::get_content( 'import/button-webdav' ) ); } // Add S3 Client Extension if ( defined( 'AI1WMNE_PLUGIN_NAME' ) ) { $active_filters[] = apply_filters( 'ai1wm_import_s3_client', Ai1wm_Template::get_content( 'import/button-s3-client' ) ); } else { $static_filters[] = apply_filters( 'ai1wm_import_s3_client', Ai1wm_Template::get_content( 'import/button-s3-client' ) ); } return array_merge( $active_filters, $static_filters ); } public static function pro() { return Ai1wm_Template::get_content( 'import/pro' ); } public static function http_import_headers( $headers = array() ) { if ( ( $user = get_option( AI1WM_AUTH_USER ) ) && ( $password = get_option( AI1WM_AUTH_PASSWORD ) ) ) { if ( ( $hash = base64_encode( sprintf( '%s:%s', $user, $password ) ) ) ) { $headers['Authorization'] = sprintf( 'Basic %s', $hash ); } } return $headers; } public static function max_chunk_size() { return min( ai1wm_parse_size( ini_get( 'post_max_size' ), AI1WM_MAX_CHUNK_SIZE ), ai1wm_parse_size( ini_get( 'upload_max_filesize' ), AI1WM_MAX_CHUNK_SIZE ), ai1wm_parse_size( AI1WM_MAX_CHUNK_SIZE ) ); } } PK'ZNp*controller/class-ai1wm-main-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Main_Controller { /** * Main Application Controller * * @return Ai1wm_Main_Controller */ public function __construct() { register_activation_hook( AI1WM_PLUGIN_BASENAME, array( $this, 'activation_hook' ) ); // Activate hooks $this->activate_actions(); $this->activate_filters(); } /** * Activation hook callback * * @return void */ public function activation_hook() { if ( extension_loaded( 'litespeed' ) ) { $this->create_litespeed_htaccess( AI1WM_WORDPRESS_HTACCESS ); } $this->setup_backups_folder(); $this->setup_storage_folder(); $this->setup_secret_key(); } /** * Initializes language domain for the plugin * * @return void */ public function load_textdomain() { load_plugin_textdomain( AI1WM_PLUGIN_NAME, false, false ); } /** * Register listeners for actions * * @return void */ private function activate_actions() { // Init add_action( 'admin_init', array( $this, 'init' ) ); // Router add_action( 'admin_init', array( $this, 'router' ) ); // Enable WP importing add_action( 'admin_init', array( $this, 'wp_importing' ), 5 ); // Setup backups folder add_action( 'admin_init', array( $this, 'setup_backups_folder' ) ); // Setup storage folder add_action( 'admin_init', array( $this, 'setup_storage_folder' ) ); // Setup secret key add_action( 'admin_init', array( $this, 'setup_secret_key' ) ); // Check user role capability add_action( 'admin_init', array( $this, 'check_user_role_capability' ) ); // Schedule crons add_action( 'admin_init', array( $this, 'schedule_crons' ) ); // Load text domain add_action( 'admin_init', array( $this, 'load_textdomain' ) ); // Admin header add_action( 'admin_head', array( $this, 'admin_head' ) ); // All-in-One WP Migration add_action( 'plugins_loaded', array( $this, 'ai1wm_loaded' ), 10 ); // Export and import commands add_action( 'plugins_loaded', array( $this, 'ai1wm_commands' ), 10 ); // Export and import buttons add_action( 'plugins_loaded', array( $this, 'ai1wm_buttons' ), 10 ); // WP CLI commands add_action( 'plugins_loaded', array( $this, 'wp_cli' ), 10 ); // Register scripts and styles add_action( 'admin_enqueue_scripts', array( $this, 'register_scripts_and_styles' ), 5 ); // Enqueue export scripts and styles add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_export_scripts_and_styles' ), 5 ); // Enqueue import scripts and styles add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_import_scripts_and_styles' ), 5 ); // Enqueue backups scripts and styles add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_backups_scripts_and_styles' ), 5 ); // Enqueue what's new scripts and styles add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_whats_new_scripts_and_styles' ), 5 ); // Enqueue updater scripts and styles add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_updater_scripts_and_styles' ), 5 ); } /** * Register listeners for filters * * @return void */ private function activate_filters() { // Add links to plugin list page add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 2 ); // Add custom schedules add_filter( 'cron_schedules', array( $this, 'add_cron_schedules' ), 9999 ); } /** * Export and import commands * * @return void */ public function ai1wm_commands() { // Add export commands add_filter( 'ai1wm_export', 'Ai1wm_Export_Init::execute', 5 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Compatibility::execute', 10 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Archive::execute', 30 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Config::execute', 50 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Config_File::execute', 60 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Enumerate_Content::execute', 100 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Enumerate_Media::execute', 110 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Enumerate_Plugins::execute', 120 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Enumerate_Themes::execute', 130 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Enumerate_Tables::execute', 140 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Content::execute', 150 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Media::execute', 160 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Plugins::execute', 170 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Themes::execute', 180 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Database::execute', 200 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Database_File::execute', 220 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Download::execute', 250 ); add_filter( 'ai1wm_export', 'Ai1wm_Export_Clean::execute', 300 ); // Add import commands add_filter( 'ai1wm_import', 'Ai1wm_Import_Upload::execute', 5 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Compatibility::execute', 10 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Validate::execute', 50 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Check_Encryption::execute', 75 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Check_Decryption_Password::execute', 90 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Confirm::execute', 100 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Blogs::execute', 150 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Permalinks::execute', 170 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Enumerate::execute', 200 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Content::execute', 250 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Mu_Plugins::execute', 270 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Database::execute', 300 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Users::execute', 310 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Options::execute', 330 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Done::execute', 350 ); add_filter( 'ai1wm_import', 'Ai1wm_Import_Clean::execute', 400 ); } /** * Export and import buttons * * @return void */ public function ai1wm_buttons() { add_filter( 'ai1wm_export_buttons', 'Ai1wm_Export_Controller::buttons' ); add_filter( 'ai1wm_import_buttons', 'Ai1wm_Import_Controller::buttons' ); add_filter( 'ai1wm_pro', 'Ai1wm_Import_Controller::pro', 10 ); } /** * All-in-One WP Migration loaded * * @return void */ public function ai1wm_loaded() { if ( ! defined( 'AI1WMME_PLUGIN_NAME' ) ) { if ( is_multisite() ) { add_action( 'network_admin_notices', array( $this, 'multisite_notice' ) ); } else { add_action( 'admin_menu', array( $this, 'admin_menu' ) ); } } else { if ( is_multisite() ) { add_action( 'network_admin_menu', array( $this, 'admin_menu' ) ); } else { add_action( 'admin_menu', array( $this, 'admin_menu' ) ); } } // Add in plugin update message foreach ( Ai1wm_Extensions::get() as $slug => $extension ) { add_action( "in_plugin_update_message-{$extension['basename']}", 'Ai1wm_Updater_Controller::in_plugin_update_message', 10, 2 ); } // Add automatic plugins update add_action( 'wp_maybe_auto_update', 'Ai1wm_Updater_Controller::check_for_updates' ); // Add HTTP export headers add_filter( 'ai1wm_http_export_headers', 'Ai1wm_Export_Controller::http_export_headers' ); // Add HTTP import headers add_filter( 'ai1wm_http_import_headers', 'Ai1wm_Import_Controller::http_import_headers' ); // Add chunk size limit add_filter( 'ai1wm_max_chunk_size', 'Ai1wm_Import_Controller::max_chunk_size' ); // Add plugins API add_filter( 'plugins_api', 'Ai1wm_Updater_Controller::plugins_api', 20, 3 ); // Add plugins updates add_filter( 'pre_set_site_transient_update_plugins', 'Ai1wm_Updater_Controller::pre_update_plugins' ); // Add plugins metadata add_filter( 'site_transient_update_plugins', 'Ai1wm_Updater_Controller::update_plugins' ); // Add "Check for updates" link to plugin list page add_filter( 'plugin_row_meta', 'Ai1wm_Updater_Controller::plugin_row_meta', 10, 2 ); // Add storage folder daily cleanup cron add_action( 'ai1wm_storage_cleanup', 'Ai1wm_Export_Controller::cleanup' ); } /** * WP CLI commands * * @return void */ public function wp_cli() { if ( defined( 'WP_CLI' ) ) { WP_CLI::add_command( 'ai1wm', 'Ai1wm_WP_CLI_Command', array( 'shortdesc' => __( 'All-in-One WP Migration Command', AI1WM_PLUGIN_NAME ) ) ); } } /** * Create backups folder with index.php, index.html, .htaccess and web.config files * * @return void */ public function setup_backups_folder() { $this->create_backups_folder( AI1WM_BACKUPS_PATH ); $this->create_backups_htaccess( AI1WM_BACKUPS_HTACCESS ); $this->create_backups_webconfig( AI1WM_BACKUPS_WEBCONFIG ); $this->create_backups_index_php( AI1WM_BACKUPS_INDEX_PHP ); $this->create_backups_index_html( AI1WM_BACKUPS_INDEX_HTML ); $this->create_backups_robots_txt( AI1WM_BACKUPS_ROBOTS_TXT ); } /** * Create storage folder with index.php and index.html files * * @return void */ public function setup_storage_folder() { $this->create_storage_folder( AI1WM_STORAGE_PATH ); $this->create_storage_index_php( AI1WM_STORAGE_INDEX_PHP ); $this->create_storage_index_html( AI1WM_STORAGE_INDEX_HTML ); } /** * Create secret key if they don't exist yet * * @return void */ public function setup_secret_key() { if ( ! get_option( AI1WM_SECRET_KEY ) ) { update_option( AI1WM_SECRET_KEY, ai1wm_generate_random_string( 12 ) ); } } /** * Check user role capability * * @return void */ public function check_user_role_capability() { if ( ( $user = wp_get_current_user() ) && in_array( 'administrator', $user->roles ) ) { if ( ! $user->has_cap( 'export' ) || ! $user->has_cap( 'import' ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'missing_role_capability_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'missing_role_capability_notice' ) ); } } } } /** * Schedule cron tasks for plugin operation, if not done yet * * @return void */ public function schedule_crons() { if ( ! Ai1wm_Cron::exists( 'ai1wm_storage_cleanup' ) ) { Ai1wm_Cron::add( 'ai1wm_storage_cleanup', 'daily', time() ); } Ai1wm_Cron::clear( 'ai1wm_cleanup_cron' ); } /** * Create storage folder * * @param string Path to folder * @return void */ public function create_storage_folder( $path ) { if ( ! Ai1wm_Directory::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'storage_path_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'storage_path_notice' ) ); } } } /** * Create backups folder * * @param string Path to folder * @return void */ public function create_backups_folder( $path ) { if ( ! Ai1wm_Directory::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'backups_path_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'backups_path_notice' ) ); } } } /** * Create storage index.php file * * @param string Path to file * @return void */ public function create_storage_index_php( $path ) { if ( ! Ai1wm_File_Index::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'storage_index_php_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'storage_index_php_notice' ) ); } } } /** * Create storage index.html file * * @param string Path to file * @return void */ public function create_storage_index_html( $path ) { if ( ! Ai1wm_File_Index::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'storage_index_html_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'storage_index_html_notice' ) ); } } } /** * Create backups .htaccess file * * @param string Path to file * @return void */ public function create_backups_htaccess( $path ) { if ( ! Ai1wm_File_Htaccess::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'backups_htaccess_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'backups_htaccess_notice' ) ); } } } /** * Create backups web.config file * * @param string Path to file * @return void */ public function create_backups_webconfig( $path ) { if ( ! Ai1wm_File_Webconfig::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'backups_webconfig_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'backups_webconfig_notice' ) ); } } } /** * Create backups index.php file * * @param string Path to file * @return void */ public function create_backups_index_php( $path ) { if ( ! Ai1wm_File_Index::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'backups_index_php_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'backups_index_php_notice' ) ); } } } /** * Create backups index.html file * * @param string Path to file * @return void */ public function create_backups_index_html( $path ) { if ( ! Ai1wm_File_Index::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'backups_index_html_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'backups_index_html_notice' ) ); } } } /** * Create backups robots.txt file * * @param string Path to file * @return void */ public function create_backups_robots_txt( $path ) { if ( ! Ai1wm_File_Robots::create( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'backups_robots_txt_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'backups_robots_txt_notice' ) ); } } } /** * If the "noabort" environment variable has been set, * the script will continue to run even though the connection has been broken * * @return void */ public function create_litespeed_htaccess( $path ) { if ( ! Ai1wm_File_Htaccess::litespeed( $path ) ) { if ( is_multisite() ) { return add_action( 'network_admin_notices', array( $this, 'wordpress_htaccess_notice' ) ); } else { return add_action( 'admin_notices', array( $this, 'wordpress_htaccess_notice' ) ); } } } /** * Display multisite notice * * @return void */ public function multisite_notice() { Ai1wm_Template::render( 'main/multisite-notice' ); } /** * Display notice for storage directory * * @return void */ public function storage_path_notice() { Ai1wm_Template::render( 'main/storage-path-notice' ); } /** * Display notice for index.php file in storage directory * * @return void */ public function storage_index_php_notice() { Ai1wm_Template::render( 'main/storage-index-php-notice' ); } /** * Display notice for index.html file in storage directory * * @return void */ public function storage_index_html_notice() { Ai1wm_Template::render( 'main/storage-index-html-notice' ); } /** * Display notice for backups directory * * @return void */ public function backups_path_notice() { Ai1wm_Template::render( 'main/backups-path-notice' ); } /** * Display notice for .htaccess file in backups directory * * @return void */ public function backups_htaccess_notice() { Ai1wm_Template::render( 'main/backups-htaccess-notice' ); } /** * Display notice for web.config file in backups directory * * @return void */ public function backups_webconfig_notice() { Ai1wm_Template::render( 'main/backups-webconfig-notice' ); } /** * Display notice for index.php file in backups directory * * @return void */ public function backups_index_php_notice() { Ai1wm_Template::render( 'main/backups-index-php-notice' ); } /** * Display notice for index.html file in backups directory * * @return void */ public function backups_index_html_notice() { Ai1wm_Template::render( 'main/backups-index-html-notice' ); } /** * Display notice for robots.txt file in backups directory * * @return void */ public function backups_robots_txt_notice() { Ai1wm_Template::render( 'main/backups-robots-txt-notice' ); } /** * Display notice for .htaccess file in WordPress directory * * @return void */ public function wordpress_htaccess_notice() { Ai1wm_Template::render( 'main/wordpress-htaccess-notice' ); } /** * Display notice for missing role capability * * @return void */ public function missing_role_capability_notice() { Ai1wm_Template::render( 'main/missing-role-capability-notice' ); } /** * Add links to plugin list page * * @return array */ public function plugin_row_meta( $links, $file ) { if ( $file === AI1WM_PLUGIN_BASENAME ) { $links[] = Ai1wm_Template::get_content( 'main/contact-support' ); $links[] = Ai1wm_Template::get_content( 'main/translate' ); } return $links; } /** * Register plugin menus * * @return void */ public function admin_menu() { // Top-level WP Migration menu add_menu_page( 'All-in-One WP Migration', 'All-in-One WP Migration', 'export', 'ai1wm_export', 'Ai1wm_Export_Controller::index', '', '76.295' ); // Sub-level Export menu add_submenu_page( 'ai1wm_export', __( 'Export', AI1WM_PLUGIN_NAME ), __( 'Export', AI1WM_PLUGIN_NAME ), 'export', 'ai1wm_export', 'Ai1wm_Export_Controller::index' ); // Sub-level Import menu add_submenu_page( 'ai1wm_export', __( 'Import', AI1WM_PLUGIN_NAME ), __( 'Import', AI1WM_PLUGIN_NAME ), 'import', 'ai1wm_import', 'Ai1wm_Import_Controller::index' ); // Sub-level Backups menu add_submenu_page( 'ai1wm_export', __( 'Backups', AI1WM_PLUGIN_NAME ), __( 'Backups', AI1WM_PLUGIN_NAME ) . Ai1wm_Template::get_content( 'main/backups', array( 'count' => Ai1wm_Backups::count_files() ) ), 'import', 'ai1wm_backups', 'Ai1wm_Backups_Controller::index' ); // Sub-level What's new menu add_submenu_page( 'ai1wm_export', __( 'What\'s new', AI1WM_PLUGIN_NAME ), __( 'What\'s new', AI1WM_PLUGIN_NAME ) . Ai1wm_Template::get_content( 'main/whats-new', array() ), 'import', 'ai1wm_whats_new', 'Ai1wm_Whats_New_Controller::index' ); } /** * Register scripts and styles * * @return void */ public function register_scripts_and_styles() { if ( is_rtl() ) { wp_register_style( 'ai1wm_servmask', Ai1wm_Template::asset_link( 'css/servmask.min.rtl.css' ) ); } else { wp_register_style( 'ai1wm_servmask', Ai1wm_Template::asset_link( 'css/servmask.min.css' ) ); } wp_register_script( 'ai1wm_util', Ai1wm_Template::asset_link( 'javascript/util.min.js' ), array( 'jquery' ) ); wp_register_script( 'ai1wm_settings', Ai1wm_Template::asset_link( 'javascript/settings.min.js' ), array( 'ai1wm_util' ) ); wp_localize_script( 'ai1wm_settings', 'ai1wm_locale', array( 'leave_feedback' => __( 'Leave plugin developers any feedback here', AI1WM_PLUGIN_NAME ), 'how_may_we_help_you' => __( 'How may we help you?', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_feedback' => __( 'Thanks for submitting your feedback!', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_request' => __( 'Thanks for submitting your request!', AI1WM_PLUGIN_NAME ), ) ); } /** * Enqueue scripts and styles for Export Controller * * @param string $hook Hook suffix * @return void */ public function enqueue_export_scripts_and_styles( $hook ) { if ( stripos( 'toplevel_page_ai1wm_export', $hook ) === false ) { return; } // We don't want heartbeat to occur when exporting wp_deregister_script( 'heartbeat' ); // We don't want auth check for monitoring whether the user is still logged in remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' ); if ( is_rtl() ) { wp_enqueue_style( 'ai1wm_export', Ai1wm_Template::asset_link( 'css/export.min.rtl.css' ) ); } else { wp_enqueue_style( 'ai1wm_export', Ai1wm_Template::asset_link( 'css/export.min.css' ) ); } wp_enqueue_script( 'ai1wm_export', Ai1wm_Template::asset_link( 'javascript/export.min.js' ), array( 'ai1wm_util' ) ); wp_localize_script( 'ai1wm_export', 'ai1wm_feedback', array( 'ajax' => array( 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_feedback' ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_export', 'ai1wm_export', array( 'ajax' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_export' ) ) ), ), 'status' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1, 'secret_key' => get_option( AI1WM_SECRET_KEY ) ), admin_url( 'admin-ajax.php?action=ai1wm_status' ) ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_export', 'ai1wm_locale', array( 'stop_exporting_your_website' => __( 'You are about to stop exporting your website, are you sure?', AI1WM_PLUGIN_NAME ), 'preparing_to_export' => __( 'Preparing to export...', AI1WM_PLUGIN_NAME ), 'unable_to_export' => __( 'Unable to export', AI1WM_PLUGIN_NAME ), 'unable_to_start_the_export' => __( 'Unable to start the export. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_run_the_export' => __( 'Unable to run the export. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_stop_the_export' => __( 'Unable to stop the export. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'please_wait_stopping_the_export' => __( 'Please wait, stopping the export...', AI1WM_PLUGIN_NAME ), 'close_export' => __( 'Close', AI1WM_PLUGIN_NAME ), 'stop_export' => __( 'Stop export', AI1WM_PLUGIN_NAME ), 'leave_feedback' => __( 'Leave plugin developers any feedback here', AI1WM_PLUGIN_NAME ), 'how_may_we_help_you' => __( 'How may we help you?', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_feedback' => __( 'Thanks for submitting your feedback!', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_request' => __( 'Thanks for submitting your request!', AI1WM_PLUGIN_NAME ), 'backups_count_singular' => __( 'You have %d backup', AI1WM_PLUGIN_NAME ), 'backups_count_plural' => __( 'You have %d backups', AI1WM_PLUGIN_NAME ), ) ); } /** * Enqueue scripts and styles for Import Controller * * @param string $hook Hook suffix * @return void */ public function enqueue_import_scripts_and_styles( $hook ) { if ( stripos( 'all-in-one-wp-migration_page_ai1wm_import', $hook ) === false ) { return; } // We don't want heartbeat to occur when importing wp_deregister_script( 'heartbeat' ); // We don't want auth check for monitoring whether the user is still logged in remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' ); if ( is_rtl() ) { wp_enqueue_style( 'ai1wm_import', Ai1wm_Template::asset_link( 'css/import.min.rtl.css' ) ); } else { wp_enqueue_style( 'ai1wm_import', Ai1wm_Template::asset_link( 'css/import.min.css' ) ); } wp_enqueue_script( 'ai1wm_import', Ai1wm_Template::asset_link( 'javascript/import.min.js' ), array( 'ai1wm_util' ) ); wp_localize_script( 'ai1wm_import', 'ai1wm_feedback', array( 'ajax' => array( 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_feedback' ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_import', 'ai1wm_uploader', array( 'max_file_size' => wp_max_upload_size(), 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_import' ) ) ), 'params' => array( 'priority' => 5, 'secret_key' => get_option( AI1WM_SECRET_KEY ), ), ) ); wp_localize_script( 'ai1wm_import', 'ai1wm_import', array( 'ajax' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_import' ) ) ), ), 'status' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1, 'secret_key' => get_option( AI1WM_SECRET_KEY ) ), admin_url( 'admin-ajax.php?action=ai1wm_status' ) ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_import', 'ai1wm_compatibility', array( 'messages' => Ai1wm_Compatibility::get( array() ), ) ); wp_localize_script( 'ai1wm_import', 'ai1wm_disk_space', array( 'free' => ai1wm_disk_free_space( AI1WM_STORAGE_PATH ), 'factor' => AI1WM_DISK_SPACE_FACTOR, 'extra' => AI1WM_DISK_SPACE_EXTRA, ) ); wp_localize_script( 'ai1wm_import', 'ai1wm_locale', array( 'stop_importing_your_website' => __( 'You are about to stop importing your website, are you sure?', AI1WM_PLUGIN_NAME ), 'preparing_to_import' => __( 'Preparing to import...', AI1WM_PLUGIN_NAME ), 'unable_to_import' => __( 'Unable to import', AI1WM_PLUGIN_NAME ), 'unable_to_start_the_import' => __( 'Unable to start the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_confirm_the_import' => __( 'Unable to confirm the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_check_decryption_password' => __( 'Unable to check decryption password. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_prepare_blogs_on_import' => __( 'Unable to prepare blogs on import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_stop_the_import' => __( 'Unable to stop the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'please_wait_stopping_the_import' => __( 'Please wait, stopping the import...', AI1WM_PLUGIN_NAME ), 'close_import' => __( 'Close', AI1WM_PLUGIN_NAME ), 'finish_import' => __( 'Finish', AI1WM_PLUGIN_NAME ), 'stop_import' => __( 'Stop import', AI1WM_PLUGIN_NAME ), 'confirm_import' => __( 'Proceed', AI1WM_PLUGIN_NAME ), 'confirm_disk_space' => __( 'I have enough disk space', AI1WM_PLUGIN_NAME ), 'continue_import' => __( 'Continue', AI1WM_PLUGIN_NAME ), 'please_do_not_close_this_browser' => __( 'Please do not close this browser window or your import will fail', AI1WM_PLUGIN_NAME ), 'leave_feedback' => __( 'Leave plugin developers any feedback here', AI1WM_PLUGIN_NAME ), 'how_may_we_help_you' => __( 'How may we help you?', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_feedback' => __( 'Thanks for submitting your feedback!', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_request' => __( 'Thanks for submitting your request!', AI1WM_PLUGIN_NAME ), 'backup_encrypted' => __( 'The backup is encrypted', AI1WM_PLUGIN_NAME ), 'backup_encrypted_message' => __( 'Please enter a password to import the file', AI1WM_PLUGIN_NAME ), 'submit' => __( 'Submit', AI1WM_PLUGIN_NAME ), 'enter_password' => __( 'Enter a password', AI1WM_PLUGIN_NAME ), 'repeat_password' => __( 'Repeat the password', AI1WM_PLUGIN_NAME ), 'passwords_do_not_match' => __( 'The passwords do not match', AI1WM_PLUGIN_NAME ), 'import_from_file' => sprintf( __( 'Your file exceeds the maximum upload size for this site: %s
%s%s', AI1WM_PLUGIN_NAME ), esc_html( ai1wm_size_format( wp_max_upload_size() ) ), __( 'How-to: Increase maximum upload file size or ', AI1WM_PLUGIN_NAME ), __( 'Get unlimited', AI1WM_PLUGIN_NAME ) ), 'invalid_archive_extension' => __( 'The file type that you have tried to upload is not compatible with this plugin. ' . 'Please ensure that your file is a .wpress file that was created with the All-in-One WP migration plugin. ' . 'Technical details', AI1WM_PLUGIN_NAME ), 'upgrade' => sprintf( __( 'The file that you are trying to import is over the maximum upload file size limit of %s.
' . 'You can remove this restriction by purchasing our ' . 'Unlimited Extension.', AI1WM_PLUGIN_NAME ), '512MB' ), 'out_of_disk_space' => __( 'There is not enough space available on the disk.
' . 'Free up %s of disk space.', AI1WM_PLUGIN_NAME ), ) ); } /** * Enqueue scripts and styles for Backups Controller * * @param string $hook Hook suffix * @return void */ public function enqueue_backups_scripts_and_styles( $hook ) { if ( stripos( 'all-in-one-wp-migration_page_ai1wm_backups', $hook ) === false ) { return; } // We don't want heartbeat to occur when restoring wp_deregister_script( 'heartbeat' ); // We don't want auth check for monitoring whether the user is still logged in remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' ); if ( is_rtl() ) { wp_enqueue_style( 'ai1wm_backups', Ai1wm_Template::asset_link( 'css/backups.min.rtl.css' ) ); } else { wp_enqueue_style( 'ai1wm_backups', Ai1wm_Template::asset_link( 'css/backups.min.css' ) ); } wp_enqueue_script( 'ai1wm_backups', Ai1wm_Template::asset_link( 'javascript/backups.min.js' ), array( 'ai1wm_util' ) ); wp_localize_script( 'ai1wm_backups', 'ai1wm_feedback', array( 'ajax' => array( 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_feedback' ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_backups', 'ai1wm_import', array( 'ajax' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_import' ) ) ), ), 'status' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1, 'secret_key' => get_option( AI1WM_SECRET_KEY ) ), admin_url( 'admin-ajax.php?action=ai1wm_status' ) ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_backups', 'ai1wm_export', array( 'ajax' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_export' ) ) ), ), 'status' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1, 'secret_key' => get_option( AI1WM_SECRET_KEY ) ), admin_url( 'admin-ajax.php?action=ai1wm_status' ) ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_backups', 'ai1wm_backups', array( 'ajax' => array( 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_backups' ) ), ), 'backups' => array( 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_backup_list' ) ), ), 'labels' => array( 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_add_backup_label' ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_backups', 'ai1wm_disk_space', array( 'free' => ai1wm_disk_free_space( AI1WM_STORAGE_PATH ), 'factor' => AI1WM_DISK_SPACE_FACTOR, 'extra' => AI1WM_DISK_SPACE_EXTRA, ) ); wp_localize_script( 'ai1wm_backups', 'ai1wm_list', array( 'ajax' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_backup_list_content' ) ) ), ), 'download' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_import' => 1 ), admin_url( 'admin-ajax.php?action=ai1wm_backup_download_file' ) ) ), ), 'secret_key' => get_option( AI1WM_SECRET_KEY ), ) ); wp_localize_script( 'ai1wm_backups', 'ai1wm_locale', array( 'stop_exporting_your_website' => __( 'You are about to stop exporting your website, are you sure?', AI1WM_PLUGIN_NAME ), 'preparing_to_export' => __( 'Preparing to export...', AI1WM_PLUGIN_NAME ), 'unable_to_export' => __( 'Unable to export', AI1WM_PLUGIN_NAME ), 'unable_to_start_the_export' => __( 'Unable to start the export. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_run_the_export' => __( 'Unable to run the export. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_stop_the_export' => __( 'Unable to stop the export. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'please_wait_stopping_the_export' => __( 'Please wait, stopping the export...', AI1WM_PLUGIN_NAME ), 'close_export' => __( 'Close', AI1WM_PLUGIN_NAME ), 'stop_export' => __( 'Stop export', AI1WM_PLUGIN_NAME ), 'stop_importing_your_website' => __( 'You are about to stop importing your website, are you sure?', AI1WM_PLUGIN_NAME ), 'preparing_to_import' => __( 'Preparing to import...', AI1WM_PLUGIN_NAME ), 'unable_to_import' => __( 'Unable to import', AI1WM_PLUGIN_NAME ), 'unable_to_start_the_import' => __( 'Unable to start the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_confirm_the_import' => __( 'Unable to confirm the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_prepare_blogs_on_import' => __( 'Unable to prepare blogs on import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'unable_to_stop_the_import' => __( 'Unable to stop the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ), 'please_wait_stopping_the_import' => __( 'Please wait, stopping the import...', AI1WM_PLUGIN_NAME ), 'finish_import' => __( 'Finish', AI1WM_PLUGIN_NAME ), 'close_import' => __( 'Close', AI1WM_PLUGIN_NAME ), 'stop_import' => __( 'Stop import', AI1WM_PLUGIN_NAME ), 'confirm_import' => __( 'Proceed', AI1WM_PLUGIN_NAME ), 'confirm_disk_space' => __( 'I have enough disk space', AI1WM_PLUGIN_NAME ), 'continue_import' => __( 'Continue', AI1WM_PLUGIN_NAME ), 'please_do_not_close_this_browser' => __( 'Please do not close this browser window or your import will fail', AI1WM_PLUGIN_NAME ), 'leave_feedback' => __( 'Leave plugin developers any feedback here', AI1WM_PLUGIN_NAME ), 'how_may_we_help_you' => __( 'How may we help you?', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_feedback' => __( 'Thanks for submitting your feedback!', AI1WM_PLUGIN_NAME ), 'thanks_for_submitting_your_request' => __( 'Thanks for submitting your request!', AI1WM_PLUGIN_NAME ), 'want_to_delete_this_file' => __( 'Are you sure you want to delete this file?', AI1WM_PLUGIN_NAME ), 'unlimited' => __( 'Restoring a backup is available via Unlimited extension. Get it here', AI1WM_PLUGIN_NAME ), 'restore_from_file' => __( '"Restore" functionality is available in a paid extension.
You could also download the backup and then use "Import from file".', AI1WM_PLUGIN_NAME ), 'out_of_disk_space' => __( 'There is not enough space available on the disk.
' . 'Free up %s of disk space.', AI1WM_PLUGIN_NAME ), 'backups_count_singular' => __( 'You have %d backup', AI1WM_PLUGIN_NAME ), 'backups_count_plural' => __( 'You have %d backups', AI1WM_PLUGIN_NAME ), 'archive_browser_error' => __( 'Error', AI1WM_PLUGIN_NAME ), 'archive_browser_list_error' => __( 'Error while reading backup content', AI1WM_PLUGIN_NAME ), 'archive_browser_download_error' => __( 'Error while downloading file', AI1WM_PLUGIN_NAME ), 'archive_browser_title' => __( 'List the content of the backup', AI1WM_PLUGIN_NAME ), 'progress_bar_title' => __( 'Reading...', AI1WM_PLUGIN_NAME ), 'backup_encrypted' => __( 'The backup is encrypted', AI1WM_PLUGIN_NAME ), 'backup_encrypted_message' => __( 'Please enter a password to import the file', AI1WM_PLUGIN_NAME ), 'submit' => __( 'Submit', AI1WM_PLUGIN_NAME ), 'enter_password' => __( 'Enter a password', AI1WM_PLUGIN_NAME ), 'repeat_password' => __( 'Repeat the password', AI1WM_PLUGIN_NAME ), 'passwords_do_not_match' => __( 'The passwords do not match', AI1WM_PLUGIN_NAME ), ) ); } /** * Enqueue scripts and styles for What's new Controller * * @param string $hook Hook suffix * @return void */ public function enqueue_whats_new_scripts_and_styles( $hook ) { if ( stripos( 'all-in-one-wp-migration_page_ai1wm_whats_new', $hook ) === false ) { return; } // We don't want heartbeat to occur when restoring wp_deregister_script( 'heartbeat' ); // We don't want auth check for monitoring whether the user is still logged in remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' ); if ( is_rtl() ) { wp_enqueue_style( 'ai1wm_whats_new', Ai1wm_Template::asset_link( 'css/whats-new.min.rtl.css' ) ); } else { wp_enqueue_style( 'ai1wm_whats_new', Ai1wm_Template::asset_link( 'css/whats-new.min.css' ) ); } } /** * Enqueue scripts and styles for Updater Controller * * @param string $hook Hook suffix * @return void */ public function enqueue_updater_scripts_and_styles( $hook ) { if ( 'plugins.php' !== strtolower( $hook ) ) { return; } if ( is_rtl() ) { wp_enqueue_style( 'ai1wm_updater', Ai1wm_Template::asset_link( 'css/updater.min.rtl.css' ) ); } else { wp_enqueue_style( 'ai1wm_updater', Ai1wm_Template::asset_link( 'css/updater.min.css' ) ); } wp_enqueue_script( 'ai1wm_updater', Ai1wm_Template::asset_link( 'javascript/updater.min.js' ), array( 'ai1wm_util' ) ); wp_localize_script( 'ai1wm_updater', 'ai1wm_updater', array( 'ajax' => array( 'url' => wp_make_link_relative( add_query_arg( array( 'ai1wm_nonce' => wp_create_nonce( 'ai1wm_updater' ) ), admin_url( 'admin-ajax.php?action=ai1wm_updater' ) ) ), ), ) ); wp_localize_script( 'ai1wm_updater', 'ai1wm_locale', array( 'check_for_updates' => __( 'Check for updates', AI1WM_PLUGIN_NAME ), 'invalid_purchase_id' => __( 'Your purchase ID is invalid, please contact us', AI1WM_PLUGIN_NAME ), ) ); } /** * Outputs menu icon between head tags * * @return void */ public function admin_head() { global $wp_version; // Admin header Ai1wm_Template::render( 'main/admin-head', array( 'version' => $wp_version ) ); } /** * Register initial parameters * * @return void */ public function init() { // Set username if ( isset( $_SERVER['PHP_AUTH_USER'] ) ) { update_option( AI1WM_AUTH_USER, $_SERVER['PHP_AUTH_USER'] ); } elseif ( isset( $_SERVER['REMOTE_USER'] ) ) { update_option( AI1WM_AUTH_USER, $_SERVER['REMOTE_USER'] ); } // Set password if ( isset( $_SERVER['PHP_AUTH_PW'] ) ) { update_option( AI1WM_AUTH_PASSWORD, $_SERVER['PHP_AUTH_PW'] ); } // Check for updates if ( isset( $_GET['ai1wm_check_for_updates'] ) ) { if ( check_admin_referer( 'ai1wm_check_for_updates', 'ai1wm_nonce' ) ) { if ( current_user_can( 'update_plugins' ) ) { Ai1wm_Updater::check_for_updates(); } } } } /** * Register initial router * * @return void */ public function router() { // Public actions add_action( 'wp_ajax_nopriv_ai1wm_export', 'Ai1wm_Export_Controller::export' ); add_action( 'wp_ajax_nopriv_ai1wm_import', 'Ai1wm_Import_Controller::import' ); add_action( 'wp_ajax_nopriv_ai1wm_status', 'Ai1wm_Status_Controller::status' ); add_action( 'wp_ajax_nopriv_ai1wm_backups', 'Ai1wm_Backups_Controller::delete' ); add_action( 'wp_ajax_nopriv_ai1wm_feedback', 'Ai1wm_Feedback_Controller::feedback' ); add_action( 'wp_ajax_nopriv_ai1wm_add_backup_label', 'Ai1wm_Backups_Controller::add_label' ); add_action( 'wp_ajax_nopriv_ai1wm_backup_list', 'Ai1wm_Backups_Controller::backup_list' ); // Private actions add_action( 'wp_ajax_ai1wm_export', 'Ai1wm_Export_Controller::export' ); add_action( 'wp_ajax_ai1wm_import', 'Ai1wm_Import_Controller::import' ); add_action( 'wp_ajax_ai1wm_status', 'Ai1wm_Status_Controller::status' ); add_action( 'wp_ajax_ai1wm_backups', 'Ai1wm_Backups_Controller::delete' ); add_action( 'wp_ajax_ai1wm_feedback', 'Ai1wm_Feedback_Controller::feedback' ); add_action( 'wp_ajax_ai1wm_add_backup_label', 'Ai1wm_Backups_Controller::add_label' ); add_action( 'wp_ajax_ai1wm_backup_list', 'Ai1wm_Backups_Controller::backup_list' ); add_action( 'wp_ajax_ai1wm_backup_list_content', 'Ai1wm_Backups_Controller::backup_list_content' ); add_action( 'wp_ajax_ai1wm_backup_download_file', 'Ai1wm_Backups_Controller::download_file' ); // Update actions if ( current_user_can( 'update_plugins' ) ) { add_action( 'wp_ajax_ai1wm_updater', 'Ai1wm_Updater_Controller::updater' ); } } /** * Enable WP importing * * @return void */ public function wp_importing() { if ( isset( $_GET['ai1wm_import'] ) ) { if ( ! defined( 'WP_IMPORTING' ) ) { define( 'WP_IMPORTING', true ); } } } /** * Add custom cron schedules * * @param array $schedules List of schedules * @return array */ public function add_cron_schedules( $schedules ) { $schedules['weekly'] = array( 'display' => __( 'Weekly', AI1WM_PLUGIN_NAME ), 'interval' => 60 * 60 * 24 * 7, ); $schedules['monthly'] = array( 'display' => __( 'Monthly', AI1WM_PLUGIN_NAME ), 'interval' => ( strtotime( '+1 month' ) - time() ), ); return $schedules; } } PK'ZP-controller/class-ai1wm-updater-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Updater_Controller { public static function plugins_api( $result, $action = null, $args = null ) { return Ai1wm_Updater::plugins_api( $result, $action, $args ); } public static function pre_update_plugins( $transient ) { if ( empty( $transient->checked ) ) { return $transient; } // Check for updates every 11 hours if ( ( $last_check_for_updates = get_site_transient( AI1WM_LAST_CHECK_FOR_UPDATES ) ) ) { if ( ( time() - $last_check_for_updates ) < 11 * HOUR_IN_SECONDS ) { return $transient; } } // Set last check for updates set_site_transient( AI1WM_LAST_CHECK_FOR_UPDATES, time() ); // Check for updates Ai1wm_Updater::check_for_updates(); return $transient; } public static function update_plugins( $transient ) { return Ai1wm_Updater::update_plugins( $transient ); } public static function check_for_updates() { return Ai1wm_Updater::check_for_updates(); } public static function plugin_row_meta( $plugin_meta, $plugin_file ) { return Ai1wm_Updater::plugin_row_meta( $plugin_meta, $plugin_file ); } public static function in_plugin_update_message( $plugin_data, $response ) { $updater = get_option( AI1WM_UPDATER, array() ); // Get updater details if ( isset( $updater[ $plugin_data['slug'] ]['update_message'] ) ) { Ai1wm_Template::render( 'updater/update', array( 'message' => $updater[ $plugin_data['slug'] ]['update_message'] ) ); } } public static function updater( $params = array() ) { if ( check_ajax_referer( 'ai1wm_updater', 'ai1wm_nonce' ) ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_POST ); } // Set uuid $uuid = null; if ( isset( $params['ai1wm_uuid'] ) ) { $uuid = trim( $params['ai1wm_uuid'] ); } // Set extension $extension = null; if ( isset( $params['ai1wm_extension'] ) ) { $extension = trim( $params['ai1wm_extension'] ); } $extensions = Ai1wm_Extensions::get(); // Verify whether extension exists if ( isset( $extensions[ $extension ] ) ) { update_option( $extensions[ $extension ]['key'], $uuid ); } } } } PK'Z/controller/class-ai1wm-whats-new-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Whats_New_Controller { public static function index() { Ai1wm_Template::render( 'whats-new/index' ); } } PK'ZL5-controller/class-ai1wm-backups-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Backups_Controller { public static function index() { Ai1wm_Template::render( 'backups/index', array( 'backups' => Ai1wm_Backups::get_files(), 'labels' => Ai1wm_Backups::get_labels(), 'downloadable' => Ai1wm_Backups::are_downloadable(), 'username' => get_option( AI1WM_AUTH_USER ), 'password' => get_option( AI1WM_AUTH_PASSWORD ), ) ); } public static function delete( $params = array() ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_POST ); } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } // Set archive $archive = null; if ( isset( $params['archive'] ) ) { $archive = trim( $params['archive'] ); } try { // Ensure that unauthorized people cannot access delete action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } try { Ai1wm_Backups::delete_file( $archive ); Ai1wm_Backups::delete_label( $archive ); } catch ( Ai1wm_Backups_Exception $e ) { ai1wm_json_response( array( 'errors' => array( $e->getMessage() ) ) ); exit; } ai1wm_json_response( array( 'errors' => array() ) ); exit; } public static function add_label( $params = array() ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_POST ); } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } // Set archive $archive = null; if ( isset( $params['archive'] ) ) { $archive = trim( $params['archive'] ); } // Set backup label $label = null; if ( isset( $params['label'] ) ) { $label = trim( $params['label'] ); } try { // Ensure that unauthorized people cannot access add label action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } try { Ai1wm_Backups::set_label( $archive, $label ); } catch ( Ai1wm_Backups_Exception $e ) { ai1wm_json_response( array( 'errors' => array( $e->getMessage() ) ) ); exit; } ai1wm_json_response( array( 'errors' => array() ) ); exit; } public static function backup_list( $params = array() ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_GET ); } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } try { // Ensure that unauthorized people cannot access backups list action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } Ai1wm_Template::render( 'backups/backups-list', array( 'backups' => Ai1wm_Backups::get_files(), 'labels' => Ai1wm_Backups::get_labels(), 'downloadable' => Ai1wm_Backups::are_downloadable(), ) ); exit; } public static function backup_list_content( $params = array() ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_POST ); } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } try { // Ensure that unauthorized people cannot access backups list action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } try { $archive = new Ai1wm_Extractor( ai1wm_backup_path( $params ) ); ai1wm_json_response( $archive->list_files() ); } catch ( Exception $e ) { ai1wm_json_response( array( 'error' => __( 'Unable to list backup content', AI1WM_PLUGIN_NAME ), ) ); } exit; } public static function download_file( $params = array() ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_POST ); } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } try { // Ensure that unauthorized people cannot access backups list action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } $chunk_size = 1024 * 1024; $read = 0; try { if ( $handle = ai1wm_open( ai1wm_backup_path( $params ), 'r' ) ) { ai1wm_seek( $handle, $params['offset'] ); while ( ! feof( $handle ) && $read < $params['file_size'] ) { $buffer = ai1wm_read( $handle, min( $chunk_size, $params['file_size'] - $read ) ); echo $buffer; ob_flush(); flush(); $read += strlen( $buffer ); } ai1wm_close( $handle ); } } catch ( Exception $exception ) { } exit; } } PK'Z*.controller/class-ai1wm-feedback-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Feedback_Controller { public static function feedback( $params = array() ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_POST ); } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } // Set type $type = null; if ( isset( $params['ai1wm_type'] ) ) { $type = trim( $params['ai1wm_type'] ); } // Set e-mail $email = null; if ( isset( $params['ai1wm_email'] ) ) { $email = trim( $params['ai1wm_email'] ); } // Set message $message = null; if ( isset( $params['ai1wm_message'] ) ) { $message = trim( $params['ai1wm_message'] ); } // Set terms $terms = false; if ( isset( $params['ai1wm_terms'] ) ) { $terms = (bool) $params['ai1wm_terms']; } try { // Ensure that unauthorized people cannot access feedback action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } $extensions = Ai1wm_Extensions::get(); // Exclude File Extension if ( defined( 'AI1WMTE_PLUGIN_NAME' ) ) { unset( $extensions[ AI1WMTE_PLUGIN_NAME ] ); } $purchases = array(); foreach ( $extensions as $extension ) { if ( ( $uuid = get_option( $extension['key'] ) ) ) { $purchases[] = $uuid; } } try { Ai1wm_Feedback::add( $type, $email, $message, $terms, implode( PHP_EOL, $purchases ) ); } catch ( Ai1wm_Feedback_Exception $e ) { ai1wm_json_response( array( 'errors' => array( $e->getMessage() ) ) ); exit; } ai1wm_json_response( array( 'errors' => array() ) ); exit; } } PK'Z~ ,controller/class-ai1wm-status-controller.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Status_Controller { public static function status( $params = array() ) { ai1wm_setup_environment(); // Set params if ( empty( $params ) ) { $params = stripslashes_deep( $_GET ); } // Set secret key $secret_key = null; if ( isset( $params['secret_key'] ) ) { $secret_key = trim( $params['secret_key'] ); } try { // Ensure that unauthorized people cannot access status action ai1wm_verify_secret_key( $secret_key ); } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) { exit; } ai1wm_json_response( get_option( AI1WM_STATUS, array() ) ); exit; } } PK'ZZmodel/class-ai1wm-backups.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Backups { /** * Get all backup files * * @return array */ public static function get_files() { $backups = array(); try { // Iterate over directory $iterator = new Ai1wm_Recursive_Directory_Iterator( AI1WM_BACKUPS_PATH ); // Filter by extensions $iterator = new Ai1wm_Recursive_Extension_Filter( $iterator, array( 'wpress' ) ); // Recursively iterate over directory $iterator = new Ai1wm_Recursive_Iterator_Iterator( $iterator, RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD ); // Get backup files foreach ( $iterator as $item ) { try { if ( ai1wm_is_filesize_supported( $item->getPathname() ) ) { $backups[] = array( 'path' => $iterator->getSubPath(), 'filename' => $iterator->getSubPathname(), 'mtime' => $iterator->getMTime(), 'size' => $iterator->getSize(), ); } else { $backups[] = array( 'path' => $iterator->getSubPath(), 'filename' => $iterator->getSubPathname(), 'mtime' => $iterator->getMTime(), 'size' => null, ); } } catch ( Exception $e ) { $backups[] = array( 'path' => $iterator->getSubPath(), 'filename' => $iterator->getSubPathname(), 'mtime' => null, 'size' => null, ); } } // Sort backups modified date usort( $backups, 'Ai1wm_Backups::compare' ); } catch ( Exception $e ) { } return $backups; } /** * Count all backup files * * @return integer */ public static function count_files() { return count( Ai1wm_Backups::get_files() ); } /** * Delete backup file * * @param string $file File name * @return boolean */ public static function delete_file( $file ) { if ( ai1wm_is_filename_supported( $file ) ) { return @unlink( ai1wm_backup_path( array( 'archive' => $file ) ) ); } } /** * Get all backup labels * * @return array */ public static function get_labels() { return get_option( AI1WM_BACKUPS_LABELS, array() ); } /** * Set backup label * * @param string $file File name * @param string $label File label * @return boolean */ public static function set_label( $file, $label ) { if ( ( $labels = get_option( AI1WM_BACKUPS_LABELS, array() ) ) !== false ) { $labels[ $file ] = $label; } return update_option( AI1WM_BACKUPS_LABELS, $labels ); } /** * Delete backup label * * @param string $file File name * @return boolean */ public static function delete_label( $file ) { if ( ( $labels = get_option( AI1WM_BACKUPS_LABELS, array() ) ) !== false ) { unset( $labels[ $file ] ); } return update_option( AI1WM_BACKUPS_LABELS, $labels ); } /** * Compare backup files by modified time * * @param array $a File item A * @param array $b File item B * @return integer */ public static function compare( $a, $b ) { if ( $a['mtime'] === $b['mtime'] ) { return 0; } return ( $a['mtime'] > $b['mtime'] ) ? - 1 : 1; } /** * Check if backups are downloadable */ public static function are_downloadable() { static $downloadable = null; if ( is_null( $downloadable ) ) { $downloadable = Ai1wm_Backups::are_in_wp_content_folder() || strpos( AI1WM_BACKUPS_PATH, untrailingslashit( ABSPATH ) ) === 0; } return $downloadable; } public static function are_in_wp_content_folder() { static $in_wp_content = null; if ( is_null( $in_wp_content ) ) { $in_wp_content = strpos( AI1WM_BACKUPS_PATH, untrailingslashit( WP_CONTENT_DIR ) ) === 0; } return $in_wp_content; } } PK'Z,& model/class-ai1wm-template.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Template extends Bandar { /** * Renders a file and returns its contents * * @param string $view View to render * @param array $args Set of arguments * @param string|bool $path Path to template * @return string Rendered view */ public static function render( $view, $args = array(), $path = false ) { parent::render( $view, $args, $path ); } /** * Returns link to an asset file * * @param string $asset Asset file * @param string $prefix Asset prefix * @return string Asset URL */ public static function asset_link( $asset, $prefix = 'AI1WM' ) { return constant( $prefix . '_URL' ) . '/lib/view/assets/' . $asset . '?v=' . constant( $prefix . '_VERSION' ); } /** * Renders a file and gets its contents * * @param string $view View to render * @param array $args Set of arguments * @param string|bool $path Path to template * @return string Rendered view */ public static function get_content( $view, $args = array(), $path = false ) { return parent::getTemplateContent( $view, $args, $path ); } } PK'Z )model/import/class-ai1wm-import-clean.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Clean { public static function execute( $params ) { global $wpdb; // Get database client if ( empty( $wpdb->use_mysqli ) ) { $mysql = new Ai1wm_Database_Mysql( $wpdb ); } else { $mysql = new Ai1wm_Database_Mysqli( $wpdb ); } // Flush mainsite tables $mysql->add_table_prefix_filter( ai1wm_table_prefix( 'mainsite' ) ); $mysql->flush(); // Delete storage files Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); // Exit in console if ( defined( 'WP_CLI' ) ) { return $params; } exit; } } PK'Zuu,model/import/class-ai1wm-import-database.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Database { public static function execute( $params, Ai1wm_Database $mysql = null ) { global $wpdb; // Skip database import if ( ! is_file( ai1wm_database_path( $params ) ) ) { return $params; } // Set query offset if ( isset( $params['query_offset'] ) ) { $query_offset = (int) $params['query_offset']; } else { $query_offset = 0; } // Set total queries size if ( isset( $params['total_queries_size'] ) ) { $total_queries_size = (int) $params['total_queries_size']; } else { $total_queries_size = 1; } // Read blogs.json file $handle = ai1wm_open( ai1wm_blogs_path( $params ), 'r' ); // Parse blogs.json file $blogs = ai1wm_read( $handle, filesize( ai1wm_blogs_path( $params ) ) ); $blogs = json_decode( $blogs, true ); // Close handle ai1wm_close( $handle ); // Read package.json file $handle = ai1wm_open( ai1wm_package_path( $params ), 'r' ); // Parse package.json file $config = ai1wm_read( $handle, filesize( ai1wm_package_path( $params ) ) ); $config = json_decode( $config, true ); // Close handle ai1wm_close( $handle ); // What percent of queries have we processed? $progress = (int) ( ( $query_offset / $total_queries_size ) * 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Restoring database...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); $old_replace_values = $old_replace_raw_values = array(); $new_replace_values = $new_replace_raw_values = array(); // Get Blog URLs foreach ( $blogs as $blog ) { // Handle old and new sites dir style if ( defined( 'UPLOADBLOGSDIR' ) ) { // Get plain Files Path if ( ! in_array( ai1wm_blog_files_url( $blog['Old']['BlogID'] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_blog_files_url( $blog['Old']['BlogID'] ); $new_replace_values[] = ai1wm_blog_files_url( $blog['New']['BlogID'] ); } // Get URL encoded Files Path if ( ! in_array( urlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = urlencode( ai1wm_blog_files_url( $blog['New']['BlogID'] ) ); } // Get URL raw encoded Files Path if ( ! in_array( rawurlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = rawurlencode( ai1wm_blog_files_url( $blog['New']['BlogID'] ) ); } // Get JSON escaped Files Path if ( ! in_array( addcslashes( ai1wm_blog_files_url( $blog['Old']['BlogID'] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_blog_files_url( $blog['Old']['BlogID'] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_blog_files_url( $blog['New']['BlogID'] ), '/' ); } // Get plain Sites Path if ( ! in_array( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_blog_sites_url( $blog['Old']['BlogID'] ); $new_replace_values[] = ai1wm_blog_files_url( $blog['New']['BlogID'] ); } // Get URL encoded Sites Path if ( ! in_array( urlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = urlencode( ai1wm_blog_files_url( $blog['New']['BlogID'] ) ); } // Get URL raw encoded Sites Path if ( ! in_array( rawurlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = rawurlencode( ai1wm_blog_files_url( $blog['New']['BlogID'] ) ); } // Get JSON escaped Sites Path if ( ! in_array( addcslashes( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_blog_files_url( $blog['New']['BlogID'] ), '/' ); } } else { // Get plain Files Path if ( ! in_array( ai1wm_blog_files_url( $blog['Old']['BlogID'] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_blog_files_url( $blog['Old']['BlogID'] ); $new_replace_values[] = ai1wm_blog_uploads_url( $blog['New']['BlogID'] ); } // Get URL encoded Files Path if ( ! in_array( urlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = urlencode( ai1wm_blog_uploads_url( $blog['New']['BlogID'] ) ); } // Get URL raw encoded Files Path if ( ! in_array( rawurlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_blog_files_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = rawurlencode( ai1wm_blog_uploads_url( $blog['New']['BlogID'] ) ); } // Get JSON escaped Files Path if ( ! in_array( addcslashes( ai1wm_blog_files_url( $blog['Old']['BlogID'] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_blog_files_url( $blog['Old']['BlogID'] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_blog_uploads_url( $blog['New']['BlogID'] ), '/' ); } // Get plain Sites Path if ( ! in_array( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_blog_sites_url( $blog['Old']['BlogID'] ); $new_replace_values[] = ai1wm_blog_uploads_url( $blog['New']['BlogID'] ); } // Get URL encoded Sites Path if ( ! in_array( urlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = urlencode( ai1wm_blog_uploads_url( $blog['New']['BlogID'] ) ); } // Get URL raw encoded Sites Path if ( ! in_array( rawurlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ) ); $new_replace_values[] = rawurlencode( ai1wm_blog_uploads_url( $blog['New']['BlogID'] ) ); } // Get JSON escaped Sites Path if ( ! in_array( addcslashes( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_blog_sites_url( $blog['Old']['BlogID'] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_blog_uploads_url( $blog['New']['BlogID'] ), '/' ); } } $site_urls = array(); // Add Site URL if ( ! empty( $blog['Old']['SiteURL'] ) ) { $site_urls[] = $blog['Old']['SiteURL']; } // Add Internal Site URL if ( ! empty( $blog['Old']['InternalSiteURL'] ) ) { if ( parse_url( $blog['Old']['InternalSiteURL'], PHP_URL_SCHEME ) && parse_url( $blog['Old']['InternalSiteURL'], PHP_URL_HOST ) ) { $site_urls[] = $blog['Old']['InternalSiteURL']; } } // Get Site URL foreach ( $site_urls as $site_url ) { // Get www URL if ( stripos( $site_url, '//www.' ) !== false ) { $site_url_www_inversion = str_ireplace( '//www.', '//', $site_url ); } else { $site_url_www_inversion = str_ireplace( '//', '//www.', $site_url ); } // Replace Site URL foreach ( array( $site_url, $site_url_www_inversion ) as $url ) { // Get domain $old_domain = parse_url( $url, PHP_URL_HOST ); $new_domain = parse_url( $blog['New']['SiteURL'], PHP_URL_HOST ); // Get path $old_path = parse_url( $url, PHP_URL_PATH ); $new_path = parse_url( $blog['New']['SiteURL'], PHP_URL_PATH ); // Get scheme $new_scheme = parse_url( $blog['New']['SiteURL'], PHP_URL_SCHEME ); // Add domain and path if ( ! in_array( sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ), $old_replace_raw_values ) ) { $old_replace_raw_values[] = sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ); $new_replace_raw_values[] = sprintf( "'%s','%s'", $new_domain, trailingslashit( $new_path ) ); } // Add domain and path with single quote if ( ! in_array( sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( "='%s%s", $new_domain, untrailingslashit( $new_path ) ); } // Add domain and path with double quote if ( ! in_array( sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( '="%s%s', $new_domain, untrailingslashit( $new_path ) ); } // Add Site URL scheme $old_schemes = array( 'http', 'https', '' ); $new_schemes = array( $new_scheme, $new_scheme, '' ); // Replace Site URL scheme for ( $i = 0; $i < count( $old_schemes ); $i++ ) { // Handle old and new sites dir style if ( ! defined( 'UPLOADBLOGSDIR' ) ) { // Add plain Uploads URL if ( ! in_array( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ); } // Add URL encoded Uploads URL if ( ! in_array( urlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ) ); } // Add URL raw encoded Uploads URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ) ); } // Add JSON escaped Uploads URL if ( ! in_array( addcslashes( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ), '/' ); } } // Add plain Site URL if ( ! in_array( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( untrailingslashit( $blog['New']['SiteURL'] ), $new_schemes[ $i ] ); } // Add URL encoded Site URL if ( ! in_array( urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( $blog['New']['SiteURL'] ), $new_schemes[ $i ] ) ); } // Add URL raw encoded Site URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( $blog['New']['SiteURL'] ), $new_schemes[ $i ] ) ); } // Add JSON escaped Site URL if ( ! in_array( addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( $blog['New']['SiteURL'] ), $new_schemes[ $i ] ), '/' ); } } // Add email if ( ! isset( $config['NoEmailReplace'] ) ) { if ( ! in_array( sprintf( '@%s', $old_domain ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '@%s', $old_domain ); $new_replace_values[] = str_ireplace( '@www.', '@', sprintf( '@%s', $new_domain ) ); } } } } $home_urls = array(); // Add Home URL if ( ! empty( $blog['Old']['HomeURL'] ) ) { $home_urls[] = $blog['Old']['HomeURL']; } // Add Internal Home URL if ( ! empty( $blog['Old']['InternalHomeURL'] ) ) { if ( parse_url( $blog['Old']['InternalHomeURL'], PHP_URL_SCHEME ) && parse_url( $blog['Old']['InternalHomeURL'], PHP_URL_HOST ) ) { $home_urls[] = $blog['Old']['InternalHomeURL']; } } // Get Home URL foreach ( $home_urls as $home_url ) { // Get www URL if ( stripos( $home_url, '//www.' ) !== false ) { $home_url_www_inversion = str_ireplace( '//www.', '//', $home_url ); } else { $home_url_www_inversion = str_ireplace( '//', '//www.', $home_url ); } // Replace Home URL foreach ( array( $home_url, $home_url_www_inversion ) as $url ) { // Get domain $old_domain = parse_url( $url, PHP_URL_HOST ); $new_domain = parse_url( $blog['New']['HomeURL'], PHP_URL_HOST ); // Get path $old_path = parse_url( $url, PHP_URL_PATH ); $new_path = parse_url( $blog['New']['HomeURL'], PHP_URL_PATH ); // Get scheme $new_scheme = parse_url( $blog['New']['HomeURL'], PHP_URL_SCHEME ); // Add domain and path if ( ! in_array( sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ), $old_replace_raw_values ) ) { $old_replace_raw_values[] = sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ); $new_replace_raw_values[] = sprintf( "'%s','%s'", $new_domain, trailingslashit( $new_path ) ); } // Add domain and path with single quote if ( ! in_array( sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( "='%s%s", $new_domain, untrailingslashit( $new_path ) ); } // Add domain and path with double quote if ( ! in_array( sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( '="%s%s', $new_domain, untrailingslashit( $new_path ) ); } // Set Home URL scheme $old_schemes = array( 'http', 'https', '' ); $new_schemes = array( $new_scheme, $new_scheme, '' ); // Replace Home URL scheme for ( $i = 0; $i < count( $old_schemes ); $i++ ) { // Handle old and new sites dir style if ( ! defined( 'UPLOADBLOGSDIR' ) ) { // Add plain Uploads URL if ( ! in_array( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ); } // Add URL encoded Uploads URL if ( ! in_array( urlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ) ); } // Add URL raw encoded Uploads URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ) ); } // Add JSON escaped Uploads URL if ( ! in_array( addcslashes( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( sprintf( '%s/files/', untrailingslashit( $url ) ), $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ), '/' ); } } // Add plain Home URL if ( ! in_array( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( untrailingslashit( $blog['New']['HomeURL'] ), $new_schemes[ $i ] ); } // Add URL encoded Home URL if ( ! in_array( urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( $blog['New']['HomeURL'] ), $new_schemes[ $i ] ) ); } // Add URL raw encoded Home URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( $blog['New']['HomeURL'] ), $new_schemes[ $i ] ) ); } // Add JSON escaped Home URL if ( ! in_array( addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( $blog['New']['HomeURL'] ), $new_schemes[ $i ] ), '/' ); } } // Add email if ( ! isset( $config['NoEmailReplace'] ) ) { if ( ! in_array( sprintf( '@%s', $old_domain ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '@%s', $old_domain ); $new_replace_values[] = str_ireplace( '@www.', '@', sprintf( '@%s', $new_domain ) ); } } } } $uploads_urls = array(); // Add Uploads URL if ( ! empty( $blog['Old']['WordPress']['UploadsURL'] ) ) { $uploads_urls[] = $blog['Old']['WordPress']['UploadsURL']; } // Get Uploads URL foreach ( $uploads_urls as $uploads_url ) { // Get www URL if ( stripos( $uploads_url, '//www.' ) !== false ) { $uploads_url_www_inversion = str_ireplace( '//www.', '//', $uploads_url ); } else { $uploads_url_www_inversion = str_ireplace( '//', '//www.', $uploads_url ); } // Replace Uploads URL foreach ( array( $uploads_url, $uploads_url_www_inversion ) as $url ) { // Get path $old_path = parse_url( $url, PHP_URL_PATH ); $new_path = parse_url( $blog['New']['WordPress']['UploadsURL'], PHP_URL_PATH ); // Get scheme $new_scheme = parse_url( $blog['New']['WordPress']['UploadsURL'], PHP_URL_SCHEME ); // Replace Uploads URL Path if ( basename( $old_path ) ) { // Add path with single quote if ( ! in_array( sprintf( "='%s", trailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( "='%s", trailingslashit( $old_path ) ); $new_replace_values[] = sprintf( "='%s", trailingslashit( $new_path ) ); } // Add path with double quote if ( ! in_array( sprintf( '="%s', trailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '="%s', trailingslashit( $old_path ) ); $new_replace_values[] = sprintf( '="%s', trailingslashit( $new_path ) ); } } // Set Uploads URL scheme $old_schemes = array( 'http', 'https', '' ); $new_schemes = array( $new_scheme, $new_scheme, '' ); // Replace Uploads URL scheme for ( $i = 0; $i < count( $old_schemes ); $i++ ) { // Add plain Uploads URL if ( ! in_array( ai1wm_url_scheme( $url, $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( $url, $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ); } // Add URL encoded Uploads URL if ( ! in_array( urlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ) ); } // Add URL raw encoded Uploads URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ) ); } // Add JSON escaped Uploads URL if ( ! in_array( addcslashes( ai1wm_url_scheme( $url, $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( $url, $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( $blog['New']['WordPress']['UploadsURL'], $new_schemes[ $i ] ), '/' ); } } } } } // Get plain Sites Path if ( ! in_array( ai1wm_blog_sites_url(), $old_replace_values ) ) { $old_replace_values[] = ai1wm_blog_sites_url(); $new_replace_values[] = ai1wm_blog_uploads_url(); } // Get URL encoded Sites Path if ( ! in_array( urlencode( ai1wm_blog_sites_url() ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_blog_sites_url() ); $new_replace_values[] = urlencode( ai1wm_blog_uploads_url() ); } // Get URL raw encoded Sites Path if ( ! in_array( rawurlencode( ai1wm_blog_sites_url() ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_blog_sites_url() ); $new_replace_values[] = rawurlencode( ai1wm_blog_uploads_url() ); } // Get JSON escaped Sites Path if ( ! in_array( addcslashes( ai1wm_blog_sites_url(), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_blog_sites_url(), '/' ); $new_replace_values[] = addcslashes( ai1wm_blog_uploads_url(), '/' ); } $site_urls = array(); // Add Site URL if ( ! empty( $config['SiteURL'] ) ) { $site_urls[] = $config['SiteURL']; } // Add Internal Site URL if ( ! empty( $config['InternalSiteURL'] ) ) { if ( parse_url( $config['InternalSiteURL'], PHP_URL_SCHEME ) && parse_url( $config['InternalSiteURL'], PHP_URL_HOST ) ) { $site_urls[] = $config['InternalSiteURL']; } } // Get Site URL foreach ( $site_urls as $site_url ) { // Get www URL if ( stripos( $site_url, '//www.' ) !== false ) { $site_url_www_inversion = str_ireplace( '//www.', '//', $site_url ); } else { $site_url_www_inversion = str_ireplace( '//', '//www.', $site_url ); } // Replace Site URL foreach ( array( $site_url, $site_url_www_inversion ) as $url ) { // Get domain $old_domain = parse_url( $url, PHP_URL_HOST ); $new_domain = parse_url( site_url(), PHP_URL_HOST ); // Get path $old_path = parse_url( $url, PHP_URL_PATH ); $new_path = parse_url( site_url(), PHP_URL_PATH ); // Get scheme $new_scheme = parse_url( site_url(), PHP_URL_SCHEME ); // Add domain and path if ( ! in_array( sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ), $old_replace_raw_values ) ) { $old_replace_raw_values[] = sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ); $new_replace_raw_values[] = sprintf( "'%s','%s'", $new_domain, trailingslashit( $new_path ) ); } // Add domain and path with single quote if ( ! in_array( sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( "='%s%s", $new_domain, untrailingslashit( $new_path ) ); } // Add domain and path with double quote if ( ! in_array( sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( '="%s%s', $new_domain, untrailingslashit( $new_path ) ); } // Set Site URL scheme $old_schemes = array( 'http', 'https', '' ); $new_schemes = array( $new_scheme, $new_scheme, '' ); // Replace Site URL scheme for ( $i = 0; $i < count( $old_schemes ); $i++ ) { // Add plain Site URL if ( ! in_array( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( untrailingslashit( site_url() ), $new_schemes[ $i ] ); } // Add URL encoded Site URL if ( ! in_array( urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( site_url() ), $new_schemes[ $i ] ) ); } // Add URL raw encoded Site URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( site_url() ), $new_schemes[ $i ] ) ); } // Add JSON escaped Site URL if ( ! in_array( addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( site_url() ), $new_schemes[ $i ] ), '/' ); } } // Add email if ( ! isset( $config['NoEmailReplace'] ) ) { if ( ! in_array( sprintf( '@%s', $old_domain ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '@%s', $old_domain ); $new_replace_values[] = str_ireplace( '@www.', '@', sprintf( '@%s', $new_domain ) ); } } } } $home_urls = array(); // Add Home URL if ( ! empty( $config['HomeURL'] ) ) { $home_urls[] = $config['HomeURL']; } // Add Internal Home URL if ( ! empty( $config['InternalHomeURL'] ) ) { if ( parse_url( $config['InternalHomeURL'], PHP_URL_SCHEME ) && parse_url( $config['InternalHomeURL'], PHP_URL_HOST ) ) { $home_urls[] = $config['InternalHomeURL']; } } // Get Home URL foreach ( $home_urls as $home_url ) { // Get www URL if ( stripos( $home_url, '//www.' ) !== false ) { $home_url_www_inversion = str_ireplace( '//www.', '//', $home_url ); } else { $home_url_www_inversion = str_ireplace( '//', '//www.', $home_url ); } // Replace Home URL foreach ( array( $home_url, $home_url_www_inversion ) as $url ) { // Get domain $old_domain = parse_url( $url, PHP_URL_HOST ); $new_domain = parse_url( home_url(), PHP_URL_HOST ); // Get path $old_path = parse_url( $url, PHP_URL_PATH ); $new_path = parse_url( home_url(), PHP_URL_PATH ); // Get scheme $new_scheme = parse_url( home_url(), PHP_URL_SCHEME ); // Add domain and path if ( ! in_array( sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ), $old_replace_raw_values ) ) { $old_replace_raw_values[] = sprintf( "'%s','%s'", $old_domain, trailingslashit( $old_path ) ); $new_replace_raw_values[] = sprintf( "'%s','%s'", $new_domain, trailingslashit( $new_path ) ); } // Add domain and path with single quote if ( ! in_array( sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( "='%s%s", $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( "='%s%s", $new_domain, untrailingslashit( $new_path ) ); } // Add domain and path with double quote if ( ! in_array( sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '="%s%s', $old_domain, untrailingslashit( $old_path ) ); $new_replace_values[] = sprintf( '="%s%s', $new_domain, untrailingslashit( $new_path ) ); } // Add Home URL scheme $old_schemes = array( 'http', 'https', '' ); $new_schemes = array( $new_scheme, $new_scheme, '' ); // Replace Home URL scheme for ( $i = 0; $i < count( $old_schemes ); $i++ ) { // Add plain Home URL if ( ! in_array( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( untrailingslashit( home_url() ), $new_schemes[ $i ] ); } // Add URL encoded Home URL if ( ! in_array( urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( untrailingslashit( home_url() ), $new_schemes[ $i ] ) ); } // Add URL raw encoded Home URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( untrailingslashit( home_url() ), $new_schemes[ $i ] ) ); } // Add JSON escaped Home URL if ( ! in_array( addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( $url ), $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( untrailingslashit( home_url() ), $new_schemes[ $i ] ), '/' ); } } // Add email if ( ! isset( $config['NoEmailReplace'] ) ) { if ( ! in_array( sprintf( '@%s', $old_domain ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '@%s', $old_domain ); $new_replace_values[] = str_ireplace( '@www.', '@', sprintf( '@%s', $new_domain ) ); } } } } $uploads_urls = array(); // Add Uploads URL if ( ! empty( $config['WordPress']['UploadsURL'] ) ) { $uploads_urls[] = $config['WordPress']['UploadsURL']; } // Get Uploads URL foreach ( $uploads_urls as $uploads_url ) { // Get www URL if ( stripos( $uploads_url, '//www.' ) !== false ) { $uploads_url_www_inversion = str_ireplace( '//www.', '//', $uploads_url ); } else { $uploads_url_www_inversion = str_ireplace( '//', '//www.', $uploads_url ); } // Replace Uploads URL foreach ( array( $uploads_url, $uploads_url_www_inversion ) as $url ) { // Get path $old_path = parse_url( $url, PHP_URL_PATH ); $new_path = parse_url( ai1wm_get_uploads_url(), PHP_URL_PATH ); // Get scheme $new_scheme = parse_url( ai1wm_get_uploads_url(), PHP_URL_SCHEME ); // Replace Uploads URL Path if ( basename( $old_path ) ) { // Add path with single quote if ( ! in_array( sprintf( "='%s", trailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( "='%s", trailingslashit( $old_path ) ); $new_replace_values[] = sprintf( "='%s", trailingslashit( $new_path ) ); } // Add path with double quote if ( ! in_array( sprintf( '="%s', trailingslashit( $old_path ) ), $old_replace_values ) ) { $old_replace_values[] = sprintf( '="%s', trailingslashit( $old_path ) ); $new_replace_values[] = sprintf( '="%s', trailingslashit( $new_path ) ); } } // Add Uploads URL scheme $old_schemes = array( 'http', 'https', '' ); $new_schemes = array( $new_scheme, $new_scheme, '' ); // Replace Uploads URL scheme for ( $i = 0; $i < count( $old_schemes ); $i++ ) { // Add plain Uploads URL if ( ! in_array( ai1wm_url_scheme( $url, $old_schemes[ $i ] ), $old_replace_values ) ) { $old_replace_values[] = ai1wm_url_scheme( $url, $old_schemes[ $i ] ); $new_replace_values[] = ai1wm_url_scheme( ai1wm_get_uploads_url(), $new_schemes[ $i ] ); } // Add URL encoded Uploads URL if ( ! in_array( urlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = urlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ); $new_replace_values[] = urlencode( ai1wm_url_scheme( ai1wm_get_uploads_url(), $new_schemes[ $i ] ) ); } // Add URL raw encoded Uploads URL if ( ! in_array( rawurlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( ai1wm_url_scheme( $url, $old_schemes[ $i ] ) ); $new_replace_values[] = rawurlencode( ai1wm_url_scheme( ai1wm_get_uploads_url(), $new_schemes[ $i ] ) ); } // Add JSON escaped Uploads URL if ( ! in_array( addcslashes( ai1wm_url_scheme( $url, $old_schemes[ $i ] ), '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( ai1wm_url_scheme( $url, $old_schemes[ $i ] ), '/' ); $new_replace_values[] = addcslashes( ai1wm_url_scheme( ai1wm_get_uploads_url(), $new_schemes[ $i ] ), '/' ); } } } } // Get WordPress Content Dir if ( isset( $config['WordPress']['Content'] ) && ( $content_dir = $config['WordPress']['Content'] ) ) { // Add plain WordPress Content if ( ! in_array( $content_dir, $old_replace_values ) ) { $old_replace_values[] = $content_dir; $new_replace_values[] = WP_CONTENT_DIR; } // Add URL encoded WordPress Content if ( ! in_array( urlencode( $content_dir ), $old_replace_values ) ) { $old_replace_values[] = urlencode( $content_dir ); $new_replace_values[] = urlencode( WP_CONTENT_DIR ); } // Add URL raw encoded WordPress Content if ( ! in_array( rawurlencode( $content_dir ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( $content_dir ); $new_replace_values[] = rawurlencode( WP_CONTENT_DIR ); } // Add JSON escaped WordPress Content if ( ! in_array( addcslashes( $content_dir, '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( $content_dir, '/' ); $new_replace_values[] = addcslashes( WP_CONTENT_DIR, '/' ); } } // Get replace old and new values if ( isset( $config['Replace'] ) && ( $replace = $config['Replace'] ) ) { for ( $i = 0; $i < count( $replace['OldValues'] ); $i++ ) { if ( ! empty( $replace['OldValues'][ $i ] ) && ! empty( $replace['NewValues'][ $i ] ) ) { // Add plain replace values if ( ! in_array( $replace['OldValues'][ $i ], $old_replace_values ) ) { $old_replace_values[] = $replace['OldValues'][ $i ]; $new_replace_values[] = $replace['NewValues'][ $i ]; } // Add URL encoded replace values if ( ! in_array( urlencode( $replace['OldValues'][ $i ] ), $old_replace_values ) ) { $old_replace_values[] = urlencode( $replace['OldValues'][ $i ] ); $new_replace_values[] = urlencode( $replace['NewValues'][ $i ] ); } // Add URL raw encoded replace values if ( ! in_array( rawurlencode( $replace['OldValues'][ $i ] ), $old_replace_values ) ) { $old_replace_values[] = rawurlencode( $replace['OldValues'][ $i ] ); $new_replace_values[] = rawurlencode( $replace['NewValues'][ $i ] ); } // Add JSON Escaped replace values if ( ! in_array( addcslashes( $replace['OldValues'][ $i ], '/' ), $old_replace_values ) ) { $old_replace_values[] = addcslashes( $replace['OldValues'][ $i ], '/' ); $new_replace_values[] = addcslashes( $replace['NewValues'][ $i ], '/' ); } } } } // Get site URL $site_url = get_option( AI1WM_SITE_URL ); // Get home URL $home_url = get_option( AI1WM_HOME_URL ); // Get secret key $secret_key = get_option( AI1WM_SECRET_KEY ); // Get HTTP user $auth_user = get_option( AI1WM_AUTH_USER ); // Get HTTP password $auth_password = get_option( AI1WM_AUTH_PASSWORD ); // Get Uploads Path $uploads_path = get_option( AI1WM_UPLOADS_PATH ); // Get Uploads URL Path $uploads_url_path = get_option( AI1WM_UPLOADS_URL_PATH ); // Get backups labels $backups_labels = get_option( AI1WM_BACKUPS_LABELS, array() ); // Get sites links $sites_links = get_option( AI1WM_SITES_LINKS, array() ); $old_table_prefixes = array(); $new_table_prefixes = array(); // Set site table prefixes foreach ( $blogs as $blog ) { if ( ai1wm_is_mainsite( $blog['Old']['BlogID'] ) === false ) { $old_table_prefixes[] = ai1wm_servmask_prefix( $blog['Old']['BlogID'] ); $new_table_prefixes[] = ai1wm_table_prefix( $blog['New']['BlogID'] ); } } // Set global table prefixes foreach ( $wpdb->global_tables as $table_name ) { $old_table_prefixes[] = ai1wm_servmask_prefix( 'mainsite' ) . $table_name; $new_table_prefixes[] = ai1wm_table_prefix() . $table_name; } // Set BuddyPress table prefixes if ( ai1wm_validate_plugin_basename( 'buddyboss-platform/bp-loader.php' ) || ai1wm_validate_plugin_basename( 'buddypress/bp-loader.php' ) ) { foreach ( array( 'signups', 'bp_activity', 'bp_activity_meta', 'bp_friends', 'bp_groups', 'bp_groups_groupmeta', 'bp_groups_members', 'bp_invitations', 'bp_messages_messages', 'bp_messages_meta', 'bp_messages_notices', 'bp_messages_recipients', 'bp_notifications', 'bp_notifications_meta', 'bp_optouts', 'bp_user_blogs', 'bp_user_blogs_blogmeta', 'bp_xprofile_data', 'bp_xprofile_fields', 'bp_xprofile_groups', 'bp_xprofile_meta' ) as $table_name ) { $old_table_prefixes[] = ai1wm_servmask_prefix( 'mainsite' ) . $table_name; $new_table_prefixes[] = ai1wm_table_prefix() . $table_name; } } // Set base table prefixes foreach ( $blogs as $blog ) { if ( ai1wm_is_mainsite( $blog['Old']['BlogID'] ) === true ) { $old_table_prefixes[] = ai1wm_servmask_prefix( 'basesite' ); $new_table_prefixes[] = ai1wm_table_prefix( $blog['New']['BlogID'] ); } } // Set main table prefixes foreach ( $blogs as $blog ) { if ( ai1wm_is_mainsite( $blog['Old']['BlogID'] ) === true ) { $old_table_prefixes[] = ai1wm_servmask_prefix( $blog['Old']['BlogID'] ); $new_table_prefixes[] = ai1wm_table_prefix( $blog['New']['BlogID'] ); } } // Set table prefixes $old_table_prefixes[] = ai1wm_servmask_prefix(); $new_table_prefixes[] = ai1wm_table_prefix(); // Get database client if ( is_null( $mysql ) ) { if ( empty( $wpdb->use_mysqli ) ) { $mysql = new Ai1wm_Database_Mysql( $wpdb ); } else { $mysql = new Ai1wm_Database_Mysqli( $wpdb ); } } // Set database options $mysql->set_old_table_prefixes( $old_table_prefixes ) ->set_new_table_prefixes( $new_table_prefixes ) ->set_old_replace_values( $old_replace_values ) ->set_new_replace_values( $new_replace_values ) ->set_old_replace_raw_values( $old_replace_raw_values ) ->set_new_replace_raw_values( $new_replace_raw_values ); // Set atomic tables (do not stop the current request for all listed tables if timeout has been exceeded) $mysql->set_atomic_tables( array( ai1wm_table_prefix() . 'options' ) ); // Set Visual Composer $mysql->set_visual_composer( ai1wm_validate_plugin_basename( 'js_composer/js_composer.php' ) ); // Set Oxygen Builder $mysql->set_oxygen_builder( ai1wm_validate_plugin_basename( 'oxygen/functions.php' ) ); // Set Optimize Press $mysql->set_optimize_press( ai1wm_validate_plugin_basename( 'optimizePressPlugin/optimizepress.php' ) ); // Set Avada Fusion Builder $mysql->set_avada_fusion_builder( ai1wm_validate_plugin_basename( 'fusion-builder/fusion-builder.php' ) ); // Set BeTheme Responsive $mysql->set_betheme_responsive( ai1wm_validate_theme_basename( 'betheme/style.css' ) ); // Import database if ( $mysql->import( ai1wm_database_path( $params ), $query_offset ) ) { // Set progress Ai1wm_Status::info( __( 'Done restoring database.', AI1WM_PLUGIN_NAME ) ); // Unset query offset unset( $params['query_offset'] ); // Unset total queries size unset( $params['total_queries_size'] ); // Unset completed flag unset( $params['completed'] ); } else { // Get total queries size $total_queries_size = ai1wm_database_bytes( $params ); // What percent of queries have we processed? $progress = (int) ( ( $query_offset / $total_queries_size ) * 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Restoring database...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); // Set query offset $params['query_offset'] = $query_offset; // Set total queries size $params['total_queries_size'] = $total_queries_size; // Set completed flag $params['completed'] = false; } // Flush WP cache ai1wm_cache_flush(); // Reset active plugins update_option( AI1WM_ACTIVE_PLUGINS, array() ); // Activate plugins ai1wm_activate_plugins( ai1wm_active_servmask_plugins() ); // Set the new site URL update_option( AI1WM_SITE_URL, $site_url ); // Set the new home URL update_option( AI1WM_HOME_URL, $home_url ); // Set the new secret key value update_option( AI1WM_SECRET_KEY, $secret_key ); // Set the new HTTP user update_option( AI1WM_AUTH_USER, $auth_user ); // Set the new HTTP password update_option( AI1WM_AUTH_PASSWORD, $auth_password ); // Set the new Uploads Path update_option( AI1WM_UPLOADS_PATH, $uploads_path ); // Set the new Uploads URL Path update_option( AI1WM_UPLOADS_URL_PATH, $uploads_url_path ); // Set the new backups labels update_option( AI1WM_BACKUPS_LABELS, $backups_labels ); // Set the new sites links update_option( AI1WM_SITES_LINKS, $sites_links ); // Set new backups path update_option( AI1WM_BACKUPS_PATH_OPTION, AI1WM_BACKUPS_PATH ); return $params; } } PK'ZNѲ =model/import/class-ai1wm-import-check-decryption-password.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Check_Decryption_Password { public static function execute( $params ) { global $ai1wm_params; // Read package.json file $handle = ai1wm_open( ai1wm_package_path( $params ), 'r' ); // Parse package.json file $package = ai1wm_read( $handle, filesize( ai1wm_package_path( $params ) ) ); $package = json_decode( $package, true ); // Close handle ai1wm_close( $handle ); if ( ! empty( $params['decryption_password'] ) ) { if ( ai1wm_is_decryption_password_valid( $package['EncryptedSignature'], $params['decryption_password'] ) ) { $params['is_decryption_password_valid'] = true; $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ), $params['decryption_password'] ); $archive->extract_by_files_array( ai1wm_storage_path( $params ), array( AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME ), array(), array() ); Ai1wm_Status::info( __( 'Done validating the decryption password.', AI1WM_PLUGIN_NAME ) ); $ai1wm_params = $params; return $params; } $decryption_password_error = __( 'The decryption password is not valid.', AI1WM_PLUGIN_NAME ); if ( defined( 'WP_CLI' ) ) { WP_CLI::error( $decryption_password_error ); } else { Ai1wm_Status::backup_is_encrypted( $decryption_password_error ); exit; } } return $params; } } PK'ZݶF F .model/import/class-ai1wm-import-permalinks.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Permalinks { public static function execute( $params ) { global $wp_rewrite; // Set progress Ai1wm_Status::info( __( 'Getting WordPress permalinks settings...', AI1WM_PLUGIN_NAME ) ); // Get using permalinks $params['using_permalinks'] = (int) $wp_rewrite->using_permalinks(); // Set progress Ai1wm_Status::info( __( 'Done getting WordPress permalinks settings.', AI1WM_PLUGIN_NAME ) ); return $params; } } PK'Zf+model/import/class-ai1wm-import-options.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Options { public static function execute( $params, Ai1wm_Database $mysql = null ) { global $wpdb; // Set progress Ai1wm_Status::info( __( 'Preparing options...', AI1WM_PLUGIN_NAME ) ); // Get database client if ( is_null( $mysql ) ) { if ( empty( $wpdb->use_mysqli ) ) { $mysql = new Ai1wm_Database_Mysql( $wpdb ); } else { $mysql = new Ai1wm_Database_Mysqli( $wpdb ); } } $tables = $mysql->get_tables(); // Get base prefix $base_prefix = ai1wm_table_prefix(); // Get mainsite prefix $mainsite_prefix = ai1wm_table_prefix( 'mainsite' ); // Check WP sitemeta table exists if ( in_array( "{$mainsite_prefix}sitemeta", $tables ) ) { // Get fs_accounts option value (Freemius) $result = $mysql->query( "SELECT meta_value FROM `{$mainsite_prefix}sitemeta` WHERE meta_key = 'fs_accounts'" ); if ( ( $row = $mysql->fetch_assoc( $result ) ) ) { $fs_accounts = get_option( 'fs_accounts', array() ); $meta_value = maybe_unserialize( $row['meta_value'] ); // Update fs_accounts option value (Freemius) if ( ( $fs_accounts = array_merge( $fs_accounts, $meta_value ) ) ) { if ( isset( $fs_accounts['users'], $fs_accounts['sites'] ) ) { update_option( 'fs_accounts', $fs_accounts ); } else { delete_option( 'fs_accounts' ); delete_option( 'fs_dbg_accounts' ); delete_option( 'fs_active_plugins' ); delete_option( 'fs_api_cache' ); delete_option( 'fs_dbg_api_cache' ); delete_option( 'fs_debug_mode' ); } } } } // Set progress Ai1wm_Status::info( __( 'Done preparing options.', AI1WM_PLUGIN_NAME ) ); return $params; } } PK'ZǴ2j j )model/import/class-ai1wm-import-users.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Users { public static function execute( $params ) { // Check multisite.json file if ( is_file( ai1wm_multisite_path( $params ) ) ) { // Set progress Ai1wm_Status::info( __( 'Preparing users...', AI1WM_PLUGIN_NAME ) ); // Read multisite.json file $handle = ai1wm_open( ai1wm_multisite_path( $params ), 'r' ); // Parse multisite.json file $multisite = ai1wm_read( $handle, filesize( ai1wm_multisite_path( $params ) ) ); $multisite = json_decode( $multisite, true ); // Close handle ai1wm_close( $handle ); // Set WordPress super admins if ( isset( $multisite['Admins'] ) && ( $admins = $multisite['Admins'] ) ) { foreach ( $admins as $username ) { if ( ( $user = get_user_by( 'login', $username ) ) ) { if ( $user->exists() ) { $user->set_role( 'administrator' ); } } } } // Set progress Ai1wm_Status::info( __( 'Done preparing users.', AI1WM_PLUGIN_NAME ) ); } return $params; } } PK'Zp??)model/import/class-ai1wm-import-blogs.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Blogs { public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Preparing blogs...', AI1WM_PLUGIN_NAME ) ); $blogs = array(); // Check multisite.json file if ( true === is_file( ai1wm_multisite_path( $params ) ) ) { // Read multisite.json file $handle = ai1wm_open( ai1wm_multisite_path( $params ), 'r' ); // Parse multisite.json file $multisite = ai1wm_read( $handle, filesize( ai1wm_multisite_path( $params ) ) ); $multisite = json_decode( $multisite, true ); // Close handle ai1wm_close( $handle ); // Validate if ( empty( $multisite['Network'] ) ) { if ( isset( $multisite['Sites'] ) && ( $sites = $multisite['Sites'] ) ) { if ( count( $sites ) === 1 && ( $subsite = current( $sites ) ) ) { // Set internal Site URL (backward compatibility) if ( empty( $subsite['InternalSiteURL'] ) ) { $subsite['InternalSiteURL'] = null; } // Set internal Home URL (backward compatibility) if ( empty( $subsite['InternalHomeURL'] ) ) { $subsite['InternalHomeURL'] = null; } // Set active plugins (backward compatibility) if ( empty( $subsite['Plugins'] ) ) { $subsite['Plugins'] = array(); } // Set active template (backward compatibility) if ( empty( $subsite['Template'] ) ) { $subsite['Template'] = null; } // Set active stylesheet (backward compatibility) if ( empty( $subsite['Stylesheet'] ) ) { $subsite['Stylesheet'] = null; } // Set uploads path (backward compatibility) if ( empty( $subsite['Uploads'] ) ) { $subsite['Uploads'] = null; } // Set uploads URL path (backward compatibility) if ( empty( $subsite['UploadsURL'] ) ) { $subsite['UploadsURL'] = null; } // Set uploads path (backward compatibility) if ( empty( $subsite['WordPress']['Uploads'] ) ) { $subsite['WordPress']['Uploads'] = null; } // Set uploads URL path (backward compatibility) if ( empty( $subsite['WordPress']['UploadsURL'] ) ) { $subsite['WordPress']['UploadsURL'] = null; } // Set blog items $blogs[] = array( 'Old' => array( 'BlogID' => $subsite['BlogID'], 'SiteURL' => $subsite['SiteURL'], 'HomeURL' => $subsite['HomeURL'], 'InternalSiteURL' => $subsite['InternalSiteURL'], 'InternalHomeURL' => $subsite['InternalHomeURL'], 'Plugins' => $subsite['Plugins'], 'Template' => $subsite['Template'], 'Stylesheet' => $subsite['Stylesheet'], 'Uploads' => $subsite['Uploads'], 'UploadsURL' => $subsite['UploadsURL'], 'WordPress' => $subsite['WordPress'], ), 'New' => array( 'BlogID' => null, 'SiteURL' => site_url(), 'HomeURL' => home_url(), 'InternalSiteURL' => site_url(), 'InternalHomeURL' => home_url(), 'Plugins' => $subsite['Plugins'], 'Template' => $subsite['Template'], 'Stylesheet' => $subsite['Stylesheet'], 'Uploads' => get_option( 'upload_path' ), 'UploadsURL' => get_option( 'upload_url_path' ), 'WordPress' => array( 'UploadsURL' => ai1wm_get_uploads_url(), ), ), ); } else { throw new Ai1wm_Import_Exception( __( 'The archive should contain Single WordPress site! Please revisit your export settings.', AI1WM_PLUGIN_NAME ) ); } } else { throw new Ai1wm_Import_Exception( __( 'At least one WordPress site should be presented in the archive.', AI1WM_PLUGIN_NAME ) ); } } else { throw new Ai1wm_Import_Exception( __( 'Unable to import WordPress Network into WordPress Single site.', AI1WM_PLUGIN_NAME ) ); } } // Write blogs.json file $handle = ai1wm_open( ai1wm_blogs_path( $params ), 'w' ); ai1wm_write( $handle, json_encode( $blogs ) ); ai1wm_close( $handle ); // Set progress Ai1wm_Status::info( __( 'Done preparing blogs.', AI1WM_PLUGIN_NAME ) ); return $params; } } PK'Z8lW W 4model/import/class-ai1wm-import-check-encryption.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Check_Encryption { public static function execute( $params ) { // Read package.json file $handle = ai1wm_open( ai1wm_package_path( $params ), 'r' ); // Parse package.json file $package = ai1wm_read( $handle, filesize( ai1wm_package_path( $params ) ) ); $package = json_decode( $package, true ); // Close handle ai1wm_close( $handle ); if ( empty( $package['Encrypted'] ) || empty( $package['EncryptedSignature'] ) || ! empty( $params['is_decryption_password_valid'] ) ) { return $params; } if ( ! ai1wm_can_decrypt() ) { $message = __( 'Importing an encrypted backup is not supported on this server. Technical details', AI1WM_PLUGIN_NAME ); if ( defined( 'WP_CLI' ) ) { WP_CLI::error( $message ); } else { Ai1wm_Status::server_cannot_decrypt( $message ); exit; } } if ( defined( 'WP_CLI' ) ) { $message = __( 'Backup is encrypted. Please provide decryption password: ', AI1WM_PLUGIN_NAME ); $params['decryption_password'] = readline( $message ); return $params; } Ai1wm_Status::backup_is_encrypted( null ); exit; } } PK'ZM)C[ [ .model/import/class-ai1wm-import-mu-plugins.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Mu_Plugins { public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Activating mu-plugins...', AI1WM_PLUGIN_NAME ) ); $exclude_files = array( AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_ENDURANCE_PAGE_CACHE_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_ENDURANCE_PHP_EDGE_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_ENDURANCE_BROWSER_CACHE_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_GD_SYSTEM_PLUGIN_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_WP_STACK_CACHE_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_WP_COMSH_LOADER_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_WP_COMSH_HELPER_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_WP_ENGINE_SYSTEM_PLUGIN_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_WPE_SIGN_ON_PLUGIN_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_WP_ENGINE_SECURITY_AUDITOR_NAME, AI1WM_MUPLUGINS_NAME . DIRECTORY_SEPARATOR . AI1WM_WP_CERBER_SECURITY_NAME, ); // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Unpack mu-plugins files $archive->extract_by_files_array( WP_CONTENT_DIR, array( AI1WM_MUPLUGINS_NAME ), $exclude_files ); // Close the archive file $archive->close(); // Set progress Ai1wm_Status::info( __( 'Done activating mu-plugins.', AI1WM_PLUGIN_NAME ) ); return $params; } } PK'Zu9n, , 1model/import/class-ai1wm-import-compatibility.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Compatibility { public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Checking extensions compatibility...', AI1WM_PLUGIN_NAME ) ); // Get messages $messages = Ai1wm_Compatibility::get( $params ); // Set messages if ( empty( $messages ) ) { return $params; } // Error message throw new Ai1wm_Compatibility_Exception( implode( $messages ) ); } } PK'ZO6,model/import/class-ai1wm-import-validate.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Validate { public static function execute( $params ) { // Verify file if size > 2GB and PHP = 32-bit if ( ! ai1wm_is_filesize_supported( ai1wm_archive_path( $params ) ) ) { throw new Ai1wm_Import_Exception( __( 'Your PHP is 32-bit. In order to import your file, please change your PHP version to 64-bit and try again. ' . 'Technical details', AI1WM_PLUGIN_NAME ) ); } // Verify file name extension if ( ! ai1wm_is_filename_supported( ai1wm_archive_path( $params ) ) ) { throw new Ai1wm_Import_Exception( __( 'The file type that you have tried to import is not compatible with this plugin. ' . 'Please ensure that your file is a .wpress file that was created with the All-in-One WP migration plugin. ' . 'Technical details', AI1WM_PLUGIN_NAME ) ); } // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = 0; } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Get total archive size if ( isset( $params['total_archive_size'] ) ) { $total_archive_size = (int) $params['total_archive_size']; } else { $total_archive_size = ai1wm_archive_bytes( $params ); } // What percent of archive have we processed? $progress = (int) min( ( $archive_bytes_offset / $total_archive_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Unpacking archive...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Validate the archive file consistency if ( ! $archive->is_valid() ) { throw new Ai1wm_Import_Exception( __( 'The archive file is corrupted. Follow this article to resolve the problem.', AI1WM_PLUGIN_NAME ) ); } // Flag to hold if file data has been processed $completed = true; if ( $archive->has_not_reached_eof() ) { $file_bytes_written = 0; // Unpack package.json, multisite.json and database.sql files if ( ( $completed = $archive->extract_by_files_array( ai1wm_storage_path( $params ), array( AI1WM_PACKAGE_NAME, AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME ), array(), array(), $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); } // End of the archive? if ( $archive->has_reached_eof() ) { // Check package.json file if ( false === is_file( ai1wm_package_path( $params ) ) ) { throw new Ai1wm_Import_Exception( __( 'Please make sure that your file was exported using All-in-One WP Migration plugin. Technical details', AI1WM_PLUGIN_NAME ) ); } // Set progress Ai1wm_Status::info( __( 'Done unpacking archive.', AI1WM_PLUGIN_NAME ) ); // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset total archive size unset( $params['total_archive_size'] ); // Unset completed flag unset( $params['completed'] ); } else { // What percent of archive have we processed? $progress = (int) min( ( $archive_bytes_offset / $total_archive_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Unpacking archive...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set total archive size $params['total_archive_size'] = $total_archive_size; // Set completed flag $params['completed'] = $completed; } // Close the archive file $archive->close(); return $params; } } PK'ZD!+model/import/class-ai1wm-import-confirm.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Confirm { public static function execute( $params ) { $messages = array(); // Read package.json file $handle = ai1wm_open( ai1wm_package_path( $params ), 'r' ); // Parse package.json file $package = ai1wm_read( $handle, filesize( ai1wm_package_path( $params ) ) ); $package = json_decode( $package, true ); // Close handle ai1wm_close( $handle ); // Confirm message if ( defined( 'WP_CLI' ) ) { $messages[] = __( 'The import process will overwrite your website including the database, media, plugins, and themes. ' . 'Are you sure to proceed?', AI1WM_PLUGIN_NAME ); } else { $messages[] = __( 'The import process will overwrite your website including the database, media, plugins, and themes. ' . 'Please ensure that you have a backup of your data before proceeding to the next step.', AI1WM_PLUGIN_NAME ); } // Check compatibility of PHP versions if ( isset( $package['PHP']['Version'] ) ) { switch ( true ) { case ( version_compare( $package['PHP']['Version'], '7.0.0', '<' ) && version_compare( PHP_VERSION, '8.0.0', '>=' ) ): $php_version_message_cli = __( 'Your backup is from a PHP 5 but the site that you are importing to is PHP 8. ' . 'This could cause the import to fail. Technical details: https://help.servmask.com/knowledgebase/migrate-wordpress-from-php-5-to-php-7/', AI1WM_PLUGIN_NAME ); $php_version_message = __( 'Your backup is from a PHP 5 but the site that you are importing to is PHP 8. ' . 'This could cause the import to fail. Technical details', AI1WM_PLUGIN_NAME ); break; case ( version_compare( $package['PHP']['Version'], '8.0.0', '<' ) && version_compare( PHP_VERSION, '8.0.0', '>=' ) ): $php_version_message_cli = __( 'Your backup is from a PHP 7 but the site that you are importing to is PHP 8. ' . 'This could cause the import to fail. Technical details: https://help.servmask.com/knowledgebase/migrate-wordpress-from-php-5-to-php-7/', AI1WM_PLUGIN_NAME ); $php_version_message = __( 'Your backup is from a PHP 7 but the site that you are importing to is PHP 8. ' . 'This could cause the import to fail. Technical details', AI1WM_PLUGIN_NAME ); break; case ( version_compare( $package['PHP']['Version'], '7.0.0', '<' ) && version_compare( PHP_VERSION, '7.0.0', '>=' ) ): $php_version_message_cli = __( 'Your backup is from a PHP 5 but the site that you are importing to is PHP 7. ' . 'This could cause the import to fail. Technical details: https://help.servmask.com/knowledgebase/migrate-wordpress-from-php-5-to-php-7/', AI1WM_PLUGIN_NAME ); $php_version_message = __( 'Your backup is from a PHP 5 but the site that you are importing to is PHP 7. ' . 'This could cause the import to fail. Technical details', AI1WM_PLUGIN_NAME ); break; default: } if ( isset( $php_version_message_cli, $php_version_message ) ) { if ( defined( 'WP_CLI' ) ) { $messages[] = $php_version_message_cli; } else { $messages[] = $php_version_message; } } } if ( defined( 'WP_CLI' ) ) { $assoc_args = array(); if ( isset( $params['cli_args'] ) ) { $assoc_args = $params['cli_args']; } WP_CLI::confirm( implode( $messages ), $assoc_args ); return $params; } // Set progress Ai1wm_Status::confirm( implode( $messages ) ); exit; } } PK'Z{(sT$T$+model/import/class-ai1wm-import-content.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Content { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = 0; } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total files size if ( isset( $params['total_files_size'] ) ) { $total_files_size = (int) $params['total_files_size']; } else { $total_files_size = 1; } // Get total files count if ( isset( $params['total_files_count'] ) ) { $total_files_count = (int) $params['total_files_count']; } else { $total_files_count = 1; } // Read blogs.json file $handle = ai1wm_open( ai1wm_blogs_path( $params ), 'r' ); // Parse blogs.json file $blogs = ai1wm_read( $handle, filesize( ai1wm_blogs_path( $params ) ) ); $blogs = json_decode( $blogs, true ); // Close handle ai1wm_close( $handle ); // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Restoring %d files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); $old_paths = array( 'plugins', 'themes' ); $new_paths = array( ai1wm_get_plugins_dir(), get_theme_root() ); // Set extract paths foreach ( $blogs as $blog ) { if ( ai1wm_is_mainsite( $blog['Old']['BlogID'] ) === false ) { if ( defined( 'UPLOADBLOGSDIR' ) ) { // Old files dir style $old_paths[] = ai1wm_blog_files_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_files_abspath( $blog['New']['BlogID'] ); // Old blogs.dir style $old_paths[] = ai1wm_blog_blogsdir_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_blogsdir_abspath( $blog['New']['BlogID'] ); // New sites dir style $old_paths[] = ai1wm_blog_sites_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_files_abspath( $blog['New']['BlogID'] ); } else { // Old files dir style $old_paths[] = ai1wm_blog_files_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_sites_abspath( $blog['New']['BlogID'] ); // Old blogs.dir style $old_paths[] = ai1wm_blog_blogsdir_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_sites_abspath( $blog['New']['BlogID'] ); // New sites dir style $old_paths[] = ai1wm_blog_sites_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_sites_abspath( $blog['New']['BlogID'] ); } } } // Set base site extract paths (should be added at the end of arrays) foreach ( $blogs as $blog ) { if ( ai1wm_is_mainsite( $blog['Old']['BlogID'] ) === true ) { if ( defined( 'UPLOADBLOGSDIR' ) ) { // Old files dir style $old_paths[] = ai1wm_blog_files_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_files_abspath( $blog['New']['BlogID'] ); // Old blogs.dir style $old_paths[] = ai1wm_blog_blogsdir_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_blogsdir_abspath( $blog['New']['BlogID'] ); // New sites dir style $old_paths[] = ai1wm_blog_sites_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_files_abspath( $blog['New']['BlogID'] ); } else { // Old files dir style $old_paths[] = ai1wm_blog_files_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_sites_abspath( $blog['New']['BlogID'] ); // Old blogs.dir style $old_paths[] = ai1wm_blog_blogsdir_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_sites_abspath( $blog['New']['BlogID'] ); // New sites dir style $old_paths[] = ai1wm_blog_sites_relpath( $blog['Old']['BlogID'] ); $new_paths[] = ai1wm_blog_sites_abspath( $blog['New']['BlogID'] ); } } } $old_paths[] = ai1wm_blog_sites_relpath(); $new_paths[] = ai1wm_blog_sites_abspath(); while ( $archive->has_not_reached_eof() ) { $file_bytes_written = 0; // Exclude WordPress files $exclude_files = array_keys( _get_dropins() ); // Exclude plugin files $exclude_files = array_merge( $exclude_files, array( AI1WM_PACKAGE_NAME, AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME, AI1WM_MUPLUGINS_NAME, ) ); // Exclude theme files $exclude_files = array_merge( $exclude_files, array( AI1WM_THEMES_FUNCTIONS_NAME ) ); // Exclude Elementor files $exclude_files = array_merge( $exclude_files, array( AI1WM_ELEMENTOR_CSS_NAME ) ); // Exclude content extensions $exclude_extensions = array( AI1WM_LESS_CACHE_NAME ); // Extract a file from archive to WP_CONTENT_DIR if ( ( $completed = $archive->extract_one_file_to( WP_CONTENT_DIR, $exclude_files, $exclude_extensions, $old_paths, $new_paths, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Restoring %d files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // End of the archive? if ( $archive->has_reached_eof() ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total files size unset( $params['total_files_size'] ); // Unset total files count unset( $params['total_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total files size $params['total_files_size'] = $total_files_size; // Set total files count $params['total_files_count'] = $total_files_count; // Set completed flag $params['completed'] = $completed; } // Close the archive file $archive->close(); return $params; } } PK'Z- - -model/import/class-ai1wm-import-enumerate.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Enumerate { public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Retrieving a list of all WordPress files...', AI1WM_PLUGIN_NAME ) ); // Open the archive file for reading $archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) ); // Get total files count $params['total_files_count'] = $archive->get_total_files_count(); // Get total files size $params['total_files_size'] = $archive->get_total_files_size(); // Close the archive file $archive->close(); // Set progress Ai1wm_Status::info( __( 'Done retrieving a list of all WordPress files.', AI1WM_PLUGIN_NAME ) ); return $params; } } PK'ZlRlR(model/import/class-ai1wm-import-done.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Done { public static function execute( $params ) { global $wp_rewrite; // Check multisite.json file if ( is_file( ai1wm_multisite_path( $params ) ) ) { // Read multisite.json file $handle = ai1wm_open( ai1wm_multisite_path( $params ), 'r' ); // Parse multisite.json file $multisite = ai1wm_read( $handle, filesize( ai1wm_multisite_path( $params ) ) ); $multisite = json_decode( $multisite, true ); // Close handle ai1wm_close( $handle ); // Activate WordPress plugins if ( isset( $multisite['Plugins'] ) && ( $plugins = $multisite['Plugins'] ) ) { ai1wm_activate_plugins( $plugins ); } // Deactivate WordPress SSL plugins if ( ! is_ssl() ) { ai1wm_deactivate_plugins( array( ai1wm_discover_plugin_basename( 'really-simple-ssl/rlrsssl-really-simple-ssl.php' ), ai1wm_discover_plugin_basename( 'wordpress-https/wordpress-https.php' ), ai1wm_discover_plugin_basename( 'wp-force-ssl/wp-force-ssl.php' ), ai1wm_discover_plugin_basename( 'force-https-littlebizzy/force-https.php' ), ) ); ai1wm_woocommerce_force_ssl( false ); } // Deactivate WordPress plugins ai1wm_deactivate_plugins( array( ai1wm_discover_plugin_basename( 'invisible-recaptcha/invisible-recaptcha.php' ), ai1wm_discover_plugin_basename( 'wps-hide-login/wps-hide-login.php' ), ai1wm_discover_plugin_basename( 'hide-my-wp/index.php' ), ai1wm_discover_plugin_basename( 'hide-my-wordpress/index.php' ), ai1wm_discover_plugin_basename( 'mycustomwidget/my_custom_widget.php' ), ai1wm_discover_plugin_basename( 'lockdown-wp-admin/lockdown-wp-admin.php' ), ai1wm_discover_plugin_basename( 'rename-wp-login/rename-wp-login.php' ), ai1wm_discover_plugin_basename( 'wp-simple-firewall/icwp-wpsf.php' ), ai1wm_discover_plugin_basename( 'join-my-multisite/joinmymultisite.php' ), ai1wm_discover_plugin_basename( 'multisite-clone-duplicator/multisite-clone-duplicator.php' ), ai1wm_discover_plugin_basename( 'wordpress-mu-domain-mapping/domain_mapping.php' ), ai1wm_discover_plugin_basename( 'wordpress-starter/siteground-wizard.php' ), ai1wm_discover_plugin_basename( 'pro-sites/pro-sites.php' ), ai1wm_discover_plugin_basename( 'wpide/WPide.php' ), ai1wm_discover_plugin_basename( 'page-optimize/page-optimize.php' ), ) ); // Deactivate Swift Optimizer rules ai1wm_deactivate_swift_optimizer_rules( array( ai1wm_discover_plugin_basename( 'all-in-one-wp-migration/all-in-one-wp-migration.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-azure-storage-extension/all-in-one-wp-migration-azure-storage-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-b2-extension/all-in-one-wp-migration-b2-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-backup/all-in-one-wp-migration-backup.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-box-extension/all-in-one-wp-migration-box-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-digitalocean-extension/all-in-one-wp-migration-digitalocean-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-direct-extension/all-in-one-wp-migration-direct-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-dropbox-extension/all-in-one-wp-migration-dropbox-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-file-extension/all-in-one-wp-migration-file-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-ftp-extension/all-in-one-wp-migration-ftp-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-gcloud-storage-extension/all-in-one-wp-migration-gcloud-storage-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-gdrive-extension/all-in-one-wp-migration-gdrive-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-glacier-extension/all-in-one-wp-migration-glacier-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-mega-extension/all-in-one-wp-migration-mega-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-multisite-extension/all-in-one-wp-migration-multisite-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-onedrive-extension/all-in-one-wp-migration-onedrive-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-pcloud-extension/all-in-one-wp-migration-pcloud-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-pro/all-in-one-wp-migration-pro.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-s3-client-extension/all-in-one-wp-migration-s3-client-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-s3-extension/all-in-one-wp-migration-s3-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-unlimited-extension/all-in-one-wp-migration-unlimited-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-url-extension/all-in-one-wp-migration-url-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-webdav-extension/all-in-one-wp-migration-webdav-extension.php' ), ) ); // Deactivate Revolution Slider ai1wm_deactivate_revolution_slider( ai1wm_discover_plugin_basename( 'revslider/revslider.php' ) ); // Deactivate Jetpack modules ai1wm_deactivate_jetpack_modules( array( 'photon', 'sso' ) ); // Flush Elementor cache ai1wm_elementor_cache_flush(); // Initial DB version ai1wm_initial_db_version(); } else { // Check package.json file if ( is_file( ai1wm_package_path( $params ) ) ) { // Read package.json file $handle = ai1wm_open( ai1wm_package_path( $params ), 'r' ); // Parse package.json file $package = ai1wm_read( $handle, filesize( ai1wm_package_path( $params ) ) ); $package = json_decode( $package, true ); // Close handle ai1wm_close( $handle ); // Activate WordPress plugins if ( isset( $package['Plugins'] ) && ( $plugins = $package['Plugins'] ) ) { ai1wm_activate_plugins( $plugins ); } // Activate WordPress template if ( isset( $package['Template'] ) && ( $template = $package['Template'] ) ) { ai1wm_activate_template( $template ); } // Activate WordPress stylesheet if ( isset( $package['Stylesheet'] ) && ( $stylesheet = $package['Stylesheet'] ) ) { ai1wm_activate_stylesheet( $stylesheet ); } // Deactivate WordPress SSL plugins if ( ! is_ssl() ) { ai1wm_deactivate_plugins( array( ai1wm_discover_plugin_basename( 'really-simple-ssl/rlrsssl-really-simple-ssl.php' ), ai1wm_discover_plugin_basename( 'wordpress-https/wordpress-https.php' ), ai1wm_discover_plugin_basename( 'wp-force-ssl/wp-force-ssl.php' ), ai1wm_discover_plugin_basename( 'force-https-littlebizzy/force-https.php' ), ) ); ai1wm_woocommerce_force_ssl( false ); } // Deactivate WordPress plugins ai1wm_deactivate_plugins( array( ai1wm_discover_plugin_basename( 'invisible-recaptcha/invisible-recaptcha.php' ), ai1wm_discover_plugin_basename( 'wps-hide-login/wps-hide-login.php' ), ai1wm_discover_plugin_basename( 'hide-my-wp/index.php' ), ai1wm_discover_plugin_basename( 'hide-my-wordpress/index.php' ), ai1wm_discover_plugin_basename( 'mycustomwidget/my_custom_widget.php' ), ai1wm_discover_plugin_basename( 'lockdown-wp-admin/lockdown-wp-admin.php' ), ai1wm_discover_plugin_basename( 'rename-wp-login/rename-wp-login.php' ), ai1wm_discover_plugin_basename( 'wp-simple-firewall/icwp-wpsf.php' ), ai1wm_discover_plugin_basename( 'join-my-multisite/joinmymultisite.php' ), ai1wm_discover_plugin_basename( 'multisite-clone-duplicator/multisite-clone-duplicator.php' ), ai1wm_discover_plugin_basename( 'wordpress-mu-domain-mapping/domain_mapping.php' ), ai1wm_discover_plugin_basename( 'wordpress-starter/siteground-wizard.php' ), ai1wm_discover_plugin_basename( 'pro-sites/pro-sites.php' ), ai1wm_discover_plugin_basename( 'wpide/WPide.php' ), ai1wm_discover_plugin_basename( 'page-optimize/page-optimize.php' ), ) ); // Deactivate Swift Optimizer rules ai1wm_deactivate_swift_optimizer_rules( array( ai1wm_discover_plugin_basename( 'all-in-one-wp-migration/all-in-one-wp-migration.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-azure-storage-extension/all-in-one-wp-migration-azure-storage-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-b2-extension/all-in-one-wp-migration-b2-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-backup/all-in-one-wp-migration-backup.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-box-extension/all-in-one-wp-migration-box-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-digitalocean-extension/all-in-one-wp-migration-digitalocean-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-direct-extension/all-in-one-wp-migration-direct-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-dropbox-extension/all-in-one-wp-migration-dropbox-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-file-extension/all-in-one-wp-migration-file-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-ftp-extension/all-in-one-wp-migration-ftp-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-gcloud-storage-extension/all-in-one-wp-migration-gcloud-storage-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-gdrive-extension/all-in-one-wp-migration-gdrive-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-glacier-extension/all-in-one-wp-migration-glacier-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-mega-extension/all-in-one-wp-migration-mega-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-multisite-extension/all-in-one-wp-migration-multisite-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-onedrive-extension/all-in-one-wp-migration-onedrive-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-pcloud-extension/all-in-one-wp-migration-pcloud-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-pro/all-in-one-wp-migration-pro.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-s3-client-extension/all-in-one-wp-migration-s3-client-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-s3-extension/all-in-one-wp-migration-s3-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-unlimited-extension/all-in-one-wp-migration-unlimited-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-url-extension/all-in-one-wp-migration-url-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-webdav-extension/all-in-one-wp-migration-webdav-extension.php' ), ) ); // Deactivate Revolution Slider ai1wm_deactivate_revolution_slider( ai1wm_discover_plugin_basename( 'revslider/revslider.php' ) ); // Deactivate Jetpack modules ai1wm_deactivate_jetpack_modules( array( 'photon', 'sso' ) ); // Flush Elementor cache ai1wm_elementor_cache_flush(); // Initial DB version ai1wm_initial_db_version(); } } // Check blogs.json file if ( is_file( ai1wm_blogs_path( $params ) ) ) { // Read blogs.json file $handle = ai1wm_open( ai1wm_blogs_path( $params ), 'r' ); // Parse blogs.json file $blogs = ai1wm_read( $handle, filesize( ai1wm_blogs_path( $params ) ) ); $blogs = json_decode( $blogs, true ); // Close handle ai1wm_close( $handle ); // Loop over blogs foreach ( $blogs as $blog ) { // Activate WordPress plugins if ( isset( $blog['New']['Plugins'] ) && ( $plugins = $blog['New']['Plugins'] ) ) { ai1wm_activate_plugins( $plugins ); } // Activate WordPress template if ( isset( $blog['New']['Template'] ) && ( $template = $blog['New']['Template'] ) ) { ai1wm_activate_template( $template ); } // Activate WordPress stylesheet if ( isset( $blog['New']['Stylesheet'] ) && ( $stylesheet = $blog['New']['Stylesheet'] ) ) { ai1wm_activate_stylesheet( $stylesheet ); } // Deactivate WordPress SSL plugins if ( ! is_ssl() ) { ai1wm_deactivate_plugins( array( ai1wm_discover_plugin_basename( 'really-simple-ssl/rlrsssl-really-simple-ssl.php' ), ai1wm_discover_plugin_basename( 'wordpress-https/wordpress-https.php' ), ai1wm_discover_plugin_basename( 'wp-force-ssl/wp-force-ssl.php' ), ai1wm_discover_plugin_basename( 'force-https-littlebizzy/force-https.php' ), ) ); ai1wm_woocommerce_force_ssl( false ); } // Deactivate WordPress plugins ai1wm_deactivate_plugins( array( ai1wm_discover_plugin_basename( 'invisible-recaptcha/invisible-recaptcha.php' ), ai1wm_discover_plugin_basename( 'wps-hide-login/wps-hide-login.php' ), ai1wm_discover_plugin_basename( 'hide-my-wp/index.php' ), ai1wm_discover_plugin_basename( 'hide-my-wordpress/index.php' ), ai1wm_discover_plugin_basename( 'mycustomwidget/my_custom_widget.php' ), ai1wm_discover_plugin_basename( 'lockdown-wp-admin/lockdown-wp-admin.php' ), ai1wm_discover_plugin_basename( 'rename-wp-login/rename-wp-login.php' ), ai1wm_discover_plugin_basename( 'wp-simple-firewall/icwp-wpsf.php' ), ai1wm_discover_plugin_basename( 'join-my-multisite/joinmymultisite.php' ), ai1wm_discover_plugin_basename( 'multisite-clone-duplicator/multisite-clone-duplicator.php' ), ai1wm_discover_plugin_basename( 'wordpress-mu-domain-mapping/domain_mapping.php' ), ai1wm_discover_plugin_basename( 'wordpress-starter/siteground-wizard.php' ), ai1wm_discover_plugin_basename( 'pro-sites/pro-sites.php' ), ai1wm_discover_plugin_basename( 'wpide/WPide.php' ), ai1wm_discover_plugin_basename( 'page-optimize/page-optimize.php' ), ) ); // Deactivate Swift Optimizer rules ai1wm_deactivate_swift_optimizer_rules( array( ai1wm_discover_plugin_basename( 'all-in-one-wp-migration/all-in-one-wp-migration.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-azure-storage-extension/all-in-one-wp-migration-azure-storage-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-b2-extension/all-in-one-wp-migration-b2-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-backup/all-in-one-wp-migration-backup.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-box-extension/all-in-one-wp-migration-box-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-digitalocean-extension/all-in-one-wp-migration-digitalocean-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-direct-extension/all-in-one-wp-migration-direct-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-dropbox-extension/all-in-one-wp-migration-dropbox-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-file-extension/all-in-one-wp-migration-file-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-ftp-extension/all-in-one-wp-migration-ftp-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-gcloud-storage-extension/all-in-one-wp-migration-gcloud-storage-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-gdrive-extension/all-in-one-wp-migration-gdrive-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-glacier-extension/all-in-one-wp-migration-glacier-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-mega-extension/all-in-one-wp-migration-mega-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-multisite-extension/all-in-one-wp-migration-multisite-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-onedrive-extension/all-in-one-wp-migration-onedrive-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-pcloud-extension/all-in-one-wp-migration-pcloud-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-pro/all-in-one-wp-migration-pro.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-s3-client-extension/all-in-one-wp-migration-s3-client-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-s3-extension/all-in-one-wp-migration-s3-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-unlimited-extension/all-in-one-wp-migration-unlimited-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-url-extension/all-in-one-wp-migration-url-extension.php' ), ai1wm_discover_plugin_basename( 'all-in-one-wp-migration-webdav-extension/all-in-one-wp-migration-webdav-extension.php' ), ) ); // Deactivate Revolution Slider ai1wm_deactivate_revolution_slider( ai1wm_discover_plugin_basename( 'revslider/revslider.php' ) ); // Deactivate Jetpack modules ai1wm_deactivate_jetpack_modules( array( 'photon', 'sso' ) ); // Flush Elementor cache ai1wm_elementor_cache_flush(); // Initial DB version ai1wm_initial_db_version(); } } // Clear auth cookie (WP Cerber) if ( ai1wm_validate_plugin_basename( 'wp-cerber/wp-cerber.php' ) ) { wp_clear_auth_cookie(); } $should_reset_permalinks = false; // Switch to default permalink structure if ( ( $should_reset_permalinks = ai1wm_should_reset_permalinks( $params ) ) ) { $wp_rewrite->set_permalink_structure( '' ); } // Set progress if ( ai1wm_validate_plugin_basename( 'fusion-builder/fusion-builder.php' ) ) { Ai1wm_Status::done( __( 'Your site has been imported successfully!', AI1WM_PLUGIN_NAME ), Ai1wm_Template::get_content( 'import/avada', array( 'should_reset_permalinks' => $should_reset_permalinks ) ) ); } elseif ( ai1wm_validate_plugin_basename( 'oxygen/functions.php' ) ) { Ai1wm_Status::done( __( 'Your site has been imported successfully!', AI1WM_PLUGIN_NAME ), Ai1wm_Template::get_content( 'import/oxygen', array( 'should_reset_permalinks' => $should_reset_permalinks ) ) ); } else { Ai1wm_Status::done( __( 'Your site has been imported successfully!', AI1WM_PLUGIN_NAME ), Ai1wm_Template::get_content( 'import/done', array( 'should_reset_permalinks' => $should_reset_permalinks ) ) ); } do_action( 'ai1wm_status_import_done', $params ); return $params; } } PK'Z-ų *model/import/class-ai1wm-import-upload.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Import_Upload { private static function validate() { if ( ! array_key_exists( 'upload-file', $_FILES ) || ! is_array( $_FILES['upload-file'] ) ) { throw new Ai1wm_Import_Retry_Exception( __( 'Missing upload file.', AI1WM_PLUGIN_NAME ), 400 ); } if ( ! array_key_exists( 'error', $_FILES['upload-file'] ) ) { throw new Ai1wm_Import_Retry_Exception( __( 'Missing error key in upload file.', AI1WM_PLUGIN_NAME ), 400 ); } if ( ! array_key_exists( 'tmp_name', $_FILES['upload-file'] ) ) { throw new Ai1wm_Import_Retry_Exception( __( 'Missing tmp_name in upload file.', AI1WM_PLUGIN_NAME ), 400 ); } } public static function execute( $params ) { self::validate(); $error = $_FILES['upload-file']['error']; $upload = $_FILES['upload-file']['tmp_name']; // Verify file name extension if ( ! ai1wm_is_filename_supported( ai1wm_archive_path( $params ) ) ) { throw new Ai1wm_Import_Exception( __( 'The file type that you have tried to upload is not compatible with this plugin. ' . 'Please ensure that your file is a .wpress file that was created with the All-in-One WP migration plugin. ' . 'Technical details', AI1WM_PLUGIN_NAME ) ); } switch ( $error ) { case UPLOAD_ERR_OK: try { ai1wm_copy( $upload, ai1wm_archive_path( $params ) ); ai1wm_unlink( $upload ); } catch ( Exception $e ) { throw new Ai1wm_Import_Retry_Exception( sprintf( __( 'Unable to upload the file because %s', AI1WM_PLUGIN_NAME ), $e->getMessage() ), 400 ); } break; case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: case UPLOAD_ERR_PARTIAL: case UPLOAD_ERR_NO_FILE: // File is too large throw new Ai1wm_Import_Retry_Exception( __( 'The file is too large for this server.', AI1WM_PLUGIN_NAME ), 413 ); case UPLOAD_ERR_NO_TMP_DIR: throw new Ai1wm_Import_Retry_Exception( __( 'Missing a temporary folder.', AI1WM_PLUGIN_NAME ), 400 ); case UPLOAD_ERR_CANT_WRITE: throw new Ai1wm_Import_Retry_Exception( __( 'Failed to write file to disk.', AI1WM_PLUGIN_NAME ), 400 ); case UPLOAD_ERR_EXTENSION: throw new Ai1wm_Import_Retry_Exception( __( 'A PHP extension stopped the file upload.', AI1WM_PLUGIN_NAME ), 400 ); default: throw new Ai1wm_Import_Retry_Exception( sprintf( __( 'Unrecognized error %s during upload.', AI1WM_PLUGIN_NAME ), $error ), 400 ); } ai1wm_json_response( array( 'errors' => array() ) ); exit; } } PK'ZRm model/class-ai1wm-deprecated.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Abstract {} class Ai1wm_Import_Abstract {} class Ai1wm_Config {} PK'Zӂl l model/class-ai1wm-feedback.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Feedback { /** * Submit customer feedback to servmask.com * * @param string $type Feedback type * @param string $email User e-mail * @param string $message User message * @param integer $terms User accept terms * @param string $purchases Purchases IDs * * @return array */ public static function add( $type, $email, $message, $terms, $purchases ) { // Validate email if ( filter_var( $email, FILTER_VALIDATE_EMAIL ) === false ) { throw new Ai1wm_Feedback_Exception( __( 'Your email is not valid.', AI1WM_PLUGIN_NAME ) ); } // Validate type if ( empty( $type ) ) { throw new Ai1wm_Feedback_Exception( __( 'Feedback type is not valid.', AI1WM_PLUGIN_NAME ) ); } // Validate message if ( empty( $message ) ) { throw new Ai1wm_Feedback_Exception( __( 'Please enter comments in the text area.', AI1WM_PLUGIN_NAME ) ); } // Validate terms if ( empty( $terms ) ) { throw new Ai1wm_Feedback_Exception( __( 'Please accept feedback term conditions.', AI1WM_PLUGIN_NAME ) ); } $response = wp_remote_post( AI1WM_FEEDBACK_URL, array( 'timeout' => 15, 'body' => array( 'type' => $type, 'email' => $email, 'message' => $message, 'purchases' => $purchases, ), ) ); if ( is_wp_error( $response ) ) { throw new Ai1wm_Feedback_Exception( sprintf( __( 'Something went wrong: %s', AI1WM_PLUGIN_NAME ), $response->get_error_message() ) ); } return $response; } } PK'ZYQ> > model/class-ai1wm-status.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Status { public static function error( $title, $message ) { self::log( array( 'type' => 'error', 'title' => $title, 'message' => $message ) ); } public static function info( $message ) { self::log( array( 'type' => 'info', 'message' => $message ) ); } public static function download( $message ) { self::log( array( 'type' => 'download', 'message' => $message ) ); } public static function disk_space_confirm( $message ) { self::log( array( 'type' => 'disk_space_confirm', 'message' => $message ) ); } public static function confirm( $message ) { self::log( array( 'type' => 'confirm', 'message' => $message ) ); } public static function done( $title, $message ) { self::log( array( 'type' => 'done', 'title' => $title, 'message' => $message ) ); } public static function blogs( $title, $message ) { self::log( array( 'type' => 'blogs', 'title' => $title, 'message' => $message ) ); } public static function progress( $percent ) { self::log( array( 'type' => 'progress', 'percent' => $percent ) ); } public static function backup_is_encrypted( $error ) { self::log( array( 'type' => 'backup_is_encrypted', 'error' => $error ) ); } public static function server_cannot_decrypt( $message ) { self::log( array( 'type' => 'server_cannot_decrypt', 'message' => $message ) ); } public static function log( $data ) { if ( ! ai1wm_is_scheduled_backup() ) { update_option( AI1WM_STATUS, $data ); } } } PK'Zmodel/class-ai1wm-updater.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Updater { /** * Retrieve plugin installer pages from WordPress Plugins API. * * @param mixed $result * @param string $action * @param array|object $args * @return mixed */ public static function plugins_api( $result, $action = null, $args = null ) { if ( empty( $args->slug ) ) { return $result; } // Get extensions $extensions = Ai1wm_Extensions::get(); // View details page if ( isset( $extensions[ $args->slug ] ) && $action === 'plugin_information' ) { $updater = get_option( AI1WM_UPDATER, array() ); // Plugin details if ( isset( $updater[ $args->slug ] ) ) { return (object) $updater[ $args->slug ]; } } return $result; } /** * Update WordPress plugin list page. * * @param object $transient * @return object */ public static function update_plugins( $transient ) { global $wp_version; // Creating default object from empty value if ( ! is_object( $transient ) ) { $transient = (object) array(); } // Get extensions $extensions = Ai1wm_Extensions::get(); // Get current updates $updater = get_option( AI1WM_UPDATER, array() ); // Get extension updates foreach ( $updater as $slug => $update ) { if ( isset( $extensions[ $slug ], $update['version'], $update['homepage'], $update['download_link'], $update['icons'] ) ) { if ( ( $purchase_id = get_option( $extensions[ $slug ]['key'] ) ) ) { // Get download URL if ( $slug === 'all-in-one-wp-migration-file-extension' ) { $download_url = add_query_arg( array( 'siteurl' => get_site_url() ), sprintf( '%s', $update['download_link'] ) ); } else { $download_url = add_query_arg( array( 'siteurl' => get_site_url() ), sprintf( '%s/%s', $update['download_link'], $purchase_id ) ); } // Set plugin details $plugin_details = (object) array( 'slug' => $slug, 'new_version' => $update['version'], 'url' => $update['homepage'], 'plugin' => $extensions[ $slug ]['basename'], 'package' => $download_url, 'tested' => $wp_version, 'icons' => $update['icons'], ); // Enable auto updates if ( version_compare( $extensions[ $slug ]['version'], $update['version'], '<' ) ) { $transient->response[ $extensions[ $slug ]['basename'] ] = $plugin_details; } else { $transient->no_update[ $extensions[ $slug ]['basename'] ] = $plugin_details; } } } } return $transient; } /** * Check for extension updates * * @return boolean */ public static function check_for_updates() { $updater = get_option( AI1WM_UPDATER, array() ); // Get extension updates foreach ( Ai1wm_Extensions::get() as $slug => $extension ) { $about = wp_remote_get( $extension['about'], array( 'timeout' => 15, 'headers' => array( 'Accept' => 'application/json' ), ) ); // Add plugin updates if ( is_wp_error( $about ) ) { $updater[ $slug ]['error_message'] = $about->get_error_message(); } else { $body = wp_remote_retrieve_body( $about ); if ( ( $data = json_decode( $body, true ) ) ) { if ( isset( $data['slug'], $data['version'], $data['homepage'], $data['download_link'], $data['icons'] ) ) { $updater[ $slug ] = $data; } } // Add plugin messages if ( $slug !== 'all-in-one-wp-migration-file-extension' ) { if ( ( $purchase_id = get_option( $extension['key'] ) ) ) { $check = wp_remote_get( add_query_arg( array( 'site_url' => get_site_url(), 'admin_email' => get_option( 'admin_email' ) ), sprintf( '%s/%s', $extension['check'], $purchase_id ) ), array( 'timeout' => 15, 'headers' => array( 'Accept' => 'application/json' ), ) ); // Add plugin checks if ( is_wp_error( $check ) ) { $updater[ $slug ]['error_message'] = $check->get_error_message(); } else { $body = wp_remote_retrieve_body( $check ); if ( ( $data = json_decode( $body, true ) ) ) { if ( isset( $updater[ $slug ], $data['message'] ) ) { $updater[ $slug ]['update_message'] = $data['message']; } } } } } } } return update_option( AI1WM_UPDATER, $updater ); } /** * Add "Check for updates" link * * @param array $plugin_meta An array of the plugin's metadata, including the version, author, author URI, and plugin URI * @param string $plugin_file Path to the plugin file relative to the plugins directory * @return array */ public static function plugin_row_meta( $plugin_meta, $plugin_file ) { $modal_index = 0; // Get current updates $updater = get_option( AI1WM_UPDATER, array() ); // Add link for each extension foreach ( Ai1wm_Extensions::get() as $slug => $extension ) { $modal_index++; // Get plugin details if ( $plugin_file === $extension['basename'] ) { // Get updater URL $updater_url = add_query_arg( array( 'ai1wm_check_for_updates' => 1, 'ai1wm_nonce' => wp_create_nonce( 'ai1wm_check_for_updates' ) ), network_admin_url( 'plugins.php' ) ); // Check purchase ID if ( get_option( $extension['key'] ) ) { $plugin_meta[] = Ai1wm_Template::get_content( 'updater/check', array( 'url' => $updater_url ) ); } else { $plugin_meta[] = Ai1wm_Template::get_content( 'updater/modal', array( 'url' => $updater_url, 'modal' => $modal_index ) ); } // Check error message if ( isset( $updater[ $slug ]['error_message'] ) ) { $plugin_meta[] = Ai1wm_Template::get_content( 'updater/error', array( 'message' => $updater[ $slug ]['error_message'] ) ); } } } return $plugin_meta; } } PK'Z.OP-P- model/class-ai1wm-extensions.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Extensions { /** * Get active extensions * * @return array */ public static function get() { $extensions = array(); // Add Microsoft Azure Extension if ( defined( 'AI1WMZE_PLUGIN_NAME' ) ) { $extensions[ AI1WMZE_PLUGIN_NAME ] = array( 'key' => AI1WMZE_PLUGIN_KEY, 'title' => AI1WMZE_PLUGIN_TITLE, 'about' => AI1WMZE_PLUGIN_ABOUT, 'check' => AI1WMZE_PLUGIN_CHECK, 'basename' => AI1WMZE_PLUGIN_BASENAME, 'version' => AI1WMZE_VERSION, 'requires' => '1.34', 'short' => AI1WMZE_PLUGIN_SHORT, ); } // Add Backblaze B2 Extension if ( defined( 'AI1WMAE_PLUGIN_NAME' ) ) { $extensions[ AI1WMAE_PLUGIN_NAME ] = array( 'key' => AI1WMAE_PLUGIN_KEY, 'title' => AI1WMAE_PLUGIN_TITLE, 'about' => AI1WMAE_PLUGIN_ABOUT, 'check' => AI1WMAE_PLUGIN_CHECK, 'basename' => AI1WMAE_PLUGIN_BASENAME, 'version' => AI1WMAE_VERSION, 'requires' => '1.39', 'short' => AI1WMAE_PLUGIN_SHORT, ); } // Add Backup Plugin if ( defined( 'AI1WMVE_PLUGIN_NAME' ) ) { $extensions[ AI1WMVE_PLUGIN_NAME ] = array( 'key' => AI1WMVE_PLUGIN_KEY, 'title' => AI1WMVE_PLUGIN_TITLE, 'about' => AI1WMVE_PLUGIN_ABOUT, 'check' => AI1WMVE_PLUGIN_CHECK, 'basename' => AI1WMVE_PLUGIN_BASENAME, 'version' => AI1WMVE_VERSION, 'requires' => '1.0', 'short' => AI1WMVE_PLUGIN_SHORT, ); } // Add Box Extension if ( defined( 'AI1WMBE_PLUGIN_NAME' ) ) { $extensions[ AI1WMBE_PLUGIN_NAME ] = array( 'key' => AI1WMBE_PLUGIN_KEY, 'title' => AI1WMBE_PLUGIN_TITLE, 'about' => AI1WMBE_PLUGIN_ABOUT, 'check' => AI1WMBE_PLUGIN_CHECK, 'basename' => AI1WMBE_PLUGIN_BASENAME, 'version' => AI1WMBE_VERSION, 'requires' => '1.48', 'short' => AI1WMBE_PLUGIN_SHORT, ); } // Add DigitalOcean Spaces Extension if ( defined( 'AI1WMIE_PLUGIN_NAME' ) ) { $extensions[ AI1WMIE_PLUGIN_NAME ] = array( 'key' => AI1WMIE_PLUGIN_KEY, 'title' => AI1WMIE_PLUGIN_TITLE, 'about' => AI1WMIE_PLUGIN_ABOUT, 'check' => AI1WMIE_PLUGIN_CHECK, 'basename' => AI1WMIE_PLUGIN_BASENAME, 'version' => AI1WMIE_VERSION, 'requires' => '1.49', 'short' => AI1WMIE_PLUGIN_SHORT, ); } // Add Direct Extension if ( defined( 'AI1WMXE_PLUGIN_NAME' ) ) { $extensions[ AI1WMXE_PLUGIN_NAME ] = array( 'key' => AI1WMXE_PLUGIN_KEY, 'title' => AI1WMXE_PLUGIN_TITLE, 'about' => AI1WMXE_PLUGIN_ABOUT, 'check' => AI1WMXE_PLUGIN_CHECK, 'basename' => AI1WMXE_PLUGIN_BASENAME, 'version' => AI1WMXE_VERSION, 'requires' => '1.16', 'short' => AI1WMXE_PLUGIN_SHORT, ); } // Add Dropbox Extension if ( defined( 'AI1WMDE_PLUGIN_NAME' ) ) { $extensions[ AI1WMDE_PLUGIN_NAME ] = array( 'key' => AI1WMDE_PLUGIN_KEY, 'title' => AI1WMDE_PLUGIN_TITLE, 'about' => AI1WMDE_PLUGIN_ABOUT, 'check' => AI1WMDE_PLUGIN_CHECK, 'basename' => AI1WMDE_PLUGIN_BASENAME, 'version' => AI1WMDE_VERSION, 'requires' => '3.70', 'short' => AI1WMDE_PLUGIN_SHORT, ); } // Add File Extension if ( defined( 'AI1WMTE_PLUGIN_NAME' ) ) { $extensions[ AI1WMTE_PLUGIN_NAME ] = array( 'key' => AI1WMTE_PLUGIN_KEY, 'title' => AI1WMTE_PLUGIN_TITLE, 'about' => AI1WMTE_PLUGIN_ABOUT, 'check' => AI1WMTE_PLUGIN_CHECK, 'basename' => AI1WMTE_PLUGIN_BASENAME, 'version' => AI1WMTE_VERSION, 'requires' => '1.5', 'short' => AI1WMTE_PLUGIN_SHORT, ); } // Add FTP Extension if ( defined( 'AI1WMFE_PLUGIN_NAME' ) ) { $extensions[ AI1WMFE_PLUGIN_NAME ] = array( 'key' => AI1WMFE_PLUGIN_KEY, 'title' => AI1WMFE_PLUGIN_TITLE, 'about' => AI1WMFE_PLUGIN_ABOUT, 'check' => AI1WMFE_PLUGIN_CHECK, 'basename' => AI1WMFE_PLUGIN_BASENAME, 'version' => AI1WMFE_VERSION, 'requires' => '2.72', 'short' => AI1WMFE_PLUGIN_SHORT, ); } // Add Google Cloud Storage Extension if ( defined( 'AI1WMCE_PLUGIN_NAME' ) ) { $extensions[ AI1WMCE_PLUGIN_NAME ] = array( 'key' => AI1WMCE_PLUGIN_KEY, 'title' => AI1WMCE_PLUGIN_TITLE, 'about' => AI1WMCE_PLUGIN_ABOUT, 'check' => AI1WMCE_PLUGIN_CHECK, 'basename' => AI1WMCE_PLUGIN_BASENAME, 'version' => AI1WMCE_VERSION, 'requires' => '1.38', 'short' => AI1WMCE_PLUGIN_SHORT, ); } // Add Google Drive Extension if ( defined( 'AI1WMGE_PLUGIN_NAME' ) ) { $extensions[ AI1WMGE_PLUGIN_NAME ] = array( 'key' => AI1WMGE_PLUGIN_KEY, 'title' => AI1WMGE_PLUGIN_TITLE, 'about' => AI1WMGE_PLUGIN_ABOUT, 'check' => AI1WMGE_PLUGIN_CHECK, 'basename' => AI1WMGE_PLUGIN_BASENAME, 'version' => AI1WMGE_VERSION, 'requires' => '2.74', 'short' => AI1WMGE_PLUGIN_SHORT, ); } // Add Amazon Glacier Extension if ( defined( 'AI1WMRE_PLUGIN_NAME' ) ) { $extensions[ AI1WMRE_PLUGIN_NAME ] = array( 'key' => AI1WMRE_PLUGIN_KEY, 'title' => AI1WMRE_PLUGIN_TITLE, 'about' => AI1WMRE_PLUGIN_ABOUT, 'check' => AI1WMRE_PLUGIN_CHECK, 'basename' => AI1WMRE_PLUGIN_BASENAME, 'version' => AI1WMRE_VERSION, 'requires' => '1.36', 'short' => AI1WMRE_PLUGIN_SHORT, ); } // Add Mega Extension if ( defined( 'AI1WMEE_PLUGIN_NAME' ) ) { $extensions[ AI1WMEE_PLUGIN_NAME ] = array( 'key' => AI1WMEE_PLUGIN_KEY, 'title' => AI1WMEE_PLUGIN_TITLE, 'about' => AI1WMEE_PLUGIN_ABOUT, 'check' => AI1WMEE_PLUGIN_CHECK, 'basename' => AI1WMEE_PLUGIN_BASENAME, 'version' => AI1WMEE_VERSION, 'requires' => '1.43', 'short' => AI1WMEE_PLUGIN_SHORT, ); } // Add Multisite Extension if ( defined( 'AI1WMME_PLUGIN_NAME' ) ) { $extensions[ AI1WMME_PLUGIN_NAME ] = array( 'key' => AI1WMME_PLUGIN_KEY, 'title' => AI1WMME_PLUGIN_TITLE, 'about' => AI1WMME_PLUGIN_ABOUT, 'check' => AI1WMME_PLUGIN_CHECK, 'basename' => AI1WMME_PLUGIN_BASENAME, 'version' => AI1WMME_VERSION, 'requires' => '4.25', 'short' => AI1WMME_PLUGIN_SHORT, ); } // Add OneDrive Extension if ( defined( 'AI1WMOE_PLUGIN_NAME' ) ) { $extensions[ AI1WMOE_PLUGIN_NAME ] = array( 'key' => AI1WMOE_PLUGIN_KEY, 'title' => AI1WMOE_PLUGIN_TITLE, 'about' => AI1WMOE_PLUGIN_ABOUT, 'check' => AI1WMOE_PLUGIN_CHECK, 'basename' => AI1WMOE_PLUGIN_BASENAME, 'version' => AI1WMOE_VERSION, 'requires' => '1.60', 'short' => AI1WMOE_PLUGIN_SHORT, ); } // Add pCloud Extension if ( defined( 'AI1WMPE_PLUGIN_NAME' ) ) { $extensions[ AI1WMPE_PLUGIN_NAME ] = array( 'key' => AI1WMPE_PLUGIN_KEY, 'title' => AI1WMPE_PLUGIN_TITLE, 'about' => AI1WMPE_PLUGIN_ABOUT, 'check' => AI1WMPE_PLUGIN_CHECK, 'basename' => AI1WMPE_PLUGIN_BASENAME, 'version' => AI1WMPE_VERSION, 'requires' => '1.35', 'short' => AI1WMPE_PLUGIN_SHORT, ); } // Add Pro Plugin if ( defined( 'AI1WMKE_PLUGIN_NAME' ) ) { $extensions[ AI1WMKE_PLUGIN_NAME ] = array( 'key' => AI1WMKE_PLUGIN_KEY, 'title' => AI1WMKE_PLUGIN_TITLE, 'about' => AI1WMKE_PLUGIN_ABOUT, 'check' => AI1WMKE_PLUGIN_CHECK, 'basename' => AI1WMKE_PLUGIN_BASENAME, 'version' => AI1WMKE_VERSION, 'requires' => '1.0', 'short' => AI1WMKE_PLUGIN_SHORT, ); } // Add S3 Client Extension if ( defined( 'AI1WMNE_PLUGIN_NAME' ) ) { $extensions[ AI1WMNE_PLUGIN_NAME ] = array( 'key' => AI1WMNE_PLUGIN_KEY, 'title' => AI1WMNE_PLUGIN_TITLE, 'about' => AI1WMNE_PLUGIN_ABOUT, 'check' => AI1WMNE_PLUGIN_CHECK, 'basename' => AI1WMNE_PLUGIN_BASENAME, 'version' => AI1WMNE_VERSION, 'requires' => '1.34', 'short' => AI1WMNE_PLUGIN_SHORT, ); } // Add Amazon S3 Extension if ( defined( 'AI1WMSE_PLUGIN_NAME' ) ) { $extensions[ AI1WMSE_PLUGIN_NAME ] = array( 'key' => AI1WMSE_PLUGIN_KEY, 'title' => AI1WMSE_PLUGIN_TITLE, 'about' => AI1WMSE_PLUGIN_ABOUT, 'check' => AI1WMSE_PLUGIN_CHECK, 'basename' => AI1WMSE_PLUGIN_BASENAME, 'version' => AI1WMSE_VERSION, 'requires' => '3.72', 'short' => AI1WMSE_PLUGIN_SHORT, ); } // Add Unlimited Extension if ( defined( 'AI1WMUE_PLUGIN_NAME' ) ) { $extensions[ AI1WMUE_PLUGIN_NAME ] = array( 'key' => AI1WMUE_PLUGIN_KEY, 'title' => AI1WMUE_PLUGIN_TITLE, 'about' => AI1WMUE_PLUGIN_ABOUT, 'check' => AI1WMUE_PLUGIN_CHECK, 'basename' => AI1WMUE_PLUGIN_BASENAME, 'version' => AI1WMUE_VERSION, 'requires' => '2.49', 'short' => AI1WMUE_PLUGIN_SHORT, ); } // Add URL Extension if ( defined( 'AI1WMLE_PLUGIN_NAME' ) ) { $extensions[ AI1WMLE_PLUGIN_NAME ] = array( 'key' => AI1WMLE_PLUGIN_KEY, 'title' => AI1WMLE_PLUGIN_TITLE, 'about' => AI1WMLE_PLUGIN_ABOUT, 'check' => AI1WMLE_PLUGIN_CHECK, 'basename' => AI1WMLE_PLUGIN_BASENAME, 'version' => AI1WMLE_VERSION, 'requires' => '2.59', 'short' => AI1WMLE_PLUGIN_SHORT, ); } // Add WebDAV Extension if ( defined( 'AI1WMWE_PLUGIN_NAME' ) ) { $extensions[ AI1WMWE_PLUGIN_NAME ] = array( 'key' => AI1WMWE_PLUGIN_KEY, 'title' => AI1WMWE_PLUGIN_TITLE, 'about' => AI1WMWE_PLUGIN_ABOUT, 'check' => AI1WMWE_PLUGIN_CHECK, 'basename' => AI1WMWE_PLUGIN_BASENAME, 'version' => AI1WMWE_VERSION, 'requires' => '1.30', 'short' => AI1WMWE_PLUGIN_SHORT, ); } return $extensions; } } PK'Zx=l  model/class-ai1wm-log.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Log { public static function error( $params ) { $data = array(); // Add date $data[] = date( 'M d Y H:i:s' ); // Add params $data[] = json_encode( $params ); // Add empty line $data[] = PHP_EOL; // Write log data if ( $handle = ai1wm_open( ai1wm_error_path(), 'a' ) ) { ai1wm_write( $handle, implode( PHP_EOL, $data ) ); ai1wm_close( $handle ); } } } PK'ZrO #model/class-ai1wm-compatibility.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Compatibility { public static function get( $params ) { $extensions = Ai1wm_Extensions::get(); foreach ( $extensions as $extension_name => $extension_data ) { if ( ! isset( $params[ $extension_data['short'] ] ) ) { unset( $extensions[ $extension_name ] ); } } // If no extension is used, update everything that is available if ( empty( $extensions ) ) { $extensions = Ai1wm_Extensions::get(); } $messages = array(); foreach ( $extensions as $extension_name => $extension_data ) { if ( ! Ai1wm_Compatibility::check( $extension_data ) ) { if ( defined( 'WP_CLI' ) ) { $messages[] = sprintf( __( '%s is not the latest version. You must update the plugin before you can use it. ', AI1WM_PLUGIN_NAME ), $extension_data['title'] ); } else { $messages[] = sprintf( __( '%s is not the latest version. You must update the plugin before you can use it.
', AI1WM_PLUGIN_NAME ), $extension_data['title'], network_admin_url( 'plugins.php' ) ); } } } return $messages; } public static function check( $extension ) { if ( $extension['version'] !== 'develop' ) { if ( version_compare( $extension['version'], $extension['requires'], '<' ) ) { return false; } } return true; } } PK'Z# # "model/class-ai1wm-notification.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Notification { public static function ok( $subject, $message ) { // Enable notifications if ( ! apply_filters( 'ai1wm_notification_ok_toggle', false ) ) { return; } // Set email if ( ! ( $email = apply_filters( 'ai1wm_notification_ok_email', get_option( 'admin_email', false ) ) ) ) { return; } // Set subject if ( ! ( $subject = apply_filters( 'ai1wm_notification_ok_subject', $subject ) ) ) { return; } // Set message if ( ! ( $message = apply_filters( 'ai1wm_notification_ok_message', $message ) ) ) { return; } // Send email if ( ai1wm_is_scheduled_backup() ) { wp_mail( $email, $subject, $message, array( 'Content-Type: text/html; charset=UTF-8' ) ); } } public static function error( $subject, $message ) { // Enable notifications if ( ! apply_filters( 'ai1wm_notification_error_toggle', false ) ) { return; } // Set email if ( ! ( $email = apply_filters( 'ai1wm_notification_error_email', get_option( 'admin_email', false ) ) ) ) { return; } // Set subject if ( ! ( $subject = apply_filters( 'ai1wm_notification_error_subject', $subject ) ) ) { return; } // Set message if ( ! ( $message = apply_filters( 'ai1wm_notification_error_message', $message ) ) ) { return; } // Send email if ( ai1wm_is_scheduled_backup() ) { wp_mail( $email, $subject, $message, array( 'Content-Type: text/html; charset=UTF-8' ) ); } } } PK'Z! model/class-ai1wm-message.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Message { public static function flash( $type, $message ) { if ( ( $messages = get_option( AI1WM_MESSAGES, array() ) ) !== false ) { return update_option( AI1WM_MESSAGES, array_merge( $messages, array( $type => $message ) ) ); } return false; } public static function has( $type ) { if ( ( $messages = get_option( AI1WM_MESSAGES, array() ) ) ) { if ( isset( $messages[ $type ] ) ) { return true; } } return false; } public static function get( $type ) { $message = null; if ( ( $messages = get_option( AI1WM_MESSAGES, array() ) ) ) { if ( isset( $messages[ $type ] ) && ( $message = $messages[ $type ] ) ) { unset( $messages[ $type ] ); } // Set messages update_option( AI1WM_MESSAGES, $messages ); } return $message; } } PK'Z]W model/class-ai1wm-handler.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Handler { /** * Error handler * * @param integer $errno Error level * @param string $errstr Error message * @param string $errfile Error file * @param integer $errline Error line * @return void */ public static function error( $errno, $errstr, $errfile, $errline ) { Ai1wm_Log::error( array( 'Number' => $errno, 'Message' => $errstr, 'File' => $errfile, 'Line' => $errline, ) ); } /** * Shutdown handler * * @return void */ public static function shutdown() { if ( ( $error = error_get_last() ) ) { Ai1wm_Log::error( $error ); } } } PK'Zk))*model/export/class-ai1wm-export-config.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Config { public static function execute( $params ) { global $table_prefix, $wp_version, $wpdb; // Set progress Ai1wm_Status::info( __( 'Preparing configuration file...', AI1WM_PLUGIN_NAME ) ); // Get options $options = wp_load_alloptions(); // Get database client if ( empty( $wpdb->use_mysqli ) ) { $mysql = new Ai1wm_Database_Mysql( $wpdb ); } else { $mysql = new Ai1wm_Database_Mysqli( $wpdb ); } $config = array(); // Set site URL $config['SiteURL'] = site_url(); // Set home URL $config['HomeURL'] = home_url(); // Set internal site URL if ( isset( $options['siteurl'] ) ) { $config['InternalSiteURL'] = $options['siteurl']; } // Set internal home URL if ( isset( $options['home'] ) ) { $config['InternalHomeURL'] = $options['home']; } // Set replace old and new values if ( isset( $params['options']['replace'] ) && ( $replace = $params['options']['replace'] ) ) { for ( $i = 0; $i < count( $replace['old_value'] ); $i++ ) { if ( ! empty( $replace['old_value'][ $i ] ) && ! empty( $replace['new_value'][ $i ] ) ) { $config['Replace']['OldValues'][] = $replace['old_value'][ $i ]; $config['Replace']['NewValues'][] = $replace['new_value'][ $i ]; } } } // Set no spam comments if ( isset( $params['options']['no_spam_comments'] ) ) { $config['NoSpamComments'] = true; } // Set no post revisions if ( isset( $params['options']['no_post_revisions'] ) ) { $config['NoPostRevisions'] = true; } // Set no media if ( isset( $params['options']['no_media'] ) ) { $config['NoMedia'] = true; } // Set no themes if ( isset( $params['options']['no_themes'] ) ) { $config['NoThemes'] = true; } // Set no inactive themes if ( isset( $params['options']['no_inactive_themes'] ) ) { $config['NoInactiveThemes'] = true; } // Set no must-use plugins if ( isset( $params['options']['no_muplugins'] ) ) { $config['NoMustUsePlugins'] = true; } // Set no plugins if ( isset( $params['options']['no_plugins'] ) ) { $config['NoPlugins'] = true; } // Set no inactive plugins if ( isset( $params['options']['no_inactive_plugins'] ) ) { $config['NoInactivePlugins'] = true; } // Set no cache if ( isset( $params['options']['no_cache'] ) ) { $config['NoCache'] = true; } // Set no database if ( isset( $params['options']['no_database'] ) ) { $config['NoDatabase'] = true; } // Set no email replace if ( isset( $params['options']['no_email_replace'] ) ) { $config['NoEmailReplace'] = true; } // Set plugin version $config['Plugin'] = array( 'Version' => AI1WM_VERSION ); // Set WordPress version and content $config['WordPress'] = array( 'Version' => $wp_version, 'Content' => WP_CONTENT_DIR, 'Plugins' => ai1wm_get_plugins_dir(), 'Themes' => ai1wm_get_themes_dirs(), 'Uploads' => ai1wm_get_uploads_dir(), 'UploadsURL' => ai1wm_get_uploads_url() ); // Set database version $config['Database'] = array( 'Version' => $mysql->version(), 'Charset' => defined( 'DB_CHARSET' ) ? DB_CHARSET : 'undefined', 'Collate' => defined( 'DB_COLLATE' ) ? DB_COLLATE : 'undefined', 'Prefix' => $table_prefix, ); // Exclude selected db tables if ( isset( $params['options']['exclude_db_tables'], $params['excluded_db_tables'] ) ) { if ( ( $excluded_db_tables = explode( ',', $params['excluded_db_tables'] ) ) ) { $config['Database']['ExcludedTables'] = $excluded_db_tables; } } // Set PHP version $config['PHP'] = array( 'Version' => PHP_VERSION, 'System' => PHP_OS, 'Integer' => PHP_INT_SIZE ); // Set active plugins $config['Plugins'] = array_values( array_diff( ai1wm_active_plugins(), ai1wm_active_servmask_plugins() ) ); // Set active template $config['Template'] = ai1wm_active_template(); // Set active stylesheet $config['Stylesheet'] = ai1wm_active_stylesheet(); // Set upload path $config['Uploads'] = get_option( 'upload_path' ); // Set upload URL path $config['UploadsURL'] = get_option( 'upload_url_path' ); // Set server info $config['Server'] = array( '.htaccess' => base64_encode( ai1wm_get_htaccess() ), 'web.config' => base64_encode( ai1wm_get_webconfig() ) ); if ( isset( $params['options']['encrypt_backups'] ) ) { $config['Encrypted'] = true; $config['EncryptedSignature'] = base64_encode( ai1wm_encrypt_string( AI1WM_SIGN_TEXT, $params['options']['encrypt_password'] ) ); } // Save package.json file $handle = ai1wm_open( ai1wm_package_path( $params ), 'w' ); ai1wm_write( $handle, json_encode( $config ) ); ai1wm_close( $handle ); // Set progress Ai1wm_Status::info( __( 'Done preparing configuration file.', AI1WM_PLUGIN_NAME ) ); return $params; } } PK'Z9RR+model/export/class-ai1wm-export-content.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Content { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set content bytes offset if ( isset( $params['content_bytes_offset'] ) ) { $content_bytes_offset = (int) $params['content_bytes_offset']; } else { $content_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total content files size if ( isset( $params['total_content_files_size'] ) ) { $total_content_files_size = (int) $params['total_content_files_size']; } else { $total_content_files_size = 1; } // Get total content files count if ( isset( $params['total_content_files_count'] ) ) { $total_content_files_count = (int) $params['total_content_files_count']; } else { $total_content_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d content files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_content_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get content list file $content_list = ai1wm_open( ai1wm_content_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $content_list, $content_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = fgetcsv( $content_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get content bytes offset $content_bytes_offset = ftell( $content_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d content files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_content_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the content list? if ( feof( $content_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset content bytes offset unset( $params['content_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total content files size unset( $params['total_content_files_size'] ); // Unset total content files count unset( $params['total_content_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set content bytes offset $params['content_bytes_offset'] = $content_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total content files size $params['total_content_files_size'] = $total_content_files_size; // Set total content files count $params['total_content_files_count'] = $total_content_files_count; // Set completed flag $params['completed'] = $completed; } // Close the content list file ai1wm_close( $content_list ); return $params; } } PK'Zǵ__,model/export/class-ai1wm-export-database.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Database { public static function execute( $params ) { global $wpdb; // Set exclude database if ( isset( $params['options']['no_database'] ) ) { return $params; } // Set query offset if ( isset( $params['query_offset'] ) ) { $query_offset = (int) $params['query_offset']; } else { $query_offset = 0; } // Set table index if ( isset( $params['table_index'] ) ) { $table_index = (int) $params['table_index']; } else { $table_index = 0; } // Set table offset if ( isset( $params['table_offset'] ) ) { $table_offset = (int) $params['table_offset']; } else { $table_offset = 0; } // Set table rows if ( isset( $params['table_rows'] ) ) { $table_rows = (int) $params['table_rows']; } else { $table_rows = 0; } // Set total tables count if ( isset( $params['total_tables_count'] ) ) { $total_tables_count = (int) $params['total_tables_count']; } else { $total_tables_count = 1; } // What percent of tables have we processed? $progress = (int) ( ( $table_index / $total_tables_count ) * 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Exporting database...
%d%% complete
%s records saved', AI1WM_PLUGIN_NAME ), $progress, number_format_i18n( $table_rows ) ) ); // Get tables list file $tables_list = ai1wm_open( ai1wm_tables_list_path( $params ), 'r' ); // Loop over tables $tables = array(); while ( list( $table_name ) = fgetcsv( $tables_list ) ) { $tables[] = $table_name; } // Close the tables list file ai1wm_close( $tables_list ); // Get database client if ( empty( $wpdb->use_mysqli ) ) { $mysql = new Ai1wm_Database_Mysql( $wpdb ); } else { $mysql = new Ai1wm_Database_Mysqli( $wpdb ); } // Exclude spam comments if ( isset( $params['options']['no_spam_comments'] ) ) { $mysql->set_table_where_query( ai1wm_table_prefix() . 'comments', "`comment_approved` != 'spam'" ) ->set_table_where_query( ai1wm_table_prefix() . 'commentmeta', sprintf( "`comment_ID` IN ( SELECT `comment_ID` FROM `%s` WHERE `comment_approved` != 'spam' )", ai1wm_table_prefix() . 'comments' ) ); } // Exclude post revisions if ( isset( $params['options']['no_post_revisions'] ) ) { $mysql->set_table_where_query( ai1wm_table_prefix() . 'posts', "`post_type` != 'revision'" ); } $old_table_prefixes = $old_column_prefixes = array(); $new_table_prefixes = $new_column_prefixes = array(); // Set table prefixes if ( ai1wm_table_prefix() ) { $old_table_prefixes[] = ai1wm_table_prefix(); $new_table_prefixes[] = ai1wm_servmask_prefix(); } else { foreach ( $tables as $table_name ) { $old_table_prefixes[] = $table_name; $new_table_prefixes[] = ai1wm_servmask_prefix() . $table_name; } } // Set column prefixes if ( strlen( ai1wm_table_prefix() ) > 1 ) { $old_column_prefixes[] = ai1wm_table_prefix(); $new_column_prefixes[] = ai1wm_servmask_prefix(); } else { foreach ( array( 'user_roles', 'capabilities', 'user_level', 'dashboard_quick_press_last_post_id', 'user-settings', 'user-settings-time' ) as $column_prefix ) { $old_column_prefixes[] = ai1wm_table_prefix() . $column_prefix; $new_column_prefixes[] = ai1wm_servmask_prefix() . $column_prefix; } } $mysql->set_tables( $tables ) ->set_old_table_prefixes( $old_table_prefixes ) ->set_new_table_prefixes( $new_table_prefixes ) ->set_old_column_prefixes( $old_column_prefixes ) ->set_new_column_prefixes( $new_column_prefixes ); // Exclude column prefixes $mysql->set_reserved_column_prefixes( array( 'wp_force_deactivated_plugins', 'wp_page_for_privacy_policy' ) ); // Exclude site options $mysql->set_table_where_query( ai1wm_table_prefix() . 'options', sprintf( "`option_name` NOT IN ('%s', '%s', '%s', '%s', '%s', '%s')", AI1WM_STATUS, AI1WM_SECRET_KEY, AI1WM_AUTH_USER, AI1WM_AUTH_PASSWORD, AI1WM_BACKUPS_LABELS, AI1WM_SITES_LINKS ) ); // Set table select columns if ( ( $column_names = $mysql->get_column_names( ai1wm_table_prefix() . 'options' ) ) ) { if ( isset( $column_names['option_name'], $column_names['option_value'] ) ) { $column_names['option_value'] = sprintf( "(CASE WHEN option_name = '%s' THEN 'a:0:{}' WHEN (option_name = '%s' OR option_name = '%s') THEN '' ELSE option_value END) AS option_value", AI1WM_ACTIVE_PLUGINS, AI1WM_ACTIVE_TEMPLATE, AI1WM_ACTIVE_STYLESHEET ); } $mysql->set_table_select_columns( ai1wm_table_prefix() . 'options', $column_names ); } // Set table prefix columns $mysql->set_table_prefix_columns( ai1wm_table_prefix() . 'options', array( 'option_name' ) ) ->set_table_prefix_columns( ai1wm_table_prefix() . 'usermeta', array( 'meta_key' ) ); // Export database if ( $mysql->export( ai1wm_database_path( $params ), $query_offset, $table_index, $table_offset, $table_rows ) ) { // Set progress Ai1wm_Status::info( __( 'Done exporting database.', AI1WM_PLUGIN_NAME ) ); // Unset query offset unset( $params['query_offset'] ); // Unset table index unset( $params['table_index'] ); // Unset table offset unset( $params['table_offset'] ); // Unset table rows unset( $params['table_rows'] ); // Unset total tables count unset( $params['total_tables_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // What percent of tables have we processed? $progress = (int) ( ( $table_index / $total_tables_count ) * 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Exporting database...
%d%% complete
%s records saved', AI1WM_PLUGIN_NAME ), $progress, number_format_i18n( $table_rows ) ) ); // Set query offset $params['query_offset'] = $query_offset; // Set table index $params['table_index'] = $table_index; // Set table offset $params['table_offset'] = $table_offset; // Set table rows $params['table_rows'] = $table_rows; // Set total tables count $params['total_tables_count'] = $total_tables_count; // Set completed flag $params['completed'] = false; } return $params; } } PK'Z>\z ,model/export/class-ai1wm-export-download.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Download { public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Renaming exported file...', AI1WM_PLUGIN_NAME ) ); // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Append EOF block $archive->close( true ); // Rename archive file if ( rename( ai1wm_archive_path( $params ), ai1wm_backup_path( $params ) ) ) { $blog_id = null; // Get subsite Blog ID if ( isset( $params['options']['sites'] ) && ( $sites = $params['options']['sites'] ) ) { if ( count( $sites ) === 1 ) { $blog_id = array_shift( $sites ); } } // Set archive details $file = ai1wm_archive_name( $params ); $link = ai1wm_backup_url( $params ); $size = ai1wm_backup_size( $params ); $name = ai1wm_site_name( $blog_id ); // Set progress Ai1wm_Status::download( sprintf( __( '' . 'Download %s' . 'Size: %s' . '', AI1WM_PLUGIN_NAME ), $link, $name, $file, $name, $size ) ); } do_action( 'ai1wm_status_export_done', $params ); return $params; } } PK'Z}g)model/export/class-ai1wm-export-clean.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Clean { public static function execute( $params ) { // Delete storage files Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); // Exit in console if ( defined( 'WP_CLI' ) ) { return $params; } exit; } } PK'ZF[;M, , +model/export/class-ai1wm-export-archive.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Archive { public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Creating an empty archive...', AI1WM_PLUGIN_NAME ) ); // Create empty archive file $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); $archive->close(); // Set progress Ai1wm_Status::info( __( 'Done creating an empty archive.', AI1WM_PLUGIN_NAME ) ); return $params; } } PK'Z{{{3model/export/class-ai1wm-export-enumerate-media.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Enumerate_Media { public static function execute( $params ) { $exclude_filters = array(); // Get total media files count if ( isset( $params['total_media_files_count'] ) ) { $total_media_files_count = (int) $params['total_media_files_count']; } else { $total_media_files_count = 1; } // Get total media files size if ( isset( $params['total_media_files_size'] ) ) { $total_media_files_size = (int) $params['total_media_files_size']; } else { $total_media_files_size = 1; } // Set progress Ai1wm_Status::info( __( 'Retrieving a list of WordPress media files...', AI1WM_PLUGIN_NAME ) ); // Exclude selected files if ( isset( $params['options']['exclude_files'], $params['excluded_files'] ) ) { if ( ( $excluded_files = explode( ',', $params['excluded_files'] ) ) ) { foreach ( $excluded_files as $excluded_path ) { $exclude_filters[] = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . untrailingslashit( $excluded_path ); } } } // Create media list file $media_list = ai1wm_open( ai1wm_media_list_path( $params ), 'w' ); // Enumerate over media directory if ( isset( $params['options']['no_media'] ) === false ) { if ( is_dir( ai1wm_get_uploads_dir() ) ) { // Iterate over media directory $iterator = new Ai1wm_Recursive_Directory_Iterator( ai1wm_get_uploads_dir() ); // Exclude media files $iterator = new Ai1wm_Recursive_Exclude_Filter( $iterator, apply_filters( 'ai1wm_exclude_media_from_export', ai1wm_media_filters( $exclude_filters ) ) ); // Recursively iterate over content directory $iterator = new Ai1wm_Recursive_Iterator_Iterator( $iterator, RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD ); // Write path line foreach ( $iterator as $item ) { if ( $item->isFile() ) { if ( ai1wm_putcsv( $media_list, array( $iterator->getPathname(), $iterator->getSubPathname(), $iterator->getSize(), $iterator->getMTime() ) ) ) { $total_media_files_count++; // Add current file size $total_media_files_size += $iterator->getSize(); } } } } } // Set progress Ai1wm_Status::info( __( 'Done retrieving a list of WordPress media files.', AI1WM_PLUGIN_NAME ) ); // Set total media files count $params['total_media_files_count'] = $total_media_files_count; // Set total media files size $params['total_media_files_size'] = $total_media_files_size; // Close the media list file ai1wm_close( $media_list ); return $params; } } PK'ZLHr5model/export/class-ai1wm-export-enumerate-plugins.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Enumerate_Plugins { public static function execute( $params ) { $exclude_filters = array(); // Get total plugins files count if ( isset( $params['total_plugins_files_count'] ) ) { $total_plugins_files_count = (int) $params['total_plugins_files_count']; } else { $total_plugins_files_count = 1; } // Get total plugins files size if ( isset( $params['total_plugins_files_size'] ) ) { $total_plugins_files_size = (int) $params['total_plugins_files_size']; } else { $total_plugins_files_size = 1; } // Set progress Ai1wm_Status::info( __( 'Retrieving a list of WordPress plugin files...', AI1WM_PLUGIN_NAME ) ); // Exclude inactive plugins if ( isset( $params['options']['no_inactive_plugins'] ) ) { foreach ( get_plugins() as $plugin_name => $plugin_info ) { if ( is_plugin_inactive( $plugin_name ) ) { $exclude_filters[] = ( dirname( $plugin_name ) === '.' ? basename( $plugin_name ) : dirname( $plugin_name ) ); } } } // Exclude selected files if ( isset( $params['options']['exclude_files'], $params['excluded_files'] ) ) { if ( ( $excluded_files = explode( ',', $params['excluded_files'] ) ) ) { foreach ( $excluded_files as $excluded_path ) { $exclude_filters[] = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . untrailingslashit( $excluded_path ); } } } // Create plugins list file $plugins_list = ai1wm_open( ai1wm_plugins_list_path( $params ), 'w' ); // Enumerate over plugins directory if ( isset( $params['options']['no_plugins'] ) === false ) { // Iterate over plugins directory $iterator = new Ai1wm_Recursive_Directory_Iterator( ai1wm_get_plugins_dir() ); // Exclude plugins files $iterator = new Ai1wm_Recursive_Exclude_Filter( $iterator, apply_filters( 'ai1wm_exclude_plugins_from_export', ai1wm_plugin_filters( $exclude_filters ) ) ); // Recursively iterate over plugins directory $iterator = new Ai1wm_Recursive_Iterator_Iterator( $iterator, RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD ); // Write path line foreach ( $iterator as $item ) { if ( $item->isFile() ) { if ( ai1wm_putcsv( $plugins_list, array( $iterator->getPathname(), $iterator->getSubPathname(), $iterator->getSize(), $iterator->getMTime() ) ) ) { $total_plugins_files_count++; // Add current file size $total_plugins_files_size += $iterator->getSize(); } } } } // Set progress Ai1wm_Status::info( __( 'Done retrieving a list of WordPress plugin files.', AI1WM_PLUGIN_NAME ) ); // Set total plugins files count $params['total_plugins_files_count'] = $total_plugins_files_count; // Set total plugins files size $params['total_plugins_files_size'] = $total_plugins_files_size; // Close the plugins list file ai1wm_close( $plugins_list ); return $params; } } PK'Zo)2??*model/export/class-ai1wm-export-themes.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Themes { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set themes bytes offset if ( isset( $params['themes_bytes_offset'] ) ) { $themes_bytes_offset = (int) $params['themes_bytes_offset']; } else { $themes_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total themes files size if ( isset( $params['total_themes_files_size'] ) ) { $total_themes_files_size = (int) $params['total_themes_files_size']; } else { $total_themes_files_size = 1; } // Get total themes files count if ( isset( $params['total_themes_files_count'] ) ) { $total_themes_files_count = (int) $params['total_themes_files_count']; } else { $total_themes_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_themes_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d theme files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_themes_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get themes list file $themes_list = ai1wm_open( ai1wm_themes_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $themes_list, $themes_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = fgetcsv( $themes_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, 'themes' . DIRECTORY_SEPARATOR . $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get themes bytes offset $themes_bytes_offset = ftell( $themes_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_themes_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d theme files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_themes_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the themes list? if ( feof( $themes_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset themes bytes offset unset( $params['themes_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total themes files size unset( $params['total_themes_files_size'] ); // Unset total themes files count unset( $params['total_themes_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set themes bytes offset $params['themes_bytes_offset'] = $themes_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total themes files size $params['total_themes_files_size'] = $total_themes_files_size; // Set total themes files count $params['total_themes_files_count'] = $total_themes_files_count; // Set completed flag $params['completed'] = $completed; } // Close the themes list file ai1wm_close( $themes_list ); return $params; } } PK'ZukPP1model/export/class-ai1wm-export-database-file.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Database_File { public static function execute( $params ) { // Set exclude database if ( isset( $params['options']['no_database'] ) ) { return $params; } $database_bytes_written = 0; // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set database bytes offset if ( isset( $params['database_bytes_offset'] ) ) { $database_bytes_offset = (int) $params['database_bytes_offset']; } else { $database_bytes_offset = 0; } // Get total database size if ( isset( $params['total_database_size'] ) ) { $total_database_size = (int) $params['total_database_size']; } else { $total_database_size = ai1wm_database_bytes( $params ); } // What percent of database have we processed? $progress = (int) min( ( $database_bytes_offset / $total_database_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving database...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Add database.sql to archive if ( $archive->add_file( ai1wm_database_path( $params ), AI1WM_DATABASE_NAME, $database_bytes_written, $database_bytes_offset ) ) { // Set progress Ai1wm_Status::info( __( 'Done archiving database.', AI1WM_PLUGIN_NAME ) ); // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset database bytes offset unset( $params['database_bytes_offset'] ); // Unset total database size unset( $params['total_database_size'] ); // Unset completed flag unset( $params['completed'] ); } else { // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // What percent of database have we processed? $progress = (int) min( ( $database_bytes_offset / $total_database_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving database...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set database bytes offset $params['database_bytes_offset'] = $database_bytes_offset; // Set total database size $params['total_database_size'] = $total_database_size; // Set completed flag $params['completed'] = false; } // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); return $params; } } PK'Z!烘4model/export/class-ai1wm-export-enumerate-tables.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Enumerate_Tables { public static function execute( $params, Ai1wm_Database $mysql = null ) { global $wpdb; // Set exclude database if ( isset( $params['options']['no_database'] ) ) { return $params; } // Get total tables count if ( isset( $params['total_tables_count'] ) ) { $total_tables_count = (int) $params['total_tables_count']; } else { $total_tables_count = 1; } // Set progress Ai1wm_Status::info( __( 'Retrieving a list of WordPress database tables...', AI1WM_PLUGIN_NAME ) ); // Get database client if ( is_null( $mysql ) ) { if ( empty( $wpdb->use_mysqli ) ) { $mysql = new Ai1wm_Database_Mysql( $wpdb ); } else { $mysql = new Ai1wm_Database_Mysqli( $wpdb ); } } // Include table prefixes if ( ai1wm_table_prefix() ) { $mysql->add_table_prefix_filter( ai1wm_table_prefix() ); // Include table prefixes (Webba Booking) foreach ( array( 'wbk_services', 'wbk_days_on_off', 'wbk_locked_time_slots', 'wbk_appointments', 'wbk_cancelled_appointments', 'wbk_email_templates', 'wbk_service_categories', 'wbk_gg_calendars', 'wbk_coupons' ) as $table_name ) { $mysql->add_table_prefix_filter( $table_name ); } } // Create tables list file $tables_list = ai1wm_open( ai1wm_tables_list_path( $params ), 'w' ); // Exclude selected db tables $excluded_db_tables = array(); if ( isset( $params['options']['exclude_db_tables'], $params['excluded_db_tables'] ) ) { $excluded_db_tables = explode( ',', $params['excluded_db_tables'] ); } // Write table line foreach ( $mysql->get_tables() as $table_name ) { if ( ! in_array( $table_name, $excluded_db_tables ) && ai1wm_putcsv( $tables_list, array( $table_name ) ) ) { $total_tables_count++; } } // Set progress Ai1wm_Status::info( __( 'Done retrieving a list of WordPress database tables.', AI1WM_PLUGIN_NAME ) ); // Set total tables count $params['total_tables_count'] = $total_tables_count; // Close the tables list file ai1wm_close( $tables_list ); return $params; } } PK'Zd)model/export/class-ai1wm-export-media.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Media { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set media bytes offset if ( isset( $params['media_bytes_offset'] ) ) { $media_bytes_offset = (int) $params['media_bytes_offset']; } else { $media_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total media files size if ( isset( $params['total_media_files_size'] ) ) { $total_media_files_size = (int) $params['total_media_files_size']; } else { $total_media_files_size = 1; } // Get total media files count if ( isset( $params['total_media_files_count'] ) ) { $total_media_files_count = (int) $params['total_media_files_count']; } else { $total_media_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_media_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d media files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_media_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get media list file $media_list = ai1wm_open( ai1wm_media_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $media_list, $media_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = fgetcsv( $media_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, 'uploads' . DIRECTORY_SEPARATOR . $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get media bytes offset $media_bytes_offset = ftell( $media_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_media_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d media files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_media_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the media list? if ( feof( $media_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset media bytes offset unset( $params['media_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total media files size unset( $params['total_media_files_size'] ); // Unset total media files count unset( $params['total_media_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set media bytes offset $params['media_bytes_offset'] = $media_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total media files size $params['total_media_files_size'] = $total_media_files_size; // Set total media files count $params['total_media_files_count'] = $total_media_files_count; // Set completed flag $params['completed'] = $completed; } // Close the media list file ai1wm_close( $media_list ); return $params; } } PK'Zm! /model/export/class-ai1wm-export-config-file.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Config_File { public static function execute( $params ) { $package_bytes_written = 0; // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set package bytes offset if ( isset( $params['package_bytes_offset'] ) ) { $package_bytes_offset = (int) $params['package_bytes_offset']; } else { $package_bytes_offset = 0; } // Get total package size if ( isset( $params['total_package_size'] ) ) { $total_package_size = (int) $params['total_package_size']; } else { $total_package_size = ai1wm_package_bytes( $params ); } // What percent of package have we processed? $progress = (int) min( ( $package_bytes_offset / $total_package_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving configuration file...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Add package.json to archive if ( $archive->add_file( ai1wm_package_path( $params ), AI1WM_PACKAGE_NAME, $package_bytes_written, $package_bytes_offset ) ) { // Set progress Ai1wm_Status::info( __( 'Done archiving configuration file.', AI1WM_PLUGIN_NAME ) ); // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset package bytes offset unset( $params['package_bytes_offset'] ); // Unset total package size unset( $params['total_package_size'] ); // Unset completed flag unset( $params['completed'] ); } else { // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // What percent of package have we processed? $progress = (int) min( ( $package_bytes_offset / $total_package_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving configuration file...
%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) ); // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set package bytes offset $params['package_bytes_offset'] = $package_bytes_offset; // Set total package size $params['total_package_size'] = $total_package_size; // Set completed flag $params['completed'] = false; } // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); return $params; } } PK'Zזrr+model/export/class-ai1wm-export-plugins.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Plugins { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set plugins bytes offset if ( isset( $params['plugins_bytes_offset'] ) ) { $plugins_bytes_offset = (int) $params['plugins_bytes_offset']; } else { $plugins_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total plugins files size if ( isset( $params['total_plugins_files_size'] ) ) { $total_plugins_files_size = (int) $params['total_plugins_files_size']; } else { $total_plugins_files_size = 1; } // Get total plugins files count if ( isset( $params['total_plugins_files_count'] ) ) { $total_plugins_files_count = (int) $params['total_plugins_files_count']; } else { $total_plugins_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_plugins_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d plugin files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_plugins_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get plugins list file $plugins_list = ai1wm_open( ai1wm_plugins_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $plugins_list, $plugins_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = fgetcsv( $plugins_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, 'plugins' . DIRECTORY_SEPARATOR . $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get plugins bytes offset $plugins_bytes_offset = ftell( $plugins_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_plugins_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d plugin files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_plugins_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the plugins list? if ( feof( $plugins_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset plugins bytes offset unset( $params['plugins_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total plugins files size unset( $params['total_plugins_files_size'] ); // Unset total plugins files count unset( $params['total_plugins_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set plugins bytes offset $params['plugins_bytes_offset'] = $plugins_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total plugins files size $params['total_plugins_files_size'] = $total_plugins_files_size; // Set total plugins files count $params['total_plugins_files_count'] = $total_plugins_files_count; // Set completed flag $params['completed'] = $completed; } // Close the plugins list file ai1wm_close( $plugins_list ); return $params; } } PK'Zndd4model/export/class-ai1wm-export-enumerate-themes.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Enumerate_Themes { public static function execute( $params ) { $exclude_filters = array(); // Get total themes files count if ( isset( $params['total_themes_files_count'] ) ) { $total_themes_files_count = (int) $params['total_themes_files_count']; } else { $total_themes_files_count = 1; } // Get total themes files size if ( isset( $params['total_themes_files_size'] ) ) { $total_themes_files_size = (int) $params['total_themes_files_size']; } else { $total_themes_files_size = 1; } // Set progress Ai1wm_Status::info( __( 'Retrieving a list of WordPress theme files...', AI1WM_PLUGIN_NAME ) ); // Exclude inactive themes if ( isset( $params['options']['no_inactive_themes'] ) ) { foreach ( search_theme_directories() as $theme_name => $theme_info ) { if ( ! in_array( $theme_name, array( get_template(), get_stylesheet() ) ) ) { if ( isset( $theme_info['theme_root'] ) ) { $exclude_filters[] = $theme_info['theme_root'] . DIRECTORY_SEPARATOR . $theme_name; } } } } // Exclude selected files if ( isset( $params['options']['exclude_files'], $params['excluded_files'] ) ) { if ( ( $excluded_files = explode( ',', $params['excluded_files'] ) ) ) { foreach ( $excluded_files as $excluded_path ) { $exclude_filters[] = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . untrailingslashit( $excluded_path ); } } } // Create themes list file $themes_list = ai1wm_open( ai1wm_themes_list_path( $params ), 'w' ); // Enumerate over themes directory if ( isset( $params['options']['no_themes'] ) === false ) { foreach ( ai1wm_get_themes_dirs() as $theme_dir ) { if ( is_dir( $theme_dir ) ) { // Iterate over themes directory $iterator = new Ai1wm_Recursive_Directory_Iterator( $theme_dir ); // Exclude themes files $iterator = new Ai1wm_Recursive_Exclude_Filter( $iterator, apply_filters( 'ai1wm_exclude_themes_from_export', ai1wm_theme_filters( $exclude_filters ) ) ); // Recursively iterate over themes directory $iterator = new Ai1wm_Recursive_Iterator_Iterator( $iterator, RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD ); // Write path line foreach ( $iterator as $item ) { if ( $item->isFile() ) { if ( ai1wm_putcsv( $themes_list, array( $iterator->getPathname(), $iterator->getSubPathname(), $iterator->getSize(), $iterator->getMTime() ) ) ) { $total_themes_files_count++; // Add current file size $total_themes_files_size += $iterator->getSize(); } } } } } } // Set progress Ai1wm_Status::info( __( 'Done retrieving a list of WordPress theme files.', AI1WM_PLUGIN_NAME ) ); // Set total themes files count $params['total_themes_files_count'] = $total_themes_files_count; // Set total themes files size $params['total_themes_files_size'] = $total_themes_files_size; // Close the themes list file ai1wm_close( $themes_list ); return $params; } } PK'Z?&, , 1model/export/class-ai1wm-export-compatibility.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Compatibility { public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Checking extensions compatibility...', AI1WM_PLUGIN_NAME ) ); // Get messages $messages = Ai1wm_Compatibility::get( $params ); // Set messages if ( empty( $messages ) ) { return $params; } // Error message throw new Ai1wm_Compatibility_Exception( implode( $messages ) ); } } PK'Z= (model/export/class-ai1wm-export-init.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Init { public static function execute( $params ) { $blog_id = null; // Get subsite Blog ID if ( isset( $params['options']['sites'] ) && ( $sites = $params['options']['sites'] ) ) { if ( count( $sites ) === 1 ) { $blog_id = array_shift( $sites ); } } // Set progress Ai1wm_Status::info( __( 'Preparing to export...', AI1WM_PLUGIN_NAME ) ); // Set archive if ( empty( $params['archive'] ) ) { $params['archive'] = ai1wm_archive_file( $blog_id ); } // Set storage if ( empty( $params['storage'] ) ) { $params['storage'] = ai1wm_storage_folder(); } return $params; } } PK'Za# ll5model/export/class-ai1wm-export-enumerate-content.phpnuW+A. * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Enumerate_Content { public static function execute( $params ) { $exclude_filters = array_merge( array( ai1wm_get_uploads_dir(), ai1wm_get_plugins_dir() ), ai1wm_get_themes_dirs() ); // Get total content files count if ( isset( $params['total_content_files_count'] ) ) { $total_content_files_count = (int) $params['total_content_files_count']; } else { $total_content_files_count = 1; } // Get total content files size if ( isset( $params['total_content_files_size'] ) ) { $total_content_files_size = (int) $params['total_content_files_size']; } else { $total_content_files_size = 1; } // Set progress Ai1wm_Status::info( __( 'Retrieving a list of WordPress content files...', AI1WM_PLUGIN_NAME ) ); // Exclude cache if ( isset( $params['options']['no_cache'] ) ) { $exclude_filters[] = 'cache'; } // Exclude must-use plugins if ( isset( $params['options']['no_muplugins'] ) ) { $exclude_filters[] = 'mu-plugins'; } // Exclude media if ( isset( $params['options']['no_media'] ) ) { $exclude_filters[] = 'blogs.dir'; } // Exclude selected files if ( isset( $params['options']['exclude_files'], $params['excluded_files'] ) ) { if ( ( $excluded_files = explode( ',', $params['excluded_files'] ) ) ) { foreach ( $excluded_files as $excluded_path ) { $exclude_filters[] = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . untrailingslashit( $excluded_path ); } } } // Create content list file $content_list = ai1wm_open( ai1wm_content_list_path( $params ), 'w' ); // Enumerate over content directory if ( isset( $params['options']['no_themes'], $params['options']['no_muplugins'], $params['options']['no_plugins'] ) === false ) { // Iterate over content directory $iterator = new Ai1wm_Recursive_Directory_Iterator( WP_CONTENT_DIR ); // Exclude content files $iterator = new Ai1wm_Recursive_Exclude_Filter( $iterator, apply_filters( 'ai1wm_exclude_content_from_export', ai1wm_content_filters( $exclude_filters ) ) ); // Recursively iterate over content directory $iterator = new Ai1wm_Recursive_Iterator_Iterator( $iterator, RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD ); // Write path line foreach ( $iterator as $item ) { if ( $item->isFile() ) { if ( ai1wm_putcsv( $content_list, array( $iterator->getPathname(), $iterator->getSubPathname(), $iterator->getSize(), $iterator->getMTime() ) ) ) { $total_content_files_count++; // Add current file size $total_content_files_size += $iterator->getSize(); } } } } // Set progress Ai1wm_Status::info( __( 'Done retrieving a list of WordPress content files.', AI1WM_PLUGIN_NAME ) ); // Set total content files count $params['total_content_files_count'] = $total_content_files_count; // Set total content files size $params['total_content_files_size'] = $total_content_files_size; // Close the content list file ai1wm_close( $content_list ); return $params; } } PKZZlo<<Sabberworm/CSS/Settings.phpnuW+AbMultibyteSupport = extension_loaded('mbstring'); } public static function create() { return new Settings(); } public function withMultibyteSupport($bMultibyteSupport = true) { $this->bMultibyteSupport = $bMultibyteSupport; return $this; } public function withDefaultCharset($sDefaultCharset) { $this->sDefaultCharset = $sDefaultCharset; return $this; } public function withLenientParsing($bLenientParsing = true) { $this->bLenientParsing = $bLenientParsing; return $this; } public function beStrict() { return $this->withLenientParsing(false); } }PKZZYh(Sabberworm/CSS/Property/CSSNamespace.phpnuW+AmUrl = $mUrl; $this->sPrefix = $sPrefix; $this->iLineNo = $iLineNo; $this->aComments = array(); } /** * @return int */ public function getLineNo() { return $this->iLineNo; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { return '@namespace '.($this->sPrefix === null ? '' : $this->sPrefix.' ').$this->mUrl->render($oOutputFormat).';'; } public function getUrl() { return $this->mUrl; } public function getPrefix() { return $this->sPrefix; } public function setUrl($mUrl) { $this->mUrl = $mUrl; } public function setPrefix($sPrefix) { $this->sPrefix = $sPrefix; } public function atRuleName() { return 'namespace'; } public function atRuleArgs() { $aResult = array($this->mUrl); if($this->sPrefix) { array_unshift($aResult, $this->sPrefix); } return $aResult; } public function addComments(array $aComments) { $this->aComments = array_merge($this->aComments, $aComments); } public function getComments() { return $this->aComments; } public function setComments(array $aComments) { $this->aComments = $aComments; } }PKZZK44$Sabberworm/CSS/Property/Selector.phpnuW+A\~]+)[\w]+ # elements | \:{1,2}( # pseudo-elements after|before|first-letter|first-line|selection )) /ix'; private $sSelector; private $iSpecificity; public function __construct($sSelector, $bCalculateSpecificity = false) { $this->setSelector($sSelector); if ($bCalculateSpecificity) { $this->getSpecificity(); } } public function getSelector() { return $this->sSelector; } public function setSelector($sSelector) { $this->sSelector = trim($sSelector); $this->iSpecificity = null; } public function __toString() { return $this->getSelector(); } public function getSpecificity() { if ($this->iSpecificity === null) { $a = 0; /// @todo should exclude \# as well as "#" $aMatches = null; $b = substr_count($this->sSelector, '#'); $c = preg_match_all(self::NON_ID_ATTRIBUTES_AND_PSEUDO_CLASSES_RX, $this->sSelector, $aMatches); $d = preg_match_all(self::ELEMENTS_AND_PSEUDO_ELEMENTS_RX, $this->sSelector, $aMatches); $this->iSpecificity = ($a * 1000) + ($b * 100) + ($c * 10) + $d; } return $this->iSpecificity; } } PKZZG'oo#Sabberworm/CSS/Property/Charset.phpnuW+AsCharset = $sCharset; $this->iLineNo = $iLineNo; $this->aComments = array(); } /** * @return int */ public function getLineNo() { return $this->iLineNo; } public function setCharset($sCharset) { $this->sCharset = $sCharset; } public function getCharset() { return $this->sCharset; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { return "@charset {$this->sCharset->render($oOutputFormat)};"; } public function atRuleName() { return 'charset'; } public function atRuleArgs() { return $this->sCharset; } public function addComments(array $aComments) { $this->aComments = array_merge($this->aComments, $aComments); } public function getComments() { return $this->aComments; } public function setComments(array $aComments) { $this->aComments = $aComments; } }PKZZ ;[["Sabberworm/CSS/Property/AtRule.phpnuW+AoLocation = $oLocation; $this->sMediaQuery = $sMediaQuery; $this->iLineNo = $iLineNo; $this->aComments = array(); } /** * @return int */ public function getLineNo() { return $this->iLineNo; } public function setLocation($oLocation) { $this->oLocation = $oLocation; } public function getLocation() { return $this->oLocation; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { return "@import ".$this->oLocation->render($oOutputFormat).($this->sMediaQuery === null ? '' : ' '.$this->sMediaQuery).';'; } public function atRuleName() { return 'import'; } public function atRuleArgs() { $aResult = array($this->oLocation); if($this->sMediaQuery) { array_push($aResult, $this->sMediaQuery); } return $aResult; } public function addComments(array $aComments) { $this->aComments = array_merge($this->aComments, $aComments); } public function getComments() { return $this->aComments; } public function setComments(array $aComments) { $this->aComments = $aComments; } }PKZZ@vvSabberworm/CSS/Parser.phpnuW+AoParserState = new ParserState($sText, $oParserSettings, $iLineNo); } public function setCharset($sCharset) { $this->oParserState->setCharset($sCharset); } public function getCharset() { $this->oParserState->getCharset(); } public function parse() { return Document::parse($this->oParserState); } } PKZZ |2 &Sabberworm/CSS/Parsing/ParserState.phpnuW+AoParserSettings = $oParserSettings; $this->sText = $sText; $this->iCurrentPosition = 0; $this->iLineNo = $iLineNo; $this->setCharset($this->oParserSettings->sDefaultCharset); } public function setCharset($sCharset) { $this->sCharset = $sCharset; $this->aText = $this->strsplit($this->sText); $this->iLength = count($this->aText); } public function getCharset() { $this->oParserHelper->getCharset(); return $this->sCharset; } public function currentLine() { return $this->iLineNo; } public function getSettings() { return $this->oParserSettings; } public function parseIdentifier($bIgnoreCase = true) { $sResult = $this->parseCharacter(true); if ($sResult === null) { throw new UnexpectedTokenException($sResult, $this->peek(5), 'identifier', $this->iLineNo); } $sCharacter = null; while (($sCharacter = $this->parseCharacter(true)) !== null) { $sResult .= $sCharacter; } if ($bIgnoreCase) { $sResult = $this->strtolower($sResult); } return $sResult; } public function parseCharacter($bIsForIdentifier) { if ($this->peek() === '\\') { if ($bIsForIdentifier && $this->oParserSettings->bLenientParsing && ($this->comes('\0') || $this->comes('\9'))) { // Non-strings can contain \0 or \9 which is an IE hack supported in lenient parsing. return null; } $this->consume('\\'); if ($this->comes('\n') || $this->comes('\r')) { return ''; } if (preg_match('/[0-9a-fA-F]/Su', $this->peek()) === 0) { return $this->consume(1); } $sUnicode = $this->consumeExpression('/^[0-9a-fA-F]{1,6}/u', 6); if ($this->strlen($sUnicode) < 6) { //Consume whitespace after incomplete unicode escape if (preg_match('/\\s/isSu', $this->peek())) { if ($this->comes('\r\n')) { $this->consume(2); } else { $this->consume(1); } } } $iUnicode = intval($sUnicode, 16); $sUtf32 = ""; for ($i = 0; $i < 4; ++$i) { $sUtf32 .= chr($iUnicode & 0xff); $iUnicode = $iUnicode >> 8; } return iconv('utf-32le', $this->sCharset, $sUtf32); } if ($bIsForIdentifier) { $peek = ord($this->peek()); // Ranges: a-z A-Z 0-9 - _ if (($peek >= 97 && $peek <= 122) || ($peek >= 65 && $peek <= 90) || ($peek >= 48 && $peek <= 57) || ($peek === 45) || ($peek === 95) || ($peek > 0xa1)) { return $this->consume(1); } } else { return $this->consume(1); } return null; } public function consumeWhiteSpace() { $comments = array(); do { while (preg_match('/\\s/isSu', $this->peek()) === 1) { $this->consume(1); } if($this->oParserSettings->bLenientParsing) { try { $oComment = $this->consumeComment(); } catch(UnexpectedTokenException $e) { // When we can’t find the end of a comment, we assume the document is finished. $this->iCurrentPosition = $this->iLength; return; } } else { $oComment = $this->consumeComment(); } if ($oComment !== false) { $comments[] = $oComment; } } while($oComment !== false); return $comments; } public function comes($sString, $bCaseInsensitive = false) { $sPeek = $this->peek(strlen($sString)); return ($sPeek == '') ? false : $this->streql($sPeek, $sString, $bCaseInsensitive); } public function peek($iLength = 1, $iOffset = 0) { $iOffset += $this->iCurrentPosition; if ($iOffset >= $this->iLength) { return ''; } return $this->substr($iOffset, $iLength); } public function consume($mValue = 1) { if (is_string($mValue)) { $iLineCount = substr_count($mValue, "\n"); $iLength = $this->strlen($mValue); if (!$this->streql($this->substr($this->iCurrentPosition, $iLength), $mValue)) { throw new UnexpectedTokenException($mValue, $this->peek(max($iLength, 5)), $this->iLineNo); } $this->iLineNo += $iLineCount; $this->iCurrentPosition += $this->strlen($mValue); return $mValue; } else { if ($this->iCurrentPosition + $mValue > $this->iLength) { throw new UnexpectedTokenException($mValue, $this->peek(5), 'count', $this->iLineNo); } $sResult = $this->substr($this->iCurrentPosition, $mValue); $iLineCount = substr_count($sResult, "\n"); $this->iLineNo += $iLineCount; $this->iCurrentPosition += $mValue; return $sResult; } } public function consumeExpression($mExpression, $iMaxLength = null) { $aMatches = null; $sInput = $iMaxLength !== null ? $this->peek($iMaxLength) : $this->inputLeft(); if (preg_match($mExpression, $sInput, $aMatches, PREG_OFFSET_CAPTURE) === 1) { return $this->consume($aMatches[0][0]); } throw new UnexpectedTokenException($mExpression, $this->peek(5), 'expression', $this->iLineNo); } /** * @return false|Comment */ public function consumeComment() { $mComment = false; if ($this->comes('/*')) { $iLineNo = $this->iLineNo; $this->consume(1); $mComment = ''; while (($char = $this->consume(1)) !== '') { $mComment .= $char; if ($this->comes('*/')) { $this->consume(2); break; } } } if ($mComment !== false) { // We skip the * which was included in the comment. return new Comment(substr($mComment, 1), $iLineNo); } return $mComment; } public function isEnd() { return $this->iCurrentPosition >= $this->iLength; } public function consumeUntil($aEnd, $bIncludeEnd = false, $consumeEnd = false, array &$comments = array()) { $aEnd = is_array($aEnd) ? $aEnd : array($aEnd); $out = ''; $start = $this->iCurrentPosition; while (($char = $this->consume(1)) !== '') { if (in_array($char, $aEnd)) { if ($bIncludeEnd) { $out .= $char; } elseif (!$consumeEnd) { $this->iCurrentPosition -= $this->strlen($char); } return $out; } $out .= $char; if ($comment = $this->consumeComment()) { $comments[] = $comment; } } $this->iCurrentPosition = $start; throw new UnexpectedTokenException('One of ("'.implode('","', $aEnd).'")', $this->peek(5), 'search', $this->iLineNo); } private function inputLeft() { return $this->substr($this->iCurrentPosition, -1); } public function streql($sString1, $sString2, $bCaseInsensitive = true) { if($bCaseInsensitive) { return $this->strtolower($sString1) === $this->strtolower($sString2); } else { return $sString1 === $sString2; } } public function backtrack($iAmount) { $this->iCurrentPosition -= $iAmount; } public function strlen($sString) { if ($this->oParserSettings->bMultibyteSupport) { return mb_strlen($sString, $this->sCharset); } else { return strlen($sString); } } private function substr($iStart, $iLength) { if ($iLength < 0) { $iLength = $this->iLength - $iStart + $iLength; } if ($iStart + $iLength > $this->iLength) { $iLength = $this->iLength - $iStart; } $sResult = ''; while ($iLength > 0) { $sResult .= $this->aText[$iStart]; $iStart++; $iLength--; } return $sResult; } private function strtolower($sString) { if ($this->oParserSettings->bMultibyteSupport) { return mb_strtolower($sString, $this->sCharset); } else { return strtolower($sString); } } private function strsplit($sString) { if ($this->oParserSettings->bMultibyteSupport) { if ($this->streql($this->sCharset, 'utf-8')) { return preg_split('//u', $sString, null, PREG_SPLIT_NO_EMPTY); } else { $iLength = mb_strlen($sString, $this->sCharset); $aResult = array(); for ($i = 0; $i < $iLength; ++$i) { $aResult[] = mb_substr($sString, $i, 1, $this->sCharset); } return $aResult; } } else { if($sString === '') { return array(); } else { return str_split($sString); } } } private function strpos($sString, $sNeedle, $iOffset) { if ($this->oParserSettings->bMultibyteSupport) { return mb_strpos($sString, $sNeedle, $iOffset, $this->sCharset); } else { return strpos($sString, $sNeedle, $iOffset); } } }PKZZ_TOO3Sabberworm/CSS/Parsing/UnexpectedTokenException.phpnuW+AsExpected = $sExpected; $this->sFound = $sFound; $this->sMatchType = $sMatchType; $sMessage = "Token “{$sExpected}” ({$sMatchType}) not found. Got “{$sFound}”."; if($this->sMatchType === 'search') { $sMessage = "Search for “{$sExpected}” returned no results. Context: “{$sFound}”."; } else if($this->sMatchType === 'count') { $sMessage = "Next token was expected to have {$sExpected} chars. Context: “{$sFound}”."; } else if($this->sMatchType === 'identifier') { $sMessage = "Identifier expected. Got “{$sFound}”"; } else if($this->sMatchType === 'custom') { $sMessage = trim("$sExpected $sFound"); } parent::__construct($sMessage, $iLineNo); } }PKZZ|e4ee*Sabberworm/CSS/Parsing/SourceException.phpnuW+AiLineNo = $iLineNo; if (!empty($iLineNo)) { $sMessage .= " [line no: $iLineNo]"; } parent::__construct($sMessage); } public function getLineNo() { return $this->iLineNo; } }PKZZ|>  *Sabberworm/CSS/Parsing/OutputException.phpnuW+AsRule = $sRule; $this->mValue = null; $this->bIsImportant = false; $this->aIeHack = array(); $this->iLineNo = $iLineNo; $this->aComments = array(); } public static function parse(ParserState $oParserState) { $aComments = $oParserState->consumeWhiteSpace(); $oRule = new Rule($oParserState->parseIdentifier(), $oParserState->currentLine()); $oRule->setComments($aComments); $oRule->addComments($oParserState->consumeWhiteSpace()); $oParserState->consume(':'); $oValue = Value::parseValue($oParserState, self::listDelimiterForRule($oRule->getRule())); $oRule->setValue($oValue); if ($oParserState->getSettings()->bLenientParsing) { while ($oParserState->comes('\\')) { $oParserState->consume('\\'); $oRule->addIeHack($oParserState->consume()); $oParserState->consumeWhiteSpace(); } } $oParserState->consumeWhiteSpace(); if ($oParserState->comes('!')) { $oParserState->consume('!'); $oParserState->consumeWhiteSpace(); $oParserState->consume('important'); $oRule->setIsImportant(true); } $oParserState->consumeWhiteSpace(); while ($oParserState->comes(';')) { $oParserState->consume(';'); } $oParserState->consumeWhiteSpace(); return $oRule; } private static function listDelimiterForRule($sRule) { if (preg_match('/^font($|-)/', $sRule)) { return array(',', '/', ' '); } return array(',', ' ', '/'); } /** * @return int */ public function getLineNo() { return $this->iLineNo; } public function setRule($sRule) { $this->sRule = $sRule; } public function getRule() { return $this->sRule; } public function getValue() { return $this->mValue; } public function setValue($mValue) { $this->mValue = $mValue; } /** * @deprecated Old-Style 2-dimensional array given. Retained for (some) backwards-compatibility. Use setValue() instead and wrapp the value inside a RuleValueList if necessary. */ public function setValues($aSpaceSeparatedValues) { $oSpaceSeparatedList = null; if (count($aSpaceSeparatedValues) > 1) { $oSpaceSeparatedList = new RuleValueList(' ', $this->iLineNo); } foreach ($aSpaceSeparatedValues as $aCommaSeparatedValues) { $oCommaSeparatedList = null; if (count($aCommaSeparatedValues) > 1) { $oCommaSeparatedList = new RuleValueList(',', $this->iLineNo); } foreach ($aCommaSeparatedValues as $mValue) { if (!$oSpaceSeparatedList && !$oCommaSeparatedList) { $this->mValue = $mValue; return $mValue; } if ($oCommaSeparatedList) { $oCommaSeparatedList->addListComponent($mValue); } else { $oSpaceSeparatedList->addListComponent($mValue); } } if (!$oSpaceSeparatedList) { $this->mValue = $oCommaSeparatedList; return $oCommaSeparatedList; } else { $oSpaceSeparatedList->addListComponent($oCommaSeparatedList); } } $this->mValue = $oSpaceSeparatedList; return $oSpaceSeparatedList; } /** * @deprecated Old-Style 2-dimensional array returned. Retained for (some) backwards-compatibility. Use getValue() instead and check for the existance of a (nested set of) ValueList object(s). */ public function getValues() { if (!$this->mValue instanceof RuleValueList) { return array(array($this->mValue)); } if ($this->mValue->getListSeparator() === ',') { return array($this->mValue->getListComponents()); } $aResult = array(); foreach ($this->mValue->getListComponents() as $mValue) { if (!$mValue instanceof RuleValueList || $mValue->getListSeparator() !== ',') { $aResult[] = array($mValue); continue; } if ($this->mValue->getListSeparator() === ' ' || count($aResult) === 0) { $aResult[] = array(); } foreach ($mValue->getListComponents() as $mValue) { $aResult[count($aResult) - 1][] = $mValue; } } return $aResult; } /** * Adds a value to the existing value. Value will be appended if a RuleValueList exists of the given type. Otherwise, the existing value will be wrapped by one. */ public function addValue($mValue, $sType = ' ') { if (!is_array($mValue)) { $mValue = array($mValue); } if (!$this->mValue instanceof RuleValueList || $this->mValue->getListSeparator() !== $sType) { $mCurrentValue = $this->mValue; $this->mValue = new RuleValueList($sType, $this->iLineNo); if ($mCurrentValue) { $this->mValue->addListComponent($mCurrentValue); } } foreach ($mValue as $mValueItem) { $this->mValue->addListComponent($mValueItem); } } public function addIeHack($iModifier) { $this->aIeHack[] = $iModifier; } public function setIeHack(array $aModifiers) { $this->aIeHack = $aModifiers; } public function getIeHack() { return $this->aIeHack; } public function setIsImportant($bIsImportant) { $this->bIsImportant = $bIsImportant; } public function getIsImportant() { return $this->bIsImportant; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $sResult = "{$this->sRule}:{$oOutputFormat->spaceAfterRuleName()}"; if ($this->mValue instanceof Value) { //Can also be a ValueList $sResult .= $this->mValue->render($oOutputFormat); } else { $sResult .= $this->mValue; } if (!empty($this->aIeHack)) { $sResult .= ' \\' . implode('\\', $this->aIeHack); } if ($this->bIsImportant) { $sResult .= ' !important'; } $sResult .= ';'; return $sResult; } /** * @param array $aComments Array of comments. */ public function addComments(array $aComments) { $this->aComments = array_merge($this->aComments, $aComments); } /** * @return array */ public function getComments() { return $this->aComments; } /** * @param array $aComments Array containing Comment objects. */ public function setComments(array $aComments) { $this->aComments = $aComments; } } PKZZݨ/"/"Sabberworm/CSS/OutputFormat.phpnuW+Aset('Space*Rules', "\n");`) */ public $sSpaceAfterRuleName = ' '; public $sSpaceBeforeRules = ''; public $sSpaceAfterRules = ''; public $sSpaceBetweenRules = ''; public $sSpaceBeforeBlocks = ''; public $sSpaceAfterBlocks = ''; public $sSpaceBetweenBlocks = "\n"; // Content injected in and around @-rule blocks. public $sBeforeAtRuleBlock = ''; public $sAfterAtRuleBlock = ''; // This is what’s printed before and after the comma if a declaration block contains multiple selectors. public $sSpaceBeforeSelectorSeparator = ''; public $sSpaceAfterSelectorSeparator = ' '; // This is what’s printed after the comma of value lists public $sSpaceBeforeListArgumentSeparator = ''; public $sSpaceAfterListArgumentSeparator = ''; public $sSpaceBeforeOpeningBrace = ' '; // Content injected in and around declaration blocks. public $sBeforeDeclarationBlock = ''; public $sAfterDeclarationBlockSelectors = ''; public $sAfterDeclarationBlock = ''; /** * Indentation */ // Indentation character(s) per level. Only applicable if newlines are used in any of the spacing settings. public $sIndentation = "\t"; /** * Output exceptions. */ public $bIgnoreExceptions = false; private $oFormatter = null; private $oNextLevelFormat = null; private $iIndentationLevel = 0; public function __construct() { } public function get($sName) { $aVarPrefixes = array('a', 's', 'm', 'b', 'f', 'o', 'c', 'i'); foreach($aVarPrefixes as $sPrefix) { $sFieldName = $sPrefix.ucfirst($sName); if(isset($this->$sFieldName)) { return $this->$sFieldName; } } return null; } public function set($aNames, $mValue) { $aVarPrefixes = array('a', 's', 'm', 'b', 'f', 'o', 'c', 'i'); if(is_string($aNames) && strpos($aNames, '*') !== false) { $aNames = array(str_replace('*', 'Before', $aNames), str_replace('*', 'Between', $aNames), str_replace('*', 'After', $aNames)); } else if(!is_array($aNames)) { $aNames = array($aNames); } foreach($aVarPrefixes as $sPrefix) { $bDidReplace = false; foreach($aNames as $sName) { $sFieldName = $sPrefix.ucfirst($sName); if(isset($this->$sFieldName)) { $this->$sFieldName = $mValue; $bDidReplace = true; } } if($bDidReplace) { return $this; } } // Break the chain so the user knows this option is invalid return false; } public function __call($sMethodName, $aArguments) { if(strpos($sMethodName, 'set') === 0) { return $this->set(substr($sMethodName, 3), $aArguments[0]); } else if(strpos($sMethodName, 'get') === 0) { return $this->get(substr($sMethodName, 3)); } else if(method_exists('\\Sabberworm\\CSS\\OutputFormatter', $sMethodName)) { return call_user_func_array(array($this->getFormatter(), $sMethodName), $aArguments); } else { throw new \Exception('Unknown OutputFormat method called: '.$sMethodName); } } public function indentWithTabs($iNumber = 1) { return $this->setIndentation(str_repeat("\t", $iNumber)); } public function indentWithSpaces($iNumber = 2) { return $this->setIndentation(str_repeat(" ", $iNumber)); } public function nextLevel() { if($this->oNextLevelFormat === null) { $this->oNextLevelFormat = clone $this; $this->oNextLevelFormat->iIndentationLevel++; $this->oNextLevelFormat->oFormatter = null; } return $this->oNextLevelFormat; } public function beLenient() { $this->bIgnoreExceptions = true; } public function getFormatter() { if($this->oFormatter === null) { $this->oFormatter = new OutputFormatter($this); } return $this->oFormatter; } public function level() { return $this->iIndentationLevel; } /** * Create format. * * @return OutputFormat Format. */ public static function create() { return new OutputFormat(); } /** * Create compact format. * * @return OutputFormat Format. */ public static function createCompact() { $format = self::create(); $format->set('Space*Rules', "")->set('Space*Blocks', "")->setSpaceAfterRuleName('')->setSpaceBeforeOpeningBrace('')->setSpaceAfterSelectorSeparator(''); return $format; } /** * Create pretty format. * * @return OutputFormat Format. */ public static function createPretty() { $format = self::create(); $format->set('Space*Rules', "\n")->set('Space*Blocks', "\n")->setSpaceBetweenBlocks("\n\n")->set('SpaceAfterListArgumentSeparator', array('default' => '', ',' => ' ')); return $format; } } class OutputFormatter { private $oFormat; public function __construct(OutputFormat $oFormat) { $this->oFormat = $oFormat; } public function space($sName, $sType = null) { $sSpaceString = $this->oFormat->get("Space$sName"); // If $sSpaceString is an array, we have multple values configured depending on the type of object the space applies to if(is_array($sSpaceString)) { if($sType !== null && isset($sSpaceString[$sType])) { $sSpaceString = $sSpaceString[$sType]; } else { $sSpaceString = reset($sSpaceString); } } return $this->prepareSpace($sSpaceString); } public function spaceAfterRuleName() { return $this->space('AfterRuleName'); } public function spaceBeforeRules() { return $this->space('BeforeRules'); } public function spaceAfterRules() { return $this->space('AfterRules'); } public function spaceBetweenRules() { return $this->space('BetweenRules'); } public function spaceBeforeBlocks() { return $this->space('BeforeBlocks'); } public function spaceAfterBlocks() { return $this->space('AfterBlocks'); } public function spaceBetweenBlocks() { return $this->space('BetweenBlocks'); } public function spaceBeforeSelectorSeparator() { return $this->space('BeforeSelectorSeparator'); } public function spaceAfterSelectorSeparator() { return $this->space('AfterSelectorSeparator'); } public function spaceBeforeListArgumentSeparator($sSeparator) { return $this->space('BeforeListArgumentSeparator', $sSeparator); } public function spaceAfterListArgumentSeparator($sSeparator) { return $this->space('AfterListArgumentSeparator', $sSeparator); } public function spaceBeforeOpeningBrace() { return $this->space('BeforeOpeningBrace'); } /** * Runs the given code, either swallowing or passing exceptions, depending on the bIgnoreExceptions setting. */ public function safely($cCode) { if($this->oFormat->get('IgnoreExceptions')) { // If output exceptions are ignored, run the code with exception guards try { return $cCode(); } catch (OutputException $e) { return null; } //Do nothing } else { // Run the code as-is return $cCode(); } } /** * Clone of the implode function but calls ->render with the current output format instead of __toString() */ public function implode($sSeparator, $aValues, $bIncreaseLevel = false) { $sResult = ''; $oFormat = $this->oFormat; if($bIncreaseLevel) { $oFormat = $oFormat->nextLevel(); } $bIsFirst = true; foreach($aValues as $mValue) { if($bIsFirst) { $bIsFirst = false; } else { $sResult .= $sSeparator; } if($mValue instanceof \Sabberworm\CSS\Renderable) { $sResult .= $mValue->render($oFormat); } else { $sResult .= $mValue; } } return $sResult; } public function removeLastSemicolon($sString) { if($this->oFormat->get('SemicolonAfterLastRule')) { return $sString; } $sString = explode(';', $sString); if(count($sString) < 2) { return $sString[0]; } $sLast = array_pop($sString); $sNextToLast = array_pop($sString); array_push($sString, $sNextToLast.$sLast); return implode(';', $sString); } private function prepareSpace($sSpaceString) { return str_replace("\n", "\n".$this->indent(), $sSpaceString); } private function indent() { return str_repeat($this->oFormat->sIndentation, $this->oFormat->level()); } } PKZZtؽSabberworm/CSS/Renderable.phpnuW+AsComment = $sComment; $this->iLineNo = $iLineNo; } /** * @return string */ public function getComment() { return $this->sComment; } /** * @return int */ public function getLineNo() { return $this->iLineNo; } /** * @return string */ public function setComment($sComment) { $this->sComment = $sComment; } /** * @return string */ public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } /** * @return string */ public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { return '/*' . $this->sComment . '*/'; } } PKZZr'Sabberworm/CSS/Value/PrimitiveValue.phpnuW+AaComponents = $aComponents; $this->sSeparator = $sSeparator; } public function addListComponent($mComponent) { $this->aComponents[] = $mComponent; } public function getListComponents() { return $this->aComponents; } public function setListComponents($aComponents) { $this->aComponents = $aComponents; } public function getListSeparator() { return $this->sSeparator; } public function setListSeparator($sSeparator) { $this->sSeparator = $sSeparator; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { return $oOutputFormat->implode($oOutputFormat->spaceBeforeListArgumentSeparator($this->sSeparator) . $this->sSeparator . $oOutputFormat->spaceAfterListArgumentSeparator($this->sSeparator), $this->aComponents); } } PKZZTBJP P Sabberworm/CSS/Value/Color.phpnuW+Acomes('#')) { $oParserState->consume('#'); $sValue = $oParserState->parseIdentifier(false); if ($oParserState->strlen($sValue) === 3) { $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2]; } else if ($oParserState->strlen($sValue) === 4) { $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2] . $sValue[3] . $sValue[3]; } if ($oParserState->strlen($sValue) === 8) { $aColor = array( 'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()), 'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()), 'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine()), 'a' => new Size(round(self::mapRange(intval($sValue[6] . $sValue[7], 16), 0, 255, 0, 1), 2), null, true, $oParserState->currentLine()) ); } else { $aColor = array( 'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()), 'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()), 'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine()) ); } } else { $sColorMode = $oParserState->parseIdentifier(true); $oParserState->consumeWhiteSpace(); $oParserState->consume('('); $iLength = $oParserState->strlen($sColorMode); for ($i = 0; $i < $iLength; ++$i) { $oParserState->consumeWhiteSpace(); $aColor[$sColorMode[$i]] = Size::parse($oParserState, true); $oParserState->consumeWhiteSpace(); if ($i < ($iLength - 1)) { $oParserState->consume(','); } } $oParserState->consume(')'); } return new Color($aColor, $oParserState->currentLine()); } private static function mapRange($fVal, $fFromMin, $fFromMax, $fToMin, $fToMax) { $fFromRange = $fFromMax - $fFromMin; $fToRange = $fToMax - $fToMin; $fMultiplier = $fToRange / $fFromRange; $fNewVal = $fVal - $fFromMin; $fNewVal *= $fMultiplier; return $fNewVal + $fToMin; } public function getColor() { return $this->aComponents; } public function setColor($aColor) { $this->setName(implode('', array_keys($aColor))); $this->aComponents = $aColor; } public function getColorDescription() { return $this->getName(); } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { // Shorthand RGB color values if($oOutputFormat->getRGBHashNotation() && implode('', array_keys($this->aComponents)) === 'rgb') { $sResult = sprintf( '%02x%02x%02x', $this->aComponents['r']->getSize(), $this->aComponents['g']->getSize(), $this->aComponents['b']->getSize() ); return '#'.(($sResult[0] == $sResult[1]) && ($sResult[2] == $sResult[3]) && ($sResult[4] == $sResult[5]) ? "$sResult[0]$sResult[2]$sResult[4]" : $sResult); } return parent::render($oOutputFormat); } } PKZZ;99Sabberworm/CSS/Value/URL.phpnuW+AoURL = $oURL; } public static function parse(ParserState $oParserState) { $bUseUrl = $oParserState->comes('url', true); if ($bUseUrl) { $oParserState->consume('url'); $oParserState->consumeWhiteSpace(); $oParserState->consume('('); } $oParserState->consumeWhiteSpace(); $oResult = new URL(CSSString::parse($oParserState), $oParserState->currentLine()); if ($bUseUrl) { $oParserState->consumeWhiteSpace(); $oParserState->consume(')'); } return $oResult; } public function setURL(CSSString $oURL) { $this->oURL = $oURL; } public function getURL() { return $this->oURL; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { return "url({$this->oURL->render($oOutputFormat)})"; } }PKZZrXX!Sabberworm/CSS/Value/LineName.phpnuW+Aconsume('['); $oParserState->consumeWhiteSpace(); $aNames = array(); do { if($oParserState->getSettings()->bLenientParsing) { try { $aNames[] = $oParserState->parseIdentifier(); } catch(UnexpectedTokenException $e) {} } else { $aNames[] = $oParserState->parseIdentifier(); } $oParserState->consumeWhiteSpace(); } while (!$oParserState->comes(']')); $oParserState->consume(']'); return new LineName($aNames, $oParserState->currentLine()); } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { return '[' . parent::render(\Sabberworm\CSS\OutputFormat::createCompact()) . ']'; } } PKZZLDmm%Sabberworm/CSS/Value/CalcFunction.phpnuW+AconsumeUntil('(', false, true)); $oCalcList = new CalcRuleValueList($oParserState->currentLine()); $oList = new RuleValueList(',', $oParserState->currentLine()); $iNestingLevel = 0; $iLastComponentType = NULL; while(!$oParserState->comes(')') || $iNestingLevel > 0) { $oParserState->consumeWhiteSpace(); if ($oParserState->comes('(')) { $iNestingLevel++; $oCalcList->addListComponent($oParserState->consume(1)); continue; } else if ($oParserState->comes(')')) { $iNestingLevel--; $oCalcList->addListComponent($oParserState->consume(1)); continue; } if ($iLastComponentType != CalcFunction::T_OPERAND) { $oVal = Value::parsePrimitiveValue($oParserState); $oCalcList->addListComponent($oVal); $iLastComponentType = CalcFunction::T_OPERAND; } else { if (in_array($oParserState->peek(), $aOperators)) { if (($oParserState->comes('-') || $oParserState->comes('+'))) { if ($oParserState->peek(1, -1) != ' ' || !($oParserState->comes('- ') || $oParserState->comes('+ '))) { throw new UnexpectedTokenException(" {$oParserState->peek()} ", $oParserState->peek(1, -1) . $oParserState->peek(2), 'literal', $oParserState->currentLine()); } } $oCalcList->addListComponent($oParserState->consume(1)); $iLastComponentType = CalcFunction::T_OPERATOR; } else { throw new UnexpectedTokenException( sprintf( 'Next token was expected to be an operand of type %s. Instead "%s" was found.', implode(', ', $aOperators), $oVal ), '', 'custom', $oParserState->currentLine() ); } } } $oList->addListComponent($oCalcList); $oParserState->consume(')'); return new CalcFunction($sFunction, $oList, ',', $oParserState->currentLine()); } } PKZZ.O&Sabberworm/CSS/Value/RuleValueList.phpnuW+AsString = $sString; parent::__construct($iLineNo); } public static function parse(ParserState $oParserState) { $sBegin = $oParserState->peek(); $sQuote = null; if ($sBegin === "'") { $sQuote = "'"; } else if ($sBegin === '"') { $sQuote = '"'; } if ($sQuote !== null) { $oParserState->consume($sQuote); } $sResult = ""; $sContent = null; if ($sQuote === null) { // Unquoted strings end in whitespace or with braces, brackets, parentheses while (!preg_match('/[\\s{}()<>\\[\\]]/isu', $oParserState->peek())) { $sResult .= $oParserState->parseCharacter(false); } } else { while (!$oParserState->comes($sQuote)) { $sContent = $oParserState->parseCharacter(false); if ($sContent === null) { throw new SourceException("Non-well-formed quoted string {$oParserState->peek(3)}", $oParserState->currentLine()); } $sResult .= $sContent; } $oParserState->consume($sQuote); } return new CSSString($sResult, $oParserState->currentLine()); } public function setString($sString) { $this->sString = $sString; } public function getString() { return $this->sString; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $sString = addslashes($this->sString); $sString = str_replace("\n", '\A', $sString); return $oOutputFormat->getStringQuotingType() . $sString . $oOutputFormat->getStringQuotingType(); } }PKZZ}T$$Sabberworm/CSS/Value/Value.phpnuW+AiLineNo = $iLineNo; } public static function parseValue(ParserState $oParserState, $aListDelimiters = array()) { $aStack = array(); $oParserState->consumeWhiteSpace(); //Build a list of delimiters and parsed values while (!($oParserState->comes('}') || $oParserState->comes(';') || $oParserState->comes('!') || $oParserState->comes(')') || $oParserState->comes('\\'))) { if (count($aStack) > 0) { $bFoundDelimiter = false; foreach ($aListDelimiters as $sDelimiter) { if ($oParserState->comes($sDelimiter)) { array_push($aStack, $oParserState->consume($sDelimiter)); $oParserState->consumeWhiteSpace(); $bFoundDelimiter = true; break; } } if (!$bFoundDelimiter) { //Whitespace was the list delimiter array_push($aStack, ' '); } } array_push($aStack, self::parsePrimitiveValue($oParserState)); $oParserState->consumeWhiteSpace(); } //Convert the list to list objects foreach ($aListDelimiters as $sDelimiter) { if (count($aStack) === 1) { return $aStack[0]; } $iStartPosition = null; while (($iStartPosition = array_search($sDelimiter, $aStack, true)) !== false) { $iLength = 2; //Number of elements to be joined for ($i = $iStartPosition + 2; $i < count($aStack); $i+=2, ++$iLength) { if ($sDelimiter !== $aStack[$i]) { break; } } $oList = new RuleValueList($sDelimiter, $oParserState->currentLine()); for ($i = $iStartPosition - 1; $i - $iStartPosition + 1 < $iLength * 2; $i+=2) { $oList->addListComponent($aStack[$i]); } array_splice($aStack, $iStartPosition - 1, $iLength * 2 - 1, array($oList)); } } if (!isset($aStack[0])) { throw new UnexpectedTokenException(" {$oParserState->peek()} ", $oParserState->peek(1, -1) . $oParserState->peek(2), 'literal', $oParserState->currentLine()); } return $aStack[0]; } public static function parseIdentifierOrFunction(ParserState $oParserState, $bIgnoreCase = false) { $sResult = $oParserState->parseIdentifier($bIgnoreCase); if ($oParserState->comes('(')) { $oParserState->consume('('); $aArguments = Value::parseValue($oParserState, array('=', ' ', ',')); $sResult = new CSSFunction($sResult, $aArguments, ',', $oParserState->currentLine()); $oParserState->consume(')'); } return $sResult; } public static function parsePrimitiveValue(ParserState $oParserState) { $oValue = null; $oParserState->consumeWhiteSpace(); if (is_numeric($oParserState->peek()) || ($oParserState->comes('-.') && is_numeric($oParserState->peek(1, 2))) || (($oParserState->comes('-') || $oParserState->comes('.')) && is_numeric($oParserState->peek(1, 1)))) { $oValue = Size::parse($oParserState); } else if ($oParserState->comes('#') || $oParserState->comes('rgb', true) || $oParserState->comes('hsl', true)) { $oValue = Color::parse($oParserState); } else if ($oParserState->comes('url', true)) { $oValue = URL::parse($oParserState); } else if ($oParserState->comes('calc', true) || $oParserState->comes('-webkit-calc', true) || $oParserState->comes('-moz-calc', true)) { $oValue = CalcFunction::parse($oParserState); } else if ($oParserState->comes("'") || $oParserState->comes('"')) { $oValue = CSSString::parse($oParserState); } else if ($oParserState->comes("progid:") && $oParserState->getSettings()->bLenientParsing) { $oValue = self::parseMicrosoftFilter($oParserState); } else if ($oParserState->comes("[")) { $oValue = LineName::parse($oParserState); } else if ($oParserState->comes("U+")) { $oValue = self::parseUnicodeRangeValue($oParserState); } else { $oValue = self::parseIdentifierOrFunction($oParserState); } $oParserState->consumeWhiteSpace(); return $oValue; } private static function parseMicrosoftFilter(ParserState $oParserState) { $sFunction = $oParserState->consumeUntil('(', false, true); $aArguments = Value::parseValue($oParserState, array(',', '=')); return new CSSFunction($sFunction, $aArguments, ',', $oParserState->currentLine()); } private static function parseUnicodeRangeValue(ParserState $oParserState) { $iCodepointMaxLenth = 6; // Code points outside BMP can use up to six digits $sRange = ""; $oParserState->consume("U+"); do { if ($oParserState->comes('-')) $iCodepointMaxLenth = 13; // Max length is 2 six digit code points + the dash(-) between them $sRange .= $oParserState->consume(1); } while (strlen($sRange) < $iCodepointMaxLenth && preg_match("/[A-Fa-f0-9\?-]/", $oParserState->peek())); return "U+{$sRange}"; } /** * @return int */ public function getLineNo() { return $this->iLineNo; } //Methods are commented out because re-declaring them here is a fatal error in PHP < 5.3.9 //public abstract function __toString(); //public abstract function render(\Sabberworm\CSS\OutputFormat $oOutputFormat); } PKZZ=g@@*Sabberworm/CSS/Value/CalcRuleValueList.phpnuW+Aimplode(' ', $this->aComponents); } } PKZZ"pm m Sabberworm/CSS/Value/Size.phpnuW+AfSize = floatval($fSize); $this->sUnit = $sUnit; $this->bIsColorComponent = $bIsColorComponent; } public static function parse(ParserState $oParserState, $bIsColorComponent = false) { $sSize = ''; if ($oParserState->comes('-')) { $sSize .= $oParserState->consume('-'); } while (is_numeric($oParserState->peek()) || $oParserState->comes('.')) { if ($oParserState->comes('.')) { $sSize .= $oParserState->consume('.'); } else { $sSize .= $oParserState->consume(1); } } $sUnit = null; $aSizeUnits = self::getSizeUnits(); foreach($aSizeUnits as $iLength => &$aValues) { $sKey = strtolower($oParserState->peek($iLength)); if(array_key_exists($sKey, $aValues)) { if (($sUnit = $aValues[$sKey]) !== null) { $oParserState->consume($iLength); break; } } } return new Size(floatval($sSize), $sUnit, $bIsColorComponent, $oParserState->currentLine()); } private static function getSizeUnits() { if(self::$SIZE_UNITS === null) { self::$SIZE_UNITS = array(); foreach (explode('/', Size::ABSOLUTE_SIZE_UNITS.'/'.Size::RELATIVE_SIZE_UNITS.'/'.Size::NON_SIZE_UNITS) as $val) { $iSize = strlen($val); if(!isset(self::$SIZE_UNITS[$iSize])) { self::$SIZE_UNITS[$iSize] = array(); } self::$SIZE_UNITS[$iSize][strtolower($val)] = $val; } // FIXME: Should we not order the longest units first? ksort(self::$SIZE_UNITS, SORT_NUMERIC); } return self::$SIZE_UNITS; } public function setUnit($sUnit) { $this->sUnit = $sUnit; } public function getUnit() { return $this->sUnit; } public function setSize($fSize) { $this->fSize = floatval($fSize); } public function getSize() { return $this->fSize; } public function isColorComponent() { return $this->bIsColorComponent; } /** * Returns whether the number stored in this Size really represents a size (as in a length of something on screen). * @return false if the unit an angle, a duration, a frequency or the number is a component in a Color object. */ public function isSize() { if (in_array($this->sUnit, explode('/', self::NON_SIZE_UNITS))) { return false; } return !$this->isColorComponent(); } public function isRelative() { if (in_array($this->sUnit, explode('/', self::RELATIVE_SIZE_UNITS))) { return true; } if ($this->sUnit === null && $this->fSize != 0) { return true; } return false; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $l = localeconv(); $sPoint = preg_quote($l['decimal_point'], '/'); return preg_replace(array("/$sPoint/", "/^(-?)0\./"), array('.', '$1.'), $this->fSize) . ($this->sUnit === null ? '' : $this->sUnit); } } PKZZ_iK$Sabberworm/CSS/Value/CSSFunction.phpnuW+AgetListSeparator(); $aArguments = $aArguments->getListComponents(); } $this->sName = $sName; $this->iLineNo = $iLineNo; parent::__construct($aArguments, $sSeparator, $iLineNo); } public function getName() { return $this->sName; } public function setName($sName) { $this->sName = $sName; } public function getArguments() { return $this->aComponents; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $aArguments = parent::render($oOutputFormat); return "{$this->sName}({$aArguments})"; } } PKZZq ` #Sabberworm/CSS/CSSList/Document.phpnuW+AcurrentLine()); CSSList::parseList($oParserState, $oDocument); return $oDocument; } /** * Gets all DeclarationBlock objects recursively. */ public function getAllDeclarationBlocks() { $aResult = array(); $this->allDeclarationBlocks($aResult); return $aResult; } /** * @deprecated use getAllDeclarationBlocks() */ public function getAllSelectors() { return $this->getAllDeclarationBlocks(); } /** * Returns all RuleSet objects found recursively in the tree. */ public function getAllRuleSets() { $aResult = array(); $this->allRuleSets($aResult); return $aResult; } /** * Returns all Value objects found recursively in the tree. * @param (object|string) $mElement the CSSList or RuleSet to start the search from (defaults to the whole document). If a string is given, it is used as rule name filter (@see{RuleSet->getRules()}). * @param (bool) $bSearchInFunctionArguments whether to also return Value objects used as Function arguments. */ public function getAllValues($mElement = null, $bSearchInFunctionArguments = false) { $sSearchString = null; if ($mElement === null) { $mElement = $this; } else if (is_string($mElement)) { $sSearchString = $mElement; $mElement = $this; } $aResult = array(); $this->allValues($mElement, $aResult, $sSearchString, $bSearchInFunctionArguments); return $aResult; } /** * Returns all Selector objects found recursively in the tree. * Note that this does not yield the full DeclarationBlock that the selector belongs to (and, currently, there is no way to get to that). * @param $sSpecificitySearch An optional filter by specificity. May contain a comparison operator and a number or just a number (defaults to "=="). * @example getSelectorsBySpecificity('>= 100') */ public function getSelectorsBySpecificity($sSpecificitySearch = null) { $aResult = array(); $this->allSelectors($aResult, $sSpecificitySearch); return $aResult; } /** * Expands all shorthand properties to their long value */ public function expandShorthands() { foreach ($this->getAllDeclarationBlocks() as $oDeclaration) { $oDeclaration->expandShorthands(); } } /** * Create shorthands properties whenever possible */ public function createShorthands() { foreach ($this->getAllDeclarationBlocks() as $oDeclaration) { $oDeclaration->createShorthands(); } } // Override render() to make format argument optional public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat = null) { if($oOutputFormat === null) { $oOutputFormat = new \Sabberworm\CSS\OutputFormat(); } return parent::render($oOutputFormat); } public function isRootList() { return true; } }PKZZ_]#Sabberworm/CSS/CSSList/KeyFrame.phpnuW+AvendorKeyFrame = null; $this->animationName = null; } public function setVendorKeyFrame($vendorKeyFrame) { $this->vendorKeyFrame = $vendorKeyFrame; } public function getVendorKeyFrame() { return $this->vendorKeyFrame; } public function setAnimationName($animationName) { $this->animationName = $animationName; } public function getAnimationName() { return $this->animationName; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $sResult = "@{$this->vendorKeyFrame} {$this->animationName}{$oOutputFormat->spaceBeforeOpeningBrace()}{"; $sResult .= parent::render($oOutputFormat); $sResult .= '}'; return $sResult; } public function isRootList() { return false; } public function atRuleName() { return $this->vendorKeyFrame; } public function atRuleArgs() { return $this->animationName; } } PKZZ;Y 'Sabberworm/CSS/CSSList/CSSBlockList.phpnuW+AaContents as $mContent) { if ($mContent instanceof DeclarationBlock) { $aResult[] = $mContent; } else if ($mContent instanceof CSSBlockList) { $mContent->allDeclarationBlocks($aResult); } } } protected function allRuleSets(&$aResult) { foreach ($this->aContents as $mContent) { if ($mContent instanceof RuleSet) { $aResult[] = $mContent; } else if ($mContent instanceof CSSBlockList) { $mContent->allRuleSets($aResult); } } } protected function allValues($oElement, &$aResult, $sSearchString = null, $bSearchInFunctionArguments = false) { if ($oElement instanceof CSSBlockList) { foreach ($oElement->getContents() as $oContent) { $this->allValues($oContent, $aResult, $sSearchString, $bSearchInFunctionArguments); } } else if ($oElement instanceof RuleSet) { foreach ($oElement->getRules($sSearchString) as $oRule) { $this->allValues($oRule, $aResult, $sSearchString, $bSearchInFunctionArguments); } } else if ($oElement instanceof Rule) { $this->allValues($oElement->getValue(), $aResult, $sSearchString, $bSearchInFunctionArguments); } else if ($oElement instanceof ValueList) { if ($bSearchInFunctionArguments || !($oElement instanceof CSSFunction)) { foreach ($oElement->getListComponents() as $mComponent) { $this->allValues($mComponent, $aResult, $sSearchString, $bSearchInFunctionArguments); } } } else { //Non-List Value or CSSString (CSS identifier) $aResult[] = $oElement; } } protected function allSelectors(&$aResult, $sSpecificitySearch = null) { $aDeclarationBlocks = array(); $this->allDeclarationBlocks($aDeclarationBlocks); foreach ($aDeclarationBlocks as $oBlock) { foreach ($oBlock->getSelectors() as $oSelector) { if ($sSpecificitySearch === null) { $aResult[] = $oSelector; } else { $sComparator = '==='; $aSpecificitySearch = explode(' ', $sSpecificitySearch); $iTargetSpecificity = $aSpecificitySearch[0]; if(count($aSpecificitySearch) > 1) { $sComparator = $aSpecificitySearch[0]; $iTargetSpecificity = $aSpecificitySearch[1]; } $iTargetSpecificity = (int)$iTargetSpecificity; $iSelectorSpecificity = $oSelector->getSpecificity(); $bMatches = false; switch($sComparator) { case '<=': $bMatches = $iSelectorSpecificity <= $iTargetSpecificity; break; case '<': $bMatches = $iSelectorSpecificity < $iTargetSpecificity; break; case '>=': $bMatches = $iSelectorSpecificity >= $iTargetSpecificity; break; case '>': $bMatches = $iSelectorSpecificity > $iTargetSpecificity; break; default: $bMatches = $iSelectorSpecificity === $iTargetSpecificity; break; } if ($bMatches) { $aResult[] = $oSelector; } } } } } } PKZZ_=i)i)"Sabberworm/CSS/CSSList/CSSList.phpnuW+AaComments = array(); $this->aContents = array(); $this->iLineNo = $iLineNo; } public static function parseList(ParserState $oParserState, CSSList $oList) { $bIsRoot = $oList instanceof Document; if(is_string($oParserState)) { $oParserState = new ParserState($oParserState); } $bLenientParsing = $oParserState->getSettings()->bLenientParsing; while(!$oParserState->isEnd()) { $comments = $oParserState->consumeWhiteSpace(); $oListItem = null; if($bLenientParsing) { try { $oListItem = self::parseListItem($oParserState, $oList); } catch (UnexpectedTokenException $e) { $oListItem = false; } } else { $oListItem = self::parseListItem($oParserState, $oList); } if($oListItem === null) { // List parsing finished return; } if($oListItem) { $oListItem->setComments($comments); $oList->append($oListItem); } $oParserState->consumeWhiteSpace(); } if(!$bIsRoot && !$bLenientParsing) { throw new SourceException("Unexpected end of document", $oParserState->currentLine()); } } private static function parseListItem(ParserState $oParserState, CSSList $oList) { $bIsRoot = $oList instanceof Document; if ($oParserState->comes('@')) { $oAtRule = self::parseAtRule($oParserState); if($oAtRule instanceof Charset) { if(!$bIsRoot) { throw new UnexpectedTokenException('@charset may only occur in root document', '', 'custom', $oParserState->currentLine()); } if(count($oList->getContents()) > 0) { throw new UnexpectedTokenException('@charset must be the first parseable token in a document', '', 'custom', $oParserState->currentLine()); } $oParserState->setCharset($oAtRule->getCharset()->getString()); } return $oAtRule; } else if ($oParserState->comes('}')) { $oParserState->consume('}'); if ($bIsRoot) { if ($oParserState->getSettings()->bLenientParsing) { while ($oParserState->comes('}')) $oParserState->consume('}'); return DeclarationBlock::parse($oParserState); } else { throw new SourceException("Unopened {", $oParserState->currentLine()); } } else { return null; } } else { return DeclarationBlock::parse($oParserState); } } private static function parseAtRule(ParserState $oParserState) { $oParserState->consume('@'); $sIdentifier = $oParserState->parseIdentifier(); $iIdentifierLineNum = $oParserState->currentLine(); $oParserState->consumeWhiteSpace(); if ($sIdentifier === 'import') { $oLocation = URL::parse($oParserState); $oParserState->consumeWhiteSpace(); $sMediaQuery = null; if (!$oParserState->comes(';')) { $sMediaQuery = $oParserState->consumeUntil(';'); } $oParserState->consume(';'); return new Import($oLocation, $sMediaQuery, $iIdentifierLineNum); } else if ($sIdentifier === 'charset') { $sCharset = CSSString::parse($oParserState); $oParserState->consumeWhiteSpace(); $oParserState->consume(';'); return new Charset($sCharset, $iIdentifierLineNum); } else if (self::identifierIs($sIdentifier, 'keyframes')) { $oResult = new KeyFrame($iIdentifierLineNum); $oResult->setVendorKeyFrame($sIdentifier); $oResult->setAnimationName(trim($oParserState->consumeUntil('{', false, true))); CSSList::parseList($oParserState, $oResult); return $oResult; } else if ($sIdentifier === 'namespace') { $sPrefix = null; $mUrl = Value::parsePrimitiveValue($oParserState); if (!$oParserState->comes(';')) { $sPrefix = $mUrl; $mUrl = Value::parsePrimitiveValue($oParserState); } $oParserState->consume(';'); if ($sPrefix !== null && !is_string($sPrefix)) { throw new UnexpectedTokenException('Wrong namespace prefix', $sPrefix, 'custom', $iIdentifierLineNum); } if (!($mUrl instanceof CSSString || $mUrl instanceof URL)) { throw new UnexpectedTokenException('Wrong namespace url of invalid type', $mUrl, 'custom', $iIdentifierLineNum); } return new CSSNamespace($mUrl, $sPrefix, $iIdentifierLineNum); } else { //Unknown other at rule (font-face or such) $sArgs = trim($oParserState->consumeUntil('{', false, true)); if (substr_count($sArgs, "(") != substr_count($sArgs, ")")) { if($oParserState->getSettings()->bLenientParsing) { return NULL; } else { throw new SourceException("Unmatched brace count in media query", $oParserState->currentLine()); } } $bUseRuleSet = true; foreach(explode('/', AtRule::BLOCK_RULES) as $sBlockRuleName) { if(self::identifierIs($sIdentifier, $sBlockRuleName)) { $bUseRuleSet = false; break; } } if($bUseRuleSet) { $oAtRule = new AtRuleSet($sIdentifier, $sArgs, $iIdentifierLineNum); RuleSet::parseRuleSet($oParserState, $oAtRule); } else { $oAtRule = new AtRuleBlockList($sIdentifier, $sArgs, $iIdentifierLineNum); CSSList::parseList($oParserState, $oAtRule); } return $oAtRule; } } /** * Tests an identifier for a given value. Since identifiers are all keywords, they can be vendor-prefixed. We need to check for these versions too. */ private static function identifierIs($sIdentifier, $sMatch) { return (strcasecmp($sIdentifier, $sMatch) === 0) ?: preg_match("/^(-\\w+-)?$sMatch$/i", $sIdentifier) === 1; } /** * @return int */ public function getLineNo() { return $this->iLineNo; } /** * Prepend item to list of contents. * * @param object $oItem Item. */ public function prepend($oItem) { array_unshift($this->aContents, $oItem); } /** * Append item to list of contents. * * @param object $oItem Item. */ public function append($oItem) { $this->aContents[] = $oItem; } /** * Splice the list of contents. * * @param int $iOffset Offset. * @param int $iLength Length. Optional. * @param RuleSet[] $mReplacement Replacement. Optional. */ public function splice($iOffset, $iLength = null, $mReplacement = null) { array_splice($this->aContents, $iOffset, $iLength, $mReplacement); } /** * Removes an item from the CSS list. * @param RuleSet|Import|Charset|CSSList $oItemToRemove May be a RuleSet (most likely a DeclarationBlock), a Import, a Charset or another CSSList (most likely a MediaQuery) * @return bool Whether the item was removed. */ public function remove($oItemToRemove) { $iKey = array_search($oItemToRemove, $this->aContents, true); if ($iKey !== false) { unset($this->aContents[$iKey]); return true; } return false; } /** * Replaces an item from the CSS list. * @param RuleSet|Import|Charset|CSSList $oItemToRemove May be a RuleSet (most likely a DeclarationBlock), a Import, a Charset or another CSSList (most likely a MediaQuery) */ public function replace($oOldItem, $oNewItem) { $iKey = array_search($oOldItem, $this->aContents, true); if ($iKey !== false) { array_splice($this->aContents, $iKey, 1, $oNewItem); return true; } return false; } /** * Set the contents. * @param array $aContents Objects to set as content. */ public function setContents(array $aContents) { $this->aContents = array(); foreach ($aContents as $content) { $this->append($content); } } /** * Removes a declaration block from the CSS list if it matches all given selectors. * @param array|string $mSelector The selectors to match. * @param boolean $bRemoveAll Whether to stop at the first declaration block found or remove all blocks */ public function removeDeclarationBlockBySelector($mSelector, $bRemoveAll = false) { if ($mSelector instanceof DeclarationBlock) { $mSelector = $mSelector->getSelectors(); } if (!is_array($mSelector)) { $mSelector = explode(',', $mSelector); } foreach ($mSelector as $iKey => &$mSel) { if (!($mSel instanceof Selector)) { $mSel = new Selector($mSel); } } foreach ($this->aContents as $iKey => $mItem) { if (!($mItem instanceof DeclarationBlock)) { continue; } if ($mItem->getSelectors() == $mSelector) { unset($this->aContents[$iKey]); if (!$bRemoveAll) { return; } } } } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $sResult = ''; $bIsFirst = true; $oNextLevel = $oOutputFormat; if(!$this->isRootList()) { $oNextLevel = $oOutputFormat->nextLevel(); } foreach ($this->aContents as $oContent) { $sRendered = $oOutputFormat->safely(function() use ($oNextLevel, $oContent) { return $oContent->render($oNextLevel); }); if($sRendered === null) { continue; } if($bIsFirst) { $bIsFirst = false; $sResult .= $oNextLevel->spaceBeforeBlocks(); } else { $sResult .= $oNextLevel->spaceBetweenBlocks(); } $sResult .= $sRendered; } if(!$bIsFirst) { // Had some output $sResult .= $oOutputFormat->spaceAfterBlocks(); } return $sResult; } /** * Return true if the list can not be further outdented. Only important when rendering. */ public abstract function isRootList(); public function getContents() { return $this->aContents; } /** * @param array $aComments Array of comments. */ public function addComments(array $aComments) { $this->aComments = array_merge($this->aComments, $aComments); } /** * @return array */ public function getComments() { return $this->aComments; } /** * @param array $aComments Array containing Comment objects. */ public function setComments(array $aComments) { $this->aComments = $aComments; } } PKZZWrbb*Sabberworm/CSS/CSSList/AtRuleBlockList.phpnuW+AsType = $sType; $this->sArgs = $sArgs; } public function atRuleName() { return $this->sType; } public function atRuleArgs() { return $this->sArgs; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $sArgs = $this->sArgs; if($sArgs) { $sArgs = ' ' . $sArgs; } $sResult = $oOutputFormat->sBeforeAtRuleBlock; $sResult .= "@{$this->sType}$sArgs{$oOutputFormat->spaceBeforeOpeningBrace()}{"; $sResult .= parent::render($oOutputFormat); $sResult .= '}'; $sResult .= $oOutputFormat->sAfterAtRuleBlock; return $sResult; } public function isRootList() { return false; } }PKZZ|d"Sabberworm/CSS/RuleSet/RuleSet.phpnuW+AaRules = array(); $this->iLineNo = $iLineNo; $this->aComments = array(); } public static function parseRuleSet(ParserState $oParserState, RuleSet $oRuleSet) { while ($oParserState->comes(';')) { $oParserState->consume(';'); } while (!$oParserState->comes('}')) { $oRule = null; if($oParserState->getSettings()->bLenientParsing) { try { $oRule = Rule::parse($oParserState); } catch (UnexpectedTokenException $e) { try { $sConsume = $oParserState->consumeUntil(array("\n", ";", '}'), true); // We need to “unfind” the matches to the end of the ruleSet as this will be matched later if($oParserState->streql(substr($sConsume, -1), '}')) { $oParserState->backtrack(1); } else { while ($oParserState->comes(';')) { $oParserState->consume(';'); } } } catch (UnexpectedTokenException $e) { // We’ve reached the end of the document. Just close the RuleSet. return; } } } else { $oRule = Rule::parse($oParserState); } if($oRule) { $oRuleSet->addRule($oRule); } } $oParserState->consume('}'); } /** * @return int */ public function getLineNo() { return $this->iLineNo; } public function addRule(Rule $oRule, Rule $oSibling = null) { $sRule = $oRule->getRule(); if(!isset($this->aRules[$sRule])) { $this->aRules[$sRule] = array(); } $iPosition = count($this->aRules[$sRule]); if ($oSibling !== null) { $iSiblingPos = array_search($oSibling, $this->aRules[$sRule], true); if ($iSiblingPos !== false) { $iPosition = $iSiblingPos; } } array_splice($this->aRules[$sRule], $iPosition, 0, array($oRule)); } /** * Returns all rules matching the given rule name * @param (null|string|Rule) $mRule pattern to search for. If null, returns all rules. if the pattern ends with a dash, all rules starting with the pattern are returned as well as one matching the pattern with the dash excluded. passing a Rule behaves like calling getRules($mRule->getRule()). * @example $oRuleSet->getRules('font-') //returns an array of all rules either beginning with font- or matching font. * @example $oRuleSet->getRules('font') //returns array(0 => $oRule, …) or array(). * @return Rule[] Rules. */ public function getRules($mRule = null) { if ($mRule instanceof Rule) { $mRule = $mRule->getRule(); } $aResult = array(); foreach($this->aRules as $sName => $aRules) { // Either no search rule is given or the search rule matches the found rule exactly or the search rule ends in “-” and the found rule starts with the search rule. if(!$mRule || $sName === $mRule || (strrpos($mRule, '-') === strlen($mRule) - strlen('-') && (strpos($sName, $mRule) === 0 || $sName === substr($mRule, 0, -1)))) { $aResult = array_merge($aResult, $aRules); } } return $aResult; } /** * Override all the rules of this set. * @param Rule[] $aRules The rules to override with. */ public function setRules(array $aRules) { $this->aRules = array(); foreach ($aRules as $rule) { $this->addRule($rule); } } /** * Returns all rules matching the given pattern and returns them in an associative array with the rule’s name as keys. This method exists mainly for backwards-compatibility and is really only partially useful. * @param (string) $mRule pattern to search for. If null, returns all rules. if the pattern ends with a dash, all rules starting with the pattern are returned as well as one matching the pattern with the dash excluded. passing a Rule behaves like calling getRules($mRule->getRule()). * Note: This method loses some information: Calling this (with an argument of 'background-') on a declaration block like { background-color: green; background-color; rgba(0, 127, 0, 0.7); } will only yield an associative array containing the rgba-valued rule while @link{getRules()} would yield an indexed array containing both. * @return Rule[] Rules. */ public function getRulesAssoc($mRule = null) { $aResult = array(); foreach($this->getRules($mRule) as $oRule) { $aResult[$oRule->getRule()] = $oRule; } return $aResult; } /** * Remove a rule from this RuleSet. This accepts all the possible values that @link{getRules()} accepts. If given a Rule, it will only remove this particular rule (by identity). If given a name, it will remove all rules by that name. Note: this is different from pre-v.2.0 behaviour of PHP-CSS-Parser, where passing a Rule instance would remove all rules with the same name. To get the old behvaiour, use removeRule($oRule->getRule()). * @param (null|string|Rule) $mRule pattern to remove. If $mRule is null, all rules are removed. If the pattern ends in a dash, all rules starting with the pattern are removed as well as one matching the pattern with the dash excluded. Passing a Rule behaves matches by identity. */ public function removeRule($mRule) { if($mRule instanceof Rule) { $sRule = $mRule->getRule(); if(!isset($this->aRules[$sRule])) { return; } foreach($this->aRules[$sRule] as $iKey => $oRule) { if($oRule === $mRule) { unset($this->aRules[$sRule][$iKey]); } } } else { foreach($this->aRules as $sName => $aRules) { // Either no search rule is given or the search rule matches the found rule exactly or the search rule ends in “-” and the found rule starts with the search rule or equals it (without the trailing dash). if(!$mRule || $sName === $mRule || (strrpos($mRule, '-') === strlen($mRule) - strlen('-') && (strpos($sName, $mRule) === 0 || $sName === substr($mRule, 0, -1)))) { unset($this->aRules[$sName]); } } } } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $sResult = ''; $bIsFirst = true; foreach ($this->aRules as $aRules) { foreach($aRules as $oRule) { $sRendered = $oOutputFormat->safely(function() use ($oRule, $oOutputFormat) { return $oRule->render($oOutputFormat->nextLevel()); }); if($sRendered === null) { continue; } if($bIsFirst) { $bIsFirst = false; $sResult .= $oOutputFormat->nextLevel()->spaceBeforeRules(); } else { $sResult .= $oOutputFormat->nextLevel()->spaceBetweenRules(); } $sResult .= $sRendered; } } if(!$bIsFirst) { // Had some output $sResult .= $oOutputFormat->spaceAfterRules(); } return $oOutputFormat->removeLastSemicolon($sResult); } /** * @param array $aComments Array of comments. */ public function addComments(array $aComments) { $this->aComments = array_merge($this->aComments, $aComments); } /** * @return array */ public function getComments() { return $this->aComments; } /** * @param array $aComments Array containing Comment objects. */ public function setComments(array $aComments) { $this->aComments = $aComments; } } PKZZC$Sabberworm/CSS/RuleSet/AtRuleSet.phpnuW+AsType = $sType; $this->sArgs = $sArgs; } public function atRuleName() { return $this->sType; } public function atRuleArgs() { return $this->sArgs; } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { $sArgs = $this->sArgs; if($sArgs) { $sArgs = ' ' . $sArgs; } $sResult = "@{$this->sType}$sArgs{$oOutputFormat->spaceBeforeOpeningBrace()}{"; $sResult .= parent::render($oOutputFormat); $sResult .= '}'; return $sResult; } }PKZZZ>N>N+Sabberworm/CSS/RuleSet/DeclarationBlock.phpnuW+AaSelectors = array(); } public static function parse(ParserState $oParserState) { $aComments = array(); $oResult = new DeclarationBlock($oParserState->currentLine()); $oResult->setSelector($oParserState->consumeUntil('{', false, true, $aComments)); $oResult->setComments($aComments); RuleSet::parseRuleSet($oParserState, $oResult); return $oResult; } public function setSelectors($mSelector) { if (is_array($mSelector)) { $this->aSelectors = $mSelector; } else { $this->aSelectors = explode(',', $mSelector); } foreach ($this->aSelectors as $iKey => $mSelector) { if (!($mSelector instanceof Selector)) { $this->aSelectors[$iKey] = new Selector($mSelector); } } } // remove one of the selector of the block public function removeSelector($mSelector) { if($mSelector instanceof Selector) { $mSelector = $mSelector->getSelector(); } foreach($this->aSelectors as $iKey => $oSelector) { if($oSelector->getSelector() === $mSelector) { unset($this->aSelectors[$iKey]); return true; } } return false; } /** * @deprecated use getSelectors() */ public function getSelector() { return $this->getSelectors(); } /** * @deprecated use setSelectors() */ public function setSelector($mSelector) { $this->setSelectors($mSelector); } /** * Get selectors. * * @return Selector[] Selectors. */ public function getSelectors() { return $this->aSelectors; } /** * Split shorthand declarations (e.g. +margin+ or +font+) into their constituent parts. * */ public function expandShorthands() { // border must be expanded before dimensions $this->expandBorderShorthand(); $this->expandDimensionsShorthand(); $this->expandFontShorthand(); $this->expandBackgroundShorthand(); $this->expandListStyleShorthand(); } /** * Create shorthand declarations (e.g. +margin+ or +font+) whenever possible. * */ public function createShorthands() { $this->createBackgroundShorthand(); $this->createDimensionsShorthand(); // border must be shortened after dimensions $this->createBorderShorthand(); $this->createFontShorthand(); $this->createListStyleShorthand(); } /** * Split shorthand border declarations (e.g. border: 1px red;) * Additional splitting happens in expandDimensionsShorthand * Multiple borders are not yet supported as of 3 * */ public function expandBorderShorthand() { $aBorderRules = array( 'border', 'border-left', 'border-right', 'border-top', 'border-bottom' ); $aBorderSizes = array( 'thin', 'medium', 'thick' ); $aRules = $this->getRulesAssoc(); foreach ($aBorderRules as $sBorderRule) { if (!isset($aRules[$sBorderRule])) continue; $oRule = $aRules[$sBorderRule]; $mRuleValue = $oRule->getValue(); $aValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aValues[] = $mRuleValue; } else { $aValues = $mRuleValue->getListComponents(); } foreach ($aValues as $mValue) { if ($mValue instanceof Value) { $mNewValue = clone $mValue; } else { $mNewValue = $mValue; } if ($mValue instanceof Size) { $sNewRuleName = $sBorderRule . "-width"; } else if ($mValue instanceof Color) { $sNewRuleName = $sBorderRule . "-color"; } else { if (in_array($mValue, $aBorderSizes)) { $sNewRuleName = $sBorderRule . "-width"; } else/* if(in_array($mValue, $aBorderStyles)) */ { $sNewRuleName = $sBorderRule . "-style"; } } $oNewRule = new Rule($sNewRuleName, $this->iLineNo); $oNewRule->setIsImportant($oRule->getIsImportant()); $oNewRule->addValue(array($mNewValue)); $this->addRule($oNewRule); } $this->removeRule($sBorderRule); } } /** * Split shorthand dimensional declarations (e.g. margin: 0px auto;) * into their constituent parts. * Handles margin, padding, border-color, border-style and border-width. * */ public function expandDimensionsShorthand() { $aExpansions = array( 'margin' => 'margin-%s', 'padding' => 'padding-%s', 'border-color' => 'border-%s-color', 'border-style' => 'border-%s-style', 'border-width' => 'border-%s-width' ); $aRules = $this->getRulesAssoc(); foreach ($aExpansions as $sProperty => $sExpanded) { if (!isset($aRules[$sProperty])) continue; $oRule = $aRules[$sProperty]; $mRuleValue = $oRule->getValue(); $aValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aValues[] = $mRuleValue; } else { $aValues = $mRuleValue->getListComponents(); } $top = $right = $bottom = $left = null; switch (count($aValues)) { case 1: $top = $right = $bottom = $left = $aValues[0]; break; case 2: $top = $bottom = $aValues[0]; $left = $right = $aValues[1]; break; case 3: $top = $aValues[0]; $left = $right = $aValues[1]; $bottom = $aValues[2]; break; case 4: $top = $aValues[0]; $right = $aValues[1]; $bottom = $aValues[2]; $left = $aValues[3]; break; } foreach (array('top', 'right', 'bottom', 'left') as $sPosition) { $oNewRule = new Rule(sprintf($sExpanded, $sPosition), $this->iLineNo); $oNewRule->setIsImportant($oRule->getIsImportant()); $oNewRule->addValue(${$sPosition}); $this->addRule($oNewRule); } $this->removeRule($sProperty); } } /** * Convert shorthand font declarations * (e.g. font: 300 italic 11px/14px verdana, helvetica, sans-serif;) * into their constituent parts. * */ public function expandFontShorthand() { $aRules = $this->getRulesAssoc(); if (!isset($aRules['font'])) return; $oRule = $aRules['font']; // reset properties to 'normal' per http://www.w3.org/TR/21/fonts.html#font-shorthand $aFontProperties = array( 'font-style' => 'normal', 'font-variant' => 'normal', 'font-weight' => 'normal', 'font-size' => 'normal', 'line-height' => 'normal' ); $mRuleValue = $oRule->getValue(); $aValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aValues[] = $mRuleValue; } else { $aValues = $mRuleValue->getListComponents(); } foreach ($aValues as $mValue) { if (!$mValue instanceof Value) { $mValue = mb_strtolower($mValue); } if (in_array($mValue, array('normal', 'inherit'))) { foreach (array('font-style', 'font-weight', 'font-variant') as $sProperty) { if (!isset($aFontProperties[$sProperty])) { $aFontProperties[$sProperty] = $mValue; } } } else if (in_array($mValue, array('italic', 'oblique'))) { $aFontProperties['font-style'] = $mValue; } else if ($mValue == 'small-caps') { $aFontProperties['font-variant'] = $mValue; } else if ( in_array($mValue, array('bold', 'bolder', 'lighter')) || ($mValue instanceof Size && in_array($mValue->getSize(), range(100, 900, 100))) ) { $aFontProperties['font-weight'] = $mValue; } else if ($mValue instanceof RuleValueList && $mValue->getListSeparator() == '/') { list($oSize, $oHeight) = $mValue->getListComponents(); $aFontProperties['font-size'] = $oSize; $aFontProperties['line-height'] = $oHeight; } else if ($mValue instanceof Size && $mValue->getUnit() !== null) { $aFontProperties['font-size'] = $mValue; } else { $aFontProperties['font-family'] = $mValue; } } foreach ($aFontProperties as $sProperty => $mValue) { $oNewRule = new Rule($sProperty, $this->iLineNo); $oNewRule->addValue($mValue); $oNewRule->setIsImportant($oRule->getIsImportant()); $this->addRule($oNewRule); } $this->removeRule('font'); } /* * Convert shorthand background declarations * (e.g. background: url("chess.png") gray 50% repeat fixed;) * into their constituent parts. * @see http://www.w3.org/TR/21/colors.html#propdef-background * */ public function expandBackgroundShorthand() { $aRules = $this->getRulesAssoc(); if (!isset($aRules['background'])) return; $oRule = $aRules['background']; $aBgProperties = array( 'background-color' => array('transparent'), 'background-image' => array('none'), 'background-repeat' => array('repeat'), 'background-attachment' => array('scroll'), 'background-position' => array(new Size(0, '%', null, false, $this->iLineNo), new Size(0, '%', null, false, $this->iLineNo)) ); $mRuleValue = $oRule->getValue(); $aValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aValues[] = $mRuleValue; } else { $aValues = $mRuleValue->getListComponents(); } if (count($aValues) == 1 && $aValues[0] == 'inherit') { foreach ($aBgProperties as $sProperty => $mValue) { $oNewRule = new Rule($sProperty, $this->iLineNo); $oNewRule->addValue('inherit'); $oNewRule->setIsImportant($oRule->getIsImportant()); $this->addRule($oNewRule); } $this->removeRule('background'); return; } $iNumBgPos = 0; foreach ($aValues as $mValue) { if (!$mValue instanceof Value) { $mValue = mb_strtolower($mValue); } if ($mValue instanceof URL) { $aBgProperties['background-image'] = $mValue; } else if ($mValue instanceof Color) { $aBgProperties['background-color'] = $mValue; } else if (in_array($mValue, array('scroll', 'fixed'))) { $aBgProperties['background-attachment'] = $mValue; } else if (in_array($mValue, array('repeat', 'no-repeat', 'repeat-x', 'repeat-y'))) { $aBgProperties['background-repeat'] = $mValue; } else if (in_array($mValue, array('left', 'center', 'right', 'top', 'bottom')) || $mValue instanceof Size ) { if ($iNumBgPos == 0) { $aBgProperties['background-position'][0] = $mValue; $aBgProperties['background-position'][1] = 'center'; } else { $aBgProperties['background-position'][$iNumBgPos] = $mValue; } $iNumBgPos++; } } foreach ($aBgProperties as $sProperty => $mValue) { $oNewRule = new Rule($sProperty, $this->iLineNo); $oNewRule->setIsImportant($oRule->getIsImportant()); $oNewRule->addValue($mValue); $this->addRule($oNewRule); } $this->removeRule('background'); } public function expandListStyleShorthand() { $aListProperties = array( 'list-style-type' => 'disc', 'list-style-position' => 'outside', 'list-style-image' => 'none' ); $aListStyleTypes = array( 'none', 'disc', 'circle', 'square', 'decimal-leading-zero', 'decimal', 'lower-roman', 'upper-roman', 'lower-greek', 'lower-alpha', 'lower-latin', 'upper-alpha', 'upper-latin', 'hebrew', 'armenian', 'georgian', 'cjk-ideographic', 'hiragana', 'hira-gana-iroha', 'katakana-iroha', 'katakana' ); $aListStylePositions = array( 'inside', 'outside' ); $aRules = $this->getRulesAssoc(); if (!isset($aRules['list-style'])) return; $oRule = $aRules['list-style']; $mRuleValue = $oRule->getValue(); $aValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aValues[] = $mRuleValue; } else { $aValues = $mRuleValue->getListComponents(); } if (count($aValues) == 1 && $aValues[0] == 'inherit') { foreach ($aListProperties as $sProperty => $mValue) { $oNewRule = new Rule($sProperty, $this->iLineNo); $oNewRule->addValue('inherit'); $oNewRule->setIsImportant($oRule->getIsImportant()); $this->addRule($oNewRule); } $this->removeRule('list-style'); return; } foreach ($aValues as $mValue) { if (!$mValue instanceof Value) { $mValue = mb_strtolower($mValue); } if ($mValue instanceof Url) { $aListProperties['list-style-image'] = $mValue; } else if (in_array($mValue, $aListStyleTypes)) { $aListProperties['list-style-types'] = $mValue; } else if (in_array($mValue, $aListStylePositions)) { $aListProperties['list-style-position'] = $mValue; } } foreach ($aListProperties as $sProperty => $mValue) { $oNewRule = new Rule($sProperty, $this->iLineNo); $oNewRule->setIsImportant($oRule->getIsImportant()); $oNewRule->addValue($mValue); $this->addRule($oNewRule); } $this->removeRule('list-style'); } public function createShorthandProperties(array $aProperties, $sShorthand) { $aRules = $this->getRulesAssoc(); $aNewValues = array(); foreach ($aProperties as $sProperty) { if (!isset($aRules[$sProperty])) continue; $oRule = $aRules[$sProperty]; if (!$oRule->getIsImportant()) { $mRuleValue = $oRule->getValue(); $aValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aValues[] = $mRuleValue; } else { $aValues = $mRuleValue->getListComponents(); } foreach ($aValues as $mValue) { $aNewValues[] = $mValue; } $this->removeRule($sProperty); } } if (count($aNewValues)) { $oNewRule = new Rule($sShorthand, $this->iLineNo); foreach ($aNewValues as $mValue) { $oNewRule->addValue($mValue); } $this->addRule($oNewRule); } } public function createBackgroundShorthand() { $aProperties = array( 'background-color', 'background-image', 'background-repeat', 'background-position', 'background-attachment' ); $this->createShorthandProperties($aProperties, 'background'); } public function createListStyleShorthand() { $aProperties = array( 'list-style-type', 'list-style-position', 'list-style-image' ); $this->createShorthandProperties($aProperties, 'list-style'); } /** * Combine border-color, border-style and border-width into border * Should be run after create_dimensions_shorthand! * */ public function createBorderShorthand() { $aProperties = array( 'border-width', 'border-style', 'border-color' ); $this->createShorthandProperties($aProperties, 'border'); } /* * Looks for long format CSS dimensional properties * (margin, padding, border-color, border-style and border-width) * and converts them into shorthand CSS properties. * */ public function createDimensionsShorthand() { $aPositions = array('top', 'right', 'bottom', 'left'); $aExpansions = array( 'margin' => 'margin-%s', 'padding' => 'padding-%s', 'border-color' => 'border-%s-color', 'border-style' => 'border-%s-style', 'border-width' => 'border-%s-width' ); $aRules = $this->getRulesAssoc(); foreach ($aExpansions as $sProperty => $sExpanded) { $aFoldable = array(); foreach ($aRules as $sRuleName => $oRule) { foreach ($aPositions as $sPosition) { if ($sRuleName == sprintf($sExpanded, $sPosition)) { $aFoldable[$sRuleName] = $oRule; } } } // All four dimensions must be present if (count($aFoldable) == 4) { $aValues = array(); foreach ($aPositions as $sPosition) { $oRule = $aRules[sprintf($sExpanded, $sPosition)]; $mRuleValue = $oRule->getValue(); $aRuleValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aRuleValues[] = $mRuleValue; } else { $aRuleValues = $mRuleValue->getListComponents(); } $aValues[$sPosition] = $aRuleValues; } $oNewRule = new Rule($sProperty, $this->iLineNo); if ((string) $aValues['left'][0] == (string) $aValues['right'][0]) { if ((string) $aValues['top'][0] == (string) $aValues['bottom'][0]) { if ((string) $aValues['top'][0] == (string) $aValues['left'][0]) { // All 4 sides are equal $oNewRule->addValue($aValues['top']); } else { // Top and bottom are equal, left and right are equal $oNewRule->addValue($aValues['top']); $oNewRule->addValue($aValues['left']); } } else { // Only left and right are equal $oNewRule->addValue($aValues['top']); $oNewRule->addValue($aValues['left']); $oNewRule->addValue($aValues['bottom']); } } else { // No sides are equal $oNewRule->addValue($aValues['top']); $oNewRule->addValue($aValues['left']); $oNewRule->addValue($aValues['bottom']); $oNewRule->addValue($aValues['right']); } $this->addRule($oNewRule); foreach ($aPositions as $sPosition) { $this->removeRule(sprintf($sExpanded, $sPosition)); } } } } /** * Looks for long format CSS font properties (e.g. font-weight) and * tries to convert them into a shorthand CSS font property. * At least font-size AND font-family must be present in order to create a shorthand declaration. * */ public function createFontShorthand() { $aFontProperties = array( 'font-style', 'font-variant', 'font-weight', 'font-size', 'line-height', 'font-family' ); $aRules = $this->getRulesAssoc(); if (!isset($aRules['font-size']) || !isset($aRules['font-family'])) { return; } $oNewRule = new Rule('font', $this->iLineNo); foreach (array('font-style', 'font-variant', 'font-weight') as $sProperty) { if (isset($aRules[$sProperty])) { $oRule = $aRules[$sProperty]; $mRuleValue = $oRule->getValue(); $aValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aValues[] = $mRuleValue; } else { $aValues = $mRuleValue->getListComponents(); } if ($aValues[0] !== 'normal') { $oNewRule->addValue($aValues[0]); } } } // Get the font-size value $oRule = $aRules['font-size']; $mRuleValue = $oRule->getValue(); $aFSValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aFSValues[] = $mRuleValue; } else { $aFSValues = $mRuleValue->getListComponents(); } // But wait to know if we have line-height to add it if (isset($aRules['line-height'])) { $oRule = $aRules['line-height']; $mRuleValue = $oRule->getValue(); $aLHValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aLHValues[] = $mRuleValue; } else { $aLHValues = $mRuleValue->getListComponents(); } if ($aLHValues[0] !== 'normal') { $val = new RuleValueList('/', $this->iLineNo); $val->addListComponent($aFSValues[0]); $val->addListComponent($aLHValues[0]); $oNewRule->addValue($val); } } else { $oNewRule->addValue($aFSValues[0]); } $oRule = $aRules['font-family']; $mRuleValue = $oRule->getValue(); $aFFValues = array(); if (!$mRuleValue instanceof RuleValueList) { $aFFValues[] = $mRuleValue; } else { $aFFValues = $mRuleValue->getListComponents(); } $oFFValue = new RuleValueList(',', $this->iLineNo); $oFFValue->setListComponents($aFFValues); $oNewRule->addValue($oFFValue); $this->addRule($oNewRule); foreach ($aFontProperties as $sProperty) { $this->removeRule($sProperty); } } public function __toString() { return $this->render(new \Sabberworm\CSS\OutputFormat()); } public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) { if(count($this->aSelectors) === 0) { // If all the selectors have been removed, this declaration block becomes invalid throw new OutputException("Attempt to print declaration block with missing selector", $this->iLineNo); } $sResult = $oOutputFormat->sBeforeDeclarationBlock; $sResult .= $oOutputFormat->implode($oOutputFormat->spaceBeforeSelectorSeparator() . ',' . $oOutputFormat->spaceAfterSelectorSeparator(), $this->aSelectors); $sResult .= $oOutputFormat->sAfterDeclarationBlockSelectors; $sResult .= $oOutputFormat->spaceBeforeOpeningBrace() . '{'; $sResult .= parent::render($oOutputFormat); $sResult .= '}'; $sResult .= $oOutputFormat->sAfterDeclarationBlock; return $sResult; } } PK Zfiles/.gitkeepnuW+APK Zfiles/.trash/.gitkeepnuW+APK Z0{{files/.trash/.htaccessnuW+A Order allow,deny Deny from all PK Z0{{files/.htaccessnuW+A Order allow,deny Deny from all PK Zԡjs/worker/calcfilehash.jsnuW+Avar type = self.data.type, bin = self.data.bin, hashOpts = self.data.hashOpts; self.res = {}; if (type === 'md5') { let sp = new self.SparkMD5.ArrayBuffer(); sp.append(bin); self.res.hash = sp.end(); } else { let sha = new jsSHA('SHA' + (type.length === 5? type : ('-' + type)).toUpperCase(), 'ARRAYBUFFER'), opts = {}; if (type === 'ke128') { opts.shakeLen = hashOpts.shake128len; } else if (type === 'ke256') { opts.shakeLen = hashOpts.shake256len; } sha.update(bin); self.res.hash = sha.getHash('HEX', opts); } PK Zjs/worker/quicklook.tiff.jsnuW+Avar data = self.data; if (data.memory) { Tiff.initialize({ TOTAL_MEMORY: data.memory }); } var tiff = new Tiff({buffer: data.data}); var image = tiff.readRGBAImage(); self.res = { image: image, width: tiff.width(), height: tiff.height() }; PK Z0{{js/worker/.htaccessnuW+A Order allow,deny Deny from all PK ZǤ44js/worker/quicklook.unzip.jsnuW+Avar type = self.data.type, bin = self.data.bin, unzipFiles = function() { /** @type {Array.} */ var filenameList = []; /** @type {number} */ var i; /** @type {number} */ var il; /** @type {Array.} */ var fileHeaderList; // need check this.Y when update cdns.zlibUnzip this.Y(); fileHeaderList = this.i; for (i = 0, il = fileHeaderList.length; i < il; ++i) { // need check fileHeaderList[i].J when update cdns.zlibUnzip filenameList[i] = fileHeaderList[i].filename + (fileHeaderList[i].J? ' ({formatSize(' + fileHeaderList[i].J + ')})' : ''); } return filenameList; }, tarFiles = function(tar) { var filenames = [], tarlen = tar.length, offset = 0, toStr = function(arr) { return String.fromCharCode.apply(null, arr).replace(/\0+$/, ''); }, h, name, prefix, size, dbs; while (offset < tarlen && tar[offset] !== 0) { h = tar.subarray(offset, offset + 512); name = toStr(h.subarray(0, 100)); if (prefix = toStr(h.subarray(345, 500))) { name = prefix + name; } size = parseInt(toStr(h.subarray(124, 136)), 8); dbs = Math.ceil(size / 512) * 512; if (name === '././@LongLink') { name = toStr(tar.subarray(offset + 512, offset + 512 + dbs)); } (name !== 'pax_global_header') && filenames.push(name + (size? ' ({formatSize(' + size + ')})': '')); offset = offset + 512 + dbs; } return filenames; }; self.res = {}; if (type === 'tar') { self.res.files = tarFiles(new Uint8Array(bin)); } else if (type === 'zip') { self.res.files = unzipFiles.call(new Zlib.Unzip(new Uint8Array(bin))); } else if (type === 'gzip') { self.res.files = tarFiles((new Zlib.Gunzip(new Uint8Array(bin))).decompress()); } else if (type === 'bzip2') { self.res.files = tarFiles(self.bzip2.simple(self.bzip2.array(new Uint8Array(bin)))); } PK Za[33js/elFinder.resources.jsnuW+A/** * elFinder resources registry. * Store shared data * * @type Object * @author Dmitry (dio) Levashov **/ elFinder.prototype.resources = { 'class' : { hover : 'ui-state-hover', active : 'ui-state-active', disabled : 'ui-state-disabled', draggable : 'ui-draggable', droppable : 'ui-droppable', adroppable : 'elfinder-droppable-active', cwdfile : 'elfinder-cwd-file', cwd : 'elfinder-cwd', tree : 'elfinder-tree', treeroot : 'elfinder-navbar-root', navdir : 'elfinder-navbar-dir', navdirwrap : 'elfinder-navbar-dir-wrapper', navarrow : 'elfinder-navbar-arrow', navsubtree : 'elfinder-navbar-subtree', navcollapse : 'elfinder-navbar-collapsed', navexpand : 'elfinder-navbar-expanded', treedir : 'elfinder-tree-dir', placedir : 'elfinder-place-dir', searchbtn : 'elfinder-button-search', editing : 'elfinder-to-editing', preventback : 'elfinder-prevent-back', tabstab : 'ui-state-default ui-tabs-tab ui-corner-top ui-tab', tabsactive : 'ui-tabs-active ui-state-active' }, tpl : { perms : '', lock : '', symlink : '', navicon : '', navspinner : '', navdir : '
{symlink}{permissions}{name}
', placedir : '
{symlink}{permissions}{name}
' }, // mimes.text will be overwritten with connector config if `textMimes` is included in initial response // @see php/elFInder.class.php `public static $textMimes` mimes : { text : [ 'application/dash+xml', 'application/docbook+xml', 'application/javascript', 'application/json', 'application/plt', 'application/sat', 'application/sql', 'application/step', 'application/vnd.hp-hpgl', 'application/x-awk', 'application/x-config', 'application/x-csh', 'application/x-empty', 'application/x-mpegurl', 'application/x-perl', 'application/x-php', 'application/x-web-config', 'application/xhtml+xml', 'application/xml', 'audio/x-mp3-playlist', 'image/cgm', 'image/svg+xml', 'image/vnd.dxf', 'model/iges' ] }, mixin : { make : function() { "use strict"; var self = this, fm = this.fm, cmd = this.name, req = this.requestCmd || cmd, wz = fm.getUI('workzone'), org = (this.origin && this.origin === 'navbar')? 'tree' : 'cwd', tree = (org === 'tree'), find = tree? 'navHash2Elm' : 'cwdHash2Elm', tarea= (! tree && fm.storage('view') != 'list'), sel = fm.selected(), move = this.move || false, empty= wz.hasClass('elfinder-cwd-wrapper-empty'), unselect = function() { requestAnimationFrame(function() { input && input.trigger('blur'); }); }, rest = function(){ if (!overlay.is(':hidden')) { overlay.elfinderoverlay('hide').off('click close', cancel); } if (nnode) { pnode.removeClass('ui-front') .css('position', '') .off('unselect.'+fm.namespace, unselect); if (tarea) { nnode && nnode.css('max-height', ''); } else if (!tree) { pnode.css('width', '') .parent('td').css('overflow', ''); } } }, colwidth, dfrd = jQuery.Deferred() .fail(function(error) { dstCls && dst.attr('class', dstCls); empty && wz.addClass('elfinder-cwd-wrapper-empty'); if (sel) { move && fm.trigger('unlockfiles', {files: sel}); fm.clipboard([]); fm.trigger('selectfiles', { files: sel }); } error && fm.error(error); }) .always(function() { rest(); cleanup(); fm.enable().unbind('open', openCallback).trigger('resMixinMake'); }), id = 'tmp_'+parseInt(Math.random()*100000), phash = this.data && this.data.target? this.data.target : (tree? fm.file(sel[0]).hash : fm.cwd().hash), date = new Date(), file = { hash : id, phash : phash, name : fm.uniqueName(this.prefix, phash), mime : this.mime, read : true, write : true, date : 'Today '+date.getHours()+':'+date.getMinutes(), move : move }, dum = fm.getUI(org).trigger('create.'+fm.namespace, file), data = this.data || {}, node = fm[find](id), nnode, pnode, overlay = fm.getUI('overlay'), cleanup = function() { if (node && node.length) { input.off(); node.hide(); fm.unselectfiles({files : [id]}).unbind('resize', resize); requestAnimationFrame(function() { if (tree) { node.closest('.elfinder-navbar-wrapper').remove(); } else { node.remove(); } }); } }, cancel = function(e) { if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (! inError) { cleanup(); dfrd.reject(); if (e) { e.stopPropagation(); e.preventDefault(); } } }, input = jQuery(tarea? '' : '') .on('keyup text', function(){ if (tarea) { this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } else if (colwidth) { this.style.width = colwidth + 'px'; if (this.scrollWidth > colwidth) { this.style.width = this.scrollWidth + 10 + 'px'; } } }) .on('keydown', function(e) { e.stopImmediatePropagation(); if (e.keyCode == jQuery.ui.keyCode.ESCAPE) { dfrd.reject(); } else if (e.keyCode == jQuery.ui.keyCode.ENTER) { e.preventDefault(); input.trigger('blur'); } }) .on('mousedown click dblclick', function(e) { e.stopPropagation(); if (e.type === 'dblclick') { e.preventDefault(); } }) .on('blur', function() { var name = jQuery.trim(input.val()), parent = input.parent(), valid = true, cut; if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (name === '') { return cancel(); } if (!inError && parent.length) { if (fm.options.validName && fm.options.validName.test) { try { valid = fm.options.validName.test(name); } catch(e) { valid = false; } } if (!name || name === '.' || name === '..' || !valid) { inError = true; fm.error(file.mime === 'directory'? 'errInvDirname' : 'errInvName', {modal: true, close: function(){setTimeout(select, 120);}}); return false; } if (fm.fileByName(name, phash)) { inError = true; fm.error(['errExists', name], {modal: true, close: function(){setTimeout(select, 120);}}); return false; } cut = (sel && move)? fm.exec('cut', sel) : null; jQuery.when(cut) .done(function() { var toast = {}, nextAct = {}; rest(); input.hide().before(jQuery('').text(name)); fm.lockfiles({files : [id]}); fm.request({ data : Object.assign({cmd : req, name : name, target : phash}, data || {}), notify : {type : req, cnt : 1}, preventFail : true, syncOnFail : true, navigate : {toast : toast}, }) .fail(function(error) { fm.unlockfiles({files : [id]}); inError = true; input.show().prev().remove(); fm.error(error, { modal: true, close: function() { if (Array.isArray(error) && jQuery.inArray('errUploadMime', error) !== -1) { dfrd.notify('errUploadMime').reject(); } else { setTimeout(select, 120); } } }); }) .done(function(data) { if (data && data.added && data.added[0]) { var item = data.added[0], dirhash = item.hash, newItem = fm[find](dirhash), acts = { 'directory' : { cmd: 'open', msg: 'cmdopendir' }, 'text' : { cmd: 'edit', msg: 'cmdedit' }, 'default' : { cmd: 'open', msg: 'cmdopen' } }, tmpMimes; if (sel && move) { fm.one(req+'done', function() { fm.exec('paste', dirhash); }); } if (!move) { if (fm.mimeIsText(item.mime) && !fm.mimesCanMakeEmpty[item.mime] && fm.mimeTypes[item.mime]) { fm.trigger('canMakeEmptyFile', {mimes: [item.mime], unshift: true}); tmpMimes = {}; tmpMimes[item.mime] = fm.mimeTypes[item.mime]; fm.storage('mkfileTextMimes', Object.assign(tmpMimes, fm.storage('mkfileTextMimes') || {})); } Object.assign(nextAct, nextAction || acts[item.mime] || acts[item.mime.split('/')[0]] || acts[(fm.mimesCanMakeEmpty[item.mime] || jQuery.inArray(item.mime, fm.resources.mimes.text) !== -1) ? 'text' : 'none'] || acts['default']); Object.assign(toast, nextAct.cmd ? { incwd : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)]), action: nextAct}, inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)]), action: nextAct} } : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)])} }); } } dfrd.resolve(data); }); }) .fail(function() { dfrd.reject(); }); } }) .on('dragenter dragleave dragover drop', function(e) { // stop bubbling to prevent upload with native drop event e.stopPropagation(); }), select = function() { var name = fm.splitFileExtention(input.val())[0]; if (!inError && fm.UA.Mobile && !fm.UA.iOS) { // since iOS has a bug? (z-index not effect) so disable it overlay.on('click close', cancel).elfinderoverlay('show'); pnode.css('z-index', overlay.css('z-index') + 1); } inError = false; ! fm.enabled() && fm.enable(); input.trigger('focus').trigger('select'); input[0].setSelectionRange && input[0].setSelectionRange(0, name.length); }, resize = function() { node.trigger('scrolltoview', {blink : false}); }, openCallback = function() { dfrd && (dfrd.state() === 'pending') && dfrd.reject(); }, inError = false, nextAction, // for tree dst, dstCls, collapsed, expanded, arrow, subtree; if (!fm.isCommandEnabled(req, phash) || !node.length) { return dfrd.reject(); } if (jQuery.isPlainObject(self.nextAction)){ nextAction = Object.assign({}, self.nextAction); } if (tree) { dst = fm[find](phash); collapsed = fm.res('class', 'navcollapse'); expanded = fm.res('class', 'navexpand'); arrow = fm.res('class', 'navarrow'); subtree = fm.res('class', 'navsubtree'); node.closest('.'+subtree).show(); if (! dst.hasClass(collapsed)) { dstCls = dst.attr('class'); dst.addClass(collapsed+' '+expanded+' elfinder-subtree-loaded'); } if (dst.is('.'+collapsed+':not(.'+expanded+')')) { dst.children('.'+arrow).trigger('click').data('dfrd').done(function() { if (input.val() === file.name) { input.val(fm.uniqueName(self.prefix, phash)).trigger('select').trigger('focus'); } }); } nnode = node.contents().filter(function(){ return this.nodeType==3 && jQuery(this).parent().attr('id') === fm.navHash2Id(file.hash); }); pnode = nnode.parent(); nnode.replaceWith(input.val(file.name)); } else { empty && wz.removeClass('elfinder-cwd-wrapper-empty'); nnode = node.find('.elfinder-cwd-filename'); pnode = nnode.parent(); if (tarea) { nnode.css('max-height', 'none'); } else { colwidth = pnode.width(); pnode.width(colwidth - 15) .parent('td').css('overflow', 'visible'); } nnode.empty().append(input.val(file.name)); } pnode.addClass('ui-front') .css('position', 'relative') .on('unselect.'+fm.namespace, unselect); fm.bind('resize', resize).one('open', openCallback); input.trigger('keyup'); select(); return dfrd; } }, blink: function(elm, mode) { "use strict"; var acts = { slowonce : function(){elm.hide().delay(250).fadeIn(750).delay(500).fadeOut(3500);}, lookme : function(){elm.show().fadeOut(500).fadeIn(750);} }, func; mode = mode || 'slowonce'; func = acts[mode] || acts['lookme']; elm.stop(true, true); func(); } }; PK Zpnnjs/elFinder.jsnuW+A/** * @class elFinder - file manager for web * * @author Dmitry (dio) Levashov **/ var elFinder = function(elm, opts, bootCallback) { "use strict"; //this.time('load'); var self = this, /** * Objects array of jQuery.Deferred that calls before elFinder boot up * * @type Array */ dfrdsBeforeBootup = [], /** * Plugin name to check for conflicts with bootstrap etc * * @type Array **/ conflictChecks = ['button', 'tooltip'], /** * Node on which elfinder creating * * @type jQuery **/ node = jQuery(elm), /** * Object of events originally registered in this node * * @type Object */ prevEvents = jQuery.extend(true, {}, jQuery._data(node.get(0), 'events')), /** * Store node contents. * * @see this.destroy * @type jQuery **/ prevContent = jQuery('
').append(node.contents()).attr('class', node.attr('class') || '').attr('style', node.attr('style') || ''), /** * Instance ID. Required to get/set cookie * * @type String **/ id = node.attr('id') || node.attr('id', 'elfauto' + jQuery('.elfinder').length).attr('id'), /** * Events namespace * * @type String **/ namespace = 'elfinder-' + id, /** * Mousedown event * * @type String **/ mousedown = 'mousedown.'+namespace, /** * Keydown event * * @type String **/ keydown = 'keydown.'+namespace, /** * Keypress event * * @type String **/ keypress = 'keypress.'+namespace, /** * Keypup event * * @type String **/ keyup = 'keyup.'+namespace, /** * Is shortcuts/commands enabled * * @type Boolean **/ enabled = false, /** * Store enabled value before ajax request * * @type Boolean **/ prevEnabled = false, /** * List of build-in events which mapped into methods with same names * * @type Array **/ events = ['enable', 'disable', 'load', 'open', 'reload', 'select', 'add', 'remove', 'change', 'dblclick', 'getfile', 'lockfiles', 'unlockfiles', 'selectfiles', 'unselectfiles', 'dragstart', 'dragstop', 'search', 'searchend', 'viewchange'], /** * Rules to validate data from backend * * @type Object **/ rules = {}, /** * Current working directory hash * * @type String **/ cwd = '', /** * Current working directory options default * * @type Object **/ cwdOptionsDefault = { path : '', url : '', tmbUrl : '', disabled : [], separator : '/', archives : [], extract : [], copyOverwrite : true, uploadOverwrite : true, uploadMaxSize : 0, jpgQuality : 100, tmbCrop : false, tmbReqCustomData : false, tmb : false // old API }, /** * Current working directory options * * @type Object **/ cwdOptions = {}, /** * Files/dirs cache * * @type Object **/ files = {}, /** * Hidden Files/dirs cache * * @type Object **/ hiddenFiles = {}, /** * Files/dirs hash cache of each dirs * * @type Object **/ ownFiles = {}, /** * Selected files hashes * * @type Array **/ selected = [], /** * Events listeners * * @type Object **/ listeners = {}, /** * Shortcuts * * @type Object **/ shortcuts = {}, /** * Buffer for copied files * * @type Array **/ clipboard = [], /** * Copied/cuted files hashes * Prevent from remove its from cache. * Required for dispaly correct files names in error messages * * @type Object **/ remember = {}, /** * Queue for 'open' requests * * @type Array **/ queue = [], /** * Queue for only cwd requests e.g. `tmb` * * @type Array **/ cwdQueue = [], /** * Commands prototype * * @type Object **/ base = new self.command(self), /** * elFinder node width * * @type String * @default "auto" **/ width = 'auto', /** * elFinder node height * Number: pixcel or String: Number + "%" * * @type Number | String * @default 400 **/ height = 400, /** * Base node object or selector * Element which is the reference of the height percentage * * @type Object|String * @default null | jQuery(window) (if height is percentage) **/ heightBase = null, /** * MIME type list(Associative array) handled as a text file * * @type Object|null */ textMimes = null, /** * elfinder path for sound played on remove * @type String * @default ./sounds/ **/ soundPath = '../wp-content/plugins/wp-file-manager/lib/sounds/', /** * JSON.stringify of previous fm.sorters * @type String */ prevSorterStr = '', /** * Map table of file extention to MIME-Type * @type Object */ extToMimeTable, /** * Disabled page unload function * @type Boolean */ diableUnloadCheck = false, beeper = jQuery(document.createElement('audio')).hide().appendTo('body')[0], syncInterval, autoSyncStop = 0, uiCmdMapPrev = '', gcJobRes = null, open = function(data) { // NOTES: Do not touch data object var volumeid, contextmenu, emptyDirs = {}, stayDirs = {}, rmClass, hashes, calc, gc, collapsed, prevcwd, sorterStr, diff; if (self.api >= 2.1) { // support volume driver option `uiCmdMap` self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {}; if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) { uiCmdMapPrev = JSON.stringify(self.commandMap); } } else { self.options.sync = 0; } if (data.init) { // init - reset cache files = {}; ownFiles = {}; } else { // remove only files from prev cwd // and collapsed directory (included 100+ directories) to empty for perfomance tune in DnD prevcwd = cwd; rmClass = 'elfinder-subtree-loaded ' + self.res('class', 'navexpand'); collapsed = self.res('class', 'navcollapse'); hashes = Object.keys(files); calc = function(i) { if (!files[i]) { return true; } var isDir = (files[i].mime === 'directory'), phash = files[i].phash, pnav; if ( (!isDir || emptyDirs[phash] || (!stayDirs[phash] && self.navHash2Elm(files[i].hash).is(':hidden') && self.navHash2Elm(phash).next('.elfinder-navbar-subtree').children().length > 100 ) ) && (isDir || phash !== cwd) && ! remember[i] ) { if (isDir && !emptyDirs[phash]) { emptyDirs[phash] = true; self.navHash2Elm(phash) .removeClass(rmClass) .next('.elfinder-navbar-subtree').empty(); } deleteCache(files[i]); } else if (isDir) { stayDirs[phash] = true; } }; gc = function() { if (hashes.length) { gcJobRes && gcJobRes._abort(); gcJobRes = self.asyncJob(calc, hashes, { interval : 20, numPerOnce : 100 }).done(function() { var hd = self.storage('hide') || {items: {}}; if (Object.keys(hiddenFiles).length) { jQuery.each(hiddenFiles, function(h) { if (!hd.items[h]) { delete hiddenFiles[h]; } }); } }); } }; self.trigger('filesgc').one('filesgc', function() { hashes = []; }); self.one('opendone', function() { if (prevcwd !== cwd) { if (! node.data('lazycnt')) { gc(); } else { self.one('lazydone', gc); } } }); } self.sorters = {}; cwd = data.cwd.hash; cache(data.files); if (!files[cwd]) { cache([data.cwd]); } else { diff = self.diff([data.cwd], true); if (diff.changed.length) { cache(diff.changed, 'change'); self.change({changed: diff.changed}); } } data.changed && data.changed.length && cache(data.changed, 'change'); // trigger event 'sorterupdate' sorterStr = JSON.stringify(self.sorters); if (prevSorterStr !== sorterStr) { self.trigger('sorterupdate'); prevSorterStr = sorterStr; } self.lastDir(cwd); self.autoSync(); }, /** * Store info about files/dirs in "files" object. * * @param Array files * @param String data type * @return void **/ cache = function(data, type) { var type = type || 'files', keeps = ['sizeInfo', 'encoding'], defsorter = { name: true, perm: true, date: true, size: true, kind: true }, sorterChk = !self.sorters._checked && (type === 'files'), l = data.length, setSorter = function(file) { var f = file || {}, sorters = []; jQuery.each(self.sortRules, function(key) { if (defsorter[key] || typeof f[key] !== 'undefined' || (key === 'mode' && typeof f.perm !== 'undefined')) { sorters.push(key); } }); self.sorters = self.arrayFlip(sorters, true); self.sorters._checked = true; }, changedParents = {}, hideData = self.storage('hide') || {}, hides = hideData.items || {}, f, i, i1, keepProp, parents, hidden; for (i = 0; i < l; i++) { f = Object.assign({}, data[i]); hidden = (!hideData.show && hides[f.hash])? true : false; if (f.name && f.hash && f.mime) { if (!hidden) { if (sorterChk && f.phash === cwd) { setSorter(f); sorterChk = false; } if (f.phash && (type === 'add' || (type === 'change' && (!files[f.hash] || f.size !== files[f.hash])))) { if (parents = self.parents(f.phash)) { jQuery.each(parents, function() { changedParents[this] = true; }); } } } if (files[f.hash]) { for (i1 =0; i1 < keeps.length; i1++) { if(files[f.hash][keeps[i1]] && ! f[keeps[i1]]) { f[keeps[i1]] = files[f.hash][keeps[i1]]; } } if (f.sizeInfo && !f.size) { f.size = f.sizeInfo.size; } deleteCache(files[f.hash], true); } if (hides[f.hash]) { hiddenFiles[f.hash] = f; } if (hidden) { l--; data.splice(i--, 1); } else { files[f.hash] = f; if (f.mime === 'directory' && !ownFiles[f.hash]) { ownFiles[f.hash] = {}; } if (f.phash) { if (!ownFiles[f.phash]) { ownFiles[f.phash] = {}; } ownFiles[f.phash][f.hash] = true; } } } } // delete sizeInfo cache jQuery.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); // for empty folder sorterChk && setSorter(); }, /** * Delete file object from files caches * * @param Array removed hashes * @return void */ remove = function(removed) { var l = removed.length, roots = {}, rm = function(hash) { var file = files[hash], i; if (file) { if (file.mime === 'directory') { if (roots[hash]) { delete self.roots[roots[hash]]; } // restore stats of deleted root parent directory jQuery.each(self.leafRoots, function(phash, roots) { var idx, pdir; if ((idx = jQuery.inArray(hash, roots))!== -1) { if (roots.length === 1) { if ((pdir = Object.assign({}, files[phash])) && pdir._realStats) { jQuery.each(pdir._realStats, function(k, v) { pdir[k] = v; }); remove(files[phash]._realStats); self.change({ changed: [pdir] }); } delete self.leafRoots[phash]; } else { self.leafRoots[phash].splice(idx, 1); } } }); if (self.searchStatus.state < 2) { jQuery.each(files, function(h, f) { f.phash == hash && rm(h); }); } } if (file.phash) { if (parents = self.parents(file.phash)) { jQuery.each(parents, function() { changedParents[this] = true; }); } } deleteCache(files[hash]); } }, changedParents = {}, parents; jQuery.each(self.roots, function(k, v) { roots[v] = k; }); while (l--) { rm(removed[l]); } // delete sizeInfo cache jQuery.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); }, /** * Update file object in files caches * * @param Array changed file objects * @return void * @deprecated should be use `cache(updatesArrayData, 'change');` */ change = function(changed) { jQuery.each(changed, function(i, file) { var hash = file.hash; if (files[hash]) { jQuery.each(Object.keys(files[hash]), function(i, v){ if (typeof file[v] === 'undefined') { delete files[hash][v]; } }); } files[hash] = files[hash] ? Object.assign(files[hash], file) : file; }); }, /** * Delete cache data of files, ownFiles and self.optionsByHashes * * @param Object file * @param Boolean update * @return void */ deleteCache = function(file, update) { var hash = file.hash, phash = file.phash; if (phash && ownFiles[phash]) { delete ownFiles[phash][hash]; } if (!update) { ownFiles[hash] && delete ownFiles[hash]; self.optionsByHashes[hash] && delete self.optionsByHashes[hash]; } delete files[hash]; }, /** * Maximum number of concurrent connections on request * * @type Number */ requestMaxConn, /** * Current number of connections * * @type Number */ requestCnt = 0, /** * Queue waiting for connection * * @type Array */ requestQueue = [], /** * Current open command instance * * @type Object */ currentOpenCmd = null, /** * Exec shortcut * * @param jQuery.Event keydown/keypress event * @return void */ execShortcut = function(e) { var code = e.keyCode, ctrlKey = !!(e.ctrlKey || e.metaKey), isMousedown = e.type === 'mousedown', ddm; !isMousedown && (self.keyState.keyCode = code); self.keyState.ctrlKey = ctrlKey; self.keyState.shiftKey = e.shiftKey; self.keyState.metaKey = e.metaKey; self.keyState.altKey = e.altKey; if (isMousedown) { return; } else if (e.type === 'keyup') { self.keyState.keyCode = null; return; } if (enabled) { jQuery.each(shortcuts, function(i, shortcut) { if (shortcut.type == e.type && shortcut.keyCode == code && shortcut.shiftKey == e.shiftKey && shortcut.ctrlKey == ctrlKey && shortcut.altKey == e.altKey) { e.preventDefault(); e.stopPropagation(); shortcut.callback(e, self); self.debug('shortcut-exec', i+' : '+shortcut.description); } }); // prevent tab out of elfinder if (code == jQuery.ui.keyCode.TAB && !jQuery(e.target).is(':input')) { e.preventDefault(); } // cancel any actions by [Esc] key if (e.type === 'keydown' && code == jQuery.ui.keyCode.ESCAPE) { // copy or cut if (! node.find('.ui-widget:visible').length) { self.clipboard().length && self.clipboard([]); } // dragging if (jQuery.ui.ddmanager) { ddm = jQuery.ui.ddmanager.current; ddm && ddm.helper && ddm.cancel(); } // button menus self.toHide(node.find('.ui-widget.elfinder-button-menu.elfinder-frontmost:visible')); // trigger keydownEsc self.trigger('keydownEsc', e); } } }, date = new Date(), utc, i18n, inFrame = (window.parent !== window), parentIframe = (function() { var pifm, ifms; if (inFrame) { try { ifms = jQuery('iframe', window.parent.document); if (ifms.length) { jQuery.each(ifms, function(i, ifm) { if (ifm.contentWindow === window) { pifm = jQuery(ifm); return false; } }); } } catch(e) {} } return pifm; })(), /** * elFinder boot up function * * @type Function */ bootUp, /** * Original function of XMLHttpRequest.prototype.send * * @type Function */ savedXhrSend; // opts must be an object if (!opts) { opts = {}; } // set UA.Angle, UA.Rotated for mobile devices if (self.UA.Mobile) { jQuery(window).on('orientationchange.'+namespace, function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } self.UA.Angle = a; self.UA.Rotated = a % 180 === 0? false : true; }).trigger('orientationchange.'+namespace); } // check opt.bootCallback if (opts.bootCallback && typeof opts.bootCallback === 'function') { (function() { var func = bootCallback, opFunc = opts.bootCallback; bootCallback = function(fm, extraObj) { func && typeof func === 'function' && func.call(this, fm, extraObj); opFunc.call(this, fm, extraObj); }; })(); } delete opts.bootCallback; /** * Protocol version * * @type String **/ this.api = null; /** * elFinder use new api * * @type Boolean **/ this.newAPI = false; /** * elFinder use old api * * @type Boolean **/ this.oldAPI = false; /** * Net drivers names * * @type Array **/ this.netDrivers = []; /** * Base URL of elfFinder library starting from Manager HTML * * @type String */ this.baseUrl = ''; /** * Base URL of i18n js files * baseUrl + "js/i18n/" when empty value * * @type String */ this.i18nBaseUrl = ''; /** * Base URL of worker js files * baseUrl + "js/worker/" when empty value * * @type String */ this.workerBaseUrl = ''; /** * Is elFinder CSS loaded * * @type Boolean */ this.cssloaded = false; /** * Current theme object * * @type Object|Null */ this.theme = null; this.mimesCanMakeEmpty = {}; /** * Callback function at boot up that option specified at elFinder starting * * @type Function */ this.bootCallback; /** * Callback function at reload(restart) elFinder * * @type Function */ this.reloadCallback; /** * ID. Required to create unique cookie name * * @type String **/ this.id = id; /** * Method to store/fetch data * * @type Function **/ this.storage = (function() { try { if ('localStorage' in window && window.localStorage !== null) { if (self.UA.Safari) { // check for Mac/iOS safari private browsing mode window.localStorage.setItem('elfstoragecheck', 1); window.localStorage.removeItem('elfstoragecheck'); } return self.localStorage; } else { return self.cookie; } } catch (e) { return self.cookie; } })(); /** * Set pause page unload check function or Get state * * @param Boolean state To set state * @param Boolean keep Keep disabled * @return Boolean|void */ this.pauseUnloadCheck = function(state, keep) { if (typeof state === 'undefined') { return diableUnloadCheck; } else { diableUnloadCheck = !!state; if (state && !keep) { requestAnimationFrame(function() { diableUnloadCheck = false; }); } } }; /** * Configuration options * * @type Object **/ //this.options = jQuery.extend(true, {}, this._options, opts); this.options = Object.assign({}, this._options); // for old type configuration if (opts.uiOptions) { if (opts.uiOptions.toolbar && Array.isArray(opts.uiOptions.toolbar)) { if (jQuery.isPlainObject(opts.uiOptions.toolbar[opts.uiOptions.toolbar.length - 1])) { self.options.uiOptions.toolbarExtra = Object.assign(self.options.uiOptions.toolbarExtra || {}, opts.uiOptions.toolbar.pop()); } } } // Overwrite if opts value is an array (function() { var arrOv = function(obj, base) { if (jQuery.isPlainObject(obj)) { jQuery.each(obj, function(k, v) { if (jQuery.isPlainObject(v)) { if (!base[k]) { base[k] = {}; } arrOv(v, base[k]); } else { base[k] = v; } }); } }; arrOv(opts, self.options); })(); // join toolbarExtra to toolbar this.options.uiOptions.toolbar.push(this.options.uiOptions.toolbarExtra); delete this.options.uiOptions.toolbarExtra; /** * Arrays that has to unbind events * * @type Object */ this.toUnbindEvents = {}; /** * Attach listener to events * To bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Object event handler or {done: handler} * @param Boolean priority first * @return elFinder */ this.bind = function(event, callback, priorityFirst) { var i, len; if (callback && (typeof callback === 'function' || typeof callback.done === 'function')) { event = ('' + event).toLowerCase().replace(/^\s+|\s+$/g, '').split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (listeners[event[i]] === void(0)) { listeners[event[i]] = []; } listeners[event[i]][priorityFirst? 'unshift' : 'push'](callback); } } return this; }; /** * Remove event listener if exists * To un-bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Function callback * @return elFinder */ this.unbind = function(event, callback) { var i, len, l, ci; event = ('' + event).toLowerCase().split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (l = listeners[event[i]]) { ci = jQuery.inArray(callback, l); ci > -1 && l.splice(ci, 1); } } callback = null; return this; }; /** * Fire event - send notification to all event listeners * In the callback `this` becames an event object * * @param String event type * @param Object data to send across event * @param Boolean allow modify data (call by reference of data) default: true * @return elFinder */ this.trigger = function(evType, data, allowModify) { var type = evType.toLowerCase(), isopen = (type === 'open'), dataIsObj = (typeof data === 'object'), handlers = listeners[type] || [], dones = [], i, l, jst, event; this.debug('event-'+type, data); if (! dataIsObj || typeof allowModify === 'undefined') { allowModify = true; } if (l = handlers.length) { event = jQuery.Event(type); if (data) { data._getEvent = function() { return event; }; } if (allowModify) { event.data = data; } for (i = 0; i < l; i++) { if (! handlers[i]) { // probably un-binded this handler continue; } // handler is jQuery.Deferred(), call all functions upon completion if (handlers[i].done) { dones.push(handlers[i].done); continue; } // set `event.data` only callback has argument if (handlers[i].length) { if (!allowModify) { // to avoid data modifications. remember about "sharing" passing arguments in js :) if (typeof jst === 'undefined') { try { jst = JSON.stringify(data); } catch(e) { jst = false; } } event.data = jst? JSON.parse(jst) : data; } } try { if (handlers[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } // call done functions if (l = dones.length) { for (i = 0; i < l; i++) { try { if (dones[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type + '(done)'); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } } if (this.toUnbindEvents[type] && this.toUnbindEvents[type].length) { jQuery.each(this.toUnbindEvents[type], function(i, v) { self.unbind(v.type, v.callback); }); delete this.toUnbindEvents[type]; } } return this; }; /** * Get event listeners * * @param String event type * @return Array listed event functions */ this.getListeners = function(event) { return event? listeners[event.toLowerCase()] : listeners; }; // set fm.baseUrl this.baseUrl = (function() { var myTag, base, baseUrl; if (self.options.baseUrl) { return self.options.baseUrl; } else { baseUrl = ''; myTag = null; jQuery('head > script').each(function() { if (this.src && this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js(?:$|\?)/i)) { myTag = jQuery(this); return false; } }); if (myTag) { baseUrl = myTag.attr('src').replace(/js\/[^\/]+$/, ''); if (! baseUrl.match(/^(https?\/\/|\/)/)) { // check tag if (base = jQuery('head > base[href]').attr('href')) { baseUrl = base.replace(/\/$/, '') + '/' + baseUrl; } } } if (baseUrl !== '') { self.options.baseUrl = baseUrl; } else { if (! self.options.baseUrl) { self.options.baseUrl = './'; } baseUrl = self.options.baseUrl; } return baseUrl; } })(); this.i18nBaseUrl = (this.options.i18nBaseUrl || this.baseUrl + 'js/i18n').replace(/\/$/, '') + '/'; this.workerBaseUrl = (this.options.workerBaseUrl || this.baseUrl + 'js/worker').replace(/\/$/, '') + '/'; this.options.maxErrorDialogs = Math.max(1, parseInt(this.options.maxErrorDialogs || 5)); // set dispInlineRegex cwdOptionsDefault.dispInlineRegex = this.options.dispInlineRegex; // auto load required CSS if (this.options.cssAutoLoad) { (function() { var baseUrl = self.baseUrl, myCss = jQuery('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length, rmTag = function() { if (node.data('cssautoloadHide')) { node.data('cssautoloadHide').remove(); node.removeData('cssautoloadHide'); } }, loaded = function() { if (!self.cssloaded) { rmTag(); self.cssloaded = true; self.trigger('cssloaded'); } }; if (! myCss) { // to request CSS auto loading self.cssloaded = null; } // additional CSS files if (Array.isArray(self.options.cssAutoLoad)) { if (!self.options.themes.default) { // set as default theme self.options.themes = Object.assign({ 'default' : { 'name': 'default', 'cssurls': self.options.cssAutoLoad } }, self.options.themes); if (!self.options.theme) { self.options.theme = 'default'; } } else { if (self.cssloaded === true) { self.loadCss(self.options.cssAutoLoad); } else { self.bind('cssloaded', function() { self.loadCss(self.options.cssAutoLoad); }); } } } // try to load main css if (self.cssloaded === null) { // hide elFinder node while css loading node.addClass('elfinder') .data('cssautoloadHide', jQuery('')); jQuery('head').append(node.data('cssautoloadHide')); // set default theme if (!self.options.themes.default) { self.options.themes = Object.assign({ 'default' : { 'name': 'default', 'cssurls': '', 'author': 'elFinder Project', 'license': '3-clauses BSD' } }, self.options.themes); if (!self.options.theme) { self.options.theme = 'default'; } } // Delay 'visibility' check it required for browsers such as Safari requestAnimationFrame(function() { if (node.css('visibility') === 'hidden') { // load CSS self.loadCss([baseUrl+'css/elfinder.min.css'], { dfd: jQuery.Deferred().done(function() { loaded(); }).fail(function() { rmTag(); if (!self.cssloaded) { self.cssloaded = false; self.bind('init', function() { if (!self.cssloaded) { self.error(['errRead', 'CSS (elfinder.min)']); } }); } }) }); } else { loaded(); } }); } })(); } // load theme if exists (function() { var theme, themes = self.options.themes, ids = Object.keys(themes || {}); if (ids.length) { theme = self.storage('theme') || self.options.theme; if (!themes[theme]) { theme = ids[0]; } if (self.cssloaded) { self.changeTheme(theme); } else { self.bind('cssloaded', function() { self.changeTheme(theme); }); } } })(); /** * Volume option to set the properties of the root Stat * * @type Object */ this.optionProperties = { icon: void(0), csscls: void(0), tmbUrl: void(0), uiCmdMap: {}, netkey: void(0), disabled: [] }; if (! inFrame && ! this.options.enableAlways && jQuery('body').children().length === 2) { // only node and beeper this.options.enableAlways = true; } // make options.debug if (this.options.debug === true) { this.options.debug = 'all'; } else if (Array.isArray(this.options.debug)) { (function() { var d = {}; jQuery.each(self.options.debug, function() { d[this] = true; }); self.options.debug = d; })(); } else { this.options.debug = false; } /** * Original functions evacuated by conflict check * * @type Object */ this.noConflicts = {}; /** * Check and save conflicts with bootstrap etc * * @type Function */ this.noConflict = function() { jQuery.each(conflictChecks, function(i, p) { if (jQuery.fn[p] && typeof jQuery.fn[p].noConflict === 'function') { self.noConflicts[p] = jQuery.fn[p].noConflict(); } }); }; // do check conflict this.noConflict(); /** * Is elFinder over CORS * * @type Boolean **/ this.isCORS = false; // configure for CORS (function(){ if (typeof self.options.cors !== 'undefined' && self.options.cors !== null) { self.isCORS = self.options.cors? true : false; } else { var parseUrl = document.createElement('a'), parseUploadUrl, selfProtocol = window.location.protocol, portReg = function(protocol) { protocol = (!protocol || protocol === ':')? selfProtocol : protocol; return protocol === 'https:'? /\:443$/ : /\:80$/; }, selfHost = window.location.host.replace(portReg(selfProtocol), ''); parseUrl.href = opts.url; if (opts.urlUpload && (opts.urlUpload !== opts.url)) { parseUploadUrl = document.createElement('a'); parseUploadUrl.href = opts.urlUpload; } if (selfHost !== parseUrl.host.replace(portReg(parseUrl.protocol), '') || (parseUrl.protocol !== ':'&& parseUrl.protocol !== '' && (selfProtocol !== parseUrl.protocol)) || (parseUploadUrl && (selfHost !== parseUploadUrl.host.replace(portReg(parseUploadUrl.protocol), '') || (parseUploadUrl.protocol !== ':' && parseUploadUrl.protocol !== '' && (selfProtocol !== parseUploadUrl.protocol)) ) ) ) { self.isCORS = true; } } if (self.isCORS) { if (!jQuery.isPlainObject(self.options.customHeaders)) { self.options.customHeaders = {}; } if (!jQuery.isPlainObject(self.options.xhrFields)) { self.options.xhrFields = {}; } self.options.requestType = 'post'; self.options.customHeaders['X-Requested-With'] = 'XMLHttpRequest'; self.options.xhrFields['withCredentials'] = true; } })(); /** * Ajax request type * * @type String * @default "get" **/ this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get'; // set `requestMaxConn` by option requestMaxConn = Math.max(parseInt(this.options.requestMaxConn), 1); /** * Custom data that given as options * * @type Object * @default {} */ this.optsCustomData = jQuery.isPlainObject(this.options.customData) ? this.options.customData : {}; /** * Any data to send across every ajax request * * @type Object * @default {} **/ this.customData = Object.assign({}, this.optsCustomData); /** * Previous custom data from connector * * @type Object|null */ this.prevCustomData = null; /** * Any custom headers to send across every ajax request * * @type Object * @default {} */ this.customHeaders = jQuery.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {}; /** * Any custom xhrFields to send across every ajax request * * @type Object * @default {} */ this.xhrFields = jQuery.isPlainObject(this.options.xhrFields) ? this.options.xhrFields : {}; /** * Replace XMLHttpRequest.prototype.send to extended function for 3rd party libs XHR request etc. * * @type Function */ this.replaceXhrSend = function() { if (! savedXhrSend) { savedXhrSend = XMLHttpRequest.prototype.send; } XMLHttpRequest.prototype.send = function() { var xhr = this; // set request headers if (self.customHeaders) { jQuery.each(self.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (self.xhrFields) { jQuery.each(self.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } return savedXhrSend.apply(this, arguments); }; }; /** * Restore saved original XMLHttpRequest.prototype.send * * @type Function */ this.restoreXhrSend = function() { savedXhrSend && (XMLHttpRequest.prototype.send = savedXhrSend); }; /** * command names for into queue for only cwd requests * these commands aborts before `open` request * * @type Array * @default ['tmb', 'parents'] */ this.abortCmdsOnOpen = this.options.abortCmdsOnOpen || ['tmb', 'parents']; /** * ui.nav id prefix * * @type String */ this.navPrefix = 'nav' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-'; /** * ui.cwd id prefix * * @type String */ this.cwdPrefix = elFinder.prototype.uniqueid? ('cwd' + elFinder.prototype.uniqueid + '-') : ''; // Increment elFinder.prototype.uniqueid ++elFinder.prototype.uniqueid; /** * URL to upload files * * @type String **/ this.uploadURL = opts.urlUpload || opts.url; /** * Events namespace * * @type String **/ this.namespace = namespace; /** * Today timestamp * * @type Number **/ this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000; /** * Yesterday timestamp * * @type Number **/ this.yesterday = this.today - 86400; utc = this.options.UTCDate ? 'UTC' : ''; this.getHours = 'get'+utc+'Hours'; this.getMinutes = 'get'+utc+'Minutes'; this.getSeconds = 'get'+utc+'Seconds'; this.getDate = 'get'+utc+'Date'; this.getDay = 'get'+utc+'Day'; this.getMonth = 'get'+utc+'Month'; this.getFullYear = 'get'+utc+'FullYear'; /** * elFinder node z-index (auto detect on elFinder load) * * @type null | Number **/ this.zIndex; /** * Current search status * * @type Object */ this.searchStatus = { state : 0, // 0: search ended, 1: search started, 2: in search result query : '', target : '', mime : '', mixed : false, // in multi volumes search: false or Array that target volume ids ininc : false // in incremental search }; /** * Interface language * * @type String * @default "en" **/ this.lang = this.storage('lang') || this.options.lang; if (this.lang === 'jp') { this.lang = this.options.lang = 'ja'; } this.viewType = this.storage('view') || this.options.defaultView || 'icons'; this.sortType = this.storage('sortType') || this.options.sortType || 'name'; this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc'; this.sortStickFolders = this.storage('sortStickFolders'); if (this.sortStickFolders === null) { this.sortStickFolders = !!this.options.sortStickFolders; } else { this.sortStickFolders = !!this.sortStickFolders; } this.sortAlsoTreeview = this.storage('sortAlsoTreeview'); if (this.sortAlsoTreeview === null || this.options.sortAlsoTreeview === null) { this.sortAlsoTreeview = !!this.options.sortAlsoTreeview; } else { this.sortAlsoTreeview = !!this.sortAlsoTreeview; } this.sortRules = jQuery.extend(true, {}, this._sortRules, this.options.sortRules); jQuery.each(this.sortRules, function(name, method) { if (typeof method != 'function') { delete self.sortRules[name]; } }); this.compare = jQuery.proxy(this.compare, this); /** * Delay in ms before open notification dialog * * @type Number * @default 500 **/ this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500; /** * Dragging UI Helper object * * @type jQuery | null **/ this.draggingUiHelper = null; /** * Base droppable options * * @type Object **/ this.droppable = { greedy : true, tolerance : 'pointer', accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename', hoverClass : this.res('class', 'adroppable'), classes : { // Deprecated hoverClass jQueryUI>=1.12.0 'ui-droppable-hover': this.res('class', 'adroppable') }, autoDisable: true, // elFinder original, see jquery.elfinder.js drop : function(e, ui) { var dst = jQuery(this), targets = jQuery.grep(ui.helper.data('files')||[], function(h) { return h? true : false; }), result = [], dups = [], faults = [], isCopy = ui.helper.hasClass('elfinder-drag-helper-plus'), c = 'class', cnt, hash, i, h; if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) { return false; } if (dst.hasClass(self.res(c, 'cwdfile'))) { hash = self.cwdId2Hash(dst.attr('id')); } else if (dst.hasClass(self.res(c, 'navdir'))) { hash = self.navId2Hash(dst.attr('id')); } else { hash = cwd; } cnt = targets.length; while (cnt--) { h = targets[cnt]; // ignore drop into itself or in own location if (h != hash && files[h].phash != hash) { result.push(h); } else { ((isCopy && h !== hash && files[hash].write)? dups : faults).push(h); } } if (faults.length) { return false; } ui.helper.data('droped', true); if (dups.length) { ui.helper.hide(); self.exec('duplicate', dups, {_userAction: true}); } if (result.length) { ui.helper.hide(); self.clipboard(result, !isCopy); self.exec('paste', hash, {_userAction: true}, hash).always(function(){ self.clipboard([]); self.trigger('unlockfiles', {files : targets}); }); self.trigger('drop', {files : targets}); } } }; /** * Return true if filemanager is active * * @return Boolean **/ this.enabled = function() { return enabled && this.visible(); }; /** * Return true if filemanager is visible * * @return Boolean **/ this.visible = function() { return node[0].elfinder && node.is(':visible'); }; /** * Return file is root? * * @param Object target file object * @return Boolean */ this.isRoot = function(file) { return (file.isroot || ! file.phash)? true : false; }; /** * Return root dir hash for current working directory * * @param String target hash * @param Boolean include fake parent (optional) * @return String */ this.root = function(hash, fake) { hash = hash || cwd; var dir, i; if (! fake) { jQuery.each(self.roots, function(id, rhash) { if (hash.indexOf(id) === 0) { dir = rhash; return false; } }); if (dir) { return dir; } } dir = files[hash]; while (dir && dir.phash && (fake || ! dir.isroot)) { dir = files[dir.phash]; } if (dir) { return dir.hash; } while (i in files && files.hasOwnProperty(i)) { dir = files[i]; if (dir.mime === 'directory' && !dir.phash && dir.read) { return dir.hash; } } return ''; }; /** * Return current working directory info * * @return Object */ this.cwd = function() { return files[cwd] || {}; }; /** * Return required cwd option * * @param String option name * @param String target hash (optional) * @return mixed */ this.option = function(name, target) { var res, item; target = target || cwd; if (self.optionsByHashes[target] && typeof self.optionsByHashes[target][name] !== 'undefined') { return self.optionsByHashes[target][name]; } if (self.hasVolOptions && cwd !== target && (!(item = self.file(target)) || item.phash !== cwd)) { res = ''; jQuery.each(self.volOptions, function(id, opt) { if (target.indexOf(id) === 0) { res = opt[name] || ''; return false; } }); return res; } else { return cwdOptions[name] || ''; } }; /** * Return disabled commands by each folder * * @param Array target hashes * @return Array */ this.getDisabledCmds = function(targets, flip) { var disabled = {'hidden': true}; if (! Array.isArray(targets)) { targets = [ targets ]; } jQuery.each(targets, function(i, h) { var disCmds = self.option('disabledFlip', h); if (disCmds) { Object.assign(disabled, disCmds); } }); return flip? disabled : Object.keys(disabled); }; /** * Return file data from current dir or tree by it's hash * * @param String file hash * @return Object */ this.file = function(hash, alsoHidden) { return hash? (files[hash] || (alsoHidden? hiddenFiles[hash] : void(0))) : void(0); }; /** * Return all cached files * * @param String parent hash * @return Object */ this.files = function(phash) { var items = {}; if (phash) { if (!ownFiles[phash]) { return {}; } jQuery.each(ownFiles[phash], function(h) { if (files[h]) { items[h] = files[h]; } else { delete ownFiles[phash][h]; } }); return Object.assign({}, items); } return Object.assign({}, files); }; /** * Return list of file parents hashes include file hash * * @param String file hash * @return Array */ this.parents = function(hash) { var parents = [], dir; while (hash && (dir = this.file(hash))) { parents.unshift(dir.hash); hash = dir.phash; } return parents; }; this.path2array = function(hash, i18) { var file, path = []; while (hash) { if ((file = files[hash]) && file.hash) { path.unshift(i18 && file.i18 ? file.i18 : file.name); hash = file.isroot? null : file.phash; } else { path = []; break; } } return path; }; /** * Return file path or Get path async with jQuery.Deferred * * @param Object file * @param Boolean i18 * @param Object asyncOpt * @return String|jQuery.Deferred */ this.path = function(hash, i18, asyncOpt) { var path = files[hash] && files[hash].path ? files[hash].path : this.path2array(hash, i18).join(cwdOptions.separator); if (! asyncOpt || ! files[hash]) { return path; } else { asyncOpt = Object.assign({notify: {type : 'parents', cnt : 1, hideCnt : true}}, asyncOpt); var dfd = jQuery.Deferred(), notify = asyncOpt.notify, noreq = false, req = function() { self.request({ data : {cmd : 'parents', target : files[hash].phash}, notify : notify, preventFail : true }) .done(done) .fail(function() { dfd.reject(); }); }, done = function() { self.one('parentsdone', function() { path = self.path(hash, i18); if (path === '' && noreq) { //retry with request noreq = false; req(); } else { if (notify) { clearTimeout(ntftm); notify.cnt = -(parseInt(notify.cnt || 0)); self.notify(notify); } dfd.resolve(path); } }); }, ntftm; if (path) { return dfd.resolve(path); } else { if (self.ui['tree']) { // try as no request if (notify) { ntftm = setTimeout(function() { self.notify(notify); }, self.notifyDelay); } noreq = true; done(true); } else { req(); } return dfd; } } }; /** * Return file url if set * * @param String file hash * @param Object Options * @return String|Object of jQuery Deferred */ this.url = function(hash, o) { var file = files[hash], opts = o || {}, async = opts.async || false, temp = opts.temporary || false, onetm = (opts.onetime && self.option('onetimeUrl', hash)) || false, absurl = opts.absurl || false, dfrd = (async || onetm)? jQuery.Deferred() : null, filter = function(url) { if (url && absurl) { url = self.convAbsUrl(url); } return url; }, getUrl = function(url) { if (url) { return filter(url); } if (file.url) { return filter(file.url); } if (typeof baseUrl === 'undefined') { baseUrl = getBaseUrl(); } if (baseUrl) { return filter(baseUrl + jQuery.map(self.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/')); } var params = Object.assign({}, self.customData, { cmd: 'file', target: file.hash }); if (self.oldAPI) { params.cmd = 'open'; params.current = file.phash; } return filter(self.options.url + (self.options.url.indexOf('?') === -1 ? '?' : '&') + jQuery.param(params, true)); }, getBaseUrl = function() { return self.option('url', (!self.isRoot(file) && file.phash) || file.hash); }, baseUrl, res; if (!file || !file.read) { return async? dfrd.resolve('') : ''; } if (onetm && (!file.url || file.url == '1') && !(baseUrl = getBaseUrl())) { async = true; this.request({ data : { cmd : 'url', target : hash, options : { onetime: 1 } }, preventDefault : true, options: {async: async}, notify: {type : 'file', cnt : 1, hideCnt : true}, progressBar: opts.progressBar }).done(function(data) { dfrd.resolve(filter(data.url || '')); }).fail(function() { dfrd.resolve(''); }); } else { if (file.url == '1' || (temp && !file.url && !(baseUrl = getBaseUrl()))) { this.request({ data : { cmd : 'url', target : hash, options : { temporary: temp? 1 : 0 } }, preventDefault : true, options: {async: async}, notify: async? {type : temp? 'file' : 'url', cnt : 1, hideCnt : true} : {}, progressBar: opts.progressBar }) .done(function(data) { file.url = data.url || ''; }) .fail(function() { file.url = ''; }) .always(function() { var url; if (file.url && temp) { url = file.url; file.url = '1'; // restore } if (async) { dfrd.resolve(getUrl(url)); } else { return getUrl(url); } }); } else { if (async) { dfrd.resolve(getUrl()); } else { return getUrl(); } } } if (async) { return dfrd; } }; /** * Return file url for the extarnal service * * @param String hash The hash * @param Object options The options * @return Object jQuery Deferred */ this.forExternalUrl = function(hash, options) { var onetime = self.option('onetimeUrl', hash), opts = { async: true, absurl: true }; opts[onetime? 'onetime' : 'temporary'] = true; return self.url(hash, Object.assign({}, options, opts)); }; /** * Return file url for open in elFinder * * @param String file hash * @param Boolean for download link * @param Object requestOpts The request options * @return String */ this.openUrl = function(hash, download, callback, requestOpts) { var file = files[hash], url = '', onetimeSize = (requestOpts || {}).onetimeSize || (5 * 1024 * 1024); if (!file || !file.read) { return ''; } if (!download || download === 'sameorigin') { if (file.url) { if (file.url != 1) { url = file.url; } } else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) { url = cwdOptions.url + jQuery.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/'); } if (!download || this.isSameOrigin(url)) { if (url) { url += (url.match(/\?/)? '&' : '?') + '_'.repeat((url.match(/[\?&](_+)t=/g) || ['&t=']).sort().shift().match(/[\?&](_*)t=/)[1].length + 1) + 't=' + (file.ts || parseInt(+new Date()/1000)); if (callback) { callback(url); return; } else { return url; } } } } if (callback && this.hasParrotHeaders()) { if (!requestOpts) { requestOpts = {}; } else { delete requestOpts.onetimeSize; } if (!requestOpts.onetime && !requestOpts.temporary && file.size > onetimeSize) { if (file.mime.match(/^video|audio/)) { requestOpts.temporary = true; } else { requestOpts.onetime = true; } } if (requestOpts.onetime || requestOpts.temporary) { return this.url(file.hash, Object.assign({ async: true }, requestOpts)).done(function(url) { callback(url); }).fail(function() { callback(''); }); } else { return this.getContents(hash, 'blob', requestOpts).done(function(blob){ url = (window.URL || window.webkitURL).createObjectURL(blob); callback(url); }).fail(function() { callback(''); }); } } else { url = this.options.url; url = url + (url.indexOf('?') === -1 ? '?' : '&') + (this.oldAPI ? 'cmd=open¤t='+file.phash : 'cmd=file') + '&target=' + file.hash + '&_t=' + (file.ts || parseInt(+new Date()/1000)); if (download === true) { url += '&download=1'; } jQuery.each(this.customData, function(key, val) { url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); if (callback) { callback(url); return; } else { return url; } } }; /** * Return thumbnail url * * @param Object file object * @return String */ this.tmb = function(file) { var tmbUrl, tmbCrop, cls = 'elfinder-cwd-bgurl', url = '', cData = {}, n = 0; if (jQuery.isPlainObject(file)) { if (self.searchStatus.state && file.hash.indexOf(self.cwd().volumeid) !== 0) { tmbUrl = self.option('tmbUrl', file.hash); tmbCrop = self.option('tmbCrop', file.hash); } else { tmbUrl = cwdOptions.tmbUrl; tmbCrop = cwdOptions.tmbCrop; } if (tmbCrop) { cls += ' elfinder-cwd-bgurl-crop'; } if (tmbUrl === 'self' && file.mime.indexOf('image/') === 0) { url = self.openUrl(file.hash); cls += ' elfinder-cwd-bgself'; } else if ((self.oldAPI || tmbUrl) && file && file.tmb && file.tmb != 1) { url = tmbUrl + file.tmb; } else if (self.newAPI && file && file.tmb && file.tmb != 1) { url = file.tmb; } if (url) { if (tmbUrl !== 'self') { if (file.ts) { cData._t = file.ts; } if (cwdOptions.tmbReqCustomData && Object.keys(this.customData).length) { cData = Object.assign(cData, this.customData); } if (Object.keys(cData).length) { url += (url.match(/\?/) ? '&' : '?'); jQuery.each(cData, function (key, val) { url += ((n++ === 0)? '' : '&') + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); } } return { url: url, className: cls }; } } return false; }; /** * Return selected files hashes * * @return Array **/ this.selected = function() { return selected.slice(0); }; /** * Return selected files info * * @return Array */ this.selectedFiles = function() { return jQuery.map(selected, function(hash) { return files[hash] ? Object.assign({}, files[hash]) : null; }); }; /** * Return true if file with required name existsin required folder * * @param String file name * @param String parent folder hash * @return Boolean */ this.fileByName = function(name, phash) { var hash; for (hash in files) { if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) { return files[hash]; } } }; /** * Valid data for required command based on rules * * @param String command name * @param Object cammand's data * @return Boolean */ this.validResponse = function(cmd, data) { return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data); }; /** * Return bytes from ini formated size * * @param String ini formated size * @return Integer */ this.returnBytes = function(val) { var last; if (isNaN(val)) { if (! val) { val = ''; } // for ex. 1mb, 1KB val = val.replace(/b$/i, ''); last = val.charAt(val.length - 1).toLowerCase(); val = val.replace(/[tgmk]$/i, ''); if (last == 't') { val = val * 1024 * 1024 * 1024 * 1024; } else if (last == 'g') { val = val * 1024 * 1024 * 1024; } else if (last == 'm') { val = val * 1024 * 1024; } else if (last == 'k') { val = val * 1024; } val = isNaN(val)? 0 : parseInt(val); } else { val = parseInt(val); if (val < 1) val = 0; } return val; }; /** * Process ajax request. * Fired events : * @todo * @example * @todo * @return jQuery.Deferred */ this.request = function(opts) { var self = this, o = this.options, dfrd = jQuery.Deferred(), // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16), // request data data = Object.assign({}, self.customData, {mimes : o.onlyMimes}, opts.data || opts), // command name cmd = data.cmd, // request type is binary isBinary = (opts.options || {}).dataType === 'binary', // current cmd is "open" isOpen = (!opts.asNotOpen && cmd === 'open'), // call default fail callback (display error dialog) ? deffail = !(isBinary || opts.preventDefault || opts.preventFail), // call default success callback ? defdone = !(isBinary || opts.preventDefault || opts.preventDone), // current progress of receive data prog = opts.progressVal || 20, // timer of fake progress progTm = null, // whether the notification dialog is currently displayed hasNotify= false, // options for notify dialog notify = !opts.progressBar? (opts.notify? Object.assign({progress: prog * opts.notify.cnt}, opts.notify) : {}) : {}, // make cancel button cancel = !!opts.cancel, // do not normalize data - return as is raw = isBinary || !!opts.raw, // sync files on request fail syncOnFail = opts.syncOnFail, // use lazy() lazy = !!opts.lazy, // prepare function before done() prepare = opts.prepare, // navigate option object when cmd done navigate = opts.navigate, // open notify dialog timeout timeout, // use browser cache useCache = (opts.options || {}).cache, // request options options = Object.assign({ url : o.url, async : true, type : this.requestType, dataType : 'json', cache : (self.api >= 2.1029), // api >= 2.1029 has unique request ID data : data, headers : this.customHeaders, xhrFields: this.xhrFields, progress : function(e) { var p = e.loaded / e.total * 100; progTm && clearTimeout(progTm); if (opts.progressBar) { try { opts.progressBar.width(p + '%'); } catch(e) {} } else { if (hasNotify && notify.type) { p = p * notify.cnt; if (prog < p) { self.notify({ type: notify.type, progress: p - prog, cnt: 0, hideCnt: notify.hideCnt }); prog = p; } } } if (opts.progress) { try { opts.progress(e); } catch(e) {} } } }, opts.options || {}), /** * Default success handler. * Call default data handlers and fire event with command name. * * @param Object normalized response data * @return void **/ done = function(data) { data.warning && self.error(data.warning); if (isOpen) { open(data); } else { self.updateCache(data); } self.lazy(function() { // fire some event to update cache/ui data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); }).then(function() { // fire event with command name return self.lazy(function() { self.trigger(cmd, data, false); }); }).then(function() { // fire event with command name + 'done' return self.lazy(function() { self.trigger(cmd + 'done'); }); }).then(function() { // make toast message if (data.toasts && Array.isArray(data.toasts)) { jQuery.each(data.toasts, function() { this.msg && self.toast(this); }); } // force update content data.sync && self.sync(); }); }, /** * Request error handler. Reject dfrd with correct error message. * * @param jqxhr request object * @param String request status * @return void **/ error = function(xhr, status) { var error, data, d = self.options.debug; switch (status) { case 'abort': error = xhr.quiet ? '' : ['errConnect', 'errAbort']; break; case 'timeout': error = ['errConnect', 'errTimeout']; break; case 'parsererror': error = ['errResponse', 'errDataNotJSON']; if (xhr.responseText) { if (! cwd || (d && (d === 'all' || d['backend-error']))) { error.push(xhr.responseText); } } break; default: if (xhr.responseText) { // check responseText, Is that JSON? try { data = JSON.parse(xhr.responseText); if (data && data.error) { error = data.error; } } catch(e) {} } if (! error) { if (xhr.status == 403) { error = ['errConnect', 'errAccess', 'HTTP error ' + xhr.status]; } else if (xhr.status == 404) { error = ['errConnect', 'errNotFound', 'HTTP error ' + xhr.status]; } else if (xhr.status >= 500) { error = ['errResponse', 'errServerError', 'HTTP error ' + xhr.status]; } else { if (xhr.status == 414 && options.type === 'get') { // retry by POST method options.type = 'post'; self.abortXHR(xhr); dfrd.xhr = xhr = self.transport.send(options).fail(error).done(success); return; } error = xhr.quiet ? '' : ['errConnect', 'HTTP error ' + xhr.status]; } } } self.trigger(cmd + 'done'); dfrd.reject({error: error}, xhr, status); }, /** * Request success handler. Valid response data and reject/resolve dfrd. * * @param Object response data * @param String request status * @return void **/ success = function(response) { // Set currrent request command name self.currentReqCmd = cmd; response.debug && self.responseDebug(response); self.setCustomHeaderByXhr(xhr); if (raw) { self.abortXHR(xhr); response && response.debug && self.debug('backend-debug', response); return dfrd.resolve(response); } if (!response) { return dfrd.reject({error :['errResponse', 'errDataEmpty']}, xhr, response); } else if (!jQuery.isPlainObject(response)) { return dfrd.reject({error :['errResponse', 'errDataNotJSON']}, xhr, response); } else if (response.error) { if (isOpen) { // check leafRoots jQuery.each(self.leafRoots, function(phash, roots) { self.leafRoots[phash] = jQuery.grep(roots, function(h) { return h !== data.target; }); }); } return dfrd.reject({error :response.error}, xhr, response); } var resolve = function() { var pushLeafRoots = function(name) { if (self.leafRoots[data.target] && response[name]) { jQuery.each(self.leafRoots[data.target], function(i, h) { var root; if (root = self.file(h)) { response[name].push(root); } }); } }, setTextMimes = function() { self.textMimes = {}; jQuery.each(self.res('mimes', 'text'), function() { self.textMimes[this.toLowerCase()] = true; }); }, actionTarget; if (isOpen) { pushLeafRoots('files'); } else if (cmd === 'tree') { pushLeafRoots('tree'); } response = self.normalize(response); if (!self.validResponse(cmd, response)) { return dfrd.reject({error :(response.norError || 'errResponse')}, xhr, response); } if (isOpen) { if (!self.api) { self.api = response.api || 1; if (self.api == '2.0' && typeof response.options.uploadMaxSize !== 'undefined') { self.api = '2.1'; } self.newAPI = self.api >= 2; self.oldAPI = !self.newAPI; } if (response.textMimes && Array.isArray(response.textMimes)) { self.resources.mimes.text = response.textMimes; setTextMimes(); } !self.textMimes && setTextMimes(); if (response.options) { cwdOptions = Object.assign({}, cwdOptionsDefault, response.options); } if (response.netDrivers) { self.netDrivers = response.netDrivers; } if (response.maxTargets) { self.maxTargets = response.maxTargets; } if (!!data.init) { self.uplMaxSize = self.returnBytes(response.uplMaxSize); self.uplMaxFile = !!response.uplMaxFile? Math.min(parseInt(response.uplMaxFile), 50) : 20; } } if (typeof prepare === 'function') { prepare(response); } if (navigate) { actionTarget = navigate.target || 'added'; if (response[actionTarget] && response[actionTarget].length) { self.one(cmd + 'done', function() { var targets = response[actionTarget], newItems = self.findCwdNodes(targets), inCwdHashes = function() { var cwdHash = self.cwd().hash; return jQuery.map(targets, function(f) { return (f.phash && cwdHash === f.phash)? f.hash : null; }); }, hashes = inCwdHashes(), makeToast = function(t) { var node = void(0), data = t.action? t.action.data : void(0), cmd, msg, done; if ((data || hashes.length) && t.action && (msg = t.action.msg) && (cmd = t.action.cmd) && (!t.action.cwdNot || t.action.cwdNot !== self.cwd().hash)) { done = t.action.done; data = t.action.data; node = jQuery('
') .append( jQuery('') .on('mouseenter mouseleave', function(e) { jQuery(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); }) .on('click', function() { self.exec(cmd, data || hashes, {_userAction: true, _currentType: 'toast', _currentNode: jQuery(this) }); if (done) { self.one(cmd+'done', function() { if (typeof done === 'function') { done(); } else if (done === 'select') { self.trigger('selectfiles', {files : inCwdHashes()}); } }); } }) ); } delete t.action; t.extNode = node; return t; }; if (! navigate.toast) { navigate.toast = {}; } !navigate.noselect && self.trigger('selectfiles', {files : self.searchStatus.state > 1 ? jQuery.map(targets, function(f) { return f.hash; }) : hashes}); if (newItems.length) { if (!navigate.noscroll) { newItems.first().trigger('scrolltoview', {blink : false}); self.resources.blink(newItems, 'lookme'); } if (jQuery.isPlainObject(navigate.toast.incwd)) { self.toast(makeToast(navigate.toast.incwd)); } } else { if (jQuery.isPlainObject(navigate.toast.inbuffer)) { self.toast(makeToast(navigate.toast.inbuffer)); } } }); } } dfrd.resolve(response); response.debug && self.debug('backend-debug', response); }; self.abortXHR(xhr); lazy? self.lazy(resolve) : resolve(); }, xhr, _xhr, xhrAbort = function(e) { if (xhr && xhr.state() === 'pending') { self.abortXHR(xhr, { quiet: true , abort: true }); if (!e || (e.type !== 'unload' && e.type !== 'destroy')) { self.autoSync(); } } }, abort = function(e){ self.trigger(cmd + 'done'); if (e.type == 'autosync') { if (e.data.action != 'stop') return; } else if (e.type != 'unload' && e.type != 'destroy' && e.type != 'openxhrabort') { if (!e.data.added || !e.data.added.length) { return; } } xhrAbort(e); }, request = function(mode) { var queueAbort = function() { syncOnFail = false; dfrd.reject(); }; if (mode) { if (mode === 'cmd') { return cmd; } } if (isOpen) { if (currentOpenCmd && currentOpenCmd.state() === 'pending') { if (currentOpenCmd._target === data.target) { return dfrd.reject('openabort'); } else { if (currentOpenCmd.xhr) { currentOpenCmd.xhr.queueAbort(); } else { currentOpenCmd.reject('openabort'); } } } currentOpenCmd = dfrd; currentOpenCmd._target = data.target; } dfrd.always(function() { delete options.headers['X-elFinderReqid']; if (isOpen) { currentOpenCmd = null; } }).fail(function(error, xhr, response) { var errData, errMsg; if (isOpen && error === 'openabort') { error = ''; syncOnFail = false; } errData = { cmd: cmd, err: error, xhr: xhr, rc: response }; // unset this cmd queue when user canceling // see notify : function - `cancel.reject(0);` if (error === 0) { if (requestQueue.length) { requestQueue = jQuery.grep(requestQueue, function(req) { return (req('cmd') === cmd) ? false : true; }); } } // trigger "requestError" event self.trigger('requestError', errData); if (errData._getEvent && errData._getEvent().isDefaultPrevented()) { deffail = false; syncOnFail = false; if (error) { error.error = ''; } } // abort xhr xhrAbort(); if (isOpen) { openDir = self.file(data.target); openDir && openDir.volumeid && self.isRoot(openDir) && delete self.volumeExpires[openDir.volumeid]; } self.trigger(cmd + 'fail', response); errMsg = (typeof error === 'object')? error.error : error; if (errMsg) { deffail ? self.error(errMsg) : self.debug('error', self.i18n(errMsg)); } syncOnFail && self.sync(); }); if (!cmd) { syncOnFail = false; return dfrd.reject({error :'errCmdReq'}); } if (self.maxTargets && data.targets && data.targets.length > self.maxTargets) { syncOnFail = false; return dfrd.reject({error :['errMaxTargets', self.maxTargets]}); } defdone && dfrd.done(done); // quiet abort not completed "open" requests if (isOpen) { while ((_xhr = queue.pop())) { _xhr.queueAbort(); } if (cwd !== data.target) { while ((_xhr = cwdQueue.pop())) { _xhr.queueAbort(); } } } // trigger abort autoSync for commands to add the item if (jQuery.inArray(cmd, (self.cmdsToAdd + ' autosync').split(' ')) !== -1) { if (cmd !== 'autosync') { self.autoSync('stop'); dfrd.always(function() { self.autoSync(); }); } self.trigger('openxhrabort'); } delete options.preventFail; if (self.api >= 2.1029) { if (useCache) { options.headers['X-elFinderReqid'] = reqId; } else { Object.assign(options.data, { reqid : reqId }); } } // function for set value of this syncOnFail dfrd.syncOnFail = function(state) { syncOnFail = !!state; }; requestCnt++; dfrd.xhr = xhr = self.transport.send(options).always(function() { // set responseURL from native xhr object if (options._xhr && typeof options._xhr.responseURL !== 'undefined') { xhr.responseURL = options._xhr.responseURL || ''; } --requestCnt; if (requestQueue.length) { requestQueue.shift()(); } }).fail(error).done(success); if (self.api >= 2.1029) { xhr._requestId = reqId; } if (isOpen || (data.compare && cmd === 'info')) { // regist function queueAbort xhr.queueAbort = queueAbort; // add autoSync xhr into queue queue.unshift(xhr); // bind abort() data.compare && self.bind(self.cmdsToAdd + ' autosync openxhrabort', abort); dfrd.always(function() { var ndx = jQuery.inArray(xhr, queue); data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort); ndx !== -1 && queue.splice(ndx, 1); }); } else if (jQuery.inArray(cmd, self.abortCmdsOnOpen) !== -1) { // regist function queueAbort xhr.queueAbort = queueAbort; // add "open" xhr, only cwd xhr into queue cwdQueue.unshift(xhr); dfrd.always(function() { var ndx = jQuery.inArray(xhr, cwdQueue); ndx !== -1 && cwdQueue.splice(ndx, 1); }); } // abort pending xhr on window unload or elFinder destroy self.bind('unload destroy', abort); dfrd.always(function() { self.unbind('unload destroy', abort); }); return dfrd; }, queueingRequest = function() { // show notify if (notify.type && notify.cnt) { if (cancel) { notify.cancel = dfrd; opts.eachCancel && (notify.id = +new Date()); } timeout = setTimeout(function() { // start fake count up progTm = setTimeout(progFakeUp, 1000); self.notify(notify); hasNotify = true; dfrd.always(function() { notify.cnt = -(parseInt(notify.cnt)||0); self.notify(notify); hasNotify = false; }); }, self.notifyDelay); dfrd.always(function() { clearTimeout(timeout); }); } // queueing if (requestCnt < requestMaxConn) { // do request return request(); } else { if (isOpen) { requestQueue.unshift(request); } else { requestQueue.push(request); } return dfrd; } }, progFakeUp = function() { var add; if (hasNotify && progTm) { add = 1 * notify.cnt; progTm = null; self.notify({ type: notify.type, progress: add, cnt: 0, hideCnt: notify.hideCnt }); prog += add; if ((prog / notify.cnt) < 80) { progTm = setTimeout(progFakeUp, 500); } } }, bindData = {opts: opts, result: true}, openDir; // prevent request initial request is completed if (!self.api && !data.init) { syncOnFail = false; return dfrd.reject(); } // trigger "request.cmd" that callback be able to cancel request by substituting "false" for "event.data.result" self.trigger('request.' + cmd, bindData, true); if (! bindData.result) { self.trigger(cmd + 'done'); return dfrd.reject(); } else if (typeof bindData.result === 'object' && bindData.result.promise) { bindData.result .done(queueingRequest) .fail(function() { self.trigger(cmd + 'done'); dfrd.reject(); }); return dfrd; } return queueingRequest(); }; /** * Call cache() * Store info about files/dirs in "files" object. * * @param Array files * @param String type * @return void */ this.cache = function(dataArray, type) { if (! Array.isArray(dataArray)) { dataArray = [ dataArray ]; } cache(dataArray, type); }; /** * Update file object caches by respose data object * * @param Object respose data object * @return void */ this.updateCache = function(data) { if (jQuery.isPlainObject(data)) { data.files && data.files.length && cache(data.files, 'files'); data.tree && data.tree.length && cache(data.tree, 'tree'); data.removed && data.removed.length && remove(data.removed); data.added && data.added.length && cache(data.added, 'add'); data.changed && data.changed.length && cache(data.changed, 'change'); } }; /** * Compare current files cache with new files and return diff * * @param Array new files * @param String target folder hash * @param Array exclude properties to compare * @return Object */ this.diff = function(incoming, onlydir, excludeProps) { var raw = {}, added = [], removed = [], changed = [], excludes = null, isChanged = function(hash) { var l = changed.length; while (l--) { if (changed[l].hash == hash) { return true; } } }; jQuery.each(incoming, function(i, f) { raw[f.hash] = f; }); // make excludes object if (excludeProps && excludeProps.length) { excludes = {}; jQuery.each(excludeProps, function() { excludes[this] = true; }); } // find removed jQuery.each(files, function(hash, f) { if (! raw[hash] && (! onlydir || f.phash === onlydir)) { removed.push(hash); } }); // compare files jQuery.each(raw, function(hash, file) { var origin = files[hash], orgKeys = {}, chkKeyLen; if (!origin) { added.push(file); } else { // make orgKeys object jQuery.each(Object.keys(origin), function() { orgKeys[this] = true; }); jQuery.each(file, function(prop) { delete orgKeys[prop]; if (! excludes || ! excludes[prop]) { if (file[prop] !== origin[prop]) { changed.push(file); orgKeys = {}; return false; } } }); chkKeyLen = Object.keys(orgKeys).length; if (chkKeyLen !== 0) { if (excludes) { jQuery.each(orgKeys, function(prop) { if (excludes[prop]) { --chkKeyLen; } }); } (chkKeyLen !== 0) && changed.push(file); } } }); // parents of removed dirs mark as changed (required for tree correct work) jQuery.each(removed, function(i, hash) { var file = files[hash], phash = file.phash; if (phash && file.mime == 'directory' && jQuery.inArray(phash, removed) === -1 && raw[phash] && !isChanged(phash)) { changed.push(raw[phash]); } }); return { added : added, removed : removed, changed : changed }; }; /** * Sync content * * @return jQuery.Deferred */ this.sync = function(onlydir, polling) { this.autoSync('stop'); var self = this, compare = function(){ var c = '', cnt = 0, mtime = 0; if (onlydir && polling) { jQuery.each(files, function(h, f) { if (f.phash && f.phash === onlydir) { ++cnt; mtime = Math.max(mtime, f.ts); } c = cnt+':'+mtime; }); } return c; }, comp = compare(), dfrd = jQuery.Deferred().always(function() { !reqFail && self.trigger('sync'); }), opts = [this.request({ data : {cmd : 'open', reload : 1, target : cwd, tree : (! onlydir && this.ui.tree) ? 1 : 0, compare : comp}, preventDefault : true })], exParents = function() { var parents = [], curRoot = self.file(self.root(cwd)), curId = curRoot? curRoot.volumeid : null, phash = self.cwd().phash, isroot,pdir; while(phash) { if (pdir = self.file(phash)) { if (phash.indexOf(curId) !== 0) { parents.push( {target: phash, cmd: 'tree'} ); if (! self.isRoot(pdir)) { parents.push( {target: phash, cmd: 'parents'} ); } curRoot = self.file(self.root(phash)); curId = curRoot? curRoot.volumeid : null; } phash = pdir.phash; } else { phash = null; } } return parents; }, reqFail; if (! onlydir && self.api >= 2) { (cwd !== this.root()) && opts.push(this.request({ data : {cmd : 'parents', target : cwd}, preventDefault : true })); jQuery.each(exParents(), function(i, data) { opts.push(self.request({ data : {cmd : data.cmd, target : data.target}, preventDefault : true })); }); } jQuery.when.apply($, opts) .fail(function(error, xhr) { reqFail = (xhr && xhr.status != 200); if (! polling || jQuery.inArray('errOpen', error) !== -1) { dfrd.reject(error); self.parseError(error) && self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } else { dfrd.reject((error && xhr.status != 0)? error : void 0); } }) .done(function(odata) { var pdata, argLen, i; if (odata.cwd.compare) { if (comp === odata.cwd.compare) { return dfrd.reject(); } } // for 2nd and more requests pdata = {tree : []}; // results marge of 2nd and more requests argLen = arguments.length; if (argLen > 1) { for(i = 1; i < argLen; i++) { if (arguments[i].tree && arguments[i].tree.length) { pdata.tree.push.apply(pdata.tree, arguments[i].tree); } } } if (self.api < 2.1) { if (! pdata.tree) { pdata.tree = []; } pdata.tree.push(odata.cwd); } // data normalize odata = self.normalize(odata); if (!self.validResponse('open', odata)) { return dfrd.reject((odata.norError || 'errResponse')); } pdata = self.normalize(pdata); if (!self.validResponse('tree', pdata)) { return dfrd.reject((pdata.norError || 'errResponse')); } var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir); diff.added.push(odata.cwd); self.updateCache(diff); // trigger events diff.removed.length && self.remove(diff); diff.added.length && self.add(diff); diff.changed.length && self.change(diff); return dfrd.resolve(diff); }) .always(function() { self.autoSync(); }); return dfrd; }; this.upload = function(files) { return this.transport.upload(files, this); }; /** * Bind keybord shortcut to keydown event * * @example * elfinder.shortcut({ * pattern : 'ctrl+a', * description : 'Select all files', * callback : function(e) { ... }, * keypress : true|false (bind to keypress instead of keydown) * }) * * @param Object shortcut config * @return elFinder */ this.shortcut = function(s) { var patterns, pattern, code, i, parts; if (this.options.allowShortcuts && s.pattern && jQuery.isFunction(s.callback)) { patterns = s.pattern.toUpperCase().split(/\s+/); for (i= 0; i < patterns.length; i++) { pattern = patterns[i]; parts = pattern.split('+'); code = (code = parts.pop()).length == 1 ? (code > 0 ? code : code.charCodeAt(0)) : (code > 0 ? code : jQuery.ui.keyCode[code]); if (code && !shortcuts[pattern]) { shortcuts[pattern] = { keyCode : code, altKey : jQuery.inArray('ALT', parts) != -1, ctrlKey : jQuery.inArray('CTRL', parts) != -1, shiftKey : jQuery.inArray('SHIFT', parts) != -1, type : s.type || 'keydown', callback : s.callback, description : s.description, pattern : pattern }; } } } return this; }; /** * Registered shortcuts * * @type Object **/ this.shortcuts = function() { var ret = []; jQuery.each(shortcuts, function(i, s) { ret.push([s.pattern, self.i18n(s.description)]); }); return ret; }; /** * Get/set clipboard content. * Return new clipboard content. * * @example * this.clipboard([]) - clean clipboard * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted * * @param Array new files hashes * @param Boolean cut files? * @return Array */ this.clipboard = function(hashes, cut) { var map = function() { return jQuery.map(clipboard, function(f) { return f.hash; }); }; if (hashes !== void(0)) { clipboard.length && this.trigger('unlockfiles', {files : map()}); remember = {}; clipboard = jQuery.map(hashes||[], function(hash) { var file = files[hash]; if (file) { remember[hash] = true; return { hash : hash, phash : file.phash, name : file.name, mime : file.mime, read : file.read, locked : file.locked, cut : !!cut }; } return null; }); this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)}); cut && this.trigger('lockfiles', {files : map()}); } // return copy of clipboard instead of refrence return clipboard.slice(0, clipboard.length); }; /** * Return true if command enabled * * @param String command name * @param String|void hash for check of own volume's disabled cmds * @return Boolean */ this.isCommandEnabled = function(name, dstHash) { var disabled, cmd, cvid = self.cwd().volumeid || ''; // In serach results use selected item hash to check if (!dstHash && self.searchStatus.state > 1 && self.selected().length) { dstHash = self.selected()[0]; } if (dstHash && (! cvid || dstHash.indexOf(cvid) !== 0)) { disabled = self.option('disabledFlip', dstHash); //if (! disabled) { // disabled = {}; //} } else { disabled = cwdOptions.disabledFlip/* || {}*/; } cmd = this._commands[name]; return cmd ? (cmd.alwaysEnabled || !disabled[name]) : false; }; /** * Exec command and return result; * * @param String command name * @param String|Array usualy files hashes * @param String|Array command options * @param String|void hash for enabled check of own volume's disabled cmds * @return jQuery.Deferred */ this.exec = function(cmd, files, opts, dstHash) { var dfrd, resType; // apply commandMap for keyboard shortcut if (!dstHash && this.commandMap[cmd] && this.commandMap[cmd] !== 'hidden') { cmd = this.commandMap[cmd]; } if (cmd === 'open') { if (this.searchStatus.state || this.searchStatus.ininc) { this.trigger('searchend', { noupdate: true }); } this.autoSync('stop'); } if (!dstHash && files) { if (jQuery.isArray(files)) { if (files.length) { dstHash = files[0]; } } else { dstHash = files; } } dfrd = this._commands[cmd] && this.isCommandEnabled(cmd, dstHash) ? this._commands[cmd].exec(files, opts) : jQuery.Deferred().reject('errUnknownCmd'); resType = typeof dfrd; if (!(resType === 'object' && dfrd.promise)) { self.debug('warning', '"cmd.exec()" should be returned "jQuery.Deferred" but cmd "' + cmd + '" returned "' + resType + '"'); dfrd = jQuery.Deferred().resolve(); } this.trigger('exec', { dfrd : dfrd, cmd : cmd, files : files, opts : opts, dstHash : dstHash }); return dfrd; }; /** * Create and return dialog. * * @param String|DOMElement dialog content * @param Object dialog options * @return jQuery */ this.dialog = function(content, options) { var dialog = jQuery('
').append(content).appendTo(node).elfinderdialog(options, self), dnode = dialog.closest('.ui-dialog'), resize = function(){ ! dialog.data('draged') && dialog.is(':visible') && dialog.elfinderdialog('posInit'); }; if (dnode.length) { self.bind('resize', resize); dnode.on('remove', function() { self.unbind('resize', resize); }); } return dialog; }; /** * Create and return toast. * * @param Object toast options - see ui/toast.js * @return jQuery */ this.toast = function(options) { return jQuery('
').appendTo(this.ui.toast).elfindertoast(options || {}, this); }; /** * Return UI widget or node * * @param String ui name * @return jQuery */ this.getUI = function(ui) { return ui? (this.ui[ui] || jQuery()) : node; }; /** * Return elFinder.command instance or instances array * * @param String command name * @return Object | Array */ this.getCommand = function(name) { return name === void(0) ? this._commands : this._commands[name]; }; /** * Resize elfinder node * * @param String|Number width * @param String|Number height * @return void */ this.resize = function(w, h) { var getMargin = function() { var m = node.outerHeight(true) - node.innerHeight(), p = node; while(p.get(0) !== heightBase.get(0)) { p = p.parent(); m += p.outerHeight(true) - p.innerHeight(); if (! p.parent().length) { // reached the document break; } } return m; }, fit = ! node.hasClass('ui-resizable'), prv = node.data('resizeSize') || {w: 0, h: 0}, mt, size = {}; if (heightBase && heightBase.data('resizeTm')) { clearTimeout(heightBase.data('resizeTm')); } if (! self.options.noResizeBySelf) { if (typeof h === 'string') { if (mt = h.match(/^([0-9.]+)%$/)) { // setup heightBase if (! heightBase || ! heightBase.length) { heightBase = jQuery(window); } if (! heightBase.data('marginToMyNode')) { heightBase.data('marginToMyNode', getMargin()); } if (! heightBase.data('fitToBaseFunc')) { heightBase.data('fitToBaseFunc', function(e) { var tm = heightBase.data('resizeTm'); e.preventDefault(); e.stopPropagation(); tm && cancelAnimationFrame(tm); if (! node.hasClass('elfinder-fullscreen') && (!self.UA.Mobile || heightBase.data('rotated') !== self.UA.Rotated)) { heightBase.data('rotated', self.UA.Rotated); heightBase.data('resizeTm', requestAnimationFrame(function() { self.restoreSize(); })); } }); } if (typeof heightBase.data('rotated') === 'undefined') { heightBase.data('rotated', self.UA.Rotated); } h = heightBase.height() * (mt[1] / 100) - heightBase.data('marginToMyNode'); heightBase.off('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); fit && heightBase.on('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); } } node.css({ width : w, height : parseInt(h) }); } size.w = Math.round(node.width()); size.h = Math.round(node.height()); node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); this.trigger('resize', {width : size.w, height : size.h}); } }; /** * Restore elfinder node size * * @return elFinder */ this.restoreSize = function() { this.resize(width, height); }; this.show = function() { node.show(); this.enable().trigger('show'); }; this.hide = function() { if (this.options.enableAlways) { prevEnabled = enabled; enabled = false; } this.disable(); this.trigger('hide'); node.hide(); }; /** * Lazy execution function * * @param Object function * @param Number delay * @param Object options * @return Object jQuery.Deferred */ this.lazy = function(func, delay, opts) { var busy = function(state) { var cnt = node.data('lazycnt'), repaint; if (state) { repaint = node.data('lazyrepaint')? false : opts.repaint; if (! cnt) { node.data('lazycnt', 1) .addClass('elfinder-processing'); } else { node.data('lazycnt', ++cnt); } if (repaint) { node.data('lazyrepaint', true).css('display'); // force repaint } } else { if (cnt && cnt > 1) { node.data('lazycnt', --cnt); } else { repaint = node.data('lazyrepaint'); node.data('lazycnt', 0) .removeData('lazyrepaint') .removeClass('elfinder-processing'); repaint && node.css('display'); // force repaint; self.trigger('lazydone'); } } }, dfd = jQuery.Deferred(), callFunc = function() { dfd.resolve(func.call(dfd)); busy(false); }; delay = delay || 0; opts = opts || {}; busy(true); if (delay) { setTimeout(callFunc, delay); } else { requestAnimationFrame(callFunc); } return dfd; }; /** * Destroy this elFinder instance * * @return void **/ this.destroy = function() { if (node && node[0].elfinder) { node.hasClass('elfinder-fullscreen') && self.toggleFullscreen(node); this.options.syncStart = false; this.autoSync('forcestop'); this.trigger('destroy').disable(); clipboard = []; selected = []; listeners = {}; shortcuts = {}; jQuery(window).off('.' + namespace); jQuery(document).off('.' + namespace); self.trigger = function(){}; jQuery(beeper).remove(); node.off() .removeData() .empty() .append(prevContent.contents()) .attr('class', prevContent.attr('class')) .attr('style', prevContent.attr('style')); delete node[0].elfinder; // restore kept events jQuery.each(prevEvents, function(n, arr) { jQuery.each(arr, function(i, o) { node.on(o.type + (o.namespace? '.'+o.namespace : ''), o.selector, o.handler); }); }); } }; /** * Start or stop auto sync * * @param String|Bool stop * @return void */ this.autoSync = function(mode) { var sync; if (self.options.sync >= 1000) { if (syncInterval) { clearTimeout(syncInterval); syncInterval = null; self.trigger('autosync', {action : 'stop'}); } if (mode === 'stop') { ++autoSyncStop; } else { autoSyncStop = Math.max(0, --autoSyncStop); } if (autoSyncStop || mode === 'forcestop' || ! self.options.syncStart) { return; } // run interval sync sync = function(start){ var timeout; if (cwdOptions.syncMinMs && (start || syncInterval)) { start && self.trigger('autosync', {action : 'start'}); timeout = Math.max(self.options.sync, cwdOptions.syncMinMs); syncInterval && clearTimeout(syncInterval); syncInterval = setTimeout(function() { var dosync = true, hash = cwd, cts; if (cwdOptions.syncChkAsTs && files[hash] && (cts = files[hash].ts)) { self.request({ data : {cmd : 'info', targets : [hash], compare : cts, reload : 1}, preventDefault : true }) .done(function(data){ var ts; dosync = true; if (data.compare) { ts = data.compare; if (ts == cts) { dosync = false; } } if (dosync) { self.sync(hash).always(function(){ if (ts) { // update ts for cache clear etc. files[hash].ts = ts; } sync(); }); } else { sync(); } }) .fail(function(error, xhr){ var err = self.parseError(error); if (err && xhr.status != 0) { self.error(err); if (Array.isArray(err) && jQuery.inArray('errOpen', err) !== -1) { self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } } else { syncInterval = setTimeout(function() { sync(); }, timeout); } }); } else { self.sync(cwd, true).always(function(){ sync(); }); } }, timeout); } }; sync(true); } }; /** * Return bool is inside work zone of specific point * * @param Number event.pageX * @param Number event.pageY * @return Bool */ this.insideWorkzone = function(x, y, margin) { var rectangle = this.getUI('workzone').data('rectangle'); margin = margin || 1; if (x < rectangle.left + margin || x > rectangle.left + rectangle.width + margin || y < rectangle.top + margin || y > rectangle.top + rectangle.height + margin) { return false; } return true; }; /** * Target ui node move to last of children of elFinder node fot to show front * * @param Object target Target jQuery node object */ this.toFront = function(target) { var nodes = node.children('.ui-front').removeClass('elfinder-frontmost'), lastnode = nodes.last(); nodes.css('z-index', ''); jQuery(target).addClass('ui-front elfinder-frontmost').css('z-index', lastnode.css('z-index') + 1); }; /** * Remove class 'elfinder-frontmost' and hide() to target ui node * * @param Object target Target jQuery node object * @param Boolean nohide Do not hide */ this.toHide =function(target, nohide) { var tgt = jQuery(target), last; !nohide && tgt.hide(); if (tgt.hasClass('elfinder-frontmost')) { tgt.removeClass('elfinder-frontmost'); last = node.children('.ui-front:visible:not(.elfinder-frontmost)').last(); if (last.length) { requestAnimationFrame(function() { if (!node.children('.elfinder-frontmost:visible').length) { self.toFront(last); last.trigger('frontmost'); } }); } } }; /** * Return css object for maximize * * @return Object */ this.getMaximizeCss = function() { return { width : '100%', height : '100%', margin : 0, top : 0, left : 0, display : 'block', position: 'fixed', zIndex : Math.max(self.zIndex? (self.zIndex + 1) : 0 , 1000), maxWidth : '', maxHeight: '' }; }; // Closure for togglefullscreen (function() { // check is in iframe if (inFrame && self.UA.Fullscreen) { self.UA.Fullscreen = false; if (parentIframe && typeof parentIframe.attr('allowfullscreen') !== 'undefined') { self.UA.Fullscreen = true; } } var orgStyle, bodyOvf, resizeTm, fullElm, exitFull, toFull, funcObj, cls = 'elfinder-fullscreen', clsN = 'elfinder-fullscreen-native', checkDialog = function() { var t = 0, l = 0; jQuery.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) { var $d = jQuery(d), pos = $d.position(); if (pos.top < 0) { $d.css('top', t); t += 20; } if (pos.left < 0) { $d.css('left', l); l += 20; } }); }, setFuncObj = function() { var useFullscreen = self.storage('useFullscreen'); funcObj = self.UA.Fullscreen && (useFullscreen? useFullscreen > 0 : self.options.commandsOptions.fullscreen.mode === 'screen') ? { // native full screen mode fullElm: function() { return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || null; }, exitFull: function() { if (document.exitFullscreen) { return document.exitFullscreen(); } else if (document.webkitExitFullscreen) { return document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { return document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { return document.msExitFullscreen(); } }, toFull: function(elem) { if (elem.requestFullscreen) { return elem.requestFullscreen(); } else if (elem.webkitRequestFullscreen) { return elem.webkitRequestFullscreen(); } else if (elem.mozRequestFullScreen) { return elem.mozRequestFullScreen(); } else if (elem.msRequestFullscreen) { return elem.msRequestFullscreen(); } return false; } } : { // node element maximize mode fullElm: function() { var full; if (node.hasClass(cls)) { return node.get(0); } else { full = node.find('.' + cls); if (full.length) { return full.get(0); } } return null; }, exitFull: function() { var elm; jQuery(window).off('resize.' + namespace, resize); if (bodyOvf !== void(0)) { jQuery('body').css('overflow', bodyOvf); } bodyOvf = void(0); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); jQuery(elm).trigger('resize', {fullscreen: 'off'}); } jQuery(window).trigger('resize'); }, toFull: function(elem) { bodyOvf = jQuery('body').css('overflow') || ''; jQuery('body').css('overflow', 'hidden'); jQuery(elem).css(self.getMaximizeCss()) .addClass(cls) .trigger('resize', {fullscreen: 'on'}); checkDialog(); jQuery(window).on('resize.' + namespace, resize).trigger('resize'); return true; } }; }, restoreStyle = function(elem) { if (orgStyle && orgStyle.elm == elem) { jQuery(elem).removeClass(cls + ' ' + clsN).attr('style', orgStyle.style); orgStyle = null; } }, resize = function(e) { var elm; if (e.target === window) { resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { if (elm = funcObj.fullElm()) { jQuery(elm).trigger('resize', {fullscreen: 'on'}); } }); } }; setFuncObj(); jQuery(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){ if (self.UA.Fullscreen) { var elm = funcObj.fullElm(), win = jQuery(window); resizeTm && cancelAnimationFrame(resizeTm); if (elm === null) { win.off('resize.' + namespace, resize); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); jQuery(elm).trigger('resize', {fullscreen: 'off'}); } } else { jQuery(elm).addClass(cls + ' ' + clsN) .attr('style', 'width:100%; height:100%; margin:0; padding:0;') .trigger('resize', {fullscreen: 'on'}); win.on('resize.' + namespace, resize); checkDialog(); } win.trigger('resize'); } }); /** * Toggle Full Scrren Mode * * @param Object target * @param Bool full * @return Object | Null DOM node object of current full scrren */ self.toggleFullscreen = function(target, full) { var elm = jQuery(target).get(0), curElm = null; curElm = funcObj.fullElm(); if (curElm) { if (curElm == elm) { if (full === true) { return curElm; } } else { if (full === false) { return curElm; } } funcObj.exitFull(); return null; } else { if (full === false) { return null; } } setFuncObj(); orgStyle = {elm: elm, style: jQuery(elm).attr('style')}; if (funcObj.toFull(elm) !== false) { return elm; } else { orgStyle = null; return null; } }; })(); // Closure for toggleMaximize (function(){ var cls = 'elfinder-maximized', resizeTm, resize = function(e) { if (e.target === window && e.data && e.data.elm) { var elm = e.data.elm; resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { elm.trigger('resize', {maximize: 'on'}); }); } }, exitMax = function(elm) { jQuery(window).off('resize.' + namespace, resize); jQuery('body').css('overflow', elm.data('bodyOvf')); elm.removeClass(cls) .attr('style', elm.data('orgStyle')) .removeData('bodyOvf') .removeData('orgStyle'); elm.trigger('resize', {maximize: 'off'}); }, toMax = function(elm) { elm.data('bodyOvf', jQuery('body').css('overflow') || '') .data('orgStyle', elm.attr('style')) .addClass(cls) .css(self.getMaximizeCss()); jQuery('body').css('overflow', 'hidden'); jQuery(window).on('resize.' + namespace, {elm: elm}, resize); elm.trigger('resize', {maximize: 'on'}); }; /** * Toggle Maximize target node * * @param Object target * @param Bool max * @return void */ self.toggleMaximize = function(target, max) { var elm = jQuery(target), maximized = elm.hasClass(cls); if (maximized) { if (max === true) { return; } exitMax(elm); } else { if (max === false) { return; } toMax(elm); } }; })(); /************* init stuffs ****************/ Object.assign(jQuery.ui.keyCode, { 'F1' : 112, 'F2' : 113, 'F3' : 114, 'F4' : 115, 'F5' : 116, 'F6' : 117, 'F7' : 118, 'F8' : 119, 'F9' : 120, 'F10' : 121, 'F11' : 122, 'F12' : 123, 'DIG0' : 48, 'DIG1' : 49, 'DIG2' : 50, 'DIG3' : 51, 'DIG4' : 52, 'DIG5' : 53, 'DIG6' : 54, 'DIG7' : 55, 'DIG8' : 56, 'DIG9' : 57, 'NUM0' : 96, 'NUM1' : 97, 'NUM2' : 98, 'NUM3' : 99, 'NUM4' : 100, 'NUM5' : 101, 'NUM6' : 102, 'NUM7' : 103, 'NUM8' : 104, 'NUM9' : 105, 'CONTEXTMENU' : 93, 'DOT' : 190 }); this.dragUpload = false; this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined'; // configure transport object this.transport = {}; if (typeof(this.options.transport) == 'object') { this.transport = this.options.transport; if (typeof(this.transport.init) == 'function') { this.transport.init(this); } } if (typeof(this.transport.send) != 'function') { this.transport.send = function(opts) { if (!self.UA.IE) { // keep native xhr object for handling property responseURL opts._xhr = new XMLHttpRequest(); opts.xhr = function() { if (opts.progress) { opts._xhr.addEventListener('progress', opts.progress); } return opts._xhr; }; } return jQuery.ajax(opts); }; } if (this.transport.upload == 'iframe') { this.transport.upload = jQuery.proxy(this.uploads.iframe, this); } else if (typeof(this.transport.upload) == 'function') { this.dragUpload = !!this.options.dragUploadAllow; } else if (this.xhrUpload && !!this.options.dragUploadAllow) { this.transport.upload = jQuery.proxy(this.uploads.xhr, this); this.dragUpload = true; } else { this.transport.upload = jQuery.proxy(this.uploads.iframe, this); } /** * Decoding 'raw' string converted to unicode * * @param String str * @return String */ this.decodeRawString = function(str) { var charCodes = function(str) { var i, len, arr; for (i=0,len=str.length,arr=[]; i= 0xd800 && c <= 0xdbff) { scalars.push((c & 1023) + 64 << 10 | arr[++i] & 1023); } else { scalars.push(c); } } return scalars; }, decodeUTF8 = function(arr) { var i, len, c, str, char = String.fromCharCode; for (i=0,len=arr.length,str=""; c=arr[i],i= 0xc2) { str += char((c&31)<<6 | arr[++i]&63); } else if (c <= 0xef && c >= 0xe0) { str += char((c&15)<<12 | (arr[++i]&63)<<6 | arr[++i]&63); } else if (c <= 0xf7 && c >= 0xf0) { str += char( 0xd800 | ((c&7)<<8 | (arr[++i]&63)<<2 | arr[++i]>>>4&3) - 64, 0xdc00 | (arr[i++]&15)<<6 | arr[i]&63 ); } else { str += char(0xfffd); } } return str; }; return decodeUTF8(scalarValues(str)); }; /** * Gets target file contents by file.hash * * @param String hash The hash * @param String responseType 'blob' or 'arraybuffer' (default) * @param Object requestOpts The request options * @return arraybuffer|blob The contents. */ this.getContents = function(hash, responseType, requestOpts) { var self = this, dfd = jQuery.Deferred(), type = responseType || 'arraybuffer', url, req; dfd.fail(function() { req && req.state() === 'pending' && req.reject(); }); url = self.openUrl(hash); if (!self.isSameOrigin(url)) { url = self.openUrl(hash, true); } req = self.request(Object.assign({ data : {cmd : 'get'}, options : { url: url, type: 'get', cache : true, dataType : 'binary', responseType : type, processData: false }, notify : { type: 'file', cnt: 1, hideCnt: true }, cancel : true }, requestOpts || {})) .fail(function() { dfd.reject(); }) .done(function(data) { dfd.resolve(data); }); return dfd; }; /** * Gets the binary by url. * * @param {Object} opts The options * @param {Function} callback The callback * @param {Object} requestOpts The request options * @return arraybuffer|blob The contents. */ this.getBinaryByUrl = function(opts, callback, requestOpts) { var self = this, dfd = jQuery.Deferred(), url, req; dfd.fail(function() { req && req.state() === 'pending' && req.reject(); }); req = self.request(Object.assign({ data : {cmd : 'get'}, options : Object.assign({ type: 'get', cache : true, dataType : 'binary', responseType : 'blob', processData: false }, opts) }, requestOpts || {})) .fail(function() { dfd.reject(); }) .done(function(data) { callback && callback(data); dfd.resolve(data); }); return dfd; }; /** * Gets the mimetype. * * @param {string} name The name * @param {string} orgMime The organization mime * @return {string} The mimetype. */ this.getMimetype = function(name, orgMime) { var mime = orgMime, ext, m; m = (name + '').match(/\.([^.]+)$/); if (m && (ext = m[1])) { if (!extToMimeTable) { extToMimeTable = self.arrayFlip(self.mimeTypes); } if (!(mime = extToMimeTable[ext.toLowerCase()])) { mime = orgMime; } } return mime; }; /** * Supported check hash algorisms * * @type Array */ self.hashCheckers = []; /** * Closure of getContentsHashes() */ (function(self) { var hashLibs = {}; if (window.Worker && window.ArrayBuffer) { // make fm.hashCheckers if (self.options.cdns.sparkmd5) { hashLibs.SparkMD5 = true; self.hashCheckers.push('md5'); } if (self.options.cdns.jssha) { hashLibs.jsSHA = true; self.hashCheckers = self.hashCheckers.concat(['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128', 'shake256']); } } /** * Gets the contents hashes. * * @param String target target file.hash * @param Object needHashes need hash lib names * @param Object requestOpts The request options * @return Object hashes with lib name as key */ self.getContentsHashes = function(target, needHashes, hashOpts, requestOpts) { var dfd = jQuery.Deferred(), needs = self.arrayFlip(needHashes || ['md5'], true), libs = [], jobs = [], res = {}, opts = hashOpts? hashOpts : { shake128len : 256, shake256len : 512 }, req; dfd.fail(function() { req && req.reject(); }); if (Object.keys(hashLibs).length) { req = self.getContents(target, 'arraybuffer', requestOpts).done(function(arrayBuffer) { if (needs.md5 && hashLibs.SparkMD5) { jobs.push((function() { var job = jQuery.Deferred(); try { var wk = self.getWorker(); job.fail(function() { wk && wk.terminate(); }); wk.onmessage = function(ans) { wk && wk.terminate(); if (ans.data.hash) { var f; res.md5 = ans.data.hash; if (f = self.file(target)) { f.md5 = res.md5; } } else if (ans.data.error) { res.md5 = ans.data.error; } dfd.notify(res); job.resolve(); }; wk.onerror = function(e) { job.reject(); }; wk.postMessage({ scripts: [self.options.cdns.sparkmd5, self.getWorkerUrl('calcfilehash.js')], data: { type: 'md5', bin: arrayBuffer } }); dfd.fail(function() { job.reject(); }); } catch(e) { job.reject(); delete hashLibs.SparkMD5; } return job; })()); } if (hashLibs.jsSHA) { jQuery.each(['1', '224', '256', '384', '512', '3-224', '3-256', '3-384', '3-512', 'ke128', 'ke256'], function(i, v) { if (needs['sha' + v]) { jobs.push((function() { var job = jQuery.Deferred(); try { var wk = self.getWorker(); job.fail(function() { wk && wk.terminate(); }); wk.onmessage = function(ans) { wk && wk.terminate(); if (ans.data.hash) { var f; res['sha' + v] = ans.data.hash; if (f = self.file(target)) { f['sha' + v] = res['sha' + v]; } } else if (ans.data.error) { res['sha' + v] = ans.data.error; } dfd.notify(res); job.resolve(); }; wk.onerror = function(e) { job.reject(); }; wk.postMessage({ scripts: [self.options.cdns.jssha, self.getWorkerUrl('calcfilehash.js')], data: { type: v, bin: arrayBuffer, hashOpts: opts } }); dfd.fail(function() { job.reject(); }); } catch(e) { job.reject(); delete hashLibs.jsSHA; } return job; })()); } }); } if (jobs.length) { jQuery.when.apply(null, jobs).always(function() { dfd.resolve(res); }); } else { dfd.reject(); } }).fail(function() { dfd.reject(); }); } else { dfd.reject(); } return dfd; }; })(this); /** * Parse error value to display * * @param Mixed error * @return Mixed parsed error */ this.parseError = function(error) { var arg = error; if (jQuery.isPlainObject(arg)) { arg = arg.error; } return arg; }; /** * Alias for this.trigger('error', {error : 'message'}) * * @param String error message * @return elFinder **/ this.error = function() { var arg = arguments[0], opts = arguments[1] || null, err; if (arguments.length == 1 && typeof(arg) === 'function') { return self.bind('error', arg); } else { err = this.parseError(arg); return (err === true || !err)? this : self.trigger('error', {error: err, opts : opts}); } }; // create bind/trigger aliases for build-in events jQuery.each(events, function(i, name) { self[name] = function() { var arg = arguments[0]; return arguments.length == 1 && typeof(arg) == 'function' ? self.bind(name, arg) : self.trigger(name, jQuery.isPlainObject(arg) ? arg : {}); }; }); // bind core event handlers this .enable(function() { if (!enabled && self.api && self.visible() && self.ui.overlay.is(':hidden') && ! node.children('.elfinder-dialog.' + self.res('class', 'editing') + ':visible').length) { enabled = true; document.activeElement && document.activeElement.blur(); node.removeClass('elfinder-disabled'); } }) .disable(function() { prevEnabled = enabled; enabled = false; node.addClass('elfinder-disabled'); }) .open(function() { selected = []; }) .select(function(e) { var cnt = 0, unselects = []; selected = jQuery.grep(e.data.selected || e.data.value|| [], function(hash) { if (unselects.length || (self.maxTargets && ++cnt > self.maxTargets)) { unselects.push(hash); return false; } else { return files[hash] ? true : false; } }); if (unselects.length) { self.trigger('unselectfiles', {files: unselects, inselect: true}); self.toast({mode: 'warning', msg: self.i18n(['errMaxTargets', self.maxTargets])}); } }) .error(function(e) { var opts = { cssClass : 'elfinder-dialog-error', title : self.i18n('error'), resizable : false, destroyOnClose : true, buttons : {} }, node = self.getUI(), cnt = node.children('.elfinder-dialog-error').length, last, counter; if (cnt < self.options.maxErrorDialogs) { opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { jQuery(this).elfinderdialog('close'); }; if (e.data.opts && jQuery.isPlainObject(e.data.opts)) { Object.assign(opts, e.data.opts); } self.dialog(''+self.i18n(e.data.error), opts); } else { last = node.children('.elfinder-dialog-error:last').children('.ui-dialog-content:first'); counter = last.children('.elfinder-error-counter'); if (counter.length) { counter.data('cnt', parseInt(counter.data('cnt')) + 1).html(self.i18n(['moreErrors', counter.data('cnt')])); } else { counter = jQuery(''+ self.i18n(['moreErrors', 1]) +'').data('cnt', 1); last.append('
', counter); } } }) .bind('tmb', function(e) { jQuery.each(e.data.images||[], function(hash, tmb) { if (files[hash]) { files[hash].tmb = tmb; } }); }) .bind('searchstart', function(e) { Object.assign(self.searchStatus, e.data); self.searchStatus.state = 1; }) .bind('search', function(e) { self.searchStatus.state = 2; }) .bind('searchend', function() { self.searchStatus.state = 0; self.searchStatus.ininc = false; self.searchStatus.mixed = false; }) .bind('canMakeEmptyFile', function(e) { var data = e.data, obj = {}; if (data && Array.isArray(data.mimes)) { if (!data.unshift) { obj = self.mimesCanMakeEmpty; } jQuery.each(data.mimes, function() { if (!obj[this]) { obj[this] = self.mimeTypes[this]; } }); if (data.unshift) { self.mimesCanMakeEmpty = Object.assign(obj, self.mimesCanMakeEmpty); } } }) .bind('themechange', function() { requestAnimationFrame(function() { self.trigger('uiresize'); }); }) ; // We listen and emit a sound on delete according to option if (true === this.options.sound) { this.bind('playsound', function(e) { var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"'), file = e.data && e.data.soundFile; play && file && play != '' && play != 'no' && jQuery(beeper).html('')[0].play(); }); } // bind external event handlers jQuery.each(this.options.handlers, function(event, callback) { self.bind(event, callback); }); /** * History object. Store visited folders * * @type Object **/ this.history = new this.history(this); /** * Root hashed * * @type Object */ this.roots = {}; /** * leaf roots * * @type Object */ this.leafRoots = {}; this.volumeExpires = {}; /** * Loaded commands * * @type Object **/ this._commands = {}; if (!Array.isArray(this.options.commands)) { this.options.commands = []; } if (jQuery.inArray('*', this.options.commands) !== -1) { this.options.commands = Object.keys(this.commands); } /** * UI command map of cwd volume ( That volume driver option `uiCmdMap` ) * * @type Object **/ this.commandMap = {}; /** * cwd options of each volume * key: volumeid * val: options object * * @type Object */ this.volOptions = {}; /** * Has volOptions data * * @type Boolean */ this.hasVolOptions = false; /** * Hash of trash holders * key: trash folder hash * val: source volume hash * * @type Object */ this.trashes = {}; /** * cwd options of each folder/file * key: hash * val: options object * * @type Object */ this.optionsByHashes = {}; /** * UI Auto Hide Functions * Each auto hide function mast be call to `fm.trigger('uiautohide')` at end of process * * @type Array **/ this.uiAutoHide = []; // trigger `uiautohide` this.one('open', function() { if (self.uiAutoHide.length) { setTimeout(function() { self.trigger('uiautohide'); }, 500); } }); // Auto Hide Functions sequential processing start this.bind('uiautohide', function() { if (self.uiAutoHide.length) { self.uiAutoHide.shift()(); } }); if (this.options.width) { width = this.options.width; } if (this.options.height) { height = this.options.height; } if (this.options.heightBase) { heightBase = jQuery(this.options.heightBase); } if (this.options.soundPath) { soundPath = this.options.soundPath.replace(/\/+$/, '') + '/'; } else { soundPath = this.baseUrl + soundPath; } if (this.options.parrotHeaders && Array.isArray(this.options.parrotHeaders) && this.options.parrotHeaders.length) { this.parrotHeaders = this.options.parrotHeaders; // check sessionStorage jQuery.each(this.parrotHeaders, function(i, h) { var v = self.sessionStorage('core-ph:' + h); if (v) { self.customHeaders[h] = v; } }); } else { this.parrotHeaders = []; } self.one('opendone', function() { var tm; // attach events to document jQuery(document) // disable elfinder on click outside elfinder .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !jQuery(e.target).closest(node).length && self.disable(); }) // exec shortcuts .on(keydown+' '+keypress+' '+keyup+' '+mousedown, execShortcut); // attach events to window self.options.useBrowserHistory && jQuery(window) .on('popstate.' + namespace, function(ev) { var state = ev.originalEvent.state || {}, hasThash = state.thash? true : false, dialog = node.find('.elfinder-frontmost:visible'), input = node.find('.elfinder-navbar-dir,.elfinder-cwd-filename').find('input,textarea'), onOpen, toast; if (!hasThash) { state = { thash: self.cwd().hash }; // scroll to elFinder node jQuery('html,body').animate({ scrollTop: node.offset().top }); } if (dialog.length || input.length) { history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); if (dialog.length) { if (!dialog.hasClass(self.res('class', 'preventback'))) { if (dialog.hasClass('elfinder-contextmenu')) { jQuery(document).trigger(jQuery.Event('keydown', { keyCode: jQuery.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } else if (dialog.hasClass('elfinder-dialog')) { dialog.elfinderdialog('close'); } else { dialog.trigger('close'); } } } else { input.trigger(jQuery.Event('keydown', { keyCode: jQuery.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } } else { if (hasThash) { !jQuery.isEmptyObject(self.files()) && self.request({ data : {cmd : 'open', target : state.thash, onhistory : 1}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : true }); } else { onOpen = function() { toast.trigger('click'); }; self.one('open', onOpen, true); toast = self.toast({ msg: self.i18n('pressAgainToExit'), onHidden: function() { self.unbind('open', onOpen); history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); } }); } } }); jQuery(window).on('resize.' + namespace, function(e){ if (e.target === this) { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var prv = node.data('resizeSize') || {w: 0, h: 0}, size = {w: Math.round(node.width()), h: Math.round(node.height())}; node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); self.trigger('resize', {width : size.w, height : size.h}); } }); } }) .on('beforeunload.' + namespace,function(e){ var msg, cnt; if (!self.pauseUnloadCheck()) { if (node.is(':visible')) { if (self.ui.notify.children().length && jQuery.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('ntfsmth'); } else if (node.find('.'+self.res('class', 'editing')).length && jQuery.inArray('editingFile', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('editingFile'); } else if ((cnt = Object.keys(self.selected()).length) && jQuery.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasSelected', ''+cnt); } else if ((cnt = Object.keys(self.clipboard()).length) && jQuery.inArray('hasClipboardData', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasClipboard', ''+cnt); } if (msg) { e.returnValue = msg; return msg; } } self.trigger('unload'); } }); // bind window onmessage for CORS jQuery(window).on('message.' + namespace, function(e){ var res = e.originalEvent || null, obj, data; if (res && (self.convAbsUrl(self.options.url).indexOf(res.origin) === 0 || self.convAbsUrl(self.uploadURL).indexOf(res.origin) === 0)) { try { obj = JSON.parse(res.data); data = obj.data || null; if (data) { if (data.error) { if (obj.bind) { self.trigger(obj.bind+'fail', data); } self.error(data.error); } else { data.warning && self.error(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); if (obj.bind) { self.trigger(obj.bind, data); self.trigger(obj.bind+'done'); } data.sync && self.sync(); } } } catch (e) { self.sync(); } } }); // elFinder enable always if (self.options.enableAlways) { jQuery(window).on('focus.' + namespace, function(e){ (e.target === this) && self.enable(); }); if (inFrame) { jQuery(window.top).on('focus.' + namespace, function() { if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) { requestAnimationFrame(function() { jQuery(window).trigger('focus'); }); } }); } } else if (inFrame) { jQuery(window).on('blur.' + namespace, function(e){ enabled && e.target === this && self.disable(); }); } // return focus to the window on click (elFInder in the frame) if (inFrame) { node.on('click', function(e) { jQuery(window).trigger('focus'); }); } // elFinder to enable by mouse over if (self.options.enableByMouseOver) { node.on('mouseenter touchstart', function(e) { (inFrame) && jQuery(window).trigger('focus'); ! self.enabled() && self.enable(); }); } // When the browser tab turn to foreground/background jQuery(window).on('visibilitychange.' + namespace, function(e) { var background = document.hidden || document.webkitHidden || document.msHidden; // AutoSync turn On/Off if (self.options.syncStart) { self.autoSync(background? 'stop' : void(0)); } }); }); // store instance in node node[0].elfinder = this; // auto load language file dfrdsBeforeBootup.push((function() { var lang = self.lang, langJs = self.i18nBaseUrl + 'elfinder.' + lang + '.js', dfd = jQuery.Deferred().done(function() { if (self.i18[lang]) { self.lang = lang; } self.trigger('i18load'); i18n = self.lang === 'en' ? self.i18['en'] : jQuery.extend(true, {}, self.i18['en'], self.i18[self.lang]); }); if (!self.i18[lang]) { self.lang = 'en'; if (self.hasRequire) { require([langJs], function() { dfd.resolve(); }, function() { dfd.resolve(); }); } else { self.loadScript([langJs], function() { dfd.resolve(); }, { loadType: 'tag', error : function() { dfd.resolve(); } }); } } else { dfd.resolve(); } return dfd; })()); // elFinder boot up function bootUp = function() { var columnNames; /** * i18 messages * * @type Object **/ self.messages = i18n.messages; // check jquery ui if (!(jQuery.fn.selectable && jQuery.fn.draggable && jQuery.fn.droppable && jQuery.fn.resizable && jQuery.fn.button && jQuery.fn.slider)) { return alert(self.i18n('errJqui')); } // check node if (!node.length) { return alert(self.i18n('errNode')); } // check connector url if (!self.options.url) { return alert(self.i18n('errURL')); } // column key/name map for fm.getColumnName() columnNames = Object.assign({ name : self.i18n('name'), perm : self.i18n('perms'), date : self.i18n('modify'), size : self.i18n('size'), kind : self.i18n('kind'), modestr : self.i18n('mode'), modeoct : self.i18n('mode'), modeboth : self.i18n('mode') }, self.options.uiOptions.cwd.listView.columnsCustomName); /** * Gets the column name of cwd list view * * @param String key The key * @return String The column name. */ self.getColumnName = function(key) { var res = columnNames[key] || self.i18n(key); return typeof res === 'function'? res() : res; }; /** * Interface direction * * @type String * @default "ltr" **/ self.direction = i18n.direction; /** * Date/time format * * @type String * @default "m.d.Y" **/ self.dateFormat = self.options.dateFormat || i18n.dateFormat; /** * Date format like "Yesterday 10:20:12" * * @type String * @default "{day} {time}" **/ self.fancyFormat = self.options.fancyDateFormat || i18n.fancyDateFormat; /** * Date format for if upload file has not original unique name * e.g. Clipboard image data, Image data taken with iOS * * @type String * @default "ymd-His" **/ self.nonameDateFormat = (self.options.nonameDateFormat || i18n.nonameDateFormat).replace(/[\/\\]/g, '_'); /** * Css classes * * @type String **/ self.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-' +(self.direction == 'rtl' ? 'rtl' : 'ltr') +(self.UA.Touch? (' elfinder-touch' + (self.options.resizable ? ' touch-punch' : '')) : '') +(self.UA.Mobile? ' elfinder-mobile' : '') +(self.UA.iOS? ' elfinder-ios' : '') +' '+self.options.cssClass; // prepare node node.addClass(self.cssClass) .on(mousedown, function() { !enabled && self.enable(); }); // draggable closure (function() { var ltr, wzRect, wzBottom, wzBottom2, nodeStyle, keyEvt = keydown + 'draggable' + ' keyup.' + namespace + 'draggable'; /** * Base draggable options * * @type Object **/ self.draggable = { appendTo : node, addClasses : false, distance : 4, revert : true, refreshPositions : false, cursor : 'crosshair', cursorAt : {left : 50, top : 47}, scroll : false, start : function(e, ui) { var helper = ui.helper, targets = jQuery.grep(helper.data('files')||[], function(h) { if (h) { remember[h] = true; return true; } return false; }), locked = false, cnt, h; // fix node size nodeStyle = node.attr('style'); node.width(node.width()).height(node.height()); // set var for drag() ltr = (self.direction === 'ltr'); wzRect = self.getUI('workzone').data('rectangle'); wzBottom = wzRect.top + wzRect.height; wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true); self.draggingUiHelper = helper; cnt = targets.length; while (cnt--) { h = targets[cnt]; if (files[h].locked) { locked = true; helper.data('locked', true); break; } } !locked && self.trigger('lockfiles', {files : targets}); helper.data('autoScrTm', setInterval(function() { if (helper.data('autoScr')) { self.autoScroll[helper.data('autoScr')](helper.data('autoScrVal')); } }, 50)); }, drag : function(e, ui) { var helper = ui.helper, autoScr, autoUp, bottom; if ((autoUp = wzRect.top > e.pageY) || wzBottom2 < e.pageY) { if (wzRect.cwdEdge > e.pageX) { autoScr = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { autoScr = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (autoScr.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { bottom = wzBottom; } else { autoScr = null; } } else { bottom = wzBottom2; } } if (autoScr) { helper.data('autoScr', autoScr); helper.data('autoScrVal', Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - bottom), 1.3)); } } if (! autoScr) { if (helper.data('autoScr')) { helper.data('refreshPositions', 1).data('autoScr', null); } } if (helper.data('refreshPositions') && jQuery(this).elfUiWidgetInstance('draggable')) { if (helper.data('refreshPositions') > 0) { jQuery(this).draggable('option', { refreshPositions : true, elfRefresh : true }); helper.data('refreshPositions', -1); } else { jQuery(this).draggable('option', { refreshPositions : false, elfRefresh : false }); helper.data('refreshPositions', null); } } }, stop : function(e, ui) { var helper = ui.helper, files; jQuery(document).off(keyEvt); jQuery(this).elfUiWidgetInstance('draggable') && jQuery(this).draggable('option', { refreshPositions : false }); self.draggingUiHelper = null; self.trigger('focus').trigger('dragstop'); if (! helper.data('droped')) { files = jQuery.grep(helper.data('files')||[], function(h) { return h? true : false ;}); self.trigger('unlockfiles', {files : files}); self.trigger('selectfiles', {files : self.selected()}); } self.enable(); // restore node style node.attr('style', nodeStyle); helper.data('autoScrTm') && clearInterval(helper.data('autoScrTm')); }, helper : function(e, ui) { var element = this.id ? jQuery(this) : jQuery(this).parents('[id]:first'), helper = jQuery('
'), icon = function(f) { var mime = f.mime, i, tmb = self.tmb(f); i = '
'; if (tmb) { i = jQuery(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML; } else if (f.icon) { i = jQuery(i).css(self.getIconStyle(f, true)).get(0).outerHTML; } if (f.csscls) { i = '
' + i + '
'; } return i; }, hashes, l, ctr; self.draggingUiHelper && self.draggingUiHelper.stop(true, true); self.trigger('dragstart', {target : element[0], originalEvent : e}, true); hashes = element.hasClass(self.res('class', 'cwdfile')) ? self.selected() : [self.navId2Hash(element.attr('id'))]; helper.append(icon(files[hashes[0]])).data('files', hashes).data('locked', false).data('droped', false).data('namespace', namespace).data('dropover', 0); if ((l = hashes.length) > 1) { helper.append(icon(files[hashes[l-1]]) + ''+l+''); } jQuery(document).on(keyEvt, function(e){ if (self._commands.copy) { var chk = (e.shiftKey||e.ctrlKey||e.metaKey); if (ctr !== chk) { ctr = chk; if (helper.is(':visible') && helper.data('dropover') && ! helper.data('droped')) { helper.toggleClass('elfinder-drag-helper-plus', helper.data('locked')? true : ctr); self.trigger(ctr? 'unlockfiles' : 'lockfiles', {files : hashes, helper: helper}); } } } }); return helper; } }; })(); // in getFileCallback set - change default actions on double click/enter/ctrl+enter if (self.commands.getfile) { if (typeof(self.options.getFileCallback) == 'function') { self.bind('dblclick', function(e) { e.preventDefault(); self.exec('getfile').fail(function() { self.exec('open', e.data && e.data.file? [ e.data.file ]: void(0)); }); }); self.shortcut({ pattern : 'enter', description : self.i18n('cmdgetfile'), callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); }); } }) .shortcut({ pattern : 'ctrl+enter', description : self.i18n(self.OS == 'mac' ? 'cmdrename' : 'cmdopen'), callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); } }); } else { self.options.getFileCallback = null; } } // load commands jQuery.each(self.commands, function(name, cmd) { var proto = Object.assign({}, cmd.prototype), extendsCmd, opts; if (jQuery.isFunction(cmd) && !self._commands[name] && (cmd.prototype.forceLoad || jQuery.inArray(name, self.options.commands) !== -1)) { extendsCmd = cmd.prototype.extendsCmd || ''; if (extendsCmd) { if (jQuery.isFunction(self.commands[extendsCmd])) { cmd.prototype = Object.assign({}, base, new self.commands[extendsCmd](), cmd.prototype); } else { return true; } } else { cmd.prototype = Object.assign({}, base, cmd.prototype); } self._commands[name] = new cmd(); cmd.prototype = proto; opts = self.options.commandsOptions[name] || {}; if (extendsCmd && self.options.commandsOptions[extendsCmd]) { opts = jQuery.extend(true, {}, self.options.commandsOptions[extendsCmd], opts); } self._commands[name].setup(name, opts); // setup linked commands if (self._commands[name].linkedCmds.length) { jQuery.each(self._commands[name].linkedCmds, function(i, n) { var lcmd = self.commands[n]; if (jQuery.isFunction(lcmd) && !self._commands[n]) { lcmd.prototype = base; self._commands[n] = new lcmd(); self._commands[n].setup(n, self.options.commandsOptions[n]||{}); } }); } } }); /** * UI nodes * * @type Object **/ self.ui = { // container for nav panel and current folder container workzone : jQuery('
').appendTo(node).elfinderworkzone(self), // contaainer for folders tree / places navbar : jQuery('
').appendTo(node).elfindernavbar(self, self.options.uiOptions.navbar || {}), // container for for preview etc at below the navbar navdock : jQuery('
').appendTo(node).elfindernavdock(self, self.options.uiOptions.navdock || {}), // contextmenu contextmenu : jQuery('
').appendTo(node).elfindercontextmenu(self), // overlay overlay : jQuery('
').appendTo(node).elfinderoverlay({ show : function() { self.disable(); }, hide : function() { prevEnabled && self.enable(); } }), // current folder container cwd : jQuery('
').appendTo(node).elfindercwd(self, self.options.uiOptions.cwd || {}), // notification dialog window notify : self.dialog('', { cssClass : 'elfinder-dialog-notify' + (self.options.notifyDialog.canClose? '' : ' elfinder-titlebar-button-hide'), position : self.options.notifyDialog.position, absolute : true, resizable : false, autoOpen : false, allowMinimize : true, closeOnEscape : self.options.notifyDialog.canClose? true : false, title : ' ', width : self.options.notifyDialog.width? parseInt(self.options.notifyDialog.width) : null, minHeight : null, minimize : function() { self.ui.notify.trigger('minimize'); } }), statusbar : jQuery('
').hide().appendTo(node), toast : jQuery('
').appendTo(node), bottomtray : jQuery('
').appendTo(node), progressbar : jQuery('
').appendTo(node) }; self.trigger('uiready'); // load required ui jQuery.each(self.options.ui || [], function(i, ui) { var name = 'elfinder'+ui, opts = self.options.uiOptions[ui] || {}; if (!self.ui[ui] && jQuery.fn[name]) { // regist to self.ui before make instance self.ui[ui] = jQuery('<'+(opts.tag || 'div')+'/>').appendTo(node); self.ui[ui][name](self, opts); } }); self.ui.progressbar.appendTo(self.ui.workzone); self.ui.notify.prev('.ui-dialog-titlebar').append('
'); // update size self.resize(width, height); // make node resizable if (self.options.resizable) { node.resizable({ resize : function(e, ui) { self.resize(ui.size.width, ui.size.height); }, handles : 'se', minWidth : 300, minHeight : 200 }); if (self.UA.Touch) { node.addClass('touch-punch'); } } (function() { var navbar = self.getUI('navbar'), cwd = self.getUI('cwd').parent(); self.autoScroll = { navbarUp : function(v) { navbar.scrollTop(Math.max(0, navbar.scrollTop() - v)); }, navbarDown : function(v) { navbar.scrollTop(navbar.scrollTop() + v); }, cwdUp : function(v) { cwd.scrollTop(Math.max(0, cwd.scrollTop() - v)); }, cwdDown : function(v) { cwd.scrollTop(cwd.scrollTop() + v); } }; })(); // Swipe on the touch devices to show/hide of toolbar or navbar if (self.UA.Touch) { (function() { var lastX, lastY, nodeOffset, nodeWidth, nodeTop, navbarW, toolbarH, navbar = self.getUI('navbar'), toolbar = self.getUI('toolbar'), moveEv = 'touchmove.stopscroll', moveTm, moveUpOn = function(e) { var touches = e.originalEvent.touches || [{}], y = touches[0].pageY || null; if (!lastY || y < lastY) { e.preventDefault(); moveTm && clearTimeout(moveTm); } }, moveDownOn = function(e) { e.preventDefault(); moveTm && clearTimeout(moveTm); }, moveOff = function() { moveTm = setTimeout(function() { node.off(moveEv); }, 100); }, handleW, handleH = 50; navbar = navbar.children().length? navbar : null; toolbar = toolbar.length? toolbar : null; node.on('touchstart touchmove touchend', function(e) { if (e.type === 'touchend') { lastX = false; lastY = false; moveOff(); return; } var touches = e.originalEvent.touches || [{}], x = touches[0].pageX || null, y = touches[0].pageY || null, ltr = (self.direction === 'ltr'), navbarMode, treeWidth, swipeX, moveX, toolbarT, mode; if (x === null || y === null || (e.type === 'touchstart' && touches.length > 1)) { return; } if (e.type === 'touchstart') { nodeOffset = node.offset(); nodeWidth = node.width(); if (navbar) { lastX = false; if (navbar.is(':hidden')) { if (! handleW) { handleW = Math.max(50, nodeWidth / 10); } if ((ltr? (x - nodeOffset.left) : (nodeWidth + nodeOffset.left - x)) < handleW) { lastX = x; } } else if (! e.originalEvent._preventSwipeX) { navbarW = navbar.width(); if (ltr) { swipeX = (x < nodeOffset.left + navbarW); } else { swipeX = (x > nodeOffset.left + nodeWidth - navbarW); } if (swipeX) { handleW = Math.max(50, nodeWidth / 10); lastX = x; } else { lastX = false; } } } if (toolbar) { lastY = false; if (! e.originalEvent._preventSwipeY) { toolbarH = toolbar.height(); nodeTop = nodeOffset.top; if (y - nodeTop < (toolbar.is(':hidden')? handleH : (toolbarH + 30))) { lastY = y; node.on(moveEv, toolbar.is(':hidden')? moveDownOn: moveUpOn); } } } } else { if (navbar && lastX !== false) { navbarMode = (ltr? (lastX > x) : (lastX < x))? 'navhide' : 'navshow'; moveX = Math.abs(lastX - x); if (navbarMode === 'navhide' && moveX > navbarW * 0.6 || (moveX > (navbarMode === 'navhide'? navbarW / 3 : 45) && (navbarMode === 'navshow' || (ltr? x < nodeOffset.left + 20 : x > nodeOffset.left + nodeWidth - 20) )) ) { self.getUI('navbar').trigger(navbarMode, {handleW: handleW}); lastX = false; } } if (toolbar && lastY !== false ) { toolbarT = toolbar.offset().top; if (Math.abs(lastY - y) > Math.min(45, toolbarH / 3)) { mode = (lastY > y)? 'slideUp' : 'slideDown'; if (mode === 'slideDown' || toolbarT + 20 > y) { if (toolbar.is(mode === 'slideDown' ? ':hidden' : ':visible')) { toolbar.stop(true, true).trigger('toggle', {duration: 100, handleH: handleH}); } lastY = false; } } } } }); })(); } if (self.dragUpload) { // add event listener for HTML5 DnD upload (function() { var isin = function(e) { return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && jQuery(e.target).closest('div.ui-dialog-content').length === 0); }, ent = 'native-drag-enter', disable = 'native-drag-disable', c = 'class', navdir = self.res(c, 'navdir'), droppable = self.res(c, 'droppable'), dropover = self.res(c, 'adroppable'), arrow = self.res(c, 'navarrow'), clDropActive = self.res(c, 'adroppable'), wz = self.getUI('workzone'), ltr = (self.direction === 'ltr'), clearTm = function() { autoScrTm && cancelAnimationFrame(autoScrTm); autoScrTm = null; }, wzRect, autoScrFn, autoScrTm; node.on('dragenter', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); wzRect = wz.data('rectangle'); } }) .on('dragleave', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); } }) .on('dragover', function(e) { var autoUp; if (isin(e)) { e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = 'none'; if (! autoScrTm) { autoScrTm = requestAnimationFrame(function() { var wzBottom = wzRect.top + wzRect.height, wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true), fn; if ((autoUp = e.pageY < wzRect.top) || e.pageY > wzBottom2 ) { if (wzRect.cwdEdge > e.pageX) { fn = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { fn = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (fn.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { wzBottom2 = wzBottom; } else { fn = ''; } } } fn && self.autoScroll[fn](Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom2), 1.3)); } autoScrTm = null; }); } } else { clearTm(); } }) .on('drop', function(e) { clearTm(); if (isin(e)) { e.stopPropagation(); e.preventDefault(); } }); node.on('dragenter', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget), id = e.currentTarget.id || null, cwd = null, elfFrom; if (!id) { // target is cwd cwd = self.cwd(); $elm.data(disable, false); try { jQuery.each(e.originalEvent.dataTransfer.types, function(i, v){ if (v.substr(0, 13) === 'elfinderfrom:') { elfFrom = v.substr(13).toLowerCase(); } }); } catch(e) {} } if (!cwd || (cwd.write && (!elfFrom || elfFrom !== (window.location.href + cwd.hash).toLowerCase()))) { e.preventDefault(); e.stopPropagation(); $elm.data(ent, true); $elm.addClass(clDropActive); } else { $elm.data(disable, true); } } }) .on('dragleave', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget); e.preventDefault(); e.stopPropagation(); if ($elm.data(ent)) { $elm.data(ent, false); } else { $elm.removeClass(clDropActive); } } }) .on('dragover', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget); e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = $elm.data(disable)? 'none' : 'copy'; $elm.data(ent, false); } }) .on('drop', '.native-droppable', function(e){ if (e.originalEvent && e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget), id; e.preventDefault(); e.stopPropagation(); $elm.removeClass(clDropActive); if (e.currentTarget.id) { id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id); } else { id = self.cwd().hash; } e.originalEvent._target = id; self.exec('upload', {dropEvt: e.originalEvent, target: id}, void 0, id); } }); })(); } // trigger event cssloaded if cssAutoLoad disabled if (self.cssloaded === false) { self.cssloaded = true; self.trigger('cssloaded'); } // calculate elFinder node z-index self.zIndexCalc(); // send initial request and start to pray >_< self.trigger('init') .request({ data : {cmd : 'open', target : self.startDir(), init : 1, tree : 1}, preventDone : true, notify : {type : 'open', cnt : 1, hideCnt : true}, freeze : true }) .fail(function() { self.trigger('fail').disable().lastDir(''); listeners = {}; shortcuts = {}; jQuery(document).add(node).off('.'+namespace); self.trigger = function() { }; }) .done(function(data) { var trashDisable = function(th) { var src = self.file(self.trashes[th]), d = self.options.debug, error; if (src && src.volumeid) { delete self.volOptions[src.volumeid].trashHash; } self.trashes[th] = false; self.debug('backend-error', 'Trash hash "'+th+'" was not found or not writable.'); }, toChkTh = {}; // regist rawStringDecoder if (self.options.rawStringDecoder) { self.registRawStringDecoder(self.options.rawStringDecoder); } // re-calculate elFinder node z-index self.zIndexCalc(); self.load().debug('api', self.api); // update ui's size after init node.trigger('resize'); // initial open open(data); self.trigger('open', data, false); self.trigger('opendone'); if (inFrame && self.options.enableAlways) { jQuery(window).trigger('focus'); } // check self.trashes jQuery.each(self.trashes, function(th) { var dir = self.file(th), src; if (! dir) { toChkTh[th] = true; } else if (dir.mime !== 'directory' || ! dir.write) { trashDisable(th); } }); if (Object.keys(toChkTh).length) { self.request({ data : {cmd : 'info', targets : Object.keys(toChkTh)}, preventDefault : true }).done(function(data) { if (data && data.files) { jQuery.each(data.files, function(i, dir) { if (dir.mime === 'directory' && dir.write) { delete toChkTh[dir.hash]; } }); } }).always(function() { jQuery.each(toChkTh, trashDisable); }); } // to enable / disable self[self.options.enableAlways? 'enable' : 'disable'](); }); // self.timeEnd('load'); // End of bootUp() }; // call bootCallback function with elFinder instance, extraObject - { dfrdsBeforeBootup: dfrdsBeforeBootup } if (bootCallback && typeof bootCallback === 'function') { self.bootCallback = bootCallback; bootCallback.call(node.get(0), self, { dfrdsBeforeBootup: dfrdsBeforeBootup }); } // call dfrdsBeforeBootup functions then boot up elFinder jQuery.when.apply(null, dfrdsBeforeBootup).done(function() { bootUp(); }).fail(function(error) { self.error(error); }); }; //register elFinder to global scope if (typeof toGlobal === 'undefined' || toGlobal) { window.elFinder = elFinder; } /** * Prototype * * @type Object */ elFinder.prototype = { uniqueid : 0, res : function(type, id) { return this.resources[type] && this.resources[type][id]; }, /** * User os. Required to bind native shortcuts for open/rename * * @type String **/ OS : navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other', /** * User browser UA. * jQuery.browser: version deprecated: 1.3, removed: 1.9 * * @type Object **/ UA : (function(){ var self = this, webkit = !document.unqueID && !window.opera && !window.sidebar && 'localStorage' in window && 'WebkitAppearance' in document.documentElement.style, chrome = webkit && window.chrome, /*setRotated = function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } UA.Angle = a; UA.Rotated = a % 180 === 0? false : true; },*/ UA = { // Browser IE <= IE 6 ltIE6 : typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined", // Browser IE <= IE 7 ltIE7 : typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined", // Browser IE <= IE 8 ltIE8 : typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined", // Browser IE <= IE 9 ltIE9 : document.uniqueID && document.documentMode <= 9, // Browser IE <= IE 10 ltIE10 : document.uniqueID && document.documentMode <= 10, // Browser IE >= IE 11 gtIE11 : document.uniqueID && document.documentMode >= 11, IE : document.uniqueID, Firefox : window.sidebar, Opera : window.opera, Webkit : webkit, Chrome : chrome, Edge : (chrome && window.msCredentials)? true : false, Safari : webkit && !window.chrome, Mobile : typeof window.orientation != "undefined", Touch : typeof window.ontouchstart != "undefined", iOS : navigator.platform.match(/^iP(?:[ao]d|hone)/), Mac : navigator.platform.match(/^Mac/), Fullscreen : (typeof (document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen) !== 'undefined'), Angle : 0, Rotated : false, CSS : (function() { var aStyle = document.createElement('a').style, pStyle = document.createElement('p').style, css; css = 'position:sticky;position:-webkit-sticky;'; css += 'width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;'; aStyle.cssText = css; return { positionSticky : aStyle.position.indexOf('sticky')!==-1, widthMaxContent : aStyle.width.indexOf('max-content')!==-1, flex : typeof pStyle.flex !== 'undefined' }; })() }; return UA; })(), /** * Is cookie enabled * * @type Boolean */ cookieEnabled : window.navigator.cookieEnabled, /** * Has RequireJS? * * @type Boolean */ hasRequire : (typeof define === 'function' && define.amd), /** * Current request command * * @type String */ currentReqCmd : '', /** * Current keyboard state * * @type Object */ keyState : {}, /** * Internationalization object * * @type Object */ i18 : { en : { translator : '', language : 'English', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', nonameDateFormat : 'ymd-His', messages : {} }, months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'], days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] }, /** * File mimetype to kind mapping * * @type Object */ kinds : { 'unknown' : 'Unknown', 'directory' : 'Folder', 'group' : 'Selects', 'symlink' : 'Alias', 'symlink-broken' : 'AliasBroken', 'application/x-empty' : 'TextPlain', 'application/postscript' : 'Postscript', 'application/vnd.ms-office' : 'MsOffice', 'application/msword' : 'MsWord', 'application/vnd.ms-word' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord', 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord', 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord', 'application/vnd.ms-excel' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel', 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel', 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-powerpoint' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP', 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP', 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP', 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP', 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP', 'application/pdf' : 'PDF', 'application/xml' : 'XML', 'application/vnd.oasis.opendocument.text' : 'OO', 'application/vnd.oasis.opendocument.text-template' : 'OO', 'application/vnd.oasis.opendocument.text-web' : 'OO', 'application/vnd.oasis.opendocument.text-master' : 'OO', 'application/vnd.oasis.opendocument.graphics' : 'OO', 'application/vnd.oasis.opendocument.graphics-template' : 'OO', 'application/vnd.oasis.opendocument.presentation' : 'OO', 'application/vnd.oasis.opendocument.presentation-template' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO', 'application/vnd.oasis.opendocument.chart' : 'OO', 'application/vnd.oasis.opendocument.formula' : 'OO', 'application/vnd.oasis.opendocument.database' : 'OO', 'application/vnd.oasis.opendocument.image' : 'OO', 'application/vnd.openofficeorg.extension' : 'OO', 'application/x-shockwave-flash' : 'AppFlash', 'application/flash-video' : 'Flash video', 'application/x-bittorrent' : 'Torrent', 'application/javascript' : 'JS', 'application/rtf' : 'RTF', 'application/rtfd' : 'RTF', 'application/x-font-ttf' : 'TTF', 'application/x-font-otf' : 'OTF', 'application/x-rpm' : 'RPM', 'application/x-web-config' : 'TextPlain', 'application/xhtml+xml' : 'HTML', 'application/docbook+xml' : 'DOCBOOK', 'application/x-awk' : 'AWK', 'application/x-gzip' : 'GZIP', 'application/x-bzip2' : 'BZIP', 'application/x-xz' : 'XZ', 'application/zip' : 'ZIP', 'application/x-zip' : 'ZIP', 'application/x-rar' : 'RAR', 'application/x-tar' : 'TAR', 'application/x-7z-compressed' : '7z', 'application/x-jar' : 'JAR', 'text/plain' : 'TextPlain', 'text/x-php' : 'PHP', 'text/html' : 'HTML', 'text/javascript' : 'JS', 'text/css' : 'CSS', 'text/rtf' : 'RTF', 'text/rtfd' : 'RTF', 'text/x-c' : 'C', 'text/x-csrc' : 'C', 'text/x-chdr' : 'CHeader', 'text/x-c++' : 'CPP', 'text/x-c++src' : 'CPP', 'text/x-c++hdr' : 'CPPHeader', 'text/x-shellscript' : 'Shell', 'application/x-csh' : 'Shell', 'text/x-python' : 'Python', 'text/x-java' : 'Java', 'text/x-java-source' : 'Java', 'text/x-ruby' : 'Ruby', 'text/x-perl' : 'Perl', 'text/x-sql' : 'SQL', 'text/xml' : 'XML', 'text/x-comma-separated-values' : 'CSV', 'text/x-markdown' : 'Markdown', 'image/x-ms-bmp' : 'BMP', 'image/jpeg' : 'JPEG', 'image/gif' : 'GIF', 'image/png' : 'PNG', 'image/tiff' : 'TIFF', 'image/x-targa' : 'TGA', 'image/vnd.adobe.photoshop' : 'PSD', 'image/xbm' : 'XBITMAP', 'image/pxm' : 'PXM', 'audio/mpeg' : 'AudioMPEG', 'audio/midi' : 'AudioMIDI', 'audio/ogg' : 'AudioOGG', 'audio/mp4' : 'AudioMPEG4', 'audio/x-m4a' : 'AudioMPEG4', 'audio/wav' : 'AudioWAV', 'audio/x-mp3-playlist' : 'AudioPlaylist', 'video/x-dv' : 'VideoDV', 'video/mp4' : 'VideoMPEG4', 'video/mpeg' : 'VideoMPEG', 'video/x-msvideo' : 'VideoAVI', 'video/quicktime' : 'VideoMOV', 'video/x-ms-wmv' : 'VideoWM', 'video/x-flv' : 'VideoFlash', 'video/x-matroska' : 'VideoMKV', 'video/ogg' : 'VideoOGG' }, /** * File mimetype to file extention mapping * * @type Object * @see elFinder.mimetypes.js */ mimeTypes : {}, /** * Ajax request data validation rules * * @type Object */ rules : { defaults : function(data) { if (!data || (data.added && !Array.isArray(data.added)) || (data.removed && !Array.isArray(data.removed)) || (data.changed && !Array.isArray(data.changed))) { return false; } return true; }, open : function(data) { return data && data.cwd && data.files && jQuery.isPlainObject(data.cwd) && Array.isArray(data.files); }, tree : function(data) { return data && data.tree && Array.isArray(data.tree); }, parents : function(data) { return data && data.tree && Array.isArray(data.tree); }, tmb : function(data) { return data && data.images && (jQuery.isPlainObject(data.images) || Array.isArray(data.images)); }, upload : function(data) { return data && (jQuery.isPlainObject(data.added) || Array.isArray(data.added));}, search : function(data) { return data && data.files && Array.isArray(data.files); } }, /** * Commands costructors * * @type Object */ commands : {}, /** * Commands to add the item (space delimited) * * @type String */ cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload', parseUploadData : function(text) { var self = this, data; if (!jQuery.trim(text)) { return {error : ['errResponse', 'errDataEmpty']}; } try { data = JSON.parse(text); } catch (e) { return {error : ['errResponse', 'errDataNotJSON']}; } data = self.normalize(data); if (!self.validResponse('upload', data)) { return {error : (data.norError || ['errResponse'])}; } data.removed = jQuery.merge((data.removed || []), jQuery.map(data.added || [], function(f) { return self.file(f.hash)? f.hash : null; })); return data; }, iframeCnt : 0, uploads : { // xhr muiti uploading flag xhrUploading: false, // Timer of request fail to sync failSyncTm: null, // current chunkfail requesting chunk chunkfailReq: {}, // check file/dir exists checkExists: function(files, target, fm, isDir) { var dfrd = jQuery.Deferred(), names, renames = [], hashes = {}, chkFiles = [], cancel = function() { var i = files.length; while (--i > -1) { files[i]._remove = true; } }, resolve = function() { dfrd.resolve(renames, hashes); }, check = function() { var existed = [], exists = [], i, c, pathStr = target !== fm.cwd().hash? fm.path(target, true) + fm.option('separator', target) : '', confirm = function(ndx) { var last = ndx == exists.length-1, opts = { cssClass : 'elfinder-confirm-upload', title : fm.i18n('cmdupload'), text : ['errExists', pathStr + exists[ndx].name, 'confirmRepl'], all : !last, accept : { label : 'btnYes', callback : function(all) { !last && !all ? confirm(++ndx) : resolve(); } }, reject : { label : 'btnNo', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { files[exists[i].i]._remove = true; } } else { files[exists[ndx].i]._remove = true; } !last && !all ? confirm(++ndx) : resolve(); } }, cancel : { label : 'btnCancel', callback : function() { cancel(); resolve(); } }, buttons : [ { label : 'btnBackup', cssClass : 'elfinder-confirm-btn-backup', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { renames.push(exists[i].name); } } else { renames.push(exists[ndx].name); } !last && !all ? confirm(++ndx) : resolve(); } } ] }; if (!isDir) { opts.buttons.push({ label : 'btnRename' + (last? '' : 'All'), cssClass : 'elfinder-confirm-btn-rename', callback : function() { renames = null; resolve(); } }); } if (fm.iframeCnt > 0) { delete opts.reject; } fm.confirm(opts); }; if (! fm.file(target).read) { // for dropbox type resolve(); return; } names = jQuery.map(files, function(file, i) { return file.name && (!fm.UA.iOS || file.name !== 'image.jpg')? {i: i, name: file.name} : null ;}); fm.request({ data : {cmd : 'ls', target : target, intersect : jQuery.map(names, function(item) { return item.name;})}, notify : {type : 'preupload', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { var existedArr, cwdItems; if (data) { if (data.error) { cancel(); } else { if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (data.list) { if (Array.isArray(data.list)) { existed = data.list || []; } else { existedArr = []; existed = jQuery.map(data.list, function(n) { if (typeof n === 'string') { return n; } else { // support to >=2.1.11 plugin Normalizer, Sanitizer existedArr = existedArr.concat(n); return false; } }); if (existedArr.length) { existed = existed.concat(existedArr); } hashes = data.list; } exists = jQuery.grep(names, function(name){ return jQuery.inArray(name.name, existed) !== -1 ? true : false ; }); if (exists.length && existed.length && target == fm.cwd().hash) { cwdItems = jQuery.map(fm.files(target), function(file) { return file.name; } ); if (jQuery.grep(existed, function(n) { return jQuery.inArray(n, cwdItems) === -1? true : false; }).length){ fm.sync(); } } } } } } if (exists.length > 0) { confirm(0); } else { resolve(); } }) .fail(function(error) { cancel(); resolve(); error && fm.error(error); }); }; if (fm.api >= 2.1 && typeof files[0] == 'object') { check(); } else { resolve(); } return dfrd; }, // check droped contents checkFile : function(data, fm, target) { if (!!data.checked || data.type == 'files') { return data.files; } else if (data.type == 'data') { var dfrd = jQuery.Deferred(), scanDfd = jQuery.Deferred(), files = [], paths = [], dirctorys = [], processing = 0, items, mkdirs = [], cancel = false, toArray = function(list) { return Array.prototype.slice.call(list || [], 0); }, doScan = function(items) { var entry, readEntries, excludes = fm.options.folderUploadExclude[fm.OS] || null, length = items.length, check = function() { if (--processing < 1 && scanDfd.state() === 'pending') { scanDfd.resolve(); } }, pushItem = function(file) { if (! excludes || ! file.name.match(excludes)) { paths.push(entry.fullPath || ''); files.push(file); } check(); }, readEntries = function(dirReader) { var entries = [], read = function() { dirReader.readEntries(function(results) { if (cancel || !results.length) { for (var i = 0; i < entries.length; i++) { if (cancel) { scanDfd.reject(); break; } doScan([entries[i]]); } check(); } else { entries = entries.concat(toArray(results)); read(); } }, check); }; read(); }; processing++; for (var i = 0; i < length; i++) { if (cancel) { scanDfd.reject(); break; } entry = items[i]; if (entry) { if (entry.isFile) { processing++; entry.file(pushItem, check); } else if (entry.isDirectory) { if (fm.api >= 2.1) { processing++; mkdirs.push(entry.fullPath); readEntries(entry.createReader()); // Start reading dirs. } } } } check(); return scanDfd; }, hasDirs; items = jQuery.map(data.files.items, function(item){ return item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry(); }); jQuery.each(items, function(i, item) { if (item.isDirectory) { hasDirs = true; return false; } }); if (items.length > 0) { fm.uploads.checkExists(items, target, fm, hasDirs).done(function(renames, hashes){ var dfds = []; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (renames === null) { data.overwrite = 0; renames = []; } items = jQuery.grep(items, function(item){ var i, bak, hash, dfd, hi; if (item.isDirectory && renames.length) { i = jQuery.inArray(item.name, renames); if (i !== -1) { renames.splice(i, 1); bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, ''); jQuery.each(hashes, function(h, name) { if (item.name == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(item.name, target).hash; } fm.lockfiles({files : [hash]}); dfd = fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function() { item._remove = true; fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }); dfds.push(dfd); } } return !item._remove? true : false; }); } jQuery.when.apply($, dfds).done(function(){ var notifyto, msg, id = +new Date(); if (items.length > 0) { msg = fm.escape(items[0].name); if (items.length > 1) { msg += ' ... ' + items.length + fm.i18n('items'); } notifyto = setTimeout(function() { fm.notify({ type : 'readdir', id : id, cnt : 1, hideCnt: true, msg : fm.i18n('ntfreaddir') + ' (' + msg + ')', cancel: function() { cancel = true; } }); }, fm.options.notifyDelay); doScan(items).done(function() { notifyto && clearTimeout(notifyto); fm.notify({type : 'readdir', id: id, cnt : -1}); if (cancel) { dfrd.reject(); } else { dfrd.resolve([files, paths, renames, hashes, mkdirs]); } }).fail(function() { dfrd.reject(); }); } else { dfrd.reject(); } }); }); return dfrd.promise(); } else { return dfrd.reject(); } } else { var ret = []; var check = []; var str = data.files[0]; if (data.type == 'html') { var tmp = jQuery("").append(jQuery.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))), atag; jQuery('img[_elfsrc]', tmp).each(function(){ var url, purl, self = jQuery(this), pa = self.closest('a'); if (pa && pa.attr('href') && pa.attr('href').match(/\.(?:jpe?g|gif|bmp|png)/i)) { purl = pa.attr('href'); } url = self.attr('_elfsrc'); if (url) { if (purl) { jQuery.inArray(purl, ret) == -1 && ret.push(purl); jQuery.inArray(url, check) == -1 && check.push(url); } else { jQuery.inArray(url, ret) == -1 && ret.push(url); } } // Probably it's clipboard data if (ret.length === 1 && ret[0].match(/^data:image\/png/)) { data.clipdata = true; } }); atag = jQuery('a[href]', tmp); atag.each(function(){ var text, loc, parseUrl = function(url) { var a = document.createElement('a'); a.href = url; return a; }; if (text = jQuery(this).text()) { loc = parseUrl(jQuery(this).attr('href')); if (loc.href && loc.href.match(/^(?:ht|f)tp/i) && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i) || jQuery.trim(text).match(/\.[a-z0-9-]{1,10}$/i))) { if (jQuery.inArray(loc.href, ret) == -1 && jQuery.inArray(loc.href, check) == -1) ret.push(loc.href); } } }); } else { var regex, m, url; regex = /((?:ht|f)tps?:\/\/[-_.!~*\'()a-z0-9;/?:\@&=+\$,%#\*\[\]]+)/ig; while (m = regex.exec(str)) { url = m[1].replace(/&/g, '&'); if (jQuery.inArray(url, ret) == -1) ret.push(url); } } return ret; } }, // upload transport using XMLHttpRequest xhr : function(data, fm) { var self = fm ? fm : this, node = self.getUI(), xhr = new XMLHttpRequest(), notifyto = null, notifyto1 = null, notifyto2 = null, dataChecked = data.checked, isDataType = (data.isDataType || data.type == 'data'), target = (data.target || self.cwd().hash), dropEvt = (data.dropEvt || null), extraData = data.extraData || null, chunkEnable = (self.option('uploadMaxConn', target) != -1), multiMax = Math.min(5, Math.max(1, self.option('uploadMaxConn', target))), retryWait = 10000, // 10 sec retryMax = 30, // 10 sec * 30 = 300 secs (Max 5 mins) retry = 0, getFile = function(files) { var dfd = jQuery.Deferred(), file; if (files.promise) { files.always(function(f) { dfd.resolve(Array.isArray(f) && f.length? (isDataType? f[0][0] : f[0]) : {}); }); } else { dfd.resolve(files.length? (isDataType? files[0][0] : files[0]) : {}); } return dfd; }, dfrd = jQuery.Deferred() .fail(function(err) { var error = self.parseError(err), userAbort; if (error === 'userabort') { userAbort = true; error = void 0; } if (files && (self.uploads.xhrUploading || userAbort)) { // send request om fail getFile(files).done(function(file) { if (!userAbort) { triggerError(error, file); } if (! file._cid) { // send sync request self.uploads.failSyncTm && clearTimeout(self.uploads.failSyncTm); self.uploads.failSyncTm = setTimeout(function() { self.sync(target); }, 1000); } else if (! self.uploads.chunkfailReq[file._cid]) { // send chunkfail request self.uploads.chunkfailReq[file._cid] = true; setTimeout(function() { fm.request({ data : { cmd: 'upload', target: target, chunk: file._chunk, cid: file._cid, upload: ['chunkfail'], mimes: 'chunkfail' }, options : { type: 'post', url: self.uploadURL }, preventDefault: true }).always(function() { delete self.uploads.chunkfailReq[file._chunk]; }); }, 1000); } }); } else { triggerError(error); } !userAbort && self.sync(); self.uploads.xhrUploading = false; files = null; }) .done(function(data) { self.uploads.xhrUploading = false; files = null; if (data) { self.currentReqCmd = 'upload'; data.warning && triggerError(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); self.trigger('upload', data, false); self.trigger('uploaddone'); if (data.toasts && Array.isArray(data.toasts)) { jQuery.each(data.toasts, function() { this.msg && self.toast(this); }); } data.sync && self.sync(); if (data.debug) { self.responseDebug(data); fm.debug('backend-debug', data); } } }) .always(function() { self.abortXHR(xhr); // unregist fnAbort function node.off('uploadabort', fnAbort); jQuery(window).off('unload', fnAbort); notifyto && clearTimeout(notifyto); notifyto1 && clearTimeout(notifyto1); notifyto2 && clearTimeout(notifyto2); dataChecked && !data.multiupload && checkNotify() && self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); notifyto1 && uploadedNtf && self.notify({type : 'chunkmerge', cnt : -cnt}); chunkMerge && notifyElm.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1}); }), formData = new FormData(), files = data.input ? data.input.files : self.uploads.checkFile(data, self, target), cnt = data.checked? (isDataType? files[0].length : files.length) : files.length, isChunked = false, loaded = 0, prev = 0, filesize = 0, notify = false, notifyElm = self.ui.notify, cancelBtn = true, uploadedNtf = false, abort = false, checkNotify = function() { if (!notify && (ntfUpload = notifyElm.children('.elfinder-notify-upload')).length) { notify = true; } return notify; }, fnAbort = function(e, error) { abort = true; self.abortXHR(xhr, { quiet: true, abort: true }); dfrd.reject(error); if (checkNotify()) { self.notify({type : 'upload', cnt : ntfUpload.data('cnt') * -1, progress : 0, size : 0}); } }, cancelToggle = function(show, hasChunk) { ntfUpload.children('.elfinder-notify-cancel')[show? 'show':'hide'](); cancelBtn = show; }, startNotify = function(size) { if (!size) size = filesize; return setTimeout(function() { notify = true; self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size, cancel: function() { node.trigger('uploadabort', 'userabort'); } }); ntfUpload = notifyElm.children('.elfinder-notify-upload'); prev = loaded; if (data.multiupload) { cancelBtn && cancelToggle(true); } else { cancelToggle(cancelBtn && loaded < size); } }, self.options.notifyDelay); }, doRetry = function() { if (retry++ <= retryMax) { if (checkNotify() && prev) { self.notify({type : 'upload', cnt : 0, progress : 0, size : prev}); } self.abortXHR(xhr, { quiet: true }); prev = loaded = 0; setTimeout(function() { var reqId; if (! abort) { xhr.open('POST', self.uploadURL, true); if (self.api >= 2.1029) { reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); (typeof formData['delete'] === 'function') && formData['delete']('reqid'); formData.append('reqid', reqId); xhr._requestId = reqId; } xhr.send(formData); } }, retryWait); } else { node.trigger('uploadabort', ['errAbort', 'errTimeout']); } }, progress = function() { var node; if (notify) { dfrd.notifyWith(ntfUpload, [{ cnt: ntfUpload.data('cnt'), progress: ntfUpload.data('progress'), total: ntfUpload.data('total') }]); } }, triggerError = function(err, file, unite) { err && self.trigger('xhruploadfail', { error: err, file: file }); if (unite) { if (err) { if (errCnt < self.options.maxErrorDialogs) { if (Array.isArray(err)) { errors = errors.concat(err); } else { errors.push(err); } } errCnt++; } } else { if (err) { self.error(err); } else { if (errors.length) { if (errCnt >= self.options.maxErrorDialogs) { errors = errors.concat('moreErrors', errCnt - self.options.maxErrorDialogs); } self.error(errors); } errors = []; errCnt = 0; } } }, errors = [], errCnt = 0, renames = (data.renames || null), hashes = (data.hashes || null), chunkMerge = false, ntfUpload = jQuery(); // regist fnAbort function node.one('uploadabort', fnAbort); jQuery(window).one('unload.' + fm.namespace, fnAbort); !chunkMerge && (prev = loaded); if (!isDataType && !cnt) { return dfrd.reject(['errUploadNoFiles']); } xhr.addEventListener('error', function() { if (xhr.status == 0) { if (abort) { dfrd.reject(); } else { // ff bug while send zero sized file // for safari - send directory if (!isDataType && data.files && jQuery.grep(data.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errAbort', 'errFolderUpload']); } else if (data.input && jQuery.grep(data.input.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errUploadNoFiles']); } else { doRetry(); } } } else { node.trigger('uploadabort', 'errConnect'); } }, false); xhr.addEventListener('load', function(e) { var status = xhr.status, res, curr = 0, error = '', errData, errObj; self.setCustomHeaderByXhr(xhr); if (status >= 400) { if (status > 500) { error = 'errResponse'; } else { error = ['errResponse', 'errServerError']; } } else { if (!xhr.responseText) { error = ['errResponse', 'errDataEmpty']; } } if (error) { node.trigger('uploadabort'); getFile(files || {}).done(function(file) { return dfrd.reject(file._cid? null : error); }); } loaded = filesize; if (checkNotify() && (curr = loaded - prev)) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); progress(); } res = self.parseUploadData(xhr.responseText); // chunked upload commit if (res._chunkmerged) { formData = new FormData(); var _file = [{_chunkmerged: res._chunkmerged, _name: res._name, _mtime: res._mtime}]; chunkMerge = true; node.off('uploadabort', fnAbort); notifyto2 = setTimeout(function() { self.notify({type : 'chunkmerge', cnt : 1}); }, self.options.notifyDelay); isDataType? send(_file, files[1]) : send(_file); return; } res._multiupload = data.multiupload? true : false; if (res.error) { errData = { cmd: 'upload', err: res, xhr: xhr, rc: xhr.status }; self.trigger('uploadfail', res); // trigger "requestError" event self.trigger('requestError', errData); if (errData._getEvent && errData._getEvent().isDefaultPrevented()) { res.error = ''; } if (res._chunkfailure || res._multiupload) { abort = true; self.uploads.xhrUploading = false; notifyto && clearTimeout(notifyto); if (ntfUpload.length) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); dfrd.reject(res); } else { // for multi connection dfrd.reject(); } } else { dfrd.reject(res); } } else { dfrd.resolve(res); } }, false); xhr.upload.addEventListener('loadstart', function(e) { if (!chunkMerge && e.lengthComputable) { loaded = e.loaded; retry && (loaded = 0); filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } if (checkNotify()) { self.notify({type : 'upload', cnt : 0, progress : loaded - prev, size : data.multiupload? 0 : filesize}); prev = loaded; progress(); } } }, false); xhr.upload.addEventListener('progress', function(e) { var curr; if (e.lengthComputable && !chunkMerge && xhr.readyState < 2) { loaded = e.loaded; // to avoid strange bug in safari (not in chrome) with drag&drop. // bug: macos finder opened in any folder, // reset safari cache (option+command+e), reload elfinder page, // drop file from finder // on first attempt request starts (progress callback called ones) but never ends. // any next drop - successfull. if (!data.checked && loaded > 0 && !notifyto) { notifyto = startNotify(xhr._totalSize - loaded); } if (!filesize) { filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } } curr = loaded - prev; if (checkNotify() && (curr/e.total) >= 0.05) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); prev = loaded; progress(); } if (!uploadedNtf && loaded >= filesize && !isChunked) { // Use "chunkmerge" for "server-in-process" notification uploadedNtf = true; notifyto1 = setTimeout(function() { self.notify({type : 'chunkmerge', cnt : cnt}); }, self.options.notifyDelay); } if (cancelBtn && ! data.multiupload && loaded >= filesize) { checkNotify() && cancelToggle(false); } } }, false); var send = function(files, paths){ var size = 0, fcnt = 1, sfiles = [], c = 0, total = cnt, maxFileSize, totalSize = 0, chunked = [], chunkID = new Date().getTime().toString().substr(-9), // for take care of the 32bit backend system BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize blobSlice = chunkEnable? false : '', blobSize, blobMtime, blobName, i, start, end, chunks, blob, chunk, added, done, last, failChunk, multi = function(files, num){ var sfiles = [], cid, sfilesLen = 0, cancelChk, hasChunk; if (!abort) { while(files.length && sfiles.length < num) { sfiles.push(files.shift()); } sfilesLen = sfiles.length; if (sfilesLen) { cancelChk = sfilesLen; for (var i=0; i < sfilesLen; i++) { if (abort) { break; } cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null); hasChunk = (hasChunk || cid)? true : false; if (!!failChunk[cid]) { last--; continue; } fm.exec('upload', { type: data.type, isDataType: isDataType, files: sfiles[i], checked: true, target: target, dropEvt: dropEvt, renames: renames, hashes: hashes, multiupload: true, overwrite: data.overwrite === 0? 0 : void 0, clipdata: data.clipdata }, void 0, target) .fail(function(error) { if (error && error === 'No such command') { abort = true; fm.error(['errUpload', 'errPerm']); } if (cid) { failChunk[cid] = true; } }) .always(function(e) { if (e && e.added) added = jQuery.merge(added, e.added); if (last <= ++done) { fm.trigger('multiupload', {added: added}); notifyto && clearTimeout(notifyto); if (checkNotify()) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); } } if (files.length) { multi(files, 1); // Next one } else { if (--cancelChk <= 1) { if (cancelBtn) { cancelToggle(false, hasChunk); } } dfrd.resolve(); } }); } } } if (sfiles.length < 1 || abort) { if (abort) { notifyto && clearTimeout(notifyto); if (cid) { failChunk[cid] = true; } dfrd.reject(); } else { dfrd.resolve(); self.uploads.xhrUploading = false; } } }, check = function(){ if (!self.uploads.xhrUploading) { self.uploads.xhrUploading = true; multi(sfiles, multiMax); // Max connection: 3 } else { setTimeout(check, 100); } }, reqId, err; if (! dataChecked && (isDataType || data.type == 'files')) { if (! (maxFileSize = fm.option('uploadMaxSize', target))) { maxFileSize = 0; } for (i=0; i < files.length; i++) { try { blob = files[i]; blobSize = blob.size; if (blobSlice === false) { blobSlice = ''; if (self.api >= 2.1) { if ('slice' in blob) { blobSlice = 'slice'; } else if ('mozSlice' in blob) { blobSlice = 'mozSlice'; } else if ('webkitSlice' in blob) { blobSlice = 'webkitSlice'; } } } } catch(e) { cnt--; total--; continue; } // file size check if ((maxFileSize && blobSize > maxFileSize) || (!blobSlice && fm.uplMaxSize && blobSize > fm.uplMaxSize)) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; continue; } // file mime check if (blob.type && ! self.uploadMimeCheck(blob.type, target)) { triggerError(['errUploadFile', blob.name, 'errUploadMime', '(' + blob.type + ')'], blob, true); cnt--; total--; continue; } if (blobSlice && blobSize > BYTES_PER_CHUNK) { start = 0; end = BYTES_PER_CHUNK; chunks = -1; total = Math.floor((blobSize - 1) / BYTES_PER_CHUNK); blobMtime = blob.lastModified? Math.round(blob.lastModified/1000) : 0; blobName = data.clipdata? fm.date(fm.nonameDateFormat) + '.png' : blob.name; totalSize += blobSize; chunked[chunkID] = 0; while(start < blobSize) { chunk = blob[blobSlice](start, end); chunk._chunk = blobName + '.' + (++chunks) + '_' + total + '.part'; chunk._cid = chunkID; chunk._range = start + ',' + chunk.size + ',' + blobSize; chunk._mtime = blobMtime; chunked[chunkID]++; if (size) { c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } size = BYTES_PER_CHUNK; fcnt = 1; if (isDataType) { sfiles[c][0].push(chunk); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(chunk); } start = end; end = start + BYTES_PER_CHUNK; } if (chunk == null) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; } else { total += chunks; size = 0; fcnt = 1; c++; } continue; } if ((fm.uplMaxSize && size + blobSize > fm.uplMaxSize) || fcnt > fm.uplMaxFile) { size = 0; fcnt = 1; c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } if (isDataType) { sfiles[c][0].push(blob); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(blob); } size += blobSize; totalSize += blobSize; fcnt++; } if (errors.length) { triggerError(); } if (sfiles.length == 0) { // no data data.checked = true; return false; } if (sfiles.length > 1) { // multi upload notifyto = startNotify(totalSize); added = []; done = 0; last = sfiles.length; failChunk = []; check(); return true; } // single upload if (isDataType) { files = sfiles[0][0]; paths = sfiles[0][1]; } else { files = sfiles[0]; } } if (!dataChecked) { if (!fm.UA.Safari || !data.files) { notifyto = startNotify(totalSize); } else { xhr._totalSize = totalSize; } } dataChecked = true; if (! files.length) { dfrd.reject(['errUploadNoFiles']); } xhr.open('POST', self.uploadURL, true); // set request headers if (fm.customHeaders) { jQuery.each(fm.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (fm.xhrFields) { jQuery.each(fm.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } if (self.api >= 2.1029) { // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); formData.append('reqid', reqId); xhr._requestId = reqId; } formData.append('cmd', 'upload'); formData.append(self.newAPI ? 'target' : 'current', target); if (renames && renames.length) { jQuery.each(renames, function(i, v) { formData.append('renames[]', v); }); formData.append('suffix', fm.options.backupSuffix); } if (hashes) { jQuery.each(hashes, function(i, v) { formData.append('hashes['+ i +']', v); }); } jQuery.each(self.customData, function(key, val) { formData.append(key, val); }); jQuery.each(self.options.onlyMimes, function(i, mime) { formData.append('mimes[]', mime); }); jQuery.each(files, function(i, file) { var name, relpath; if (file._chunkmerged) { formData.append('chunk', file._chunkmerged); formData.append('upload[]', file._name); formData.append('mtime[]', file._mtime); data.clipdata && formData.append('overwrite', 0); isChunked = true; } else { if (file._chunkfail) { formData.append('upload[]', 'chunkfail'); formData.append('mimes', 'chunkfail'); } else { if (data.clipdata) { if (!file._chunk) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.png'; } } else { if (file.name) { name = file.name; if (fm.UA.iOS) { if (name.match(/^image\.jpe?g$/i)) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.jpg'; } else if (name.match(/^capturedvideo\.mov$/i)) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.mov'; } } relpath = (file.webkitRelativePath || file.relativePath || file._relativePath || '').replace(/[^\/]+$/, ''); name = relpath + name; } } name? formData.append('upload[]', file, name) : formData.append('upload[]', file); } if (file._chunk) { formData.append('chunk', file._chunk); formData.append('cid' , file._cid); formData.append('range', file._range); formData.append('mtime[]', file._mtime); isChunked = true; } else { formData.append('mtime[]', file.lastModified? Math.round(file.lastModified/1000) : 0); } } }); if (isDataType) { jQuery.each(paths, function(i, path) { formData.append('upload_path[]', path); }); } if (data.overwrite === 0) { formData.append('overwrite', 0); } // send int value that which meta key was pressed when dropped as `dropWith` if (dropEvt) { formData.append('dropWith', parseInt( (dropEvt.altKey ? '1' : '0')+ (dropEvt.ctrlKey ? '1' : '0')+ (dropEvt.metaKey ? '1' : '0')+ (dropEvt.shiftKey? '1' : '0'), 2)); } // set extraData on current request if (extraData) { jQuery.each(extraData, function(key, val) { formData.append(key, val); }); } xhr.send(formData); return true; }; if (! isDataType) { if (files.length > 0) { if (! data.clipdata && renames == null) { var mkdirs = [], paths = [], excludes = fm.options.folderUploadExclude[fm.OS] || null; jQuery.each(files, function(i, file) { var relPath = file.webkitRelativePath || file.relativePath || '', idx, rootDir; if (! relPath) { return false; } if (excludes && file.name.match(excludes)) { file._remove = true; relPath = void(0); } else { // add '/' as prefix to make same to folder uploading with DnD, see #2607 relPath = '/' + relPath.replace(/\/[^\/]*$/, '').replace(/^\//, ''); if (relPath && jQuery.inArray(relPath, mkdirs) === -1) { mkdirs.push(relPath); // checking the root directory to supports see #2378 idx = relPath.substr(1).indexOf('/'); if (idx !== -1 && (rootDir = relPath.substr(0, idx + 1)) && jQuery.inArray(rootDir, mkdirs) === -1) { mkdirs.unshift(rootDir); } } } paths.push(relPath); }); renames = []; hashes = {}; if (mkdirs.length) { (function() { var checkDirs = jQuery.map(mkdirs, function(name) { return name.substr(1).indexOf('/') === -1 ? {name: name.substr(1)} : null;}), cancelDirs = []; fm.uploads.checkExists(checkDirs, target, fm, true).done( function(res, res2) { var dfds = [], dfd, bak, hash; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { cancelDirs = jQuery.map(checkDirs, function(dir) { return dir._remove? dir.name : null ;} ); checkDirs = jQuery.grep(checkDirs, function(dir) { return !dir._remove? true : false ;} ); } if (cancelDirs.length) { jQuery.each(paths.concat(), function(i, path) { if (jQuery.inArray(path, cancelDirs) === 0) { files[i]._remove = true; paths[i] = void(0); } }); } files = jQuery.grep(files, function(file) { return file._remove? false : true; }); paths = jQuery.grep(paths, function(path) { return path === void 0 ? false : true; }); if (checkDirs.length) { dfd = jQuery.Deferred(); if (res.length) { jQuery.each(res, function(i, existName) { // backup bak = fm.uniqueName(existName + fm.options.backupSuffix , null, ''); jQuery.each(res2, function(h, name) { if (res[0] == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(res[0], target).hash; } fm.lockfiles({files : [hash]}); dfds.push( fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function(error) { dfrd.reject(error); fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }) ); }); } else { dfds.push(null); } jQuery.when.apply($, dfds).done(function() { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : mkdirs}, notify : {type : 'mkdir', cnt : mkdirs.length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } paths = jQuery.map(paths.concat(), function(p, i) { if (p === '/') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; files[i]._remove = true; return null; } } }); if (rm) { files = jQuery.grep(files, function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { isDataType = true; if (! send(files, paths)) { dfrd.reject(); } } }); }); } else { dfrd.reject(); } } ); })(); } else { fm.uploads.checkExists(files, target, fm).done( function(res, res2){ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { hashes = res2; if (res === null) { data.overwrite = 0; } else { renames = res; } files = jQuery.grep(files, function(file){return !file._remove? true : false ;}); } cnt = files.length; if (cnt > 0) { if (! send(files)) { dfrd.reject(); } } else { dfrd.reject(); } } ); } } else { if (! send(files)) { dfrd.reject(); } } } else { dfrd.reject(); } } else { if (dataChecked) { send(files[0], files[1]); } else { files.done(function(result) { // result: [files, paths, renames, hashes, mkdirs] renames = []; cnt = result[0].length; if (cnt) { if (result[4] && result[4].length) { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : result[4]}, notify : {type : 'mkdir', cnt : result[4].length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } result[1] = jQuery.map(result[1], function(p, i) { result[0][i]._relativePath = p.replace(/^\//, ''); p = p.replace(/\/[^\/]*$/, ''); if (p === '') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; result[0][i]._remove = true; return null; } } }); if (rm) { result[0] = jQuery.grep(result[0], function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { renames = result[2]; hashes = result[3]; send(result[0], result[1]); } }); return; } else { result[1] = jQuery.map(result[1], function() { return target; }); } renames = result[2]; hashes = result[3]; send(result[0], result[1]); } else { dfrd.reject(['errUploadNoFiles']); } }).fail(function(){ dfrd.reject(); }); } } return dfrd; }, // upload transport using iframe iframe : function(data, fm) { var self = fm ? fm : this, input = data.input? data.input : false, files = !input ? self.uploads.checkFile(data, self) : false, dfrd = jQuery.Deferred() .fail(function(error) { error && self.error(error); }), name = 'iframe-'+fm.namespace+(++self.iframeCnt), form = jQuery('
'), msie = this.UA.IE, // clear timeouts, close notification dialog, remove form/iframe onload = function() { abortto && clearTimeout(abortto); notifyto && clearTimeout(notifyto); notify && self.notify({type : 'upload', cnt : -cnt}); setTimeout(function() { msie && jQuery('').appendTo(form); form.remove(); iframe.remove(); }, 100); }, iframe = jQuery('') .on('load', function() { iframe.off('load') .on('load', function() { onload(); // data will be processed in callback response or window onmessage dfrd.resolve(); }); // notify dialog notifyto = setTimeout(function() { notify = true; self.notify({type : 'upload', cnt : cnt}); }, self.options.notifyDelay); // emulate abort on timeout if (self.options.iframeTimeout > 0) { abortto = setTimeout(function() { onload(); dfrd.reject(['errConnect', 'errTimeout']); }, self.options.iframeTimeout); } form.submit(); }), target = (data.target || self.cwd().hash), names = [], dfds = [], renames = [], hashes = {}, cnt, notify, notifyto, abortto; if (files && files.length) { jQuery.each(files, function(i, val) { form.append(''); }); cnt = 1; } else if (input && jQuery(input).is(':file') && jQuery(input).val()) { if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { names = input.files? input.files : [{ name: jQuery(input).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/, '$1') }]; //names = jQuery.map(names, function(file){return file.name? { name: file.name } : null ;}); dfds.push(self.uploads.checkExists(names, target, self).done( function(res, res2){ hashes = res2; if (res === null) { data.overwrite = 0; } else{ renames = res; cnt = jQuery.grep(names, function(file){return !file._remove? true : false ;}).length; if (cnt != names.length) { cnt = 0; } } } )); } cnt = input.files ? input.files.length : 1; form.append(input); } else { return dfrd.reject(); } jQuery.when.apply($, dfds).done(function() { if (cnt < 1) { return dfrd.reject(); } form.append('') .append('') .append('') .append(jQuery(input).attr('name', 'upload[]')); if (renames.length > 0) { jQuery.each(renames, function(i, rename) { form.append(''); }); form.append(''); } if (hashes) { jQuery.each(renames, function(i, v) { form.append(''); }); } if (data.overwrite === 0) { form.append(''); } jQuery.each(self.options.onlyMimes||[], function(i, mime) { form.append(''); }); jQuery.each(self.customData, function(key, val) { form.append(''); }); form.appendTo('body'); iframe.appendTo('body'); }); return dfrd; } }, /** * Bind callback to event(s) The callback is executed at most once per event. * To bind to multiply events at once, separate events names by space * * @param String event name * @param Function callback * @param Boolan priority first * @return elFinder */ one : function(ev, callback, priorityFirst) { var self = this, event = ev.toLowerCase(), h = function(e, f) { if (!self.toUnbindEvents[event]) { self.toUnbindEvents[event] = []; } self.toUnbindEvents[event].push({ type: event, callback: h }); return (callback.done? callback.done : callback).apply(this, arguments); }; if (callback.done) { h = {done: h}; } return this.bind(event, h, priorityFirst); }, /** * Set/get data into/from localStorage * * @param String key * @param String|void value * @return String|null */ localStorage : function(key, val) { var self = this, s = window.localStorage, oldkey = 'elfinder-'+(key || '')+this.id, // old key of elFinder < 2.1.6 prefix = window.location.pathname+'-elfinder-', suffix = this.id, clrs = [], retval, oldval, t, precnt, sufcnt; // reset this node data if (typeof(key) === 'undefined') { precnt = prefix.length; sufcnt = suffix.length * -1; jQuery.each(s, function(key) { if (key.substr(0, precnt) === prefix && key.substr(sufcnt) === suffix) { clrs.push(key); } }); jQuery.each(clrs, function(i, key) { s.removeItem(key); }); return true; } // new key of elFinder >= 2.1.6 key = prefix+key+suffix; if (val === null) { return s.removeItem(key); } if (val === void(0) && !(retval = s.getItem(key)) && (oldval = s.getItem(oldkey))) { val = oldval; s.removeItem(oldkey); } if (val !== void(0)) { t = typeof val; if (t !== 'string' && t !== 'number') { val = JSON.stringify(val); } try { s.setItem(key, val); } catch (e) { try { s.clear(); s.setItem(key, val); } catch (e) { self.debug('error', e.toString()); } } retval = s.getItem(key); } if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) { try { return JSON.parse(retval); } catch(e) {} } return retval; }, /** * Set/get data into/from sessionStorage * * @param String key * @param String|void value * @return String|null */ sessionStorage : function(key, val) { var self = this, s, retval, t; try { s = window.sessionStorage; } catch(e) {} if (!s) { return; } if (val === null) { return s.removeItem(key); } if (val !== void(0)) { t = typeof val; if (t !== 'string' && t !== 'number') { val = JSON.stringify(val); } try { s.setItem(key, val); } catch (e) { try { s.clear(); s.setItem(key, val); } catch (e) { self.debug('error', e.toString()); } } } retval = s.getItem(key); if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) { try { return JSON.parse(retval); } catch(e) {} } return retval; }, /** * Get/set cookie * * @param String cookie name * @param String|void cookie value * @return String|null */ cookie : function(name, value) { var d, o, c, i, retval, t; name = 'elfinder-'+name+this.id; if (value === void(0)) { if (this.cookieEnabled && document.cookie && document.cookie != '') { c = document.cookie.split(';'); name += '='; for (i=0; i'), /** * Replace not html-safe symbols to html entities * * @param String text to escape * @return String */ escape : function(name) { return this._node.text(name).html().replace(/"/g, '"').replace(/'/g, '''); }, /** * Cleanup ajax data. * For old api convert data into new api format * * @param String command name * @param Object data from backend * @return Object */ normalize : function(data) { var self = this, fileFilter = (function() { var func, filter; if (filter = self.options.fileFilter) { if (typeof filter === 'function') { func = function(file) { return filter.call(self, file); }; } else if (filter instanceof RegExp) { func = function(file) { return filter.test(file.name); }; } } return func? func : null; })(), chkCmdMap = function(opts) { // Disable command to replace with other command var disabled; if (opts.uiCmdMap) { if (jQuery.isPlainObject(opts.uiCmdMap) && Object.keys(opts.uiCmdMap).length) { if (!opts.disabledFlip) { opts.disabledFlip = {}; } disabled = opts.disabledFlip; jQuery.each(opts.uiCmdMap, function(f, t) { if (t === 'hidden' && !disabled[f]) { opts.disabled.push(f); opts.disabledFlip[f] = true; } }); } else { delete opts.uiCmdMap; } } }, normalizeOptions = function(opts) { var getType = function(v) { var type = typeof v; if (type === 'object' && Array.isArray(v)) { type = 'array'; } return type; }; jQuery.each(self.optionProperties, function(k, empty) { if (empty !== void(0)) { if (opts[k] && getType(opts[k]) !== getType(empty)) { opts[k] = empty; } } }); if (opts.disabled) { opts.disabledFlip = self.arrayFlip(opts.disabled, true); jQuery.each(self.options.disabledCmdsRels, function(com, rels) { var m, flg; if (opts.disabledFlip[com]) { flg = true; } else if (m = com.match(/^([^&]+)&([^=]+)=(.*)$/)) { if (opts.disabledFlip[m[1]] && opts[m[2]] == m[3]) { flg = true; } } if (flg) { jQuery.each(rels, function(i, rel) { if (!opts.disabledFlip[rel]) { opts.disabledFlip[rel] = true; opts.disabled.push(rel); } }); } }); } else { opts.disabledFlip = {}; } return opts; }, filter = function(file, asMap, type) { var res = asMap? file : true, ign = asMap? null : false, vid, targetOptions, isRoot, rootNames; if (file && file.hash && file.name && file.mime) { if (file.mime === 'application/x-empty') { file.mime = 'text/plain'; } isRoot = self.isRoot(file); if (isRoot && ! file.volumeid) { self.debug('warning', 'The volume root statuses requires `volumeid` property.'); } if (isRoot || file.mime === 'directory') { // Prevention of circular reference if (file.phash) { if (file.phash === file.hash) { error = error.concat(['Parent folder of "$1" is itself.', file.name]); return ign; } if (isRoot && file.volumeid && file.phash.indexOf(file.volumeid) === 0) { error = error.concat(['Parent folder of "$1" is inner itself.', file.name]); return ign; } } // set options, tmbUrls for each volume if (file.volumeid) { vid = file.volumeid; if (isRoot) { // make or update of leaf roots cache if (file.phash) { if (! self.leafRoots[file.phash]) { self.leafRoots[file.phash] = [ file.hash ]; } else { if (jQuery.inArray(file.hash, self.leafRoots[file.phash]) === -1) { self.leafRoots[file.phash].push(file.hash); } } } self.hasVolOptions = true; if (! self.volOptions[vid]) { self.volOptions[vid] = { // set dispInlineRegex dispInlineRegex: self.options.dispInlineRegex }; } targetOptions = self.volOptions[vid]; if (file.options) { // >= v.2.1.14 has file.options Object.assign(targetOptions, file.options); } // for compat <= v2.1.13 if (file.disabled) { targetOptions.disabled = file.disabled; targetOptions.disabledFlip = self.arrayFlip(file.disabled, true); } if (file.tmbUrl) { targetOptions.tmbUrl = file.tmbUrl; } // '/' required at the end of url if (targetOptions.url && targetOptions.url.substr(-1) !== '/') { targetOptions.url += '/'; } // check uiCmdMap chkCmdMap(targetOptions); // check trash bin hash if (targetOptions.trashHash) { if (self.trashes[targetOptions.trashHash] === false) { delete targetOptions.trashHash; } else { self.trashes[targetOptions.trashHash] = file.hash; } } // set immediate properties jQuery.each(self.optionProperties, function(k) { if (targetOptions[k]) { file[k] = targetOptions[k]; } }); // regist fm.roots if (type !== 'cwd') { self.roots[vid] = file.hash; } // regist fm.volumeExpires if (file.expires) { self.volumeExpires[vid] = file.expires; } } if (prevId !== vid) { prevId = vid; i18nFolderName = self.option('i18nFolderName', vid); } } // volume root i18n name if (isRoot && ! file.i18) { name = 'volume_' + file.name, i18 = self.i18n(false, name); if (name !== i18) { file.i18 = i18; } } // i18nFolderName if (i18nFolderName && ! file.i18) { name = 'folder_' + file.name, i18 = self.i18n(false, name); if (name !== i18) { file.i18 = i18; } } if (isRoot) { if (rootNames = self.storage('rootNames')) { if (rootNames[file.hash]) { file._name = file.name; file._i18 = file.i18; file.name = rootNames[file.hash] = rootNames[file.hash]; delete file.i18; } self.storage('rootNames', rootNames); } } // lock trash bins holder if (self.trashes[file.hash]) { file.locked = true; } } else { if (fileFilter) { try { if (! fileFilter(file)) { return ign; } } catch(e) { self.debug(e); } } if (file.size == 0) { file.mime = self.getMimetype(file.name, file.mime); } } if (file.options) { self.optionsByHashes[file.hash] = normalizeOptions(file.options); } delete file.options; return res; } return ign; }, getDescendants = function(hashes) { var res = []; jQuery.each(self.files(), function(h, f) { jQuery.each(self.parents(h), function(i, ph) { if (jQuery.inArray(ph, hashes) !== -1 && jQuery.inArray(h, hashes) === -1) { res.push(h); return false; } }); }); return res; }, applyLeafRootStats = function(dataArr, type) { jQuery.each(dataArr, function(i, f) { var pfile, done; if (self.leafRoots[f.hash]) { self.applyLeafRootStats(f); } // update leaf root parent stat if (type !== 'change' && f.phash && self.isRoot(f) && (pfile = self.file(f.phash))) { self.applyLeafRootStats(pfile); // add to data.changed if (!data.changed) { data.changed = [pfile]; } else { jQuery.each(data.changed, function(i, f) { if (f.hash === pfile.hash) { data.changed[i] = pfile; done = true; return false; } }); if (!done) { data.changed.push(pfile); } } } }); }, error = [], name, i18, i18nFolderName, prevId, cData; // set cunstom data if (data.customData && (!self.prevCustomData || (JSON.stringify(data.customData) !== JSON.stringify(self.prevCustomData)))) { self.prevCustomData = data.customData; try { cData = JSON.parse(data.customData); if (jQuery.isPlainObject(cData)) { self.prevCustomData = cData; jQuery.each(Object.keys(cData), function(i, key) { if (cData[key] === null) { delete cData[key]; delete self.optsCustomData[key]; } }); self.customData = Object.assign({}, self.optsCustomData, cData); } } catch(e) {} } if (data.options) { normalizeOptions(data.options); } if (data.cwd) { if (data.cwd.volumeid && data.options && Object.keys(data.options).length && self.isRoot(data.cwd)) { self.hasVolOptions = true; self.volOptions[data.cwd.volumeid] = data.options; } data.cwd = filter(data.cwd, true, 'cwd'); } if (data.files) { data.files = jQuery.grep(data.files, filter); } if (data.tree) { data.tree = jQuery.grep(data.tree, filter); } if (data.added) { data.added = jQuery.grep(data.added, filter); } if (data.changed) { data.changed = jQuery.grep(data.changed, filter); } if (data.removed && data.removed.length && self.searchStatus.state === 2) { data.removed = data.removed.concat(getDescendants(data.removed)); } if (data.api) { data.init = true; } if (Object.keys(self.leafRoots).length) { data.files && applyLeafRootStats(data.files); data.tree && applyLeafRootStats(data.tree); data.added && applyLeafRootStats(data.added); data.changed && applyLeafRootStats(data.changed, 'change'); } // merge options that apply only to cwd if (data.cwd && data.cwd.options && data.options) { Object.assign(data.options, normalizeOptions(data.cwd.options)); } // '/' required at the end of url if (data.options && data.options.url && data.options.url.substr(-1) !== '/') { data.options.url += '/'; } // check error if (error.length) { data.norError = ['errResponse'].concat(error); } return data; }, /** * Update sort options * * @param {String} sort type * @param {String} sort order * @param {Boolean} show folder first */ setSort : function(type, order, stickFolders, alsoTreeview) { this.storage('sortType', (this.sortType = this.sortRules[type] ? type : 'name')); this.storage('sortOrder', (this.sortOrder = /asc|desc/.test(order) ? order : 'asc')); this.storage('sortStickFolders', (this.sortStickFolders = !!stickFolders) ? 1 : ''); this.storage('sortAlsoTreeview', (this.sortAlsoTreeview = !!alsoTreeview) ? 1 : ''); this.trigger('sortchange'); }, _sortRules : { name : function(file1, file2) { return elFinder.prototype.naturalCompare(file1.i18 || file1.name, file2.i18 || file2.name); }, size : function(file1, file2) { var size1 = parseInt(file1.size) || 0, size2 = parseInt(file2.size) || 0; return size1 === size2 ? 0 : size1 > size2 ? 1 : -1; }, kind : function(file1, file2) { return elFinder.prototype.naturalCompare(file1.mime, file2.mime); }, date : function(file1, file2) { var date1 = file1.ts || file1.date || 0, date2 = file2.ts || file2.date || 0; return date1 === date2 ? 0 : date1 > date2 ? 1 : -1; }, perm : function(file1, file2) { var val = function(file) { return (file.write? 2 : 0) + (file.read? 1 : 0); }, v1 = val(file1), v2 = val(file2); return v1 === v2 ? 0 : v1 > v2 ? 1 : -1; }, mode : function(file1, file2) { var v1 = file1.mode || (file1.perm || ''), v2 = file2.mode || (file2.perm || ''); return elFinder.prototype.naturalCompare(v1, v2); }, owner : function(file1, file2) { var v1 = file1.owner || '', v2 = file2.owner || ''; return elFinder.prototype.naturalCompare(v1, v2); }, group : function(file1, file2) { var v1 = file1.group || '', v2 = file2.group || ''; return elFinder.prototype.naturalCompare(v1, v2); } }, /** * Valid sort rule names * * @type Object */ sorters : {}, /** * Compare strings for natural sort * * @param String * @param String * @return Number */ naturalCompare : function(a, b) { var self = elFinder.prototype.naturalCompare; if (typeof self.loc == 'undefined') { self.loc = (navigator.userLanguage || navigator.browserLanguage || navigator.language || 'en-US'); } if (typeof self.sort == 'undefined') { if ('11'.localeCompare('2', self.loc, {numeric: true}) > 0) { // Native support if (window.Intl && window.Intl.Collator) { self.sort = new Intl.Collator(self.loc, {numeric: true}).compare; } else { self.sort = function(a, b) { return a.localeCompare(b, self.loc, {numeric: true}); }; } } else { /* * Edited for elFinder (emulates localeCompare() by numeric) by Naoki Sawada aka nao-pon */ /* * Huddle/javascript-natural-sort (https://github.com/Huddle/javascript-natural-sort) */ /* * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license * Author: Jim Palmer (based on chunking idea from Dave Koelle) * http://opensource.org/licenses/mit-license.php */ self.sort = function(a, b) { var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi, sre = /(^[ ]*|[ ]*$)/g, dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/, hre = /^0x[0-9a-f]+$/i, ore = /^0/, syre = /^[\x01\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]/, // symbol first - (Naoki Sawada) i = function(s) { return self.sort.insensitive && (''+s).toLowerCase() || ''+s; }, // convert all to strings strip whitespace // first character is "_", it's smallest - (Naoki Sawada) x = i(a).replace(sre, '').replace(/^_/, "\x01") || '', y = i(b).replace(sre, '').replace(/^_/, "\x01") || '', // chunk/tokenize xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), // numeric, hex or date detection xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)), yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null, oFxNcL, oFyNcL, locRes = 0; // first try and sort Hex codes or Dates if (yD) { if ( xD < yD ) return -1; else if ( xD > yD ) return 1; } // natural sorting through split numeric strings and default strings for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) { // find floats not starting with '0', string or 0 if not defined (Clint Priest) oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0; oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0; // handle numeric vs string comparison - number < string - (Kyle Adams) // but symbol first < number - (Naoki Sawada) if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { if (isNaN(oFxNcL) && (typeof oFxNcL !== 'string' || ! oFxNcL.match(syre))) { return 1; } else if (typeof oFyNcL !== 'string' || ! oFyNcL.match(syre)) { return -1; } } // use decimal number comparison if either value is string zero if (parseInt(oFxNcL, 10) === 0) oFxNcL = 0; if (parseInt(oFyNcL, 10) === 0) oFyNcL = 0; // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2' if (typeof oFxNcL !== typeof oFyNcL) { oFxNcL += ''; oFyNcL += ''; } // use locale sensitive sort for strings when case insensitive // note: localeCompare interleaves uppercase with lowercase (e.g. A,a,B,b) if (self.sort.insensitive && typeof oFxNcL === 'string' && typeof oFyNcL === 'string') { locRes = oFxNcL.localeCompare(oFyNcL, self.loc); if (locRes !== 0) return locRes; } if (oFxNcL < oFyNcL) return -1; if (oFxNcL > oFyNcL) return 1; } return 0; }; self.sort.insensitive = true; } } return self.sort(a, b); }, /** * Compare files based on elFinder.sort * * @param Object file * @param Object file * @return Number */ compare : function(file1, file2) { var self = this, type = self.sortType, asc = self.sortOrder == 'asc', stick = self.sortStickFolders, rules = self.sortRules, sort = rules[type], d1 = file1.mime == 'directory', d2 = file2.mime == 'directory', res; if (stick) { if (d1 && !d2) { return -1; } else if (!d1 && d2) { return 1; } } res = asc ? sort(file1, file2) : sort(file2, file1); return type !== 'name' && res === 0 ? res = asc ? rules.name(file1, file2) : rules.name(file2, file1) : res; }, /** * Sort files based on config * * @param Array files * @return Array */ sortFiles : function(files) { return files.sort(this.compare); }, /** * Open notification dialog * and append/update message for required notification type. * * @param Object options * @example * this.notify({ * type : 'copy', * msg : 'Copy files', // not required for known types @see this.notifyType * cnt : 3, * hideCnt : false, // true for not show count * progress : 10, // progress bar percents (use cnt : 0 to update progress bar) * cancel : callback // callback function for cancel button * }) * @return elFinder */ notify : function(opts) { var self = this, type = opts.type, id = opts.id? 'elfinder-notify-'+opts.id : '', msg = this.i18n((typeof opts.msg !== 'undefined')? opts.msg : (this.messages['ntf'+type] ? 'ntf'+type : 'ntfsmth')), hiddens = this.arrayFlip(this.options.notifyDialog.hiddens || []), ndialog = this.ui.notify, dialog = ndialog.closest('.ui-dialog'), notify = ndialog.children('.elfinder-notify-'+type+(id? ('.'+id) : '')), button = notify.children('div.elfinder-notify-cancel').children('button'), ntpl = '
{msg}
', delta = opts.cnt + 0, size = (typeof opts.size != 'undefined')? parseInt(opts.size) : null, progress = (typeof opts.progress != 'undefined' && opts.progress >= 0) ? opts.progress : null, fakeint = opts.fakeinterval || 200, cancel = opts.cancel, clhover = 'ui-state-hover', close = function() { var prog = notify.find('.elfinder-notify-progress'), rm = function() { notify.remove(); if (!ndialog.children(dialog.data('minimized')? void(0) : ':visible').length) { if (dialog.data('minimized')) { dialog.data('minimized').hide(); } else { ndialog.elfinderdialog('close'); } } setProgressbar(); }; notify._esc && jQuery(document).off('keydown', notify._esc); if (notify.data('cur') < 100) { prog.animate({ width : '100%' }, 50, function() { requestAnimationFrame(function() { rm(); }); }); } else { rm(); } }, fakeUp = function(interval) { var cur; if (notify.length) { cur = notify.data('cur') + 1; if (cur <= 98) { notify.find('.elfinder-notify-progress').width(cur + '%'); notify.data('cur', cur); setProgressbar(); setTimeout(function() { interval *= 1.05; fakeUp(interval); }, interval); } } }, setProgressbar = function() { var cnt = 0, val = 0, ntfs = ndialog.children('.elfinder-notify'), w; if (ntfs.length) { ntfs.each(function() { cnt++; val += Math.min(jQuery(this).data('cur'), 100); }); w = cnt? Math.floor(val / (cnt * 100) * 100) + '%' : 0; self.ui.progressbar.width(w); if (dialog.data('minimized')) { dialog.data('minimized').title(w); dialog.data('minimized').dialog().children('.ui-dialog-titlebar').children('.elfinder-ui-progressbar').width(w); } } else { self.ui.progressbar.width(0); dialog.data('minimized') && dialog.data('minimized').hide(); } }, cnt, total, prc; if (!type) { return this; } if (!notify.length) { notify = jQuery(ntpl.replace(/\{type\}/g, type).replace(/\{msg\}/g, msg)); if (hiddens[type]) { notify.hide(); } else { ndialog.on('minimize', function(e) { dialog.data('minimized') && setProgressbar(); }); } notify.appendTo(ndialog).data('cnt', 0); if (progress != null) { notify.data({progress : 0, total : 0, cur : 0}); } else { notify.data({cur : 0}); fakeUp(fakeint); } if (cancel) { button = jQuery('') .on('mouseenter mouseleave', function(e) { jQuery(this).toggleClass(clhover, e.type === 'mouseenter'); }); notify.children('div.elfinder-notify-cancel').append(button); } ndialog.trigger('resize'); } else if (typeof opts.msg !== 'undefined') { notify.children('span.elfinder-notify-msg').html(msg); } cnt = delta + parseInt(notify.data('cnt')); if (cnt > 0) { if (cancel && button.length) { if (jQuery.isFunction(cancel) || (typeof cancel === 'object' && cancel.promise)) { notify._esc = function(e) { if (e.type == 'keydown' && e.keyCode != jQuery.ui.keyCode.ESCAPE) { return; } e.preventDefault(); e.stopPropagation(); close(); if (cancel.promise) { cancel.reject(0); // 0 is canceling flag } else { cancel(e); } }; button.on('click', function(e) { notify._esc(e); }); jQuery(document).on('keydown.' + this.namespace, notify._esc); } } !opts.hideCnt && notify.children('.elfinder-notify-cnt').text('('+cnt+')'); if (delta > 0 && ndialog.is(':hidden') && !hiddens[type]) { if (dialog.data('minimized')) { dialog.data('minimized').show(); } else { ndialog.elfinderdialog('open', this).height('auto'); } } notify.data('cnt', cnt); if ((progress != null) && (total = notify.data('total')) >= 0 && (prc = notify.data('progress')) >= 0) { total += size != null? size : delta; prc += progress; (size == null && delta < 0) && (prc += delta * 100); notify.data({progress : prc, total : total}); if (size != null) { prc *= 100; total = Math.max(1, total); } progress = Math.min(parseInt(prc/total), 100); notify.find('.elfinder-notify-progress') .animate({ width : (progress < 100 ? progress : 100)+'%' }, 20, function() { notify.data('cur', progress); setProgressbar(); }); } } else { close(); } return this; }, /** * Open confirmation dialog * * @param Object options * @example * this.confirm({ * cssClass : 'elfinder-confirm-mydialog', * title : 'Remove files', * text : 'Here is question text', * accept : { // accept callback - required * label : 'Continue', * callback : function(applyToAll) { fm.log('Ok') } * }, * cancel : { // cancel callback - required * label : 'Cancel', * callback : function() { fm.log('Cancel')} * }, * reject : { // reject callback - optionally * label : 'No', * callback : function(applyToAll) { fm.log('No')} * }, * buttons : [ // additional buttons callback - optionally * { * label : 'Btn1', * callback : function(applyToAll) { fm.log('Btn1')} * } * ], * all : true // display checkbox "Apply to all" * }) * @return elFinder */ confirm : function(opts) { var self = this, complete = false, options = { cssClass : 'elfinder-dialog-confirm', modal : true, resizable : false, title : this.i18n(opts.title || 'confirmReq'), buttons : {}, close : function() { !complete && opts.cancel.callback(); jQuery(this).elfinderdialog('destroy'); } }, apply = this.i18n('apllyAll'), label, checkbox, btnNum; if (opts.cssClass) { options.cssClass += ' ' + opts.cssClass; } options.buttons[this.i18n(opts.accept.label)] = function() { opts.accept.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; jQuery(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.accept.label)]._cssClass = 'elfinder-confirm-accept'; if (opts.reject) { options.buttons[this.i18n(opts.reject.label)] = function() { opts.reject.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; jQuery(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.reject.label)]._cssClass = 'elfinder-confirm-reject'; } if (opts.buttons && opts.buttons.length > 0) { btnNum = 1; jQuery.each(opts.buttons, function(i, v){ options.buttons[self.i18n(v.label)] = function() { v.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; jQuery(this).elfinderdialog('close'); }; options.buttons[self.i18n(v.label)]._cssClass = 'elfinder-confirm-extbtn' + (btnNum++); if (v.cssClass) { options.buttons[self.i18n(v.label)]._cssClass += ' ' + v.cssClass; } }); } options.buttons[this.i18n(opts.cancel.label)] = function() { jQuery(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.cancel.label)]._cssClass = 'elfinder-confirm-cancel'; if (opts.all) { options.create = function() { var base = jQuery('
'); checkbox = jQuery(''); jQuery(this).next().find('.ui-dialog-buttonset') .prepend(base.append(jQuery('').prepend(checkbox))); }; } if (opts.optionsCallback && jQuery.isFunction(opts.optionsCallback)) { opts.optionsCallback(options); } return this.dialog('' + this.i18n(opts.text), options); }, /** * Create unique file name in required dir * * @param String file name * @param String parent dir hash * @param String glue * @return String */ uniqueName : function(prefix, phash, glue) { var i = 0, ext = '', p, name; prefix = this.i18n(false, prefix); phash = phash || this.cwd().hash; glue = (typeof glue === 'undefined')? ' ' : glue; if (p = prefix.match(/^(.+)(\.[^.]+)$/)) { ext = p[2]; prefix = p[1]; } name = prefix+ext; if (!this.fileByName(name, phash)) { return name; } while (i < 10000) { name = prefix + glue + (++i) + ext; if (!this.fileByName(name, phash)) { return name; } } return prefix + Math.random() + ext; }, /** * Return message translated onto current language * Allowed accept HTML element that was wrapped in jQuery object * To be careful to XSS vulnerability of HTML element Ex. You should use `fm.escape(file.name)` * * @param String|Array message[s]|Object jQuery * @return String **/ i18n : function() { var self = this, messages = this.messages, input = [], ignore = [], message = function(m) { var file; if (m.indexOf('#') === 0) { if ((file = self.file(m.substr(1)))) { return file.name; } } return m; }, i, j, m, escFunc, start = 0, isErr; if (arguments.length && arguments[0] === false) { escFunc = function(m){ return m; }; start = 1; } for (i = start; i< arguments.length; i++) { m = arguments[i]; if (Array.isArray(m)) { for (j = 0; j < m.length; j++) { if (m[j] instanceof jQuery) { // jQuery object is HTML element input.push(m[j]); } else if (typeof m[j] !== 'undefined'){ input.push(message('' + m[j])); } } } else if (m instanceof jQuery) { // jQuery object is HTML element input.push(m[j]); } else if (typeof m !== 'undefined'){ input.push(message('' + m)); } } for (i = 0; i < input.length; i++) { // dont translate placeholders if (jQuery.inArray(i, ignore) !== -1) { continue; } m = input[i]; if (typeof m == 'string') { isErr = !!(messages[m] && m.match(/^err/)); // translate message m = messages[m] || (escFunc? escFunc(m) : self.escape(m)); // replace placeholders in message m = m.replace(/\$(\d+)/g, function(match, placeholder) { var res; placeholder = i + parseInt(placeholder); if (placeholder > 0 && input[placeholder]) { ignore.push(placeholder); } res = escFunc? escFunc(input[placeholder]) : self.escape(input[placeholder]); if (isErr) { res = '' + res + ''; } return res; }); } else { // get HTML from jQuery object m = m.get(0).outerHTML; } input[i] = m; } return jQuery.grep(input, function(m, i) { return jQuery.inArray(i, ignore) === -1 ? true : false; }).join('
'); }, /** * Get icon style from file.icon * * @param Object elFinder file object * @return String|Object */ getIconStyle : function(file, asObject) { var self = this, template = { 'background' : 'url(\'{url}\') 0 0 no-repeat', 'background-size' : 'contain' }, style = '', cssObj = {}, i = 0; if (file.icon) { style = 'style="'; jQuery.each(template, function(k, v) { if (i++ === 0) { v = v.replace('{url}', self.escape(file.icon)); } if (asObject) { cssObj[k] = v; } else { style += k+':'+v+';'; } }); style += '"'; } return asObject? cssObj : style; }, /** * Convert mimetype into css classes * * @param String file mimetype * @return String */ mime2class : function(mimeType) { var prefix = 'elfinder-cwd-icon-', mime = mimeType.toLowerCase(), isText = this.textMimes[mime]; mime = mime.split('/'); if (isText) { mime[0] += ' ' + prefix + 'text'; } else if (mime[1] && mime[1].match(/\+xml$/)) { mime[0] += ' ' + prefix + 'xml'; } return prefix + mime[0] + (mime[1] ? ' ' + prefix + mime[1].replace(/(\.|\+)/g, '-') : ''); }, /** * Return localized kind of file * * @param Object|String file or file mimetype * @return String */ mime2kind : function(f) { var isObj = typeof(f) == 'object' ? true : false, mime = isObj ? f.mime : f, kind; if (isObj && f.alias && mime != 'symlink-broken') { kind = 'Alias'; } else if (this.kinds[mime]) { if (isObj && mime === 'directory' && (! f.phash || f.isroot)) { kind = 'Root'; } else { kind = this.kinds[mime]; } } else if (this.mimeTypes[mime]) { kind = this.mimeTypes[mime].toUpperCase(); if (!this.messages['kind'+kind]) { kind = null; } } if (! kind) { if (mime.indexOf('text') === 0) { kind = 'Text'; } else if (mime.indexOf('image') === 0) { kind = 'Image'; } else if (mime.indexOf('audio') === 0) { kind = 'Audio'; } else if (mime.indexOf('video') === 0) { kind = 'Video'; } else if (mime.indexOf('application') === 0) { kind = 'App'; } else { kind = mime; } } return this.messages['kind'+kind] ? this.i18n('kind'+kind) : mime; }, /** * Return boolean Is mime-type text file * * @param String mime-type * @return Boolean */ mimeIsText : function(mime) { return (this.textMimes[mime.toLowerCase()] || (mime.indexOf('text/') === 0 && mime.substr(5, 3) !== 'rtf') || mime.match(/^application\/.+\+xml$/))? true : false; }, /** * Returns a date string formatted according to the given format string * * @param String format string * @param Object Date object * @return String */ date : function(format, date) { var self = this, output, d, dw, m, y, h, g, i, s; if (! date) { date = new Date(); } h = date[self.getHours](); g = h > 12 ? h - 12 : h; i = date[self.getMinutes](); s = date[self.getSeconds](); d = date[self.getDate](); dw = date[self.getDay](); m = date[self.getMonth]() + 1; y = date[self.getFullYear](); output = format.replace(/[a-z]/gi, function(val) { switch (val) { case 'd': return d > 9 ? d : '0'+d; case 'j': return d; case 'D': return self.i18n(self.i18.daysShort[dw]); case 'l': return self.i18n(self.i18.days[dw]); case 'm': return m > 9 ? m : '0'+m; case 'n': return m; case 'M': return self.i18n(self.i18.monthsShort[m-1]); case 'F': return self.i18n(self.i18.months[m-1]); case 'Y': return y; case 'y': return (''+y).substr(2); case 'H': return h > 9 ? h : '0'+h; case 'G': return h; case 'g': return g; case 'h': return g > 9 ? g : '0'+g; case 'a': return h >= 12 ? 'pm' : 'am'; case 'A': return h >= 12 ? 'PM' : 'AM'; case 'i': return i > 9 ? i : '0'+i; case 's': return s > 9 ? s : '0'+s; } return val; }); return output; }, /** * Return localized date * * @param Object file object * @return String */ formatDate : function(file, t) { var self = this, ts = t || file.ts, i18 = self.i18, date, format, output, d, dw, m, y, h, g, i, s; if (self.options.clientFormatDate && ts > 0) { date = new Date(ts*1000); format = ts >= this.yesterday ? this.fancyFormat : this.dateFormat; output = self.date(format, date); return ts >= this.yesterday ? output.replace('$1', this.i18n(ts >= this.today ? 'Today' : 'Yesterday')) : output; } else if (file.date) { return file.date.replace(/([a-z]+)\s/i, function(a1, a2) { return self.i18n(a2)+' '; }); } return self.i18n('dateUnknown'); }, /** * Return localized number string * * @param Number * @return String */ toLocaleString : function(num) { var v = new Number(num); if (v) { if (v.toLocaleString) { return v.toLocaleString(); } else { return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); } } return num; }, /** * Return css class marks file permissions * * @param Object file * @return String */ perms2class : function(o) { var c = ''; if (!o.read && !o.write) { c = 'elfinder-na'; } else if (!o.read) { c = 'elfinder-wo'; } else if (!o.write) { c = 'elfinder-ro'; } if (o.type) { c += ' elfinder-' + this.escape(o.type); } return c; }, /** * Return localized string with file permissions * * @param Object file * @return String */ formatPermissions : function(f) { var p = []; f.read && p.push(this.i18n('read')); f.write && p.push(this.i18n('write')); return p.length ? p.join(' '+this.i18n('and')+' ') : this.i18n('noaccess'); }, /** * Return formated file size * * @param Number file size * @return String */ formatSize : function(s) { var n = 1, u = 'b'; if (s == 'unknown') { return this.i18n('unknown'); } if (s > 1073741824) { n = 1073741824; u = 'GB'; } else if (s > 1048576) { n = 1048576; u = 'MB'; } else if (s > 1024) { n = 1024; u = 'KB'; } s = s/n; return (s > 0 ? n >= 1048576 ? s.toFixed(2) : Math.round(s) : 0) +' '+u; }, /** * Return formated file mode by options.fileModeStyle * * @param String file mode * @param String format style * @return String */ formatFileMode : function(p, style) { var i, o, s, b, sticy, suid, sgid, str, oct; if (!style) { style = this.options.fileModeStyle.toLowerCase(); } p = jQuery.trim(p); if (p.match(/[rwxs-]{9}$/i)) { str = p = p.substr(-9); if (style == 'string') { return str; } oct = ''; s = 0; for (i=0; i<7; i=i+3) { o = p.substr(i, 3); b = 0; if (o.match(/[r]/i)) { b += 4; } if (o.match(/[w]/i)) { b += 2; } if (o.match(/[xs]/i)) { if (o.match(/[xs]/)) { b += 1; } if (o.match(/[s]/i)) { if (i == 0) { s += 4; } else if (i == 3) { s += 2; } } } oct += b.toString(8); } if (s) { oct = s.toString(8) + oct; } } else { p = parseInt(p, 8); oct = p? p.toString(8) : ''; if (!p || style == 'octal') { return oct; } o = p.toString(8); s = 0; if (o.length > 3) { o = o.substr(-4); s = parseInt(o.substr(0, 1), 8); o = o.substr(1); } sticy = ((s & 1) == 1); // not support sgid = ((s & 2) == 2); suid = ((s & 4) == 4); str = ''; for(i=0; i<3; i++) { if ((parseInt(o.substr(i, 1), 8) & 4) == 4) { str += 'r'; } else { str += '-'; } if ((parseInt(o.substr(i, 1), 8) & 2) == 2) { str += 'w'; } else { str += '-'; } if ((parseInt(o.substr(i, 1), 8) & 1) == 1) { str += ((i==0 && suid)||(i==1 && sgid))? 's' : 'x'; } else { str += '-'; } } } if (style == 'both') { return str + ' (' + oct + ')'; } else if (style == 'string') { return str; } else { return oct; } }, /** * Regist this.decodeRawString function * * @return void */ registRawStringDecoder : function(rawStringDecoder) { if (jQuery.isFunction(rawStringDecoder)) { this.decodeRawString = this.options.rawStringDecoder = rawStringDecoder; } }, /** * Return boolean that uploadable MIME type into target folder * * @param String mime MIME type * @param String target target folder hash * @return Bool */ uploadMimeCheck : function(mime, target) { target = target || this.cwd().hash; var res = true, // default is allow mimeChecker = this.option('uploadMime', target), allow, deny, check = function(checker) { var ret = false; if (typeof checker === 'string' && checker.toLowerCase() === 'all') { ret = true; } else if (Array.isArray(checker) && checker.length) { jQuery.each(checker, function(i, v) { v = v.toLowerCase(); if (v === 'all' || mime.indexOf(v) === 0) { ret = true; return false; } }); } return ret; }; if (mime && jQuery.isPlainObject(mimeChecker)) { mime = mime.toLowerCase(); allow = check(mimeChecker.allow); deny = check(mimeChecker.deny); if (mimeChecker.firstOrder === 'allow') { res = false; // default is deny if (! deny && allow === true) { // match only allow res = true; } } else { res = true; // default is allow if (deny === true && ! allow) { // match only deny res = false; } } } return res; }, /** * call chained sequence of async deferred functions * * @param Array tasks async functions * @return Object jQuery.Deferred */ sequence : function(tasks) { var l = tasks.length, chain = function(task, idx) { ++idx; if (tasks[idx]) { return chain(task.then(tasks[idx]), idx); } else { return task; } }; if (l > 1) { return chain(tasks[0](), 0); } else { return tasks[0](); } }, /** * Reload contents of target URL for clear browser cache * * @param String url target URL * @return Object jQuery.Deferred */ reloadContents : function(url) { var dfd = jQuery.Deferred(), ifm; try { ifm = jQuery(''; } } } link.remove(); jQuery(iframes) .appendTo('body') .ready(function() { setTimeout(function() { jQuery(iframes).each(function() { jQuery('#' + jQuery(this).attr('id')).remove(); }); }, 20000 + (10000 * i)); // give 20 sec + 10 sec for each file to be saved }); fm.trigger('download', {files : files}); dfrd.resolve(); }); fileCnt = files.length; urls = []; for (i = 0; i < files.length; i++) { fm.openUrl(files[i].hash, true, function(v) { v && urls.push(v); if (--fileCnt < 1) { getUrlDfrd.resolve(urls); } }); } return dfrd; } }; }; PK ZIjs/commands/places.jsnuW+A/** * @class elFinder command "places" * Regist to Places * * @author Naoki Sawada **/ elFinder.prototype.commands.places = function() { "use strict"; var self = this, fm = this.fm, filter = function(hashes) { var fres = true; return jQuery.grep(self.files(hashes), function(f) { fres = fres && f.mime == 'directory' ? true : false; return fres; }); }, places = null; this.getstate = function(select) { var sel = this.hashes(select), cnt = sel.length; return places && cnt && cnt == filter(sel).length ? 0 : -1; }; this.exec = function(hashes) { var files = this.files(hashes); places.trigger('regist', [ files ]); return jQuery.Deferred().resolve(); }; fm.one('load', function(){ places = fm.ui.places; }); }; PK Z#=Yjs/commands/home.jsnuW+A(elFinder.prototype.commands.home = function() { "use strict"; this.title = 'Home'; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+home ctrl+shift+up', description : 'Home' }]; this.getstate = function() { var root = this.fm.root(), cwd = this.fm.cwd().hash; return root && cwd && root != cwd ? 0: -1; }; this.exec = function() { return this.fm.exec('open', this.fm.root()); }; }).prototype = { forceLoad : true }; // this is required command PK Z.js/commands/forward.jsnuW+A/** * @class elFinder command "forward" * Open next visited folder * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.forward = function() { "use strict"; this.alwaysEnabled = true; this.updateOnSelect = true; this.shortcuts = [{ pattern : 'ctrl+right' }]; this.getstate = function() { return this.fm.history.canForward() ? 0 : -1; }; this.exec = function() { return this.fm.history.forward(); }; }).prototype = { forceLoad : true }; // this is required command PK Ztjs/commands/colwidth.jsnuW+A/** * @class elFinder command "colwidth" * CWD list table columns width to auto * * @author Naoki Sawada **/ elFinder.prototype.commands.colwidth = function() { "use strict"; this.alwaysEnabled = true; this.updateOnSelect = false; this.getstate = function() { return this.fm.getUI('cwd').find('table').css('table-layout') === 'fixed' ? 0 : -1; }; this.exec = function() { this.fm.getUI('cwd').trigger('colwidth'); return jQuery.Deferred().resolve(); }; };PK Z݉e99js/commands/rm.jsnuW+A/** * @class elFinder command "rm" * Delete files * * @author Dmitry (dio) Levashov * @author Naoki Sawada **/ elFinder.prototype.commands.rm = function() { "use strict"; var self = this, fm = this.fm, tpl = '
{title}
{desc}
', confirm = function(dfrd, targets, files, tHash, addTexts) { var cnt = targets.length, cwd = fm.cwd().hash, descs = [], spinner = fm.i18n('calc') + '', dialog, text, tmb, size, f, fname; if (cnt > 1) { size = 0; jQuery.each(files, function(h, f) { if (f.size && f.size != 'unknown' && f.mime !== 'directory') { var s = parseInt(f.size); if (s >= 0 && size >= 0) { size += s; } } else { size = 'unknown'; return false; } }); getSize = (size === 'unknown'); descs.push(fm.i18n('size')+': '+(getSize? spinner : fm.formatSize(size))); text = [jQuery(tpl.replace('{class}', 'elfinder-cwd-icon-group').replace('{title}', '' + fm.i18n('items')+ ': ' + cnt + '').replace('{desc}', descs.join('
')))]; } else { f = files[0]; tmb = fm.tmb(f); getSize = (f.mime === 'directory'); descs.push(fm.i18n('size')+': '+(getSize? spinner : fm.formatSize(f.size))); descs.push(fm.i18n('modify')+': '+fm.formatDate(f)); fname = fm.escape(f.i18 || f.name).replace(/([_.])/g, '​$1'); text = [jQuery(tpl.replace('{class}', fm.mime2class(f.mime)).replace('{title}', '' + fname + '').replace('{desc}', descs.join('
')))]; } if (addTexts) { text = text.concat(addTexts); } text.push(tHash? 'confirmTrash' : 'confirmRm'); dialog = fm.confirm({ title : self.title, text : text, accept : { label : 'btnRm', callback : function() { if (tHash) { self.toTrash(dfrd, targets, tHash); } else { remove(dfrd, targets); } } }, cancel : { label : 'btnCancel', callback : function() { fm.unlockfiles({files : targets}); if (targets.length === 1 && fm.file(targets[0]).phash !== cwd) { fm.select({selected : targets}); } else { fm.selectfiles({files : targets}); } dfrd.reject(); } } }); // load thumbnail if (tmb) { jQuery('') .on('load', function() { dialog.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); }) .attr('src', tmb.url); } if (getSize) { getSize = fm.getSize(jQuery.map(files, function(f) { return f.mime === 'directory'? f.hash : null; })).done(function(data) { dialog.find('span.elfinder-spinner').parent().html(fm.i18n('size')+': '+data.formated); }).fail(function() { dialog.find('span.elfinder-spinner').parent().html(fm.i18n('size')+': '+fm.i18n('unknown')); }).always(function() { getSize = false; }); } }, toTrash = function(dfrd, targets, tHash) { var dsts = {}, itemCnt = targets.length, maxCnt = self.options.toTrashMaxItems, checkDirs = [], reqDfd = jQuery.Deferred(), req, dirs, cnt; if (itemCnt > maxCnt) { self.confirm(dfrd, targets, self.files(targets), null, [fm.i18n('tooManyToTrash')]); return; } // Directory preparation preparation and directory enumeration jQuery.each(targets, function(i, h) { var file = fm.file(h), path = fm.path(h).replace(/\\/g, '/'), m = path.match(/^[^\/]+?(\/(?:[^\/]+?\/)*)[^\/]+?$/); if (file) { if (m) { m[1] = m[1].replace(/(^\/.*?)\/?$/, '$1'); if (! dsts[m[1]]) { dsts[m[1]] = []; } dsts[m[1]].push(h); } if (file.mime === 'directory') { checkDirs.push(h); } } }); // Check directory information if (checkDirs.length) { req = fm.request({ data : {cmd : 'size', targets : checkDirs}, notify : {type: 'readdir', cnt: 1, hideCnt: true}, preventDefault : true }).done(function(data) { var cnt = 0; data.fileCnt && (cnt += parseInt(data.fileCnt)); data.dirCnt && (cnt += parseInt(data.dirCnt)); reqDfd[cnt > maxCnt ? 'reject' : 'resolve'](); }).fail(function() { reqDfd.reject(); }); setTimeout(function() { var xhr = (req && req.xhr)? req.xhr : null; if (xhr && xhr.state() == 'pending') { req.syncOnFail(false); req.reject(); reqDfd.reject(); } }, self.options.infoCheckWait * 1000); } else { reqDfd.resolve(); } // Directory creation and paste command execution reqDfd.done(function() { dirs = Object.keys(dsts); cnt = dirs.length; if (cnt) { fm.request({ data : {cmd : 'mkdir', target : tHash, dirs : dirs}, notify : {type : 'chkdir', cnt : cnt}, preventFail : true }) .fail(function(error) { dfrd.reject(error); fm.unlockfiles({files : targets}); }) .done(function(data) { var margeRes = function(data, phash, reqData) { var undo, prevUndo, redo, prevRedo; jQuery.each(data, function(k, v) { if (Array.isArray(v)) { if (res[k]) { res[k] = res[k].concat(v); } else { res[k] = v; } } }); if (data.sync) { res.sync = 1; } if (data.added && data.added.length) { undo = function() { var targets = [], dirs = jQuery.map(data.added, function(f) { return f.mime === 'directory'? f.hash : null; }); jQuery.each(data.added, function(i, f) { if (jQuery.inArray(f.phash, dirs) === -1) { targets.push(f.hash); } }); return fm.exec('restore', targets, {noToast: true}); }; redo = function() { return fm.request({ data : reqData, notify : {type : 'redo', cnt : targets.length} }); }; if (res.undo) { prevUndo = res.undo; res.undo = function() { undo(); prevUndo(); }; } else { res.undo = undo; } if (res.redo) { prevRedo = res.redo; res.redo = function() { redo(); prevRedo(); }; } else { res.redo = redo; } } }, err = ['errTrash'], res = {}, hasNtf = function() { return fm.ui.notify.children('.elfinder-notify-trash').length; }, hashes, tm, prg, prgSt; if (hashes = data.hashes) { prg = 1 / cnt * 100; prgSt = cnt === 1? 100 : 5; tm = setTimeout(function() { fm.notify({type : 'trash', cnt : 1, hideCnt : true, progress : prgSt}); }, fm.notifyDelay); jQuery.each(dsts, function(dir, files) { var phash = fm.file(files[0]).phash, reqData; if (hashes[dir]) { reqData = {cmd : 'paste', dst : hashes[dir], targets : files, cut : 1}; fm.request({ data : reqData, preventDefault : true }) .fail(function(error) { if (error) { err = err.concat(error); } }) .done(function(data) { data = fm.normalize(data); fm.updateCache(data); margeRes(data, phash, reqData); if (data.warning) { err = err.concat(data.warning); delete data.warning; } // fire some event to update cache/ui data.removed && data.removed.length && fm.remove(data); data.added && data.added.length && fm.add(data); data.changed && data.changed.length && fm.change(data); // fire event with command name fm.trigger('paste', data); // fire event with command name + 'done' fm.trigger('pastedone'); // force update content data.sync && fm.sync(); }) .always(function() { var hashes = [], addTexts, end = 2; if (hasNtf()) { fm.notify({type : 'trash', cnt : 0, hideCnt : true, progress : prg}); } else { prgSt+= prg; } if (--cnt < 1) { tm && clearTimeout(tm); hasNtf() && fm.notify({type : 'trash', cnt : -1}); fm.unlockfiles({files : targets}); if (Object.keys(res).length) { if (err.length > 1) { if (res.removed || res.removed.length) { hashes = jQuery.grep(targets, function(h) { return jQuery.inArray(h, res.removed) === -1? true : false; }); } if (hashes.length) { if (err.length > end) { end = (fm.messages[err[end-1]] || '').indexOf('$') === -1? end : end + 1; } dfrd.reject(); fm.exec('rm', hashes, { addTexts: err.slice(0, end), forceRm: true }); } else { fm.error(err); } } res._noSound = true; if (res.undo && res.redo) { res.undo = { cmd : 'trash', callback : res.undo, }; res.redo = { cmd : 'trash', callback : res.redo }; } dfrd.resolve(res); } else { dfrd.reject(err); } } }); } }); } else { dfrd.reject('errFolderNotFound'); fm.unlockfiles({files : targets}); } }); } else { dfrd.reject(['error', 'The folder hierarchy to be deleting can not be determined.']); fm.unlockfiles({files : targets}); } }).fail(function() { self.confirm(dfrd, targets, self.files(targets), null, [fm.i18n('tooManyToTrash')]); }); }, remove = function(dfrd, targets, quiet) { var notify = quiet? {} : {type : 'rm', cnt : targets.length}; fm.request({ data : {cmd : 'rm', targets : targets}, notify : notify, preventFail : true }) .fail(function(error) { dfrd.reject(error); }) .done(function(data) { if (data.error || data.warning) { data.sync = true; } dfrd.resolve(data); }) .always(function() { fm.unlockfiles({files : targets}); }); }, getTHash = function(targets) { var thash = null, root1st; if (targets && targets.length) { if (targets.length > 1 && fm.searchStatus.state === 2) { root1st = fm.file(fm.root(targets[0])).volumeid; if (!jQuery.grep(targets, function(h) { return h.indexOf(root1st) !== 0? true : false ; }).length) { thash = fm.option('trashHash', targets[0]); } } else { thash = fm.option('trashHash', targets[0]); } } return thash; }, getSize = false; // for to be able to overwrite this.confirm = confirm; this.toTrash = toTrash; this.remove = remove; this.syncTitleOnChange = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'delete ctrl+backspace shift+delete' }]; this.value = 'rm'; this.init = function() { var update = function(origin) { var targets; delete self.extra; self.title = fm.i18n('cmd' + self.value); self.className = self.value; self.button && self.button.children('span.elfinder-button-icon')[self.value === 'trash'? 'addClass' : 'removeClass']('elfinder-button-icon-trash'); if (origin && origin !== 'cwd' && (self.state > -1 || origin === 'navbar')) { if (self.value === 'trash') { self.extra = { icon: 'rm', node: jQuery('') .attr({title: fm.i18n('cmdrm')}) .on('ready', function(e, data) { targets = data.targets; }) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } e.stopPropagation(); e.preventDefault(); fm.getUI().trigger('click'); // to close the context menu immediately fm.exec('rm', targets, {_userAction: true, forceRm : true}); }) }; } } }; // re-assign for extended command self = this; fm = this.fm; // bind function of change self.change(function() { update(); }); fm.bind('contextmenucreate', function(e) { update(e.data.type); }); }; this.getstate = function(select) { var sel = this.hashes(select), filter = function(files) { var fres = true; return jQuery.grep(files, function(h) { var f; fres = fres && (f = fm.file(h)) && ! f.locked && ! fm.isRoot(f)? true : false; return fres; }); }; return sel.length && filter(sel).length == sel.length ? 0 : -1; }; this.exec = function(hashes, cOpts) { var opts = cOpts || {}, dfrd = jQuery.Deferred() .always(function() { if (getSize && getSize.state && getSize.state() === 'pending') { getSize.reject(); } }) .fail(function(error) { error && fm.error(error); }).done(function(data) { !opts.quiet && !data._noSound && data.removed && data.removed.length && fm.trigger('playsound', {soundFile : 'rm.wav'}); }), files = self.files(hashes), cnt = files.length, tHash = null, addTexts = opts.addTexts? opts.addTexts : null, forceRm = opts.forceRm, quiet = opts.quiet, targets; if (! cnt) { return dfrd.reject(); } jQuery.each(files, function(i, file) { if (fm.isRoot(file)) { return !dfrd.reject(['errRm', file.name, 'errPerm']); } if (file.locked) { return !dfrd.reject(['errLocked', file.name]); } }); if (dfrd.state() === 'pending') { targets = self.hashes(hashes); cnt = files.length; if (forceRm || (self.event && self.event.originalEvent && self.event.originalEvent.shiftKey)) { tHash = ''; self.title = fm.i18n('cmdrm'); } if (tHash === null) { tHash = getTHash(targets); } fm.lockfiles({files : targets}); if (tHash && self.options.quickTrash) { self.toTrash(dfrd, targets, tHash); } else { if (quiet) { remove(dfrd, targets, quiet); } else { self.confirm(dfrd, targets, files, tHash, addTexts); } } } return dfrd; }; fm.bind('select contextmenucreate closecontextmenu', function(e) { var targets = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(); if (targets && targets.length) { self.update(void(0), (targets? getTHash(targets) : fm.option('trashHash'))? 'trash' : 'rm'); } }); }; PK Z js/commands/edit.jsnuW+A/** * @class elFinder command "edit". * Edit text file in dialog window * * @author Dmitry (dio) Levashov, dio@std42.ru **/ elFinder.prototype.commands.edit = function() { "use strict"; var self = this, fm = this.fm, clsEditing = fm.res('class', 'editing'), mimesSingle = [], mimes = [], allowAll = false, rtrim = function(str){ return str.replace(/\s+$/, ''); }, getEncSelect = function(heads) { var sel = jQuery(''), hval; if (heads) { jQuery.each(heads, function(i, head) { hval = fm.escape(head.value); sel.append(''); }); } jQuery.each(self.options.encodings, function(i, v) { sel.append(''); }); return sel; }, getDlgWidth = function() { var win = fm.options.dialogContained? fm.getUI() : jQuery(window), m, width; if (typeof self.options.dialogWidth === 'string' && (m = self.options.dialogWidth.match(/(\d+)%/))) { width = parseInt(win.width() * (m[1] / 100)); } else { width = parseInt(self.options.dialogWidth || 650); } return Math.min(width, win.width()); }, getDlgHeight = function() { if (!self.options.dialogHeight) { return void(0); } var win = fm.options.dialogContained? fm.getUI() : jQuery(window), m, height; if (typeof self.options.dialogHeight === 'string' && (m = self.options.dialogHeight.match(/(\d+)%/))) { height = parseInt(win.height() * (m[1] / 100)); } else { height = parseInt(self.options.dialogHeight || win.height()); } return Math.min(height, win.height()); }, /** * Return files acceptable to edit * * @param Array files hashes * @return Array **/ filter = function(files) { var cnt = files.length, mime, ext, skip; if (cnt > 1) { mime = files[0].mime; ext = files[0].name.replace(/^.*(\.[^.]+)$/, '$1'); } return jQuery.grep(files, function(file) { var res; if (skip || file.mime === 'directory') { return false; } res = file.read && (allowAll || fm.mimeIsText(file.mime) || jQuery.inArray(file.mime, cnt === 1? mimesSingle : mimes) !== -1) && (!self.onlyMimes.length || jQuery.inArray(file.mime, self.onlyMimes) !== -1) && (cnt === 1 || (file.mime === mime && file.name.substr(ext.length * -1) === ext)) && (fm.uploadMimeCheck(file.mime, file.phash)? true : false) && setEditors(file, cnt) && Object.keys(editors).length; if (!res) { skip = true; } return res; }); }, fileSync = function(hash) { var old = fm.file(hash), f; fm.request({ cmd: 'info', targets: [hash], preventDefault: true }).done(function(data) { var changed; if (data && data.files && data.files.length) { f = data.files[0]; if (old.ts != f.ts || old.size != f.size) { changed = { changed: [ f ] }; fm.updateCache(changed); fm.change(changed); } } }); }, /** * Open dialog with textarea to edit file * * @param String id dialog id * @param Object file file object * @param String content file content * @return jQuery.Deferred **/ dialog = function(id, file, content, encoding, editor, toasts) { var dfrd = jQuery.Deferred(), _loaded = false, loaded = function() { if (!_loaded) { fm.toast({ mode: 'warning', msg: fm.i18n('nowLoading') }); return false; } return true; }, makeToasts = function() { // make toast message if (toasts && Array.isArray(toasts)) { jQuery.each(toasts, function() { this.msg && fm.toast(this); }); } }, save = function() { var encord = selEncoding? selEncoding.val():void(0), saveDfd = jQuery.Deferred().fail(function(err) { dialogNode.show().find('button.elfinder-btncnt-0,button.elfinder-btncnt-1').hide(); }), conf, res, tm; if (!loaded()) { return saveDfd.resolve(); } if (ta.editor) { ta.editor.save(ta[0], ta.editor.instance); conf = ta.editor.confObj; if (conf.info && (conf.info.schemeContent || conf.info.arrayBufferContent)) { encord = 'scheme'; } } res = getContent(); setOld(res); if (res.promise) { tm = setTimeout(function() { fm.notify({ type : 'chkcontent', cnt : 1, hideCnt: true, cancel : function() { res.reject(); } }); }, 100); res.always(function() { tm && clearTimeout(tm); fm.notify({ type : 'chkcontent', cnt: -1 }); }).done(function(data) { dfrd.notifyWith(ta, [encord, ta.data('hash'), old, saveDfd]); }).fail(function(err) { saveDfd.reject(err); }); } else { dfrd.notifyWith(ta, [encord, ta.data('hash'), old, saveDfd]); } return saveDfd; }, saveon = function() { if (!loaded()) { return; } save().fail(function(err) { err && fm.error(err); }); }, cancel = function() { ta.elfinderdialog('close'); }, savecl = function() { if (!loaded()) { return; } dialogNode.hide(); save().done(function() { _loaded = false; dialogNode.show(); cancel(); }).fail(function(err) { dialogNode.show(); err && fm.error(err); }); }, saveAs = function() { if (!loaded()) { return; } var prevOld = old, phash = file.phash, fail = function(err) { dialogs.addClass(clsEditing).fadeIn(function() { err && fm.error(err); }); old = prevOld; fm.disable(); }, make = function() { self.mime = saveAsFile.mime || file.mime; self.prefix = (saveAsFile.name || file.name).replace(/ \d+(\.[^.]+)?$/, '$1'); self.requestCmd = 'mkfile'; self.nextAction = {}; self.data = {target : phash}; jQuery.proxy(fm.res('mixin', 'make'), self)() .done(function(data) { var oldHash; if (data.added && data.added.length) { oldHash = ta.data('hash'); ta.data('hash', data.added[0].hash); save().done(function() { _loaded = false; dialogNode.show(); cancel(); dialogs.fadeIn(); }).fail(function() { fm.exec('rm', [data.added[0].hash], { forceRm: true, quiet: true }); ta.data('hash', oldHash); dialogNode.find('button.elfinder-btncnt-2').hide(); fail(); }); } else { fail(); } }) .progress(function(err) { if (err && err === 'errUploadMime') { ta.trigger('saveAsFail'); } }) .fail(fail) .always(function() { delete self.mime; delete self.prefix; delete self.nextAction; delete self.data; }); fm.trigger('unselectfiles', { files: [ file.hash ] }); }, reqOpen = null, reqInfo = null, dialogs = fm.getUI().children('.' + self.dialogClass + ':visible'); if (dialogNode.is(':hidden')) { dialogs = dialogs.add(dialogNode); } dialogs.removeClass(clsEditing).fadeOut(); fm.enable(); if (fm.searchStatus.state < 2 && phash !== fm.cwd().hash) { reqOpen = fm.exec('open', [phash], {thash: phash}); } else if (!fm.file(phash)) { reqInfo = fm.request({cmd: 'info', targets: [phash]}); } jQuery.when([reqOpen, reqInfo]).done(function() { if (reqInfo) { fm.one('infodone', function() { fm.file(phash)? make() : fail('errFolderNotFound'); }); } else { reqOpen? fm.one('cwdrender', make) : make(); } }).fail(fail); }, changed = function() { var dfd = jQuery.Deferred(), res, tm; if (!_loaded) { return dfd.resolve(false); } ta.editor && ta.editor.save(ta[0], ta.editor.instance); res = getContent(); if (res && res.promise) { tm = setTimeout(function() { fm.notify({ type : 'chkcontent', cnt : 1, hideCnt: true, cancel : function() { res.reject(); } }); }, 100); res.always(function() { tm && clearTimeout(tm); fm.notify({ type : 'chkcontent', cnt: -1 }); }).done(function(d) { dfd.resolve(old !== d); }).fail(function(err) { dfd.resolve(err || (old === undefined? false : true)); }); } else { dfd.resolve(old !== res); } return dfd; }, opts = { title : fm.escape(file.name), width : getDlgWidth(), height : getDlgHeight(), buttons : {}, cssClass : clsEditing, maxWidth : 'window', maxHeight : 'window', allowMinimize : true, allowMaximize : true, openMaximized : editorMaximized() || (editor && editor.info && editor.info.openMaximized), btnHoverFocus : false, closeOnEscape : false, propagationEvents : ['mousemove', 'mouseup', 'click'], minimize : function() { var conf; if (ta.editor && dialogNode.closest('.ui-dialog').is(':hidden')) { conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { fileSync(file.hash); } } }, close : function() { var close = function() { var conf; dfrd.resolve(); if (ta.editor) { ta.editor.close(ta[0], ta.editor.instance); conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { fileSync(file.hash); } } ta.elfinderdialog('destroy'); }, onlySaveAs = (typeof saveAsFile.name !== 'undefined'), accept = onlySaveAs? { label : 'btnSaveAs', callback : function() { requestAnimationFrame(saveAs); } } : { label : 'btnSaveClose', callback : function() { save().done(function() { close(); }); } }; changed().done(function(change) { var msgs = ['confirmNotSave']; if (change) { if (typeof change === 'string') { msgs.unshift(change); } fm.confirm({ title : self.title, text : msgs, accept : accept, cancel : { label : 'btnClose', callback : close }, buttons : onlySaveAs? null : [{ label : 'btnSaveAs', callback : function() { requestAnimationFrame(saveAs); } }] }); } else { close(); } }); }, open : function() { var loadRes, conf, interval; ta.initEditArea.call(ta, id, file, content, fm); if (ta.editor) { loadRes = ta.editor.load(ta[0]) || null; if (loadRes && loadRes.done) { loadRes.always(function() { _loaded = true; }).done(function(instance) { ta.editor.instance = instance; ta.editor.focus(ta[0], ta.editor.instance); setOld(getContent()); requestAnimationFrame(function() { dialogNode.trigger('resize'); }); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); return; }).always(makeToasts); } else { _loaded = true; if (loadRes && (typeof loadRes === 'string' || Array.isArray(loadRes))) { fm.error(loadRes); ta.elfinderdialog('destroy'); return; } ta.editor.instance = loadRes; ta.editor.focus(ta[0], ta.editor.instance); setOld(getContent()); requestAnimationFrame(function() { dialogNode.trigger('resize'); }); makeToasts(); } conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { if (interval = parseInt(conf.info.syncInterval)) { setTimeout(function() { autoSync(interval); }, interval); } } } else { _loaded = true; setOld(getContent()); } }, resize : function(e, data) { ta.editor && ta.editor.resize(ta[0], ta.editor.instance, e, data || {}); } }, getContent = function() { var res = ta.getContent.call(ta, ta[0]); if (res === undefined || res === false || res === null) { res = jQuery.Deferred().reject(); } return res; }, setOld = function(res) { if (res && res.promise) { res.done(function(d) { old = d; }); } else { old = res; } }, autoSync = function(interval) { if (dialogNode.is(':visible')) { fileSync(file.hash); setTimeout(function() { autoSync(interval); }, interval); } }, stateChange = function() { if (selEncoding) { changed().done(function(change) { if (change) { selEncoding.attr('title', fm.i18n('saveAsEncoding')).addClass('elfinder-edit-changed'); } else { selEncoding.attr('title', fm.i18n('openAsEncoding')).removeClass('elfinder-edit-changed'); } }); } }, saveAsFile = {}, ta, old, dialogNode, selEncoding, extEditor, maxW, syncInterval; if (editor) { if (editor.html) { ta = jQuery(editor.html); } extEditor = { init : editor.init || null, load : editor.load, getContent : editor.getContent || null, save : editor.save, beforeclose : typeof editor.beforeclose == 'function' ? editor.beforeclose : void 0, close : typeof editor.close == 'function' ? editor.close : function() {}, focus : typeof editor.focus == 'function' ? editor.focus : function() {}, resize : typeof editor.resize == 'function' ? editor.resize : function() {}, instance : null, doSave : saveon, doCancel : cancel, doClose : savecl, file : file, fm : fm, confObj : editor, trigger : function(evName, data) { fm.trigger('editEditor' + evName, Object.assign({}, editor.info || {}, data)); } }; } if (!ta) { if (!fm.mimeIsText(file.mime)) { return dfrd.reject('errEditorNotFound'); } (function() { ta = jQuery('') .on('input propertychange', stateChange); if (!editor || !editor.info || editor.info.useTextAreaEvent) { ta.on('keydown', function(e) { var code = e.keyCode, value, start; e.stopPropagation(); if (code == jQuery.ui.keyCode.TAB) { e.preventDefault(); // insert tab on tab press if (this.setSelectionRange) { value = this.value; start = this.selectionStart; this.value = value.substr(0, start) + "\t" + value.substr(this.selectionEnd); start += 1; this.setSelectionRange(start, start); } } if (e.ctrlKey || e.metaKey) { // close on ctrl+w/q if (code == 'Q'.charCodeAt(0) || code == 'W'.charCodeAt(0)) { e.preventDefault(); cancel(); } if (code == 'S'.charCodeAt(0)) { e.preventDefault(); saveon(); } } }) .on('mouseenter', function(){this.focus();}); } ta.initEditArea = function(id, file, content) { // ta.hide() for performance tune. Need ta.show() in `load()` if use textarea node. ta.hide().val(content); this._setupSelEncoding(content); }; })(); } // extended function to setup selector of encoding for text editor ta._setupSelEncoding = function(content) { var heads = (encoding && encoding !== 'unknown')? [{value: encoding}] : [], wfake = jQuery('').hide(), setSelW = function(init) { init && wfake.appendTo(selEncoding.parent()); wfake.empty().append(jQuery('').text(selEncoding.val())); selEncoding.width(wfake.width()); }; if (content === '' || ! encoding || encoding !== 'UTF-8') { heads.push({value: 'UTF-8'}); } selEncoding = getEncSelect(heads).on('touchstart', function(e) { // for touch punch event handler e.stopPropagation(); }).on('change', function() { // reload to change encoding if not edited changed().done(function(change) { if (! change && getContent() !== '') { cancel(); edit(file, selEncoding.val(), editor).fail(function(err) { err && fm.error(err); }); } }); setSelW(); }).on('mouseover', stateChange); ta.parent().next().prepend(jQuery('
').append(selEncoding)); setSelW(true); }; ta.data('hash', file.hash); if (extEditor) { ta.editor = extEditor; if (typeof extEditor.beforeclose === 'function') { opts.beforeclose = function() { return extEditor.beforeclose(ta[0], extEditor.instance); }; } if (typeof extEditor.init === 'function') { ta.initEditArea = extEditor.init; } if (typeof extEditor.getContent === 'function') { ta.getContent = extEditor.getContent; } } if (! ta.initEditArea) { ta.initEditArea = function() {}; } if (! ta.getContent) { ta.getContent = function() { return rtrim(ta.val()); }; } if (!editor || !editor.info || !editor.info.preventGet) { opts.buttons[fm.i18n('btnSave')] = saveon; opts.buttons[fm.i18n('btnSaveClose')] = savecl; opts.buttons[fm.i18n('btnSaveAs')] = saveAs; opts.buttons[fm.i18n('btnCancel')] = cancel; } if (editor && typeof editor.prepare === 'function') { editor.prepare(ta, opts, file); } dialogNode = self.fmDialog(ta, opts) .attr('id', id) .on('keydown keyup keypress', function(e) { e.stopPropagation(); }) .css({ overflow: 'hidden', minHeight: '7em' }) .addClass('elfinder-edit-editor') .closest('.ui-dialog') .on('changeType', function(e, data) { if (data.extention && data.mime) { var ext = data.extention, mime = data.mime, btnSet = jQuery(this).children('.ui-dialog-buttonpane').children('.ui-dialog-buttonset'); btnSet.children('.elfinder-btncnt-0,.elfinder-btncnt-1').hide(); saveAsFile.name = fm.splitFileExtention(file.name)[0] + '.' + data.extention; saveAsFile.mime = data.mime; if (!data.keepEditor) { btnSet.children('.elfinder-btncnt-2').trigger('click'); } } }); // care to viewport scale change with mobile devices maxW = (fm.options.dialogContained? fm.getUI() : jQuery(window)).width(); (dialogNode.width() > maxW) && dialogNode.width(maxW); return dfrd.promise(); }, /** * Get file content and * open dialog with textarea to edit file content * * @param String file hash * @return jQuery.Deferred **/ edit = function(file, convert, editor) { var hash = file.hash, opts = fm.options, dfrd = jQuery.Deferred(), id = 'edit-'+fm.namespace+'-'+file.hash, d = fm.getUI().find('#'+id), conv = !convert? 0 : convert, noContent = false, req, error, res; if (d.length) { d.elfinderdialog('toTop'); return dfrd.resolve(); } if (!file.read || (!file.write && (!editor.info || !editor.info.converter))) { error = ['errOpen', file.name, 'errPerm']; return dfrd.reject(error); } if (editor && editor.info) { if (typeof editor.info.edit === 'function') { res = editor.info.edit.call(fm, file, editor); if (res.promise) { res.done(function() { dfrd.resolve(); }).fail(function(error) { dfrd.reject(error); }); } else { res? dfrd.resolve() : dfrd.reject(); } return dfrd; } noContent = editor.info.preventGet || editor.info.noContent; if (editor.info.urlAsContent || noContent) { req = jQuery.Deferred(); if (editor.info.urlAsContent) { fm.url(hash, { async: true, onetime: true, temporary: true }).done(function(url) { req.resolve({content: url}); }); } else { req.resolve({}); } } else { if (conv) { file.encoding = conv; fm.cache(file, 'change'); } req = fm.request({ data : {cmd : 'get', target : hash, conv : conv, _t : file.ts}, options : {type: 'get', cache : true}, notify : {type : 'file', cnt : 1}, preventDefault : true }); } req.done(function(data) { var selEncoding, reg, m, res; if (data.doconv) { fm.confirm({ title : self.title, text : data.doconv === 'unknown'? 'confirmNonUTF8' : 'confirmConvUTF8', accept : { label : 'btnConv', callback : function() { dfrd = edit(file, selEncoding.val(), editor); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } }, optionsCallback : function(options) { options.create = function() { var base = jQuery('
'), head = {value: data.doconv}, detected; if (data.doconv === 'unknown') { head.caption = '-'; } selEncoding = getEncSelect([head]); jQuery(this).next().find('.ui-dialog-buttonset') .prepend(base.append(jQuery('').append(selEncoding))); }; } }); } else { if (!noContent && fm.mimeIsText(file.mime)) { reg = new RegExp('^(data:'+file.mime.replace(/([.+])/g, '\\$1')+';base64,)', 'i'); if (!editor.info.dataScheme) { if (window.atob && (m = data.content.match(reg))) { data.content = atob(data.content.substr(m[1].length)); } } else { if (window.btoa && !data.content.match(reg)) { data.content = 'data:'+file.mime+';base64,'+btoa(data.content); } } } dialog(id, file, data.content, data.encoding, editor, data.toasts) .done(function(data) { dfrd.resolve(data); }) .progress(function(encoding, newHash, data, saveDfd) { var ta = this; if (newHash) { hash = newHash; } fm.request({ options : {type : 'post'}, data : { cmd : 'put', target : hash, encoding : encoding || data.encoding, content : data }, notify : {type : 'save', cnt : 1}, syncOnFail : true, preventFail : true, navigate : { target : 'changed', toast : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('btnSave')])} } } }) .fail(function(error) { dfrd.reject(error); saveDfd.reject(); }) .done(function(data) { requestAnimationFrame(function(){ ta.trigger('focus'); ta.editor && ta.editor.focus(ta[0], ta.editor.instance); }); saveDfd.resolve(); }); }) .fail(function(error) { dfrd.reject(error); }); } }) .fail(function(error) { var err = fm.parseError(error); err = Array.isArray(err)? err[0] : err; if (file.encoding) { file.encoding = ''; fm.cache(file, 'change'); } (err !== 'errConvUTF8') && fm.sync(); dfrd.reject(error); }); } return dfrd.promise(); }, /** * Current editors of selected files * * @type Object */ editors = {}, /** * Fallback editor (Simple text editor) * * @type Object */ fallbackEditor = { // Simple Text (basic textarea editor) info : { id : 'textarea', name : 'TextArea', useTextAreaEvent : true }, load : function(textarea) { // trigger event 'editEditorPrepare' this.trigger('Prepare', { node: textarea, editorObj: void(0), instance: void(0), opts: {} }); textarea.setSelectionRange && textarea.setSelectionRange(0, 0); jQuery(textarea).trigger('focus').show(); }, save : function(){} }, /** * Set current editors * * @param Object file object * @param Number cnt count of selected items * @return Void */ setEditors = function(file, cnt) { var mimeMatch = function(fileMime, editorMimes){ if (!editorMimes) { return fm.mimeIsText(fileMime); } else { if (editorMimes[0] === '*' || jQuery.inArray(fileMime, editorMimes) !== -1) { return true; } var i, l; l = editorMimes.length; for (i = 0; i < l; i++) { if (fileMime.indexOf(editorMimes[i]) === 0) { return true; } } return false; } }, extMatch = function(fileName, editorExts){ if (!editorExts || !editorExts.length) { return true; } var ext = fileName.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(), i, l; l = editorExts.length; for (i = 0; i < l; i++) { if (ext === editorExts[i].toLowerCase()) { return true; } } return false; }, optEditors = self.options.editors || [], cwdWrite = fm.cwd().write; stored = fm.storage('storedEditors') || {}; editors = {}; if (!optEditors.length) { optEditors = [fallbackEditor]; } jQuery.each(optEditors, function(i, editor) { var name; if ((cnt === 1 || !editor.info.single) && ((!editor.info || !editor.info.converter)? file.write : cwdWrite) && (file.size > 0 || (!editor.info.converter && editor.info.canMakeEmpty !== false && fm.mimesCanMakeEmpty[file.mime])) && (!editor.info.maxSize || file.size <= editor.info.maxSize) && mimeMatch(file.mime, editor.mimes || null) && extMatch(file.name, editor.exts || null) && typeof editor.load == 'function' && typeof editor.save == 'function') { name = editor.info.name? editor.info.name : ('Editor '); editor.id = editor.info.id? editor.info.id : ('editor' + i), editor.name = name; editor.i18n = fm.i18n(name); editors[editor.id] = editor; } }); return Object.keys(editors).length? true : false; }, store = function(mime, editor) { if (mime && editor) { if (!jQuery.isPlainObject(stored)) { stored = {}; } stored[mime] = editor.id; fm.storage('storedEditors', stored); fm.trigger('selectfiles', {files : fm.selected()}); } }, useStoredEditor = function() { var d = fm.storage('useStoredEditor'); return d? (d > 0) : self.options.useStoredEditor; }, editorMaximized = function() { var d = fm.storage('editorMaximized'); return d? (d > 0) : self.options.editorMaximized; }, getSubMenuRaw = function(files, callback) { var subMenuRaw = []; jQuery.each(editors, function(id, ed) { subMenuRaw.push( { label : fm.escape(ed.i18n), icon : ed.info && ed.info.icon? ed.info.icon : 'edit', options : { iconImg: ed.info && ed.info.iconImg? fm.baseUrl + ed.info.iconImg : void(0) }, callback : function() { store(files[0].mime, ed); callback && callback.call(ed); } } ); }); return subMenuRaw; }, getStoreId = function(name) { // for compatibility to previous version return name.toLowerCase().replace(/ +/g, ''); }, getStoredEditor = function(mime) { var name = stored[mime]; return name && Object.keys(editors).length? editors[getStoreId(name)] : void(0); }, infoRequest = function() { }, stored; // make public method this.getEncSelect = getEncSelect; this.shortcuts = [{ pattern : 'ctrl+e' }]; this.init = function() { var self = this, fm = this.fm, opts = this.options, cmdChecks = [], ccData, dfd; this.onlyMimes = this.options.mimes || []; fm.one('open', function() { // editors setup if (opts.editors && Array.isArray(opts.editors)) { fm.trigger('canMakeEmptyFile', {mimes: Object.keys(fm.storage('mkfileTextMimes') || {}).concat(opts.makeTextMimes || ['text/plain'])}); jQuery.each(opts.editors, function(i, editor) { if (editor.info && editor.info.cmdCheck) { cmdChecks.push(editor.info.cmdCheck); } }); if (cmdChecks.length) { if (fm.api >= 2.1030) { dfd = fm.request({ data : { cmd: 'editor', name: cmdChecks, method: 'enabled' }, preventDefault : true }).done(function(d) { ccData = d; }).fail(function() { ccData = {}; }); } else { ccData = {}; dfd = jQuery.Deferred().resolve(); } } else { dfd = jQuery.Deferred().resolve(); } dfd.always(function() { if (ccData) { opts.editors = jQuery.grep(opts.editors, function(e) { if (e.info && e.info.cmdCheck) { return ccData[e.info.cmdCheck]? true : false; } else { return true; } }); } jQuery.each(opts.editors, function(i, editor) { if (editor.setup && typeof editor.setup === 'function') { editor.setup.call(editor, opts, fm); } if (!editor.disabled) { if (editor.mimes && Array.isArray(editor.mimes)) { mimesSingle = mimesSingle.concat(editor.mimes); if (!editor.info || !editor.info.single) { mimes = mimes.concat(editor.mimes); } } if (!allowAll && editor.mimes && editor.mimes[0] === '*') { allowAll = true; } if (!editor.info) { editor.info = {}; } if (editor.info.integrate) { fm.trigger('helpIntegration', Object.assign({cmd: 'edit'}, editor.info.integrate)); } if (editor.info.canMakeEmpty) { fm.trigger('canMakeEmptyFile', {mimes: Array.isArray(editor.info.canMakeEmpty)? editor.info.canMakeEmpty : editor.mimes}); } } }); mimesSingle = (jQuery.uniqueSort || jQuery.unique)(mimesSingle); mimes = (jQuery.uniqueSort || jQuery.unique)(mimes); opts.editors = jQuery.grep(opts.editors, function(e) { return e.disabled? false : true; }); }); } }) .bind('select', function() { editors = null; }) .bind('contextmenucreate', function(e) { var file, editor, single = function(editor) { var title = self.title; fm.one('contextmenucreatedone', function() { self.title = title; }); self.title = fm.escape(editor.i18n); if (editor.info && editor.info.iconImg) { self.contextmenuOpts = { iconImg: fm.baseUrl + editor.info.iconImg }; } delete self.variants; }; self.contextmenuOpts = void(0); if (e.data.type === 'files' && self.enabled()) { file = fm.file(e.data.targets[0]); if (setEditors(file, e.data.targets.length)) { if (Object.keys(editors).length > 1) { if (!useStoredEditor() || !(editor = getStoredEditor(file.mime))) { delete self.extra; self.variants = []; jQuery.each(editors, function(id, editor) { self.variants.push([{ editor: editor }, editor.i18n, editor.info && editor.info.iconImg? fm.baseUrl + editor.info.iconImg : 'edit']); }); } else { single(editor); self.extra = { icon: 'menu', node: jQuery('') .attr({title: fm.i18n('select')}) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } var node = jQuery(this); e.stopPropagation(); e.preventDefault(); fm.trigger('contextmenu', { raw: getSubMenuRaw(fm.selectedFiles(), function() { var hashes = fm.selected(); fm.exec('edit', hashes, {editor: this}); fm.trigger('selectfiles', {files : hashes}); }), x: node.offset().left, y: node.offset().top }); }) }; } } else { single(editors[Object.keys(editors)[0]]); delete self.extra; } } } }) .bind('canMakeEmptyFile', function(e) { if (e.data && e.data.resetTexts) { var defs = fm.arrayFlip(self.options.makeTextMimes || ['text/plain']), hides = self.getMkfileHides(); jQuery.each((fm.storage('mkfileTextMimes') || {}), function(mime, type) { if (!defs[mime]) { delete fm.mimesCanMakeEmpty[mime]; delete hides[mime]; } }); fm.storage('mkfileTextMimes', null); if (Object.keys(hides).length) { fm.storage('mkfileHides', hides); } else { fm.storage('mkfileHides', null); } } }); }; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length; return cnt && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(select, opts) { var fm = this.fm, files = filter(this.files(select)), hashes = jQuery.map(files, function(f) { return f.hash; }), list = [], editor = opts && opts.editor? opts.editor : null, node = jQuery(opts && opts._currentNode? opts._currentNode : fm.cwdHash2Elm(hashes[0])), getEditor = function() { var dfd = jQuery.Deferred(), storedId; if (!editor && Object.keys(editors).length > 1) { if (useStoredEditor() && (editor = getStoredEditor(files[0].mime))) { return dfd.resolve(editor); } fm.trigger('contextmenu', { raw: getSubMenuRaw(files, function() { dfd.resolve(this); }), x: node.offset().left, y: node.offset().top + 22, opened: function() { fm.one('closecontextmenu',function() { requestAnimationFrame(function() { if (dfd.state() === 'pending') { dfd.reject(); } }); }); } }); fm.trigger('selectfiles', {files : hashes}); return dfd; } else { Object.keys(editors).length > 1 && editor && store(files[0].mime, editor); return dfd.resolve(editor? editor : (Object.keys(editors).length? editors[Object.keys(editors)[0]] : null)); } }, dfrd = jQuery.Deferred(), file; if (editors === null) { setEditors(files[0], hashes.length); } if (!node.length) { node = fm.getUI('cwd'); } getEditor().done(function(editor) { while ((file = files.shift())) { list.push(edit(file, (file.encoding || void(0)), editor).fail(function(error) { error && fm.error(error); })); } if (list.length) { jQuery.when.apply(null, list).done(function() { dfrd.resolve(); }).fail(function() { dfrd.reject(); }); } else { dfrd.reject(); } }).fail(function() { dfrd.reject(); }); return dfrd; }; this.getMkfileHides = function() { return fm.storage('mkfileHides') || fm.arrayFlip(self.options.mkfileHideMimes || []); }; }; PK Z0{{js/commands/.htaccessnuW+A Order allow,deny Deny from all PK ZGϫ((js/commands/paste.jsnuW+A/** * @class elFinder command "paste" * Paste filesfrom clipboard into directory. * If files pasted in its parent directory - files duplicates will created * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.paste = function() { "use strict"; this.updateOnSelect = false; this.handlers = { changeclipboard : function() { this.update(); } }; this.shortcuts = [{ pattern : 'ctrl+v shift+insert' }]; this.getstate = function(dst) { if (this._disabled) { return -1; } if (dst) { if (Array.isArray(dst)) { if (dst.length != 1) { return -1; } dst = this.fm.file(dst[0]); } } else { dst = this.fm.cwd(); } return this.fm.clipboard().length && dst.mime == 'directory' && dst.write ? 0 : -1; }; this.exec = function(select, cOpts) { var self = this, fm = self.fm, opts = cOpts || {}, dst = select ? this.files(select)[0] : fm.cwd(), files = fm.clipboard(), cnt = files.length, cut = cnt ? files[0].cut : false, cmd = opts._cmd? opts._cmd : (cut? 'move' : 'copy'), error = 'err' + cmd.charAt(0).toUpperCase() + cmd.substr(1), fpaste = [], fcopy = [], dfrd = jQuery.Deferred() .fail(function(error) { error && fm.error(error); }) .always(function() { fm.unlockfiles({files : jQuery.map(files, function(f) { return f.hash; })}); }), copy = function(files) { return files.length && fm._commands.duplicate ? fm.exec('duplicate', files) : jQuery.Deferred().resolve(); }, paste = function(files) { var dfrd = jQuery.Deferred(), existed = [], hashes = {}, intersect = function(files, names) { var ret = [], i = files.length; while (i--) { jQuery.inArray(files[i].name, names) !== -1 && ret.unshift(i); } return ret; }, confirm = function(ndx) { var i = existed[ndx], file = files[i], last = ndx == existed.length-1; if (!file) { return; } fm.confirm({ title : fm.i18n(cmd + 'Files'), text : ['errExists', file.name, cmd === 'restore'? 'confirmRest' : 'confirmRepl'], all : !last, accept : { label : 'btnYes', callback : function(all) { !last && !all ? confirm(++ndx) : paste(files); } }, reject : { label : 'btnNo', callback : function(all) { var i; if (all) { i = existed.length; while (ndx < i--) { files[existed[i]].remove = true; } } else { files[existed[ndx]].remove = true; } !last && !all ? confirm(++ndx) : paste(files); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.resolve(); } }, buttons : [ { label : 'btnBackup', callback : function(all) { var i; if (all) { i = existed.length; while (ndx < i--) { files[existed[i]].rename = true; } } else { files[existed[ndx]].rename = true; } !last && !all ? confirm(++ndx) : paste(files); } } ] }); }, valid = function(names) { var exists = {}, existedArr; if (names) { if (Array.isArray(names)) { if (names.length) { if (typeof names[0] == 'string') { // elFinder <= 2.1.6 command `is` results existed = intersect(files, names); } else { jQuery.each(names, function(i, v) { exists[v.name] = v.hash; }); existed = intersect(files, jQuery.map(exists, function(h, n) { return n; })); jQuery.each(files, function(i, file) { if (exists[file.name]) { hashes[exists[file.name]] = file.name; } }); } } } else { existedArr = []; existed = jQuery.map(names, function(n) { if (typeof n === 'string') { return n; } else { // support to >=2.1.11 plugin Normalizer, Sanitizer existedArr = existedArr.concat(n); return false; } }); if (existedArr.length) { existed = existed.concat(existedArr); } existed = intersect(files, existed); hashes = names; } } existed.length ? confirm(0) : paste(files); }, paste = function(selFiles) { var renames = [], files = jQuery.grep(selFiles, function(file) { if (file.rename) { renames.push(file.name); } return !file.remove ? true : false; }), cnt = files.length, groups = {}, args = [], targets, reqData; if (!cnt) { return dfrd.resolve(); } targets = jQuery.map(files, function(f) { return f.hash; }); reqData = {cmd : 'paste', dst : dst.hash, targets : targets, cut : cut ? 1 : 0, renames : renames, hashes : hashes, suffix : fm.options.backupSuffix}; if (fm.api < 2.1) { reqData.src = files[0].phash; } fm.request({ data : reqData, notify : {type : cmd, cnt : cnt}, cancel : true, navigate : { toast : opts.noToast? {} : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd' + cmd)]), action: { cmd: 'open', msg: 'cmdopendir', data: [dst.hash], done: 'select', cwdNot: dst.hash }} } } }) .done(function(data) { var dsts = {}, added = data.added && data.added.length? data.added : null; if (cut && added) { // undo/redo jQuery.each(files, function(i, f) { var phash = f.phash, srcHash = function(name) { var hash; jQuery.each(added, function(i, f) { if (f.name === name) { hash = f.hash; return false; } }); return hash; }, shash = srcHash(f.name); if (shash) { if (dsts[phash]) { dsts[phash].push(shash); } else { dsts[phash] = [ shash ]; } } }); if (Object.keys(dsts).length) { data.undo = { cmd : 'move', callback : function() { var reqs = []; jQuery.each(dsts, function(dst, targets) { reqs.push(fm.request({ data : {cmd : 'paste', dst : dst, targets : targets, cut : 1}, notify : {type : 'undo', cnt : targets.length} })); }); return jQuery.when.apply(null, reqs); } }; data.redo = { cmd : 'move', callback : function() { return fm.request({ data : reqData, notify : {type : 'redo', cnt : cnt} }); } }; } } dfrd.resolve(data); }) .fail(function(flg) { dfrd.reject(); if (flg === 0) { // canceling fm.sync(); } }) .always(function() { fm.unlockfiles({files : files}); }); }, internames; if (!fm.isCommandEnabled(self.name, dst.hash) || !files.length) { return dfrd.resolve(); } if (fm.oldAPI) { paste(files); } else { if (!fm.option('copyOverwrite', dst.hash)) { paste(files); } else { internames = jQuery.map(files, function(f) { return f.name; }); dst.hash == fm.cwd().hash ? valid(jQuery.map(fm.files(), function(file) { return file.phash == dst.hash ? {hash: file.hash, name: file.name} : null; })) : fm.request({ data : {cmd : 'ls', target : dst.hash, intersect : internames}, notify : {type : 'prepare', cnt : 1, hideCnt : true}, preventFail : true }) .always(function(data) { valid(data.list); }); } } return dfrd; }, parents, fparents, cutDfrd; if (!cnt || !dst || dst.mime != 'directory') { return dfrd.reject(); } if (!dst.write) { return dfrd.reject([error, files[0].name, 'errPerm']); } parents = fm.parents(dst.hash); jQuery.each(files, function(i, file) { if (!file.read) { return !dfrd.reject([error, file.name, 'errPerm']); } if (cut && file.locked) { return !dfrd.reject(['errLocked', file.name]); } if (jQuery.inArray(file.hash, parents) !== -1) { return !dfrd.reject(['errCopyInItself', file.name]); } if (file.mime && file.mime !== 'directory' && ! fm.uploadMimeCheck(file.mime, dst.hash)) { return !dfrd.reject([error, file.name, 'errUploadMime']); } fparents = fm.parents(file.hash); fparents.pop(); if (jQuery.inArray(dst.hash, fparents) !== -1) { if (jQuery.grep(fparents, function(h) { var d = fm.file(h); return d.phash == dst.hash && d.name == file.name ? true : false; }).length) { return !dfrd.reject(['errReplByChild', file.name]); } } if (file.phash == dst.hash) { fcopy.push(file.hash); } else { fpaste.push({ hash : file.hash, phash : file.phash, name : file.name }); } }); if (dfrd.state() === 'rejected') { return dfrd; } cutDfrd = jQuery.Deferred(); if (cut && self.options.moveConfirm) { fm.confirm({ title : 'moveFiles', text : fm.i18n('confirmMove', dst.i18 || dst.name), accept : { label : 'btnYes', callback : function() { cutDfrd.resolve(); } }, cancel : { label : 'btnCancel', callback : function() { cutDfrd.reject(); } } }); } else { cutDfrd.resolve(); } cutDfrd.done(function() { jQuery.when( copy(fcopy), paste(fpaste) ) .done(function(cr, pr) { dfrd.resolve(pr && pr.undo? pr : void(0)); }) .fail(function() { dfrd.reject(); }) .always(function() { cut && fm.clipboard([]); }); }).fail(function() { dfrd.reject(); }); return dfrd; }; }; PK Zͩjs/commands/resize.jsnuW+A/** * @class elFinder command "resize" * Open dialog to resize image * * @author Dmitry (dio) Levashov * @author Alexey Sukhotin * @author Naoki Sawada * @author Sergio Jovani **/ elFinder.prototype.commands.resize = function() { "use strict"; var fm = this.fm, losslessRotate = 0, getBounceBox = function(w, h, theta) { var srcPts = [ {x: w/2, y: h/2}, {x: -w/2, y: h/2}, {x: -w/2, y: -h/2}, {x: w/2, y: -h/2} ], dstPts = [], min = {x: Number.MAX_VALUE, y: Number.MAX_VALUE}, max = {x: Number.MIN_VALUE, y: Number.MIN_VALUE}; jQuery.each(srcPts, function(i, srcPt){ dstPts.push({ x: srcPt.x * Math.cos(theta) - srcPt.y * Math.sin(theta), y: srcPt.x * Math.sin(theta) + srcPt.y * Math.cos(theta) }); }); jQuery.each(dstPts, function(i, pt) { min.x = Math.min(min.x, pt.x); min.y = Math.min(min.y, pt.y); max.x = Math.max(max.x, pt.x); max.y = Math.max(max.y, pt.y); }); return { width: max.x - min.x, height: max.y - min.y }; }; this.updateOnSelect = false; this.getstate = function() { var sel = fm.selectedFiles(); return sel.length == 1 && sel[0].read && sel[0].write && sel[0].mime.indexOf('image/') !== -1 ? 0 : -1; }; this.resizeRequest = function(data, f, dfrd) { var file = f || fm.file(data.target), tmb = file? file.tmb : null, enabled = fm.isCommandEnabled('resize', data.target); if (enabled && (! file || (file && file.read && file.write && file.mime.indexOf('image/') !== -1 ))) { return fm.request({ data : Object.assign(data, { cmd : 'resize' }), notify : {type : 'resize', cnt : 1} }) .fail(function(error) { if (dfrd) { dfrd.reject(error); } }) .done(function() { if (data.quality) { fm.storage('jpgQuality', data.quality === fm.option('jpgQuality')? null : data.quality); } dfrd && dfrd.resolve(); }); } else { var error; if (file) { if (file.mime.indexOf('image/') === -1) { error = ['errResize', file.name, 'errUsupportType']; } else { error = ['errResize', file.name, 'errPerm']; } } else { error = ['errResize', data.target, 'errPerm']; } if (dfrd) { dfrd.reject(error); } else { fm.error(error); } return jQuery.Deferred().reject(error); } }; this.exec = function(hashes) { var self = this, files = this.files(hashes), dfrd = jQuery.Deferred(), api2 = (fm.api > 1), options = this.options, dialogWidth = 650, fmnode = fm.getUI(), ctrgrup = jQuery().controlgroup? 'controlgroup' : 'buttonset', grid8Def = typeof options.grid8px === 'undefined' || options.grid8px !== 'disable'? true : false, presetSize = Array.isArray(options.presetSize)? options.presetSize : [], clactive = 'elfinder-dialog-active', clsediting = fm.res('class', 'editing'), open = function(file, id, src) { var isJpeg = (file.mime === 'image/jpeg'), dialog = jQuery('
'), input = '', row = '
', label = '
', changeTm = null, operate = false, opStart = function() { operate = true; }, opStop = function() { if (operate) { operate = false; control.trigger('change'); } }, control = jQuery('
') .on('focus', 'input[type=text],input[type=number]', function() { jQuery(this).trigger('select'); }) .on('change', function() { changeTm && cancelAnimationFrame(changeTm); changeTm = requestAnimationFrame(function() { var panel, quty, canvas, ctx, img, sx, sy, sw, sh, deg, theta, bb; if (sizeImg && ! operate && (canvas = sizeImg.data('canvas'))) { panel = control.children('div.elfinder-resize-control-panel:visible'); quty = panel.find('input.elfinder-resize-quality'); if (quty.is(':visible')) { ctx = sizeImg.data('ctx'); img = sizeImg.get(0); if (panel.hasClass('elfinder-resize-uiresize')) { // resize sw = canvas.width = width.val(); sh = canvas.height = height.val(); ctx.drawImage(img, 0, 0, sw, sh); } else if (panel.hasClass('elfinder-resize-uicrop')) { // crop sx = pointX.val(); sy = pointY.val(); sw = offsetX.val(); sh = offsetY.val(); canvas.width = sw; canvas.height = sh; ctx.drawImage(img, sx, sy, sw, sh, 0, 0, sw, sh); } else { // rotate deg = degree.val(); theta = (degree.val() * Math.PI) / 180; bb = getBounceBox(owidth, oheight, theta); sw = canvas.width = bb.width; sh = canvas.height = bb.height; ctx.save(); if (deg % 90 !== 0) { ctx.fillStyle = bg.val() || '#FFF'; ctx.fillRect(0, 0, sw, sh); } ctx.translate(sw / 2, sh / 2); ctx.rotate(theta); ctx.drawImage(img, -img.width/2, -img.height/2, owidth, oheight); ctx.restore(); } canvas.toBlob(function(blob) { if (blob) { size1 = blob.size; quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); } }, 'image/jpeg', Math.max(Math.min(quty.val(), 100), 1) / 100); } } }); }) .on('mouseup', 'input', function(e) { jQuery(e.target).trigger('change'); }), preview = jQuery('
') .on('touchmove', function(e) { if (jQuery(e.target).hasClass('touch-punch')) { e.stopPropagation(); e.preventDefault(); } }), spinner = jQuery('
'+fm.i18n('ntfloadimg')+'
'), rhandle = jQuery('
'), rhandlec = jQuery('
'), uiresize = jQuery('
'), uicrop = jQuery('
'), uirotate = jQuery('
'), uideg270 = jQuery('').attr('title',fm.i18n('rotate-cw')).append(jQuery('')), uideg90 = jQuery('').attr('title',fm.i18n('rotate-ccw')).append(jQuery('')), uiprop = jQuery(''), reset = jQuery('
').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { var self = jQuery(this); self.html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true, progressBar : prog }) .always(function() { self.html(''); }) .done(function(data) { var rfile = fm.file(file.hash); file.url = rfile.url = data.url || ''; if (file.url) { preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); } }); }); } if (file.url !== '' && file.url != '1') { preview.one('change', function() { loading.remove(); node.off('load').remove(); node = null; }).addClass('elfinder-overflow-auto'); loading = jQuery('
'+fm.i18n('nowLoading')+'
').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = jQuery('
').appendTo(loading); url = fm.convAbsUrl(fm.url(file.hash)); node = jQuery('') .css('background-color', 'transparent') .appendTo(preview) .on('load', function() { ql.hideinfo(); loading.remove(); ql.preview.after(ql.info); jQuery(this).css('background-color', '#fff').show(); }) .on('error', function() { loading.remove(); ql.preview.after(ql.info); }) .attr('src', '//sharecad.org/cadframe/load?url=' + encodeURIComponent(url)); ql.info.after(ql.preview); } } }); }, /** * KML preview with GoogleMaps API * * @param elFinder.commands.quicklook */ function(ql) { "use strict"; var fm = ql.fm, mimes = { 'application/vnd.google-earth.kml+xml' : true, 'application/vnd.google-earth.kmz' : true }, preview = ql.preview, gMaps, loadMap, wGmfail, fail, mapScr; if (ql.options.googleMapsApiKey) { ql.addIntegration({ title: 'Google Maps', link: 'https://www.google.com/intl/' + fm.lang.replace('_', '-') + '/help/terms_maps.html' }); gMaps = (window.google && google.maps); // start load maps loadMap = function(file, node, prog) { var mapsOpts = ql.options.googleMapsOpts.maps; fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) { if (url) { try { new gMaps.KmlLayer(url, Object.assign({ map: new gMaps.Map(node.get(0), mapsOpts) }, ql.options.googleMapsOpts.kml)); ql.hideinfo(); } catch(e) { fail(); } } else { fail(); } }); }; // keep stored error handler if exists wGmfail = window.gm_authFailure; // on error function fail = function() { mapScr = null; }; // API script url mapScr = 'https://maps.googleapis.com/maps/api/js?key=' + ql.options.googleMapsApiKey; // error handler window.gm_authFailure = function() { fail(); wGmfail && wGmfail(); }; preview.on(ql.evUpdate, function(e) { var file = e.file; if (mapScr && mimes[file.mime.toLowerCase()]) { var win = ql.window, getLink = (file.url == '1' && !fm.option('onetimeUrl', file.hash)), loading, prog, url, node; e.stopImmediatePropagation(); loading = jQuery('
'+fm.i18n('nowLoading')+'
').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = jQuery('
').appendTo(loading); if (getLink) { preview.hide(); jQuery('
').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { var self = jQuery(this); self.html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true, progressBar : prog }) .always(function() { loading.remove(); self.html(''); }) .done(function(data) { var rfile = fm.file(file.hash); file.url = rfile.url = data.url || ''; if (file.url) { preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); } }); }); } if (file.url !== '' && !getLink) { node = jQuery('
').appendTo(preview); preview.one('change', function() { node.remove(); node = null; }); if (!gMaps) { fm.loadScript([mapScr], function() { gMaps = window.google && google.maps; gMaps && loadMap(file, node, prog); }); } else { loadMap(file, node, prog); } } } }); } }, /** * Any supported files preview plugin using (Google docs | MS Office) online viewer * * @param elFinder.commands.quicklook **/ function(ql) { "use strict"; var fm = ql.fm, mimes = Object.assign(fm.arrayFlip(ql.options.googleDocsMimes || [], 'g'), fm.arrayFlip(ql.options.officeOnlineMimes || [], 'm')), preview = ql.preview, win = ql.window, navi = ql.navbar, urls = { g: 'docs.google.com/gview?embedded=true&url=', m: 'view.officeapps.live.com/op/embed.aspx?wdStartOn=0&src=' }, navBottom = { g: '56px', m: '24px' }, mLimits = { xls : 5242880, // 5MB xlsb : 5242880, xlsx : 5242880, xlsm : 5242880, other: 10485760 // 10MB }, node, enable; if (ql.options.googleDocsMimes.length) { enable = true; ql.addIntegration({ title: 'Google Docs Viewer', link: 'https://docs.google.com/' }); } if (ql.options.officeOnlineMimes.length) { enable = true; ql.addIntegration({ title: 'MS Online Doc Viewer', link: 'https://products.office.com/office-online/view-office-documents-online' }); } if (enable) { preview.on(ql.evUpdate, function(e) { var file = e.file, type, dfd; // 25MB is maximum filesize of Google Docs prevew if (file.size <= 26214400 && (type = mimes[file.mime])) { var win = ql.window, setNavi = function() { navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? navBottom[type] : ''); }, ext = fm.mimeTypes[file.mime], getLink = (file.url == '1' && !fm.option('onetimeUrl', file.hash)), loading, prog, url, tm; if (type === 'm') { if ((mLimits[ext] && file.size > mLimits[ext]) || file.size > mLimits.other) { type = 'g'; } } if (getLink) { preview.hide(); jQuery('
').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { var self = jQuery(this); self.html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true }) .always(function() { self.html(''); }) .done(function(data) { var rfile = fm.file(file.hash); file.url = rfile.url = data.url || ''; if (file.url) { preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); } }); }); } if (file.url !== '' && !getLink) { e.stopImmediatePropagation(); preview.one('change', function() { dfd && dfd.status && dfd.status() === 'pending' && dfd.reject(); win.off('viewchange.googledocs'); loading.remove(); node.off('load').remove(); node = null; }).addClass('elfinder-overflow-auto'); loading = jQuery('
'+fm.i18n('nowLoading')+'
').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = jQuery('
').appendTo(loading); node = jQuery('') .css('background-color', 'transparent') .appendTo(preview); dfd = fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) { var load = function() { try { if (node && (!node.attr('src') || node.get(0).contentWindow.document/*maybe HTTP 204*/)) { node.attr('src', 'https://' + urls[type] + encodeURIComponent(url)); // Retry because Google Docs viewer sometimes returns HTTP 204 tm = setTimeout(load, 2000); } } catch(e) {} }; if (url) { if (file.ts) { url += (url.match(/\?/)? '&' : '?') + '_t=' + file.ts; } node.on('load', function() { tm && clearTimeout(tm); ql.hideinfo(); loading.remove(); ql.preview.after(ql.info); jQuery(this).css('background-color', '#fff').show(); }) .on('error', function() { tm && clearTimeout(tm); loading.remove(); ql.preview.after(ql.info); }); load(); } else { loading.remove(); node.remove(); } }); win.on('viewchange.googledocs', setNavi); setNavi(); ql.info.after(ql.preview); } } }); } }, /** * Texts preview plugin * * @param elFinder.commands.quicklook **/ function(ql) { "use strict"; var fm = ql.fm, preview = ql.preview, textLines = parseInt(ql.options.textInitialLines) || 150, prettifyLines = parseInt(ql.options.prettifyMaxLines) || 500, PR, _PR, error = function() { prettify = function() { return false; }; _PR && (window.PR = _PR); PR = false; }, prettify = function(node) { if (fm.options.cdns.prettify) { prettify = function(node) { setTimeout(function() { PRcheck(node); }, 100); return 'pending'; }; if (window.PR) { _PR = window.PR; } fm.loadScript([fm.options.cdns.prettify + (fm.options.cdns.prettify.match(/\?/)? '&' : '?') + 'autorun=false'], function(wPR) { PR = wPR || window.PR; if (typeof PR === 'object') { prettify = function() { return true; }; if (_PR) { window.PR = _PR; } else { delete window.PR; } exec(node); } else { error(); } }, { tryRequire: true, error : error }); } else { error(); } }, exec = function(node) { if (node && !node.hasClass('prettyprinted')) { node.css('cursor', 'wait'); requestAnimationFrame(function() { PR.prettyPrint && PR.prettyPrint(null, node.get(0)); node.css('cursor', ''); }); } }, PRcheck = function(node) { var status = prettify(node); if (status === true) { exec(node); } }; preview.on(ql.evUpdate, function(e) { var file = e.file, mime = file.mime, jqxhr, loading, prog, encSelect; if (fm.mimeIsText(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax) && PR !== false) { e.stopImmediatePropagation(); loading = jQuery('
'+fm.i18n('nowLoading')+'
').appendTo(ql.info.find('.elfinder-quicklook-info')); prog = jQuery('
').appendTo(loading); // stop loading on change file if not loadin yet preview.one('change', function() { jqxhr.state() == 'pending' && jqxhr.reject(); encSelect && encSelect.remove(); }); jqxhr = fm.request({ data : {cmd : 'get', target : file.hash, conv : (file.encoding || 1), _t : file.ts}, options : {type: 'get', cache : true}, preventDefault : true, progressBar : prog }) .done(function(data) { var reg = new RegExp('^(data:'+file.mime.replace(/([.+])/g, '\\$1')+';base64,)', 'i'), text = data.content, part, more, node, lines, m; if (typeof text !== 'string') { return; } ql.hideinfo(); if (window.atob && (m = text.match(reg))) { text = atob(text.substr(m[1].length)); } lines = text.match(/([^\r\n]{1,100}[\r\n]*)/g); more = lines.length - textLines; if (more > 10) { part = lines.splice(0, textLines).join(''); } else { more = 0; } node = jQuery('
'); if (more) { node.append(jQuery('

' + fm.i18n('linesLeft', fm.toLocaleString(more)) + '
') .on('click', function() { var top = node.scrollTop(); jQuery(this).remove(); node.children('pre').removeClass('prettyprinted').text(text).scrollTop(top); if (lines.length <= prettifyLines) { PRcheck(node); } }) ); } node.children('pre').text(part || text); node.on('touchstart', function(e) { if (jQuery(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) { e.originalEvent._preventSwipeX = true; } }).appendTo(preview); // make toast message if (data.toasts && Array.isArray(data.toasts)) { jQuery.each(data.toasts, function() { this.msg && fm.toast(this); }); } PRcheck(node); }) .always(function(data) { var cmdEdit, sel, head; if (cmdEdit = fm.getCommand('edit')) { head = []; if (data && data.encoding) { head.push({value: data.encoding}); } head.push({value: 'UTF-8'}); sel = cmdEdit.getEncSelect(head); sel.on('change', function() { file.encoding = sel.val(); fm.cache(file, 'change'); preview.trigger({ type: ql.evUpdate, file: file, forceUpdate: true }); }); encSelect = jQuery('
').append(sel); ql.window.append(encSelect); } loading.remove(); }); } }); } ]; PK Z+$jw w js/elFinder.history.jsnuW+A/** * @class elFinder.history * Store visited folders * and provide "back" and "forward" methods * * @author Dmitry (dio) Levashov */ elFinder.prototype.history = function(fm) { "use strict"; var self = this, /** * Update history on "open" event? * * @type Boolean */ update = true, /** * Directories hashes storage * * @type Array */ history = [], /** * Current directory index in history * * @type Number */ current, /** * Clear history * * @return void */ reset = function() { history = [fm.cwd().hash]; current = 0; update = true; }, /** * Browser native history object */ nativeHistory = (fm.options.useBrowserHistory && window.history && window.history.pushState)? window.history : null, /** * Open prev/next folder * * @Boolen open next folder? * @return jQuery.Deferred */ go = function(fwd) { if ((fwd && self.canForward()) || (!fwd && self.canBack())) { update = false; return fm.exec('open', history[fwd ? ++current : --current]).fail(reset); } return jQuery.Deferred().reject(); }, /** * Sets the native history. * * @param String thash target hash */ setNativeHistory = function(thash) { if (nativeHistory && (! nativeHistory.state || nativeHistory.state.thash !== thash)) { nativeHistory.pushState({thash: thash}, null, location.pathname + location.search + (thash? '#elf_' + thash : '')); } }; /** * Return true if there is previous visited directories * * @return Boolen */ this.canBack = function() { return current > 0; }; /** * Return true if can go forward * * @return Boolen */ this.canForward = function() { return current < history.length - 1; }; /** * Go back * * @return void */ this.back = go; /** * Go forward * * @return void */ this.forward = function() { return go(true); }; // bind to elfinder events fm.bind('init', function() { if (nativeHistory && !nativeHistory.state) { setNativeHistory(fm.startDir()); } }) .open(function() { var l = history.length, cwd = fm.cwd().hash; if (update) { current >= 0 && l > current + 1 && history.splice(current+1); history[history.length-1] != cwd && history.push(cwd); current = history.length - 1; } update = true; setNativeHistory(cwd); }) .reload(fm.options.reloadClearHistory && reset); }; PK Zkkjs/elFinder.mimetypes.jsnuW+AelFinder.prototype.mimeTypes = {"application\/x-executable":"exe","application\/x-jar":"jar","application\/x-gzip":"gz","application\/x-bzip2":"tbz","application\/x-rar":"rar","text\/x-php":"php","text\/javascript":"js","application\/rtfd":"rtfd","text\/x-python":"py","text\/x-ruby":"rb","text\/x-shellscript":"sh","text\/x-perl":"pl","text\/xml":"xml","text\/x-csrc":"c","text\/x-chdr":"h","text\/x-c++src":"cpp","text\/x-c++hdr":"hh","text\/x-markdown":"md","text\/x-yaml":"yml","image\/x-ms-bmp":"bmp","image\/x-targa":"tga","image\/xbm":"xbm","image\/pxm":"pxm","audio\/wav":"wav","video\/x-dv":"dv","video\/x-ms-wmv":"wm","video\/ogg":"ogm","video\/MP2T":"m2ts","application\/x-mpegURL":"m3u8","application\/dash+xml":"mpd","application\/andrew-inset":"ez","application\/applixware":"aw","application\/atom+xml":"atom","application\/atomcat+xml":"atomcat","application\/atomsvc+xml":"atomsvc","application\/ccxml+xml":"ccxml","application\/cdmi-capability":"cdmia","application\/cdmi-container":"cdmic","application\/cdmi-domain":"cdmid","application\/cdmi-object":"cdmio","application\/cdmi-queue":"cdmiq","application\/cu-seeme":"cu","application\/davmount+xml":"davmount","application\/docbook+xml":"dbk","application\/dssc+der":"dssc","application\/dssc+xml":"xdssc","application\/ecmascript":"ecma","application\/emma+xml":"emma","application\/epub+zip":"epub","application\/exi":"exi","application\/font-tdpfr":"pfr","application\/gml+xml":"gml","application\/gpx+xml":"gpx","application\/gxf":"gxf","application\/hyperstudio":"stk","application\/inkml+xml":"ink","application\/ipfix":"ipfix","application\/java-serialized-object":"ser","application\/java-vm":"class","application\/json":"json","application\/jsonml+json":"jsonml","application\/lost+xml":"lostxml","application\/mac-binhex40":"hqx","application\/mac-compactpro":"cpt","application\/mads+xml":"mads","application\/marc":"mrc","application\/marcxml+xml":"mrcx","application\/mathematica":"ma","application\/mathml+xml":"mathml","application\/mbox":"mbox","application\/mediaservercontrol+xml":"mscml","application\/metalink+xml":"metalink","application\/metalink4+xml":"meta4","application\/mets+xml":"mets","application\/mods+xml":"mods","application\/mp21":"m21","application\/mp4":"mp4s","application\/msword":"doc","application\/mxf":"mxf","application\/octet-stream":"bin","application\/oda":"oda","application\/oebps-package+xml":"opf","application\/ogg":"ogx","application\/omdoc+xml":"omdoc","application\/onenote":"onetoc","application\/oxps":"oxps","application\/patch-ops-error+xml":"xer","application\/pdf":"pdf","application\/pgp-encrypted":"pgp","application\/pgp-signature":"asc","application\/pics-rules":"prf","application\/pkcs10":"p10","application\/pkcs7-mime":"p7m","application\/pkcs7-signature":"p7s","application\/pkcs8":"p8","application\/pkix-attr-cert":"ac","application\/pkix-cert":"cer","application\/pkix-crl":"crl","application\/pkix-pkipath":"pkipath","application\/pkixcmp":"pki","application\/pls+xml":"pls","application\/postscript":"ai","application\/prs.cww":"cww","application\/pskc+xml":"pskcxml","application\/rdf+xml":"rdf","application\/reginfo+xml":"rif","application\/relax-ng-compact-syntax":"rnc","application\/resource-lists+xml":"rl","application\/resource-lists-diff+xml":"rld","application\/rls-services+xml":"rs","application\/rpki-ghostbusters":"gbr","application\/rpki-manifest":"mft","application\/rpki-roa":"roa","application\/rsd+xml":"rsd","application\/rss+xml":"rss","application\/rtf":"rtf","application\/sbml+xml":"sbml","application\/scvp-cv-request":"scq","application\/scvp-cv-response":"scs","application\/scvp-vp-request":"spq","application\/scvp-vp-response":"spp","application\/sdp":"sdp","application\/set-payment-initiation":"setpay","application\/set-registration-initiation":"setreg","application\/shf+xml":"shf","application\/smil+xml":"smi","application\/sparql-query":"rq","application\/sparql-results+xml":"srx","application\/srgs":"gram","application\/srgs+xml":"grxml","application\/sru+xml":"sru","application\/ssdl+xml":"ssdl","application\/ssml+xml":"ssml","application\/tei+xml":"tei","application\/thraud+xml":"tfi","application\/timestamped-data":"tsd","application\/vnd.3gpp.pic-bw-large":"plb","application\/vnd.3gpp.pic-bw-small":"psb","application\/vnd.3gpp.pic-bw-var":"pvb","application\/vnd.3gpp2.tcap":"tcap","application\/vnd.3m.post-it-notes":"pwn","application\/vnd.accpac.simply.aso":"aso","application\/vnd.accpac.simply.imp":"imp","application\/vnd.acucobol":"acu","application\/vnd.acucorp":"atc","application\/vnd.adobe.air-application-installer-package+zip":"air","application\/vnd.adobe.formscentral.fcdt":"fcdt","application\/vnd.adobe.fxp":"fxp","application\/vnd.adobe.xdp+xml":"xdp","application\/vnd.adobe.xfdf":"xfdf","application\/vnd.ahead.space":"ahead","application\/vnd.airzip.filesecure.azf":"azf","application\/vnd.airzip.filesecure.azs":"azs","application\/vnd.amazon.ebook":"azw","application\/vnd.americandynamics.acc":"acc","application\/vnd.amiga.ami":"ami","application\/vnd.android.package-archive":"apk","application\/vnd.anser-web-certificate-issue-initiation":"cii","application\/vnd.anser-web-funds-transfer-initiation":"fti","application\/vnd.antix.game-component":"atx","application\/vnd.apple.installer+xml":"mpkg","application\/vnd.aristanetworks.swi":"swi","application\/vnd.astraea-software.iota":"iota","application\/vnd.audiograph":"aep","application\/vnd.blueice.multipass":"mpm","application\/vnd.bmi":"bmi","application\/vnd.businessobjects":"rep","application\/vnd.chemdraw+xml":"cdxml","application\/vnd.chipnuts.karaoke-mmd":"mmd","application\/vnd.cinderella":"cdy","application\/vnd.claymore":"cla","application\/vnd.cloanto.rp9":"rp9","application\/vnd.clonk.c4group":"c4g","application\/vnd.cluetrust.cartomobile-config":"c11amc","application\/vnd.cluetrust.cartomobile-config-pkg":"c11amz","application\/vnd.commonspace":"csp","application\/vnd.contact.cmsg":"cdbcmsg","application\/vnd.cosmocaller":"cmc","application\/vnd.crick.clicker":"clkx","application\/vnd.crick.clicker.keyboard":"clkk","application\/vnd.crick.clicker.palette":"clkp","application\/vnd.crick.clicker.template":"clkt","application\/vnd.crick.clicker.wordbank":"clkw","application\/vnd.criticaltools.wbs+xml":"wbs","application\/vnd.ctc-posml":"pml","application\/vnd.cups-ppd":"ppd","application\/vnd.curl.car":"car","application\/vnd.curl.pcurl":"pcurl","application\/vnd.dart":"dart","application\/vnd.data-vision.rdz":"rdz","application\/vnd.dece.data":"uvf","application\/vnd.dece.ttml+xml":"uvt","application\/vnd.dece.unspecified":"uvx","application\/vnd.dece.zip":"uvz","application\/vnd.denovo.fcselayout-link":"fe_launch","application\/vnd.dna":"dna","application\/vnd.dolby.mlp":"mlp","application\/vnd.dpgraph":"dpg","application\/vnd.dreamfactory":"dfac","application\/vnd.ds-keypoint":"kpxx","application\/vnd.dvb.ait":"ait","application\/vnd.dvb.service":"svc","application\/vnd.dynageo":"geo","application\/vnd.ecowin.chart":"mag","application\/vnd.enliven":"nml","application\/vnd.epson.esf":"esf","application\/vnd.epson.msf":"msf","application\/vnd.epson.quickanime":"qam","application\/vnd.epson.salt":"slt","application\/vnd.epson.ssf":"ssf","application\/vnd.eszigno3+xml":"es3","application\/vnd.ezpix-album":"ez2","application\/vnd.ezpix-package":"ez3","application\/vnd.fdf":"fdf","application\/vnd.fdsn.mseed":"mseed","application\/vnd.fdsn.seed":"seed","application\/vnd.flographit":"gph","application\/vnd.fluxtime.clip":"ftc","application\/vnd.framemaker":"fm","application\/vnd.frogans.fnc":"fnc","application\/vnd.frogans.ltf":"ltf","application\/vnd.fsc.weblaunch":"fsc","application\/vnd.fujitsu.oasys":"oas","application\/vnd.fujitsu.oasys2":"oa2","application\/vnd.fujitsu.oasys3":"oa3","application\/vnd.fujitsu.oasysgp":"fg5","application\/vnd.fujitsu.oasysprs":"bh2","application\/vnd.fujixerox.ddd":"ddd","application\/vnd.fujixerox.docuworks":"xdw","application\/vnd.fujixerox.docuworks.binder":"xbd","application\/vnd.fuzzysheet":"fzs","application\/vnd.genomatix.tuxedo":"txd","application\/vnd.geogebra.file":"ggb","application\/vnd.geogebra.tool":"ggt","application\/vnd.geometry-explorer":"gex","application\/vnd.geonext":"gxt","application\/vnd.geoplan":"g2w","application\/vnd.geospace":"g3w","application\/vnd.gmx":"gmx","application\/vnd.google-earth.kml+xml":"kml","application\/vnd.google-earth.kmz":"kmz","application\/vnd.grafeq":"gqf","application\/vnd.groove-account":"gac","application\/vnd.groove-help":"ghf","application\/vnd.groove-identity-message":"gim","application\/vnd.groove-injector":"grv","application\/vnd.groove-tool-message":"gtm","application\/vnd.groove-tool-template":"tpl","application\/vnd.groove-vcard":"vcg","application\/vnd.hal+xml":"hal","application\/vnd.handheld-entertainment+xml":"zmm","application\/vnd.hbci":"hbci","application\/vnd.hhe.lesson-player":"les","application\/vnd.hp-hpgl":"hpgl","application\/vnd.hp-hpid":"hpid","application\/vnd.hp-hps":"hps","application\/vnd.hp-jlyt":"jlt","application\/vnd.hp-pcl":"pcl","application\/vnd.hp-pclxl":"pclxl","application\/vnd.hydrostatix.sof-data":"sfd-hdstx","application\/vnd.ibm.minipay":"mpy","application\/vnd.ibm.modcap":"afp","application\/vnd.ibm.rights-management":"irm","application\/vnd.ibm.secure-container":"sc","application\/vnd.iccprofile":"icc","application\/vnd.igloader":"igl","application\/vnd.immervision-ivp":"ivp","application\/vnd.immervision-ivu":"ivu","application\/vnd.insors.igm":"igm","application\/vnd.intercon.formnet":"xpw","application\/vnd.intergeo":"i2g","application\/vnd.intu.qbo":"qbo","application\/vnd.intu.qfx":"qfx","application\/vnd.ipunplugged.rcprofile":"rcprofile","application\/vnd.irepository.package+xml":"irp","application\/vnd.is-xpr":"xpr","application\/vnd.isac.fcs":"fcs","application\/vnd.jam":"jam","application\/vnd.jcp.javame.midlet-rms":"rms","application\/vnd.jisp":"jisp","application\/vnd.joost.joda-archive":"joda","application\/vnd.kahootz":"ktz","application\/vnd.kde.karbon":"karbon","application\/vnd.kde.kchart":"chrt","application\/vnd.kde.kformula":"kfo","application\/vnd.kde.kivio":"flw","application\/vnd.kde.kontour":"kon","application\/vnd.kde.kpresenter":"kpr","application\/vnd.kde.kspread":"ksp","application\/vnd.kde.kword":"kwd","application\/vnd.kenameaapp":"htke","application\/vnd.kidspiration":"kia","application\/vnd.kinar":"kne","application\/vnd.koan":"skp","application\/vnd.kodak-descriptor":"sse","application\/vnd.las.las+xml":"lasxml","application\/vnd.llamagraphics.life-balance.desktop":"lbd","application\/vnd.llamagraphics.life-balance.exchange+xml":"lbe","application\/vnd.lotus-1-2-3":123,"application\/vnd.lotus-approach":"apr","application\/vnd.lotus-freelance":"pre","application\/vnd.lotus-notes":"nsf","application\/vnd.lotus-organizer":"org","application\/vnd.lotus-screencam":"scm","application\/vnd.lotus-wordpro":"lwp","application\/vnd.macports.portpkg":"portpkg","application\/vnd.mcd":"mcd","application\/vnd.medcalcdata":"mc1","application\/vnd.mediastation.cdkey":"cdkey","application\/vnd.mfer":"mwf","application\/vnd.mfmp":"mfm","application\/vnd.micrografx.flo":"flo","application\/vnd.micrografx.igx":"igx","application\/vnd.mif":"mif","application\/vnd.mobius.daf":"daf","application\/vnd.mobius.dis":"dis","application\/vnd.mobius.mbk":"mbk","application\/vnd.mobius.mqy":"mqy","application\/vnd.mobius.msl":"msl","application\/vnd.mobius.plc":"plc","application\/vnd.mobius.txf":"txf","application\/vnd.mophun.application":"mpn","application\/vnd.mophun.certificate":"mpc","application\/vnd.mozilla.xul+xml":"xul","application\/vnd.ms-artgalry":"cil","application\/vnd.ms-cab-compressed":"cab","application\/vnd.ms-excel":"xls","application\/vnd.ms-excel.addin.macroenabled.12":"xlam","application\/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb","application\/vnd.ms-excel.sheet.macroenabled.12":"xlsm","application\/vnd.ms-excel.template.macroenabled.12":"xltm","application\/vnd.ms-fontobject":"eot","application\/vnd.ms-htmlhelp":"chm","application\/vnd.ms-ims":"ims","application\/vnd.ms-lrm":"lrm","application\/vnd.ms-officetheme":"thmx","application\/vnd.ms-pki.seccat":"cat","application\/vnd.ms-pki.stl":"stl","application\/vnd.ms-powerpoint":"ppt","application\/vnd.ms-powerpoint.addin.macroenabled.12":"ppam","application\/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm","application\/vnd.ms-powerpoint.slide.macroenabled.12":"sldm","application\/vnd.ms-powerpoint.slideshow.macroenabled.12":"ppsm","application\/vnd.ms-powerpoint.template.macroenabled.12":"potm","application\/vnd.ms-project":"mpp","application\/vnd.ms-word.document.macroenabled.12":"docm","application\/vnd.ms-word.template.macroenabled.12":"dotm","application\/vnd.ms-works":"wps","application\/vnd.ms-wpl":"wpl","application\/vnd.ms-xpsdocument":"xps","application\/vnd.mseq":"mseq","application\/vnd.musician":"mus","application\/vnd.muvee.style":"msty","application\/vnd.mynfc":"taglet","application\/vnd.neurolanguage.nlu":"nlu","application\/vnd.nitf":"ntf","application\/vnd.noblenet-directory":"nnd","application\/vnd.noblenet-sealer":"nns","application\/vnd.noblenet-web":"nnw","application\/vnd.nokia.n-gage.data":"ngdat","application\/vnd.nokia.n-gage.symbian.install":"n-gage","application\/vnd.nokia.radio-preset":"rpst","application\/vnd.nokia.radio-presets":"rpss","application\/vnd.novadigm.edm":"edm","application\/vnd.novadigm.edx":"edx","application\/vnd.novadigm.ext":"ext","application\/vnd.oasis.opendocument.chart":"odc","application\/vnd.oasis.opendocument.chart-template":"otc","application\/vnd.oasis.opendocument.database":"odb","application\/vnd.oasis.opendocument.formula":"odf","application\/vnd.oasis.opendocument.formula-template":"odft","application\/vnd.oasis.opendocument.graphics":"odg","application\/vnd.oasis.opendocument.graphics-template":"otg","application\/vnd.oasis.opendocument.image":"odi","application\/vnd.oasis.opendocument.image-template":"oti","application\/vnd.oasis.opendocument.presentation":"odp","application\/vnd.oasis.opendocument.presentation-template":"otp","application\/vnd.oasis.opendocument.spreadsheet":"ods","application\/vnd.oasis.opendocument.spreadsheet-template":"ots","application\/vnd.oasis.opendocument.text":"odt","application\/vnd.oasis.opendocument.text-master":"odm","application\/vnd.oasis.opendocument.text-template":"ott","application\/vnd.oasis.opendocument.text-web":"oth","application\/vnd.olpc-sugar":"xo","application\/vnd.oma.dd2+xml":"dd2","application\/vnd.openofficeorg.extension":"oxt","application\/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","application\/vnd.openxmlformats-officedocument.presentationml.slide":"sldx","application\/vnd.openxmlformats-officedocument.presentationml.slideshow":"ppsx","application\/vnd.openxmlformats-officedocument.presentationml.template":"potx","application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application\/vnd.openxmlformats-officedocument.spreadsheetml.template":"xltx","application\/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application\/vnd.openxmlformats-officedocument.wordprocessingml.template":"dotx","application\/vnd.osgeo.mapguide.package":"mgp","application\/vnd.osgi.dp":"dp","application\/vnd.osgi.subsystem":"esa","application\/vnd.palm":"pdb","application\/vnd.pawaafile":"paw","application\/vnd.pg.format":"str","application\/vnd.pg.osasli":"ei6","application\/vnd.picsel":"efif","application\/vnd.pmi.widget":"wg","application\/vnd.pocketlearn":"plf","application\/vnd.powerbuilder6":"pbd","application\/vnd.previewsystems.box":"box","application\/vnd.proteus.magazine":"mgz","application\/vnd.publishare-delta-tree":"qps","application\/vnd.pvi.ptid1":"ptid","application\/vnd.quark.quarkxpress":"qxd","application\/vnd.realvnc.bed":"bed","application\/vnd.recordare.musicxml":"mxl","application\/vnd.recordare.musicxml+xml":"musicxml","application\/vnd.rig.cryptonote":"cryptonote","application\/vnd.rim.cod":"cod","application\/vnd.rn-realmedia":"rm","application\/vnd.rn-realmedia-vbr":"rmvb","application\/vnd.route66.link66+xml":"link66","application\/vnd.sailingtracker.track":"st","application\/vnd.seemail":"see","application\/vnd.sema":"sema","application\/vnd.semd":"semd","application\/vnd.semf":"semf","application\/vnd.shana.informed.formdata":"ifm","application\/vnd.shana.informed.formtemplate":"itp","application\/vnd.shana.informed.interchange":"iif","application\/vnd.shana.informed.package":"ipk","application\/vnd.simtech-mindmapper":"twd","application\/vnd.smaf":"mmf","application\/vnd.smart.teacher":"teacher","application\/vnd.solent.sdkm+xml":"sdkm","application\/vnd.spotfire.dxp":"dxp","application\/vnd.spotfire.sfs":"sfs","application\/vnd.stardivision.calc":"sdc","application\/vnd.stardivision.draw":"sda","application\/vnd.stardivision.impress":"sdd","application\/vnd.stardivision.math":"smf","application\/vnd.stardivision.writer":"sdw","application\/vnd.stardivision.writer-global":"sgl","application\/vnd.stepmania.package":"smzip","application\/vnd.stepmania.stepchart":"sm","application\/vnd.sun.xml.calc":"sxc","application\/vnd.sun.xml.calc.template":"stc","application\/vnd.sun.xml.draw":"sxd","application\/vnd.sun.xml.draw.template":"std","application\/vnd.sun.xml.impress":"sxi","application\/vnd.sun.xml.impress.template":"sti","application\/vnd.sun.xml.math":"sxm","application\/vnd.sun.xml.writer":"sxw","application\/vnd.sun.xml.writer.global":"sxg","application\/vnd.sun.xml.writer.template":"stw","application\/vnd.sus-calendar":"sus","application\/vnd.svd":"svd","application\/vnd.symbian.install":"sis","application\/vnd.syncml+xml":"xsm","application\/vnd.syncml.dm+wbxml":"bdm","application\/vnd.syncml.dm+xml":"xdm","application\/vnd.tao.intent-module-archive":"tao","application\/vnd.tcpdump.pcap":"pcap","application\/vnd.tmobile-livetv":"tmo","application\/vnd.trid.tpt":"tpt","application\/vnd.triscape.mxs":"mxs","application\/vnd.trueapp":"tra","application\/vnd.ufdl":"ufd","application\/vnd.uiq.theme":"utz","application\/vnd.umajin":"umj","application\/vnd.unity":"unityweb","application\/vnd.uoml+xml":"uoml","application\/vnd.vcx":"vcx","application\/vnd.visio":"vsd","application\/vnd.visionary":"vis","application\/vnd.vsf":"vsf","application\/vnd.wap.wbxml":"wbxml","application\/vnd.wap.wmlc":"wmlc","application\/vnd.wap.wmlscriptc":"wmlsc","application\/vnd.webturbo":"wtb","application\/vnd.wolfram.player":"nbp","application\/vnd.wordperfect":"wpd","application\/vnd.wqd":"wqd","application\/vnd.wt.stf":"stf","application\/vnd.xara":"xar","application\/vnd.xfdl":"xfdl","application\/vnd.yamaha.hv-dic":"hvd","application\/vnd.yamaha.hv-script":"hvs","application\/vnd.yamaha.hv-voice":"hvp","application\/vnd.yamaha.openscoreformat":"osf","application\/vnd.yamaha.openscoreformat.osfpvg+xml":"osfpvg","application\/vnd.yamaha.smaf-audio":"saf","application\/vnd.yamaha.smaf-phrase":"spf","application\/vnd.yellowriver-custom-menu":"cmp","application\/vnd.zul":"zir","application\/vnd.zzazz.deck+xml":"zaz","application\/voicexml+xml":"vxml","application\/widget":"wgt","application\/winhlp":"hlp","application\/wsdl+xml":"wsdl","application\/wspolicy+xml":"wspolicy","application\/x-7z-compressed":"7z","application\/x-abiword":"abw","application\/x-ace-compressed":"ace","application\/x-apple-diskimage":"dmg","application\/x-authorware-bin":"aab","application\/x-authorware-map":"aam","application\/x-authorware-seg":"aas","application\/x-bcpio":"bcpio","application\/x-bittorrent":"torrent","application\/x-blorb":"blb","application\/x-bzip":"bz","application\/x-cbr":"cbr","application\/x-cdlink":"vcd","application\/x-cfs-compressed":"cfs","application\/x-chat":"chat","application\/x-chess-pgn":"pgn","application\/x-conference":"nsc","application\/x-cpio":"cpio","application\/x-csh":"csh","application\/x-debian-package":"deb","application\/x-dgc-compressed":"dgc","application\/x-director":"dir","application\/x-doom":"wad","application\/x-dtbncx+xml":"ncx","application\/x-dtbook+xml":"dtb","application\/x-dtbresource+xml":"res","application\/x-dvi":"dvi","application\/x-envoy":"evy","application\/x-eva":"eva","application\/x-font-bdf":"bdf","application\/x-font-ghostscript":"gsf","application\/x-font-linux-psf":"psf","application\/x-font-pcf":"pcf","application\/x-font-snf":"snf","application\/x-font-type1":"pfa","application\/x-freearc":"arc","application\/x-futuresplash":"spl","application\/x-gca-compressed":"gca","application\/x-glulx":"ulx","application\/x-gnumeric":"gnumeric","application\/x-gramps-xml":"gramps","application\/x-gtar":"gtar","application\/x-hdf":"hdf","application\/x-install-instructions":"install","application\/x-iso9660-image":"iso","application\/x-java-jnlp-file":"jnlp","application\/x-latex":"latex","application\/x-lzh-compressed":"lzh","application\/x-mie":"mie","application\/x-mobipocket-ebook":"prc","application\/x-ms-application":"application","application\/x-ms-shortcut":"lnk","application\/x-ms-wmd":"wmd","application\/x-ms-wmz":"wmz","application\/x-ms-xbap":"xbap","application\/x-msaccess":"mdb","application\/x-msbinder":"obd","application\/x-mscardfile":"crd","application\/x-msclip":"clp","application\/x-msdownload":"dll","application\/x-msmediaview":"mvb","application\/x-msmetafile":"wmf","application\/x-msmoney":"mny","application\/x-mspublisher":"pub","application\/x-msschedule":"scd","application\/x-msterminal":"trm","application\/x-mswrite":"wri","application\/x-netcdf":"nc","application\/x-nzb":"nzb","application\/x-pkcs12":"p12","application\/x-pkcs7-certificates":"p7b","application\/x-pkcs7-certreqresp":"p7r","application\/x-research-info-systems":"ris","application\/x-shar":"shar","application\/x-shockwave-flash":"swf","application\/x-silverlight-app":"xap","application\/x-sql":"sql","application\/x-stuffit":"sit","application\/x-stuffitx":"sitx","application\/x-subrip":"srt","application\/x-sv4cpio":"sv4cpio","application\/x-sv4crc":"sv4crc","application\/x-t3vm-image":"t3","application\/x-tads":"gam","application\/x-tar":"tar","application\/x-tcl":"tcl","application\/x-tex":"tex","application\/x-tex-tfm":"tfm","application\/x-texinfo":"texinfo","application\/x-tgif":"obj","application\/x-ustar":"ustar","application\/x-wais-source":"src","application\/x-x509-ca-cert":"der","application\/x-xfig":"fig","application\/x-xliff+xml":"xlf","application\/x-xpinstall":"xpi","application\/x-xz":"xz","application\/x-zmachine":"z1","application\/xaml+xml":"xaml","application\/xcap-diff+xml":"xdf","application\/xenc+xml":"xenc","application\/xhtml+xml":"xhtml","application\/xml":"xsl","application\/xml-dtd":"dtd","application\/xop+xml":"xop","application\/xproc+xml":"xpl","application\/xslt+xml":"xslt","application\/xspf+xml":"xspf","application\/xv+xml":"mxml","application\/yang":"yang","application\/yin+xml":"yin","application\/zip":"zip","audio\/adpcm":"adp","audio\/basic":"au","audio\/midi":"mid","audio\/mp4":"m4a","audio\/mpeg":"mpga","audio\/ogg":"oga","audio\/s3m":"s3m","audio\/silk":"sil","audio\/vnd.dece.audio":"uva","audio\/vnd.digital-winds":"eol","audio\/vnd.dra":"dra","audio\/vnd.dts":"dts","audio\/vnd.dts.hd":"dtshd","audio\/vnd.lucent.voice":"lvp","audio\/vnd.ms-playready.media.pya":"pya","audio\/vnd.nuera.ecelp4800":"ecelp4800","audio\/vnd.nuera.ecelp7470":"ecelp7470","audio\/vnd.nuera.ecelp9600":"ecelp9600","audio\/vnd.rip":"rip","audio\/webm":"weba","audio\/x-aac":"aac","audio\/x-aiff":"aif","audio\/x-caf":"caf","audio\/x-flac":"flac","audio\/x-matroska":"mka","audio\/x-mpegurl":"m3u","audio\/x-ms-wax":"wax","audio\/x-ms-wma":"wma","audio\/x-pn-realaudio":"ram","audio\/x-pn-realaudio-plugin":"rmp","audio\/xm":"xm","chemical\/x-cdx":"cdx","chemical\/x-cif":"cif","chemical\/x-cmdf":"cmdf","chemical\/x-cml":"cml","chemical\/x-csml":"csml","chemical\/x-xyz":"xyz","font\/collection":"ttc","font\/otf":"otf","font\/ttf":"ttf","font\/woff":"woff","font\/woff2":"woff2","image\/cgm":"cgm","image\/g3fax":"g3","image\/gif":"gif","image\/ief":"ief","image\/jpeg":"jpeg","image\/ktx":"ktx","image\/png":"png","image\/prs.btif":"btif","image\/sgi":"sgi","image\/svg+xml":"svg","image\/tiff":"tiff","image\/vnd.adobe.photoshop":"psd","image\/vnd.dece.graphic":"uvi","image\/vnd.djvu":"djvu","image\/vnd.dvb.subtitle":"sub","image\/vnd.dwg":"dwg","image\/vnd.dxf":"dxf","image\/vnd.fastbidsheet":"fbs","image\/vnd.fpx":"fpx","image\/vnd.fst":"fst","image\/vnd.fujixerox.edmics-mmr":"mmr","image\/vnd.fujixerox.edmics-rlc":"rlc","image\/vnd.ms-modi":"mdi","image\/vnd.ms-photo":"wdp","image\/vnd.net-fpx":"npx","image\/vnd.wap.wbmp":"wbmp","image\/vnd.xiff":"xif","image\/webp":"webp","image\/x-3ds":"3ds","image\/x-cmu-raster":"ras","image\/x-cmx":"cmx","image\/x-freehand":"fh","image\/x-icon":"ico","image\/x-mrsid-image":"sid","image\/x-pcx":"pcx","image\/x-pict":"pic","image\/x-portable-anymap":"pnm","image\/x-portable-bitmap":"pbm","image\/x-portable-graymap":"pgm","image\/x-portable-pixmap":"ppm","image\/x-rgb":"rgb","image\/x-xpixmap":"xpm","image\/x-xwindowdump":"xwd","message\/rfc822":"eml","model\/iges":"igs","model\/mesh":"msh","model\/vnd.collada+xml":"dae","model\/vnd.dwf":"dwf","model\/vnd.gdl":"gdl","model\/vnd.gtw":"gtw","model\/vnd.vtu":"vtu","model\/vrml":"wrl","model\/x3d+binary":"x3db","model\/x3d+vrml":"x3dv","model\/x3d+xml":"x3d","text\/cache-manifest":"appcache","text\/calendar":"ics","text\/css":"css","text\/csv":"csv","text\/html":"html","text\/n3":"n3","text\/plain":"txt","text\/prs.lines.tag":"dsc","text\/richtext":"rtx","text\/sgml":"sgml","text\/tab-separated-values":"tsv","text\/troff":"t","text\/turtle":"ttl","text\/uri-list":"uri","text\/vcard":"vcard","text\/vnd.curl":"curl","text\/vnd.curl.dcurl":"dcurl","text\/vnd.curl.mcurl":"mcurl","text\/vnd.curl.scurl":"scurl","text\/vnd.fly":"fly","text\/vnd.fmi.flexstor":"flx","text\/vnd.graphviz":"gv","text\/vnd.in3d.3dml":"3dml","text\/vnd.in3d.spot":"spot","text\/vnd.sun.j2me.app-descriptor":"jad","text\/vnd.wap.wml":"wml","text\/vnd.wap.wmlscript":"wmls","text\/x-asm":"s","text\/x-c":"cc","text\/x-fortran":"f","text\/x-java-source":"java","text\/x-nfo":"nfo","text\/x-opml":"opml","text\/x-pascal":"p","text\/x-setext":"etx","text\/x-sfv":"sfv","text\/x-uuencode":"uu","text\/x-vcalendar":"vcs","text\/x-vcard":"vcf","video\/3gpp":"3gp","video\/3gpp2":"3g2","video\/h261":"h261","video\/h263":"h263","video\/h264":"h264","video\/jpeg":"jpgv","video\/jpm":"jpm","video\/mj2":"mj2","video\/mp4":"mp4","video\/mpeg":"mpeg","video\/quicktime":"qt","video\/vnd.dece.hd":"uvh","video\/vnd.dece.mobile":"uvm","video\/vnd.dece.pd":"uvp","video\/vnd.dece.sd":"uvs","video\/vnd.dece.video":"uvv","video\/vnd.dvb.file":"dvb","video\/vnd.fvt":"fvt","video\/vnd.mpegurl":"mxu","video\/vnd.ms-playready.media.pyv":"pyv","video\/vnd.uvvu.mp4":"uvu","video\/vnd.vivo":"viv","video\/webm":"webm","video\/x-f4v":"f4v","video\/x-fli":"fli","video\/x-flv":"flv","video\/x-m4v":"m4v","video\/x-matroska":"mkv","video\/x-mng":"mng","video\/x-ms-asf":"asf","video\/x-ms-vob":"vob","video\/x-ms-wmx":"wmx","video\/x-ms-wvx":"wvx","video\/x-msvideo":"avi","video\/x-sgi-movie":"movie","video\/x-smv":"smv","x-conference\/x-cooltalk":"ice","text\/x-sql":"sql","image\/x-pixlr-data":"pxd","image\/x-adobe-dng":"dng","image\/x-sketch":"sketch","image\/x-xcf":"xcf","audio\/amr":"amr","image\/vnd-ms.dds":"dds","application\/plt":"plt","application\/sat":"sat","application\/step":"step","text\/x-httpd-cgi":"cgi","text\/x-asap":"asp","text\/x-jsp":"jsp"};PK ZXCjs/i18n/elfinder.el.jsnuW+A/** * Ελληνικά translation * @author yawd * @version 2022-02-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.el = { translator : 'yawd <ingo@yawd.eu>', language : 'Ελληνικά', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 28.02.2022 15:23 fancyDateFormat : '$1 H:i', // will show like: Σήμερα 15:23 nonameDateFormat : 'ymd-His', // noname upload will show like: 220228-152317 messages : { 'getShareText' : 'Μερίδιο', 'Editor ': 'Επεξεργαστής κώδικα', /********************************** errors **********************************/ 'error' : 'Πρόβλημα', 'errUnknown' : 'Άγνωστο πρόβλημα.', 'errUnknownCmd' : 'Άγνωστη εντολή.', 'errJqui' : 'Μη έγκυρη ρύθμιση του jQuery UI. Τα components "selectable", "draggable" και "droppable" πρέπει να περιληφούν.', 'errNode' : 'το elFinder χρειάζεται να έχει δημιουργηθεί το DOM Element.', 'errURL' : 'Μη έγκυρες ρυθμίσεις για το elFinder! η επιλογή URL δεν έχει οριστεί.', 'errAccess' : 'Απαγορεύεται η πρόσβαση.', 'errConnect' : 'Δεν ήταν δυνατή η σύνδεση με το backend.', 'errAbort' : 'Η σύνδεση εγκαταλείφθηκε.', 'errTimeout' : 'Η σύνδεση έληξε.', 'errNotFound' : 'Δε βρέθηκε το backend.', 'errResponse' : 'Μή έγκυρη απάντηση από το backend.', 'errConf' : 'Μη έγκυρες ρυθμίσεις για το backend.', 'errJSON' : 'Το PHP JSON module δεν είναι εγκατεστημένο.', 'errNoVolumes' : 'Δεν βρέθηκαν αναγνώσιμα volumes.', 'errCmdParams' : 'Μη έγκυρες παράμετροι για την εντολή "$1".', 'errDataNotJSON' : 'Τα δεδομένα δεν είναι JSON.', 'errDataEmpty' : 'Τα δεδομένα είναι άδεια.', 'errCmdReq' : 'Το Backend request χρειάζεται όνομα εντολής.', 'errOpen' : 'Δεν ήταν δυνατό να ανοίξει το "$1".', 'errNotFolder' : 'Το αντικείμενο δεν είναι φάκελος.', 'errNotFile' : 'Το αντικείμενο δεν είναι αρχείο.', 'errRead' : 'Δεν ήταν δυνατόν να διαβαστεί το "$1".', 'errWrite' : 'Δεν ήταν δυνατή η εγγραφή στο "$1".', 'errPerm' : 'Απαγορεύεται η πρόσβαση.', 'errLocked' : '"$1" είναι κλειδωμένο και δεν μπορεί να μετονομαστεί, μετακινηθεί ή διαγραφεί.', 'errExists' : 'Το αρχείο με όνομα "$1" υπάρχει ήδη.', 'errInvName' : 'Μη έγκυρο όνομα αρχείου.', 'errInvDirname' : 'Μη έγκυρο όνομα φακέλου.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Ο φάκελος δε βρέθηκε.', 'errFileNotFound' : 'Το αρχείο δε βρέθηκε.', 'errTrgFolderNotFound' : 'Ο φάκελος "$1" δε βρέθηκε.', 'errPopup' : 'Το πρόγραμμα πλήγησης εμπόδισε το άνοιγμα αναδυόμενου παραθύρου. Για ανοίξετε το αρχείο ενεργοποιήστε το στις επιλογές του περιηγητή.', 'errMkdir' : 'Η δυμιουργία του φακέλου "$1" δεν ήταν δυνατή.', 'errMkfile' : 'Η δημιουργία του αρχείου "$1" δεν ήταν δυνατή.', 'errRename' : 'Η μετονομασία του αρχείου "$1" δεν ήταν δυνατή.', 'errCopyFrom' : 'Δεν επιτρέπεται η αντιγραφή αρχείων από το volume "$1".', 'errCopyTo' : 'Δεν επιτρέπεται η αντιγραφή αρχείων στο volume "$1".', 'errMkOutLink' : 'Δεν είναι δυνατή η δημιουργία συνδέσμου προς έξω από τη ρίζα του τόμου.', // from v2.1 added 03.10.2015 'errUpload' : 'Πρόβλημα κατά το upload.', // old name - errUploadCommon 'errUploadFile' : 'Το αρχείο "$1" δεν μπόρεσε να γίνει upload.', // old name - errUpload 'errUploadNoFiles' : 'Δεν βρέθηκαν αρχεία για upload.', 'errUploadTotalSize' : 'Τα δεδομένα υπερβαίνουν το επιτρεπόμενο μέγιστο μέγεθος δεδομένων.', // old name - errMaxSize 'errUploadFileSize' : 'Το αρχείο υπερβαίνει το επιτρεπόμενο μέγιστο μέγεθος.', // old name - errFileMaxSize 'errUploadMime' : 'Ο τύπος αρχείου δεν επιτρέπεται.', 'errUploadTransfer' : 'Πρόβλημα μεταφοράς για το "$1".', 'errUploadTemp' : 'Δεν είναι δυνατή η δημιουργία προσωρινού αρχείου για μεταφόρτωση.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Το αντικείμενο "$1" υπάρχει ήδη σε αυτήν τη θέση και δεν μπορεί να αντικατασταθεί από αντικείμενο με άλλο τύπο.', // new 'errReplace' : 'Δεν είναι δυνατή η αντικατάσταση του "$1".', 'errSave' : 'Το "$1" δεν ήταν δυνατόν να αποθηκευτεί.', 'errCopy' : 'Δεν ήταν δυνατή η αντιγραφή του "$1".', 'errMove' : 'Δεν ήταν δυνατή η μετακίνηση του "$1".', 'errCopyInItself' : 'Δεν είναι δυνατή η αντιγραφή του "$1" στον εαυτό του.', 'errRm' : 'Δεν ήταν δυνατή η αφαίρεση του "$1".', 'errTrash' : 'Δεν είναι δυνατή η είσοδος στα σκουπίδια.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Δεν είναι δυνατή η κατάργηση των αρχείων προέλευσης.', 'errExtract' : 'Δεν ήταν δυνατή η ανάγνωση των αρχείων από "$1".', 'errArchive' : 'Δεν ήταν δυνατή η δημιουργία του αρχείου.', 'errArcType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.', 'errNoArchive' : 'Το αρχείο δεν είναι έγκυρο ή δεν υποστηρίζεται ο τύπος του.', 'errCmdNoSupport' : 'Το backend δεν υποστηρίζει αυτή την εντολή.', 'errReplByChild' : 'Ο φάκελος “$1” δεν μπορεί να αντικατασταθεί από οποιοδήποτε αρχείο περιέχεται σε αυτόν.', 'errArcSymlinks' : 'Για λόγους ασφαλείας δεν είναι δυνατόν να διαβαστούν αρχεία που περιέχουν symlinks orη αρχεία με μη επιτρεπτά ονόματα.', // edited 24.06.2012 'errArcMaxSize' : 'Το μέγεθος του αρχείου υπερβαίνει το μέγιστο επιτρεπτό όριο.', 'errResize' : 'Δεν ήταν δυνατή η αλλαγή μεγέθους του "$1".', 'errResizeDegree' : 'Μη έγκυρος βαθμός περιστροφής.', // added 7.3.2013 'errResizeRotate' : 'Δεν είναι δυνατή η περιστροφή της εικόνας.', // added 7.3.2013 'errResizeSize' : 'Μη έγκυρο μέγεθος εικόνας.', // added 7.3.2013 'errResizeNoChange' : 'Το μέγεθος της εικόνας δεν άλλαξε.', // added 7.3.2013 'errUsupportType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.', 'errNotUTF8Content' : 'Το αρχείο "$1" δεν είναι UTF-8 και δεν μπορεί να επεξεργασθεί.', // added 9.11.2011 'errNetMount' : 'Δεν ήταν δυνατή η φόρτωση του "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Μη υποστηριζόμενο πρωτόκολο.', // added 17.04.2012 'errNetMountFailed' : 'Η φόρτωση απέτυχε.', // added 17.04.2012 'errNetMountHostReq' : 'Απαιτείται host εξυπηρετητής.', // added 18.04.2012 'errSessionExpires' : 'Η συνεδρία σας έχει λήξει λόγω αδράνειας.', 'errCreatingTempDir' : 'Δεν είναι δυνατή η δημιουργία προσωρινού καταλόγου: "$1"', 'errFtpDownloadFile' : 'Δεν είναι δυνατή η λήψη του αρχείου από το FTP: "$1"', 'errFtpUploadFile' : 'Δεν είναι δυνατή η μεταφόρτωση του αρχείου στο FTP: "$1"', 'errFtpMkdir' : 'Δεν είναι δυνατή η δημιουργία απομακρυσμένου καταλόγου στο FTP: "$1"', 'errArchiveExec' : 'Σφάλμα κατά την αρχειοθέτηση αρχείων: "$1"', 'errExtractExec' : 'Σφάλμα κατά την εξαγωγή αρχείων: "$1"', 'errNetUnMount' : 'Δεν είναι δυνατή η αποπροσάρτηση.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Μη μετατρέψιμο σε UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Δοκιμάστε το σύγχρονο πρόγραμμα περιήγησης, εάν θέλετε να ανεβάσετε το φάκελο.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Έληξε το χρονικό όριο κατά την αναζήτηση "$1". Το αποτέλεσμα αναζήτησης είναι μερικό.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Απαιτείται εκ νέου εξουσιοδότηση.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Ο μέγιστος αριθμός επιλέξιμων στοιχείων είναι $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Δεν είναι δυνατή η επαναφορά από τον κάδο απορριμμάτων. Δεν είναι δυνατός ο προσδιορισμός του προορισμού επαναφοράς.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Δεν βρέθηκε πρόγραμμα επεξεργασίας σε αυτόν τον τύπο αρχείου.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Παρουσιάστηκε σφάλμα από την πλευρά του διακομιστή.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Δεν είναι δυνατό το άδειασμα του φακέλου "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Υπάρχουν $1 ακόμη σφάλματα.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Μπορείτε να δημιουργήσετε έως και $1 φακέλους ταυτόχρονα.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Δημιουργία archive αρχείου', 'cmdback' : 'Πίσω', 'cmdcopy' : 'Αντιγραφή', 'cmdcut' : 'Αφαίρεση', 'cmddownload' : 'Μεταφόρτωση', 'cmdduplicate' : 'Αντίγραφο', 'cmdedit' : 'Επεξεργασία αρχείου', 'cmdextract' : 'Εξαγωγή αρχείων από archive', 'cmdforward' : 'Προώθηση', 'cmdgetfile' : 'Επιλέξτε αρχεία', 'cmdhelp' : 'Σχετικά με αυτό το λογισμικό', 'cmdhome' : 'Home', 'cmdinfo' : 'Πληροφορίες', 'cmdmkdir' : 'Νέος φάκελος', 'cmdmkdirin' : 'Σε Νέο Φάκελο', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Νέος αρχείο', 'cmdopen' : 'Άνοιγμα', 'cmdpaste' : 'Επικόλληση', 'cmdquicklook' : 'Προεπισκόπηση', 'cmdreload' : 'Ανανέωση', 'cmdrename' : 'Μετονομασία', 'cmdrm' : 'Διαγραφή', 'cmdtrash' : 'Στα σκουπίδια', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Επαναφέρω', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Έυρεση αρχείων', 'cmdup' : 'Μετάβαση στο γονικό φάκελο', 'cmdupload' : 'Ανέβασμα αρχείων', 'cmdview' : 'Προβολή', 'cmdresize' : 'Αλλαγή μεγέθους εικόνας', 'cmdsort' : 'Ταξινόμηση', 'cmdnetmount' : 'Προσάρτηση όγκου δικτύου', // added 18.04.2012 'cmdnetunmount': 'Αποπροσάρτηση', // from v2.1 added 30.04.2012 'cmdplaces' : 'Προς τοποθεσίες', // added 28.12.2014 'cmdchmod' : 'Αλλαγή λειτουργίας', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ανοίξτε έναν φάκελο', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Επαναφορά πλάτους στήλης', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'ΠΛΗΡΗΣ ΟΘΟΝΗ', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Κίνηση', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Αδειάστε το φάκελο', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Αναίρεση', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Κάντε ξανά', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Προτιμήσεις', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Επιλογή όλων', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Επιλέξτε κανένα', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Αντιστροφή επιλογής', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ανοιξε σε νέο παράθυρο', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Απόκρυψη (Προτίμηση)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Κλείσιμο', 'btnSave' : 'Αποθήκευση', 'btnRm' : 'Αφαίρεση', 'btnApply' : 'Εφαρμογή', 'btnCancel' : 'Ακύρωση', 'btnNo' : 'Όχι', 'btnYes' : 'Ναι', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Μεταβείτε στο $1 και εγκρίνετε', // from v2.1 added 26.04.2012 'btnUnmount': 'Αποπροσάρτηση', // from v2.1 added 30.04.2012 'btnConv' : 'Μετατρέπω', // from v2.1 added 08.04.2014 'btnCwd' : 'Εδώ', // from v2.1 added 22.5.2015 'btnVolume' : 'Ογκος', // from v2.1 added 22.5.2015 'btnAll' : 'Ολα', // from v2.1 added 22.5.2015 'btnMime' : 'Τύπος MIME', // from v2.1 added 22.5.2015 'btnFileName':'Ονομα αρχείου', // from v2.1 added 22.5.2015 'btnSaveClose': 'Αποθήκευση & Κλείσιμο', // from v2.1 added 12.6.2015 'btnBackup' : 'Αντιγράφων ασφαλείας', // fromv2.1 added 28.11.2015 'btnRename' : 'Μετονομάζω', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Μετονομασία (Όλα)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Προηγ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Επόμενο ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Αποθήκευση ως', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Άνοιγμα φακέλου', 'ntffile' : 'Άνοιγμα αρχείου', 'ntfreload' : 'Ανανέωση περιεχομένων φακέλου', 'ntfmkdir' : 'Δημιουργία φακέλου', 'ntfmkfile' : 'Δημιουργία αρχείων', 'ntfrm' : 'Διαγραφή αρχείων', 'ntfcopy' : 'Αντιγραφή αρχείων', 'ntfmove' : 'Μετακίνηση αρχείων', 'ntfprepare' : 'Προετοιμασία αντιγραφής αρχείων', 'ntfrename' : 'Μετονομασία αρχείων', 'ntfupload' : 'Ανέβασμα αρχείων', 'ntfdownload' : 'Μεταφόρτωση αρχείων', 'ntfsave' : 'Αποθήκευση αρχείων', 'ntfarchive' : 'Δημιουργία αρχείου', 'ntfextract' : 'Εξαγωγή αρχείων από το archive', 'ntfsearch' : 'Αναζήτηση αρχείων', 'ntfresize' : 'Αλλαγή μεγέθους εικόνων', 'ntfsmth' : 'Σύστημα απασχολημένο>_<', 'ntfloadimg' : 'Φόρτωση εικόνας', 'ntfnetmount' : 'Φόρτωση δικτυακού δίσκου', // added 18.04.2012 'ntfnetunmount': 'Αποπροσάρτηση όγκου δικτύου', // from v2.1 added 30.04.2012 'ntfdim' : 'Απόκτηση διάστασης εικόνας', // added 20.05.2013 'ntfreaddir' : 'Ανάγνωση πληροφοριών φακέλου', // from v2.1 added 01.07.2013 'ntfurl' : 'Λήψη διεύθυνσης URL του συνδέσμου', // from v2.1 added 11.03.2014 'ntfchmod' : 'Αλλαγή λειτουργίας αρχείου', // from v2.1 added 20.6.2015 'ntfpreupload': 'Επαλήθευση ονόματος αρχείου μεταφόρτωσης', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Δημιουργία αρχείου για λήψη', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Λήψη πληροφοριών διαδρομής', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Επεξεργασία του μεταφορτωμένου αρχείου', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Πετάξτε στα σκουπίδια', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Κάνω επαναφορά από τα σκουπίδια', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Έλεγχος φακέλου προορισμού', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Αναίρεση προηγούμενης λειτουργίας', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Επανάληψη της προηγούμενης αναίρεσης', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Έλεγχος περιεχομένου', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Σκουπίδια', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'άγνωστο', 'Today' : 'Σήμερα', 'Yesterday' : 'Χθές', 'msJan' : 'Ιαν', 'msFeb' : 'Φεβ', 'msMar' : 'Μαρ', 'msApr' : 'Απρ', 'msMay' : 'Μαϊ', 'msJun' : 'Ιουν', 'msJul' : 'Ιουλ', 'msAug' : 'Αυγ', 'msSep' : 'Σεπ', 'msOct' : 'Οκτ', 'msNov' : 'Νοεμ', 'msDec' : 'Δεκ', 'January' : 'Ιανουάριος', 'February' : 'Φεβρουάριος', 'March' : 'Μάρτιος', 'April' : 'Απρίλιος', 'May' : 'Μάϊος', 'June' : 'Ιούνιος', 'July' : 'Ιούλιος', 'August' : 'Αύγουστος', 'September' : 'Σεπτέμβριος', 'October' : 'Οκτώβριος', 'November' : 'Νοέμβριος', 'December' : 'Δεκέμβριος', 'Sunday' : 'Κυριακή', 'Monday' : 'Δευτέρα', 'Tuesday' : 'Τρίτη', 'Wednesday' : 'Τετάρτη', 'Thursday' : 'Πέμπτη', 'Friday' : 'Παρασκευή', 'Saturday' : 'Σάββατο', 'Sun' : 'Κυρ', 'Mon' : 'Δευ', 'Tue' : 'Τρ', 'Wed' : 'Τετ', 'Thu' : 'Πεμ', 'Fri' : 'Παρ', 'Sat' : 'Σαβ', /******************************** sort variants ********************************/ 'sortname' : 'κατά όνομα', 'sortkind' : 'κατά είδος', 'sortsize' : 'κατά μέγεθος', 'sortdate' : 'κατά ημερομηνία', 'sortFoldersFirst' : 'Πρώτα οι φάκελοι', 'sortperm' : 'με άδεια', // from v2.1.13 added 13.06.2016 'sortmode' : 'κατά τρόπο λειτουργίας', // from v2.1.13 added 13.06.2016 'sortowner' : 'από τον ιδιοκτήτη', // from v2.1.13 added 13.06.2016 'sortgroup' : 'ανά ομάδα', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Επίσης το Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Νέο αρχείο.txt', // added 10.11.2015 'untitled folder' : 'Νέος φάκελος', // added 10.11.2015 'Archive' : 'ΝέοΑρχείο', // from v2.1 added 10.11.2015 'untitled file' : 'Νέο αρχείο.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Αρχείο', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Απαιτείται επιβεβαίωση', 'confirmRm' : 'Είστε σίγουροι πως θέλετε να διαγράψετε τα αρχεία?
Οι αλλαγές θα είναι μόνιμες!', 'confirmRepl' : 'Αντικατάσταση του παλιού αρχείου με το νέο?', 'confirmRest' : 'Αντικατάσταση υπάρχοντος στοιχείου με το στοιχείο στον κάδο απορριμμάτων;', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Δεν υπάρχει στο UTF-8
Μετατροπή σε UTF-8;
Τα περιεχόμενα γίνονται UTF-8 με αποθήκευση μετά τη μετατροπή.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Δεν ήταν δυνατός ο εντοπισμός της κωδικοποίησης χαρακτήρων αυτού του αρχείου. Πρέπει να μετατραπεί προσωρινά σε UTF-8 για επεξεργασία.
Επιλέξτε την κωδικοποίηση χαρακτήρων αυτού του αρχείου.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Έχει τροποποιηθεί.
Χάνεται η εργασία εάν δεν αποθηκεύσετε τις αλλαγές.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Είστε βέβαιοι ότι θέλετε να μετακινήσετε αντικείμενα στον κάδο απορριμμάτων;', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Είστε βέβαιοι ότι θέλετε να μετακινήσετε στοιχεία στο "$1";', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Εφαρμογή σε όλα', 'name' : 'Όνομα', 'size' : 'Μέγεθος', 'perms' : 'Δικαιώματα', 'modify' : 'Τροποποιήθηκε', 'kind' : 'Είδος', 'read' : 'ανάγνωση', 'write' : 'εγγραφή', 'noaccess' : 'δεν υπάρχει πρόσβαση', 'and' : 'και', 'unknown' : 'άγνωστο', 'selectall' : 'Επιλογή όλων', 'selectfiles' : 'Επιλογή αρχείων', 'selectffile' : 'Επιλογή πρώτου αρχείου', 'selectlfile' : 'Επιλογή τελευταίου αρχείου', 'viewlist' : 'Προβολή λίστας', 'viewicons' : 'Προβολή εικονιδίων', 'viewSmall' : 'Μικρά εικονίδια', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Μεσαία εικονίδια', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Μεγάλα εικονίδια', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Πολύ μεγάλα εικονίδια', // from v2.1.39 added 22.5.2018 'places' : 'Τοποθεσίες', 'calc' : 'Υπολογισμός', 'path' : 'Διαδρομή', 'aliasfor' : 'Ψευδώνυμο για', 'locked' : 'Κλειδωμένο', 'dim' : 'Διαστάσεις', 'files' : 'Αρχεία', 'folders' : 'Φάκελοι', 'items' : 'Αντικείμενα', 'yes' : 'ναι', 'no' : 'όχι', 'link' : 'Σύνδεσμος', 'searcresult' : 'Αποτελέσματα αναζήτησης', 'selected' : 'επιλεγμένα αντικείμενα', 'about' : 'Σχετικά', 'shortcuts' : 'Συντομεύσεις', 'help' : 'Βοήθεια', 'webfm' : 'εργαλείο διαχείρισης αρχείων από το web', 'ver' : 'Έκδοση', 'protocolver' : 'έκδοση πρωτοκόλλου', 'homepage' : 'Σελίδα του project', 'docs' : 'Τεκμηρίωση (documentation)', 'github' : 'Κάντε μας fork στο Github', 'twitter' : 'Ακολουθήστε μας στο twitter', 'facebook' : 'Βρείτε μας στο facebook', 'team' : 'Ομάδα', 'chiefdev' : 'κύριος προγραμματιστής', 'developer' : 'προγραμματιστής', 'contributor' : 'συνεισφορά', 'maintainer' : 'συντηρητής', 'translator' : 'μεταφραστής', 'icons' : 'Εικονίδια', 'dontforget' : 'και μην ξεχάσεις την πετσέτα σου!', 'shortcutsof' : 'Οι συντομεύσεις είναι απενεργοποιημένες', 'dropFiles' : 'Κάντε drop τα αρχεία εδώ', 'or' : 'ή', 'selectForUpload' : 'Επιλογή αρχείων για ανέβασμα', 'moveFiles' : 'Μετακίνηση αρχείων', 'copyFiles' : 'Αντιγραφή αρχείων', 'restoreFiles' : 'Επαναφέρετε τα στοιχεία', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Αντιγραφή από τοποθεσίες', 'aspectRatio' : 'Αναλογία διαστάσεων', 'scale' : 'Κλίμακα', 'width' : 'Πλάτος', 'height' : 'Ύψος', 'resize' : 'Αλλαγή μεγέθους', 'crop' : 'Σοδειά', 'rotate' : 'Περιστροφή', 'rotate-cw' : 'Περιστροφή κατά 90 βαθμούς CW', 'rotate-ccw' : 'Περιστροφή κατά 90 βαθμούς CCW', 'degree' : 'Βαθμός', 'netMountDialogTitle' : 'Φορτώστε δικτυακό δίσκο', // added 18.04.2012 'protocol' : 'Πρωτόκολλο', // added 18.04.2012 'host' : 'Πλήθος', // added 18.04.2012 'port' : 'Λιμάνι', // added 18.04.2012 'user' : 'Χρήστης', // added 18.04.2012 'pass' : 'Κωδικός', // added 18.04.2012 'confirmUnmount' : 'Αποπροσαρτάτε το $1;', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Απόθεση ή επικόλληση αρχείων από το πρόγραμμα περιήγησης', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Απόθεση αρχείων, επικόλληση διευθύνσεων URL ή εικόνων (πρόχειρο) εδώ', // from v2.1 added 07.04.2014 'encoding' : 'Κωδικοποίηση', // from v2.1 added 19.12.2014 'locale' : 'Μικρός λοβός', // from v2.1 added 19.12.2014 'searchTarget' : 'Στόχος: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Αναζήτηση με βάση τον τύπο MIME', // from v2.1 added 22.5.2015 'owner' : 'Ιδιοκτήτης', // from v2.1 added 20.6.2015 'group' : 'Ομιλος', // from v2.1 added 20.6.2015 'other' : 'Αλλος', // from v2.1 added 20.6.2015 'execute' : 'Εκτέλεση', // from v2.1 added 20.6.2015 'perm' : 'Αδεια', // from v2.1 added 20.6.2015 'mode' : 'Λειτουργία', // from v2.1 added 20.6.2015 'emptyFolder' : 'Ο φάκελος είναι κενός', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Ο φάκελος είναι κενός\\A Drop για προσθήκη στοιχείων', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Ο φάκελος είναι κενός\\Ένα παρατεταμένο πάτημα για προσθήκη στοιχείων', // from v2.1.6 added 30.12.2015 'quality' : 'Ποιότητα', // from v2.1.6 added 5.1.2016 'autoSync' : 'Αυτόματος συγχρονισμός', // from v2.1.6 added 10.1.2016 'moveUp' : 'Μετακινηθείτε προς τα πάνω', // from v2.1.6 added 18.1.2016 'getLink' : 'Λήψη συνδέσμου URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Επιλεγμένα στοιχεία ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Αναγνωριστικό φακέλου', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Να επιτρέπεται η πρόσβαση εκτός σύνδεσης', // from v2.1.10 added 3.25.2016 'reAuth' : 'Για εκ νέου έλεγχο ταυτότητας', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Φορτώνει...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Άνοιγμα πολλών αρχείων', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Προσπαθείτε να ανοίξετε τα αρχεία $1. Είστε βέβαιοι ότι θέλετε να ανοίξετε στο πρόγραμμα περιήγησης;', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Τα αποτελέσματα αναζήτησης είναι κενά στον στόχο αναζήτησης.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Επεξεργάζεται ένα αρχείο.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Έχετε επιλέξει $1 στοιχεία.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Έχετε $1 στοιχεία στο πρόχειρο.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Η σταδιακή αναζήτηση προέρχεται μόνο από την τρέχουσα προβολή.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Εγκαθιστώ πάλι', // from v2.1.15 added 3.8.2016 'complete' : '$1 ολοκληρώθηκε', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Μενού περιβάλλοντος', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Γυρίζοντας σελίδα', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Ρίζες όγκου', // from v2.1.16 added 16.9.2016 'reset' : 'Επαναφορά', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Χρώμα του φόντου', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Επιλογέας χρώματος', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Πλέγμα 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Ενεργοποιήθηκε', // from v2.1.16 added 4.10.2016 'disabled' : 'Ενεργοποιήθηκε', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Τα αποτελέσματα αναζήτησης είναι κενά στην τρέχουσα προβολή.\\APΠατήστε [Enter] για επέκταση του στόχου αναζήτησης.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Τα αποτελέσματα αναζήτησης πρώτου γράμματος είναι κενά στην τρέχουσα προβολή.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Ετικέτα κειμένου', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 λεπτό απομένουν', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Ανοίξτε ξανά με επιλεγμένη κωδικοποίηση', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Αποθήκευση με την επιλεγμένη κωδικοποίηση', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Επιλέξτε φάκελο', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Αναζήτηση πρώτου γράμματος', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Είναι πάρα πολλά αντικείμενα, επομένως δεν μπορεί να πάει στα σκουπίδια.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Περιοχή κειμένου', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Αδειάστε το φάκελο "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Δεν υπάρχουν στοιχεία σε ένα φάκελο "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Προτίμηση', // from v2.1.26 added 28.6.2017 'language' : 'Γλώσσα', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Εκκινήστε τις ρυθμίσεις που είναι αποθηκευμένες σε αυτό το πρόγραμμα περιήγησης', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Ρυθμίσεις γραμμής εργαλείων', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 χαρακτήρες απομένουν.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... Απομένουν $1 γραμμές.', // from v2.1.52 added 16.1.2020 'sum' : 'Αθροισμα', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Πρόχειρο μέγεθος αρχείου', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Επικεντρωθείτε στο στοιχείο του διαλόγου με το ποντίκι', // from v2.1.30 added 2.11.2017 'select' : 'Επιλέξτε', // from v2.1.30 added 23.11.2017 'selectAction' : 'Ενέργεια κατά την επιλογή αρχείου', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Ανοίξτε με το πρόγραμμα επεξεργασίας που χρησιμοποιήθηκε την τελευταία φορά', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Αντιστροφή επιλογής', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Είστε βέβαιοι ότι θέλετε να μετονομάσετε $1 επιλεγμένα στοιχεία όπως $2;
Αυτό δεν μπορεί να αναιρεθεί!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Μετονομασία παρτίδας', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Αριθμός', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Προσθήκη προθέματος', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Προσθέστε επίθημα', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Αλλάξτε την επέκταση', // from v2.1.31 added 8.12.2017 'columnPref' : 'Ρυθμίσεις στηλών (Προβολή λίστας)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Όλες οι αλλαγές θα εμφανιστούν αμέσως στο αρχείο.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Τυχόν αλλαγές δεν θα αντικατοπτρίζονται μέχρι να καταργήσετε την προσάρτηση αυτού του τόμου.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Οι παρακάτω τόμοι που τοποθετήθηκαν σε αυτόν τον τόμο επίσης αποπροσαρτήθηκαν. Είστε σίγουροι ότι θα το αποπροσαρτήσετε;', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Πληροφορίες επιλογής', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Αλγόριθμοι για την εμφάνιση του κατακερματισμού του αρχείου', // from v2.1.33 added 10.3.2018 'infoItems' : 'Στοιχεία πληροφοριών (Πίνακας πληροφοριών επιλογής)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Πατήστε ξανά για έξοδο.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Γραμμή εργαλείων', // from v2.1.38 added 4.4.2018 'workspace' : 'Χώρος εργασίας', // from v2.1.38 added 4.4.2018 'dialog' : 'Διάλογος', // from v2.1.38 added 4.4.2018 'all' : 'Ολα', // from v2.1.38 added 4.4.2018 'iconSize' : 'Μέγεθος εικονιδίου (Προβολή εικονιδίων)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Ανοίξτε το παράθυρο μεγιστοποιημένου επεξεργαστή', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Επειδή η μετατροπή μέσω API δεν είναι διαθέσιμη αυτήν τη στιγμή, πραγματοποιήστε μετατροπή στον ιστότοπο.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Μετά τη μετατροπή, πρέπει να ανεβάσετε με τη διεύθυνση URL του στοιχείου ή ένα αρχείο λήψης για να αποθηκεύσετε το αρχείο που μετατράπηκε.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Μετατροπή στον ιστότοπο του $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Ενσωματώσεις', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Αυτό το elFinder έχει ενσωματωμένες τις ακόλουθες εξωτερικές υπηρεσίες. Ελέγξτε τους όρους χρήσης, την πολιτική απορρήτου κ.λπ. πριν το χρησιμοποιήσετε.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Εμφάνιση κρυφών στοιχείων', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Απόκρυψη κρυφών στοιχείων', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Εμφάνιση/Απόκρυψη κρυφών στοιχείων', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Τύποι αρχείων για ενεργοποίηση με "Νέο αρχείο"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Τύπος αρχείου κειμένου', // from v2.1.41 added 7.8.2018 'add' : 'Προσθήκη', // from v2.1.41 added 7.8.2018 'theme' : 'Θέμα', // from v2.1.43 added 19.10.2018 'default' : 'Προκαθορισμένο', // from v2.1.43 added 19.10.2018 'description' : 'Περιγραφή', // from v2.1.43 added 19.10.2018 'website' : 'Δικτυακός τόπος', // from v2.1.43 added 19.10.2018 'author' : 'Συγγραφέας', // from v2.1.43 added 19.10.2018 'email' : 'ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ', // from v2.1.43 added 19.10.2018 'license' : 'Δίδω άδεια', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Δεν είναι δυνατή η αποθήκευση αυτού του στοιχείου. Για να αποφύγετε την απώλεια των επεξεργασιών που πρέπει να κάνετε εξαγωγή στον υπολογιστή σας.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Κάντε διπλό κλικ στο αρχείο για να το επιλέξετε.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Χρησιμοποιήστε τη λειτουργία πλήρους οθόνης', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Άγνωστο', 'kindRoot' : 'Ρίζα τόμου', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Φάκελος', 'kindSelects' : 'Επιλογές', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Ψευδώνυμο (alias)', 'kindAliasBroken' : 'Μη έγκυρο ψευδώνυμο', // applications 'kindApp' : 'Εφαρμογή', 'kindPostscript' : 'Έγγραφο Postscript', 'kindMsOffice' : 'Έγγραφο Microsoft Office', 'kindMsWord' : 'Έγγραφο Microsoft Word', 'kindMsExcel' : 'Έγγραφο Microsoft Excel', 'kindMsPP' : 'Παρουσίαση Microsoft Powerpoint', 'kindOO' : 'Έγγραφο Open Office', 'kindAppFlash' : 'Εφαρμογή Flash', 'kindPDF' : 'Μορφή φορητού εγγράφου (PDF)', 'kindTorrent' : 'Αρχείο Bittorrent', 'kind7z' : 'Αρχείο 7z', 'kindTAR' : 'Αρχείο TAR', 'kindGZIP' : 'Αρχείο GZIP', 'kindBZIP' : 'Αρχείο BZIP', 'kindXZ' : 'Αρχείο XZ', 'kindZIP' : 'Αρχείο ZIP', 'kindRAR' : 'Αρχείο RAR', 'kindJAR' : 'Αρχείο Java JAR', 'kindTTF' : 'Γραμματοσειρά True Type', 'kindOTF' : 'Γραμματοσειρά Open Type', 'kindRPM' : 'Πακέτο RPM', // texts 'kindText' : 'Έγγραφο κειμένου', 'kindTextPlain' : 'Απλό κείμενο', 'kindPHP' : 'Κώδικας PHP', 'kindCSS' : 'Φύλλο Cascading Style', 'kindHTML' : 'Έγγραφο HTML', 'kindJS' : 'Κώδικας Javascript', 'kindRTF' : 'Μορφή πλούσιου κειμένου', 'kindC' : 'Κώδικας C', 'kindCHeader' : 'Κώδικας κεφαλίδας C', 'kindCPP' : 'Κώδικας C++', 'kindCPPHeader' : 'Κώδικας κεφαλίδας C++', 'kindShell' : 'Σενάριο κελύφους Unix', 'kindPython' : 'Κώδικας Python', 'kindJava' : 'Κώδικας Java', 'kindRuby' : 'Κώδικας Ruby', 'kindPerl' : 'Σενάριο Perl', 'kindSQL' : 'Κώδικας SQL', 'kindXML' : 'Έγγραφο XML', 'kindAWK' : 'Κώδικας AWK', 'kindCSV' : 'Τιμές χωρισμένες με κόμμα', 'kindDOCBOOK' : 'Έγγραφο Docbook XML', 'kindMarkdown' : 'Markdown κείμενο', // added 20.7.2015 // images 'kindImage' : 'Εικόνα', 'kindBMP' : 'Εικόνα BMP', 'kindJPEG' : 'Εικόνα JPEG', 'kindGIF' : 'Εικόνα GIF', 'kindPNG' : 'Εικόνα PNG', 'kindTIFF' : 'Εικόνα TIFF', 'kindTGA' : 'Εικόνα TGA', 'kindPSD' : 'Εικόνα Adobe Photoshop', 'kindXBITMAP' : 'Εικόνα X bitmap', 'kindPXM' : 'Εικόνα Pixelmator', // media 'kindAudio' : 'Αρχεία ήχου', 'kindAudioMPEG' : 'Ήχος MPEG', 'kindAudioMPEG4' : 'Εικόνα MPEG-4', 'kindAudioMIDI' : 'Εικόνα MIDI', 'kindAudioOGG' : 'Εικόνα Ogg Vorbis', 'kindAudioWAV' : 'Εικόνα WAV', 'AudioPlaylist' : 'Λίστα αναπαραγωγής MP3', 'kindVideo' : 'Αρχεία media', 'kindVideoDV' : 'Ταινία DV', 'kindVideoMPEG' : 'Ταινία MPEG', 'kindVideoMPEG4' : 'Ταινία MPEG-4', 'kindVideoAVI' : 'Ταινία AVI', 'kindVideoMOV' : 'Ταινία Quick Time', 'kindVideoWM' : 'Ταινία Windows Media', 'kindVideoFlash' : 'Ταινία flash', 'kindVideoMKV' : 'Ταινία matroska', 'kindVideoOGG' : 'Ταινία ogg' } }; }));PK ZGd]js/i18n/elfinder.da.jsnuW+A/** * Danish translation * @author Mark Topper (webman.io) * @author Helmuth Mikkelsen * @version 2022-02-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.da = { translator : 'Mark Topper (webman.io), Helmuth Mikkelsen <helmuthm@gmail.com>', language : 'Danish', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 28.02.2022 11:38 fancyDateFormat : '$1 H:i', // will show like: I dag 11:38 nonameDateFormat : 'Ymd-His', // noname upload will show like: 20220228-113848 messages : { 'getShareText' : 'Del', 'Editor ': 'Kode Editor', /********************************** errors **********************************/ 'error' : 'Fejl', 'errUnknown' : 'Ukendt fejl.', 'errUnknownCmd' : 'Ukendt kommando.', 'errJqui' : 'Ugyldig jQuery UI-konfiguration. Valgbare, trækbare og dropbare komponenter skal medtages.', 'errNode' : 'elFinder kræver DOM Element oprettet.', 'errURL' : 'Ugyldig elFinder konfiguration! URL option er ikke sat.', 'errAccess' : 'Adgang nægtet.', 'errConnect' : 'Kan ikke få kontatkt med backend.', 'errAbort' : 'Forbindelse afbrudt.', 'errTimeout' : 'Forbindelse timeout.', 'errNotFound' : 'Backend ikke fundet.', 'errResponse' : 'Ugyldigt backend svar.', 'errConf' : 'Ugyldig backend konfiguration.', 'errJSON' : 'PHP JSON modul ikke installeret.', 'errNoVolumes' : 'Læsbare diskenheder er ikke tilgængelige.', 'errCmdParams' : 'Ugyldige parametre for kommando "$1".', 'errDataNotJSON' : 'Data er ikke JSON.', 'errDataEmpty' : 'Data er tom.', 'errCmdReq' : 'Backend-anmodning kræver kommandonavn.', 'errOpen' : 'Kunne ikke åbne "$1".', 'errNotFolder' : 'Objektet er ikke en mappe.', 'errNotFile' : 'Objektet er ikke en fil.', 'errRead' : 'Kunne ikke læse "$1".', 'errWrite' : 'Kunne ikke skrive til "$1".', 'errPerm' : 'Adgang nægtet.', 'errLocked' : '"$1" er låst og kan ikke blive omdøbt, flyttet eller slettet.', 'errExists' : 'Der findes allerede en fil ved navn "$1".', 'errInvName' : 'Ugyldigt filnavn.', 'errInvDirname' : 'Ugyldigt mappenavn.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappe ikke fundet.', 'errFileNotFound' : 'Fil ikke fundet.', 'errTrgFolderNotFound' : 'Mappen "$1" blev ikke fundet.', 'errPopup' : 'Browser forhindrede åbning af pop up-vindue. For at åbne filen skal du aktivere den i browserindstillinger.', 'errMkdir' : 'Kunne ikke oprette mappen "$1".', 'errMkfile' : 'Kunne ikke oprette filen "$1".', 'errRename' : 'Kunne ikke omdøbe "$1".', 'errCopyFrom' : 'Kopiering af filer fra diskenhed "$1" er ikke tilladt.', 'errCopyTo' : 'Kopiering af filer til diskenhed "$1" er ikke tilladt.', 'errMkOutLink' : 'Kan ikke oprette et link til uden for diskenhedsroden.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload fejl.', // old name - errUploadCommon 'errUploadFile' : 'Kunne ikke uploade "$1".', // old name - errUpload 'errUploadNoFiles' : 'Ingen filer fundet til upload.', 'errUploadTotalSize' : 'Data overskrider den maksimalt tilladte størrelse.', // old name - errMaxSize 'errUploadFileSize' : 'Fil overskrider den maksimalt tilladte størrelse.', // old name - errFileMaxSize 'errUploadMime' : 'Filtype ikke godkendt.', 'errUploadTransfer' : '"$1" overførselsfejl.', 'errUploadTemp' : 'Kan ikke oprette midlertidig fil til upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" findes allerede på dette sted og kan ikke erstattes af objekt med en anden type.', // new 'errReplace' : 'Kan ikke erstatte "$1".', 'errSave' : 'Kunne ikke gemme "$1".', 'errCopy' : 'Kunne ikke kopiere "$1".', 'errMove' : 'Kunne ikke flytte "$1".', 'errCopyInItself' : 'Kunne ikke kopiere "$1" til sig selv.', 'errRm' : 'Kunne ikke slette "$1".', 'errTrash' : 'Kan ikke komme i papirkurven.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kunne ikke fjerne kildefil(er).', 'errExtract' : 'Kunne ikke udpakke filer fra "$1".', 'errArchive' : 'Kunne ikke oprette arkiv.', 'errArcType' : 'Arkivtypen er ikke understøttet.', 'errNoArchive' : 'Filen er ikke et arkiv eller har ien kke-understøttet arkivtype.', 'errCmdNoSupport' : 'Backend understøtter ikke denne kommando.', 'errReplByChild' : 'Mappen "$1" kan ikke erstattes af et element, den indeholder.', 'errArcSymlinks' : 'Af sikkerhedsmæssige årsager nægtes at udpakke arkiver der indeholder symlinks eller filer med ikke-tilladte navne.', // edited 24.06.2012 'errArcMaxSize' : 'Arkivfiler overskrider den maksimalt tilladte størrelse.', 'errResize' : 'Kunne ikke ændre størrelsen på "$1".', 'errResizeDegree' : 'Ugyldig rotationsgrad.', // added 7.3.2013 'errResizeRotate' : 'Kunne ikke rotere billedet.', // added 7.3.2013 'errResizeSize' : 'Ugyldig billedstørrelse.', // added 7.3.2013 'errResizeNoChange' : 'Billedstørrelse ikke ændret.', // added 7.3.2013 'errUsupportType' : 'Ikke-understøttet filtype.', 'errNotUTF8Content' : 'Filen "$1" er ikke i UTF-8 og kan ikke blive redigeret.', // added 9.11.2011 'errNetMount' : 'Kunne ikke mounte "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ikke-understøttet protokol.', // added 17.04.2012 'errNetMountFailed' : 'Mount mislykkedes.', // added 17.04.2012 'errNetMountHostReq' : 'Værten kræves.', // added 18.04.2012 'errSessionExpires' : 'Din session er udløbet på grund af inaktivitet.', 'errCreatingTempDir' : 'Kunne ikke oprette midlertidig mappe: "$1"', 'errFtpDownloadFile' : 'Kunne ikke downloade filen fra FTP: "$1"', 'errFtpUploadFile' : 'Kunne ikke uploade filen til FTP: "$1"', 'errFtpMkdir' : 'Kunne ikke oprette fjernmappe på FTP: "$1"', 'errArchiveExec' : 'Fejl under arkivering af filer: "$1"', 'errExtractExec' : 'Fejl under udpakning af filer: "$1"', 'errNetUnMount' : 'Kan ikke unmounte.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kan ikke konverteres til UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prøv den nyeste browser, hvis du vil uploade mappen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Time out under søgning på "$1". Søgeresultatet er delvis.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-autorisation er påkrævet.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maksimalt antal valgbare emner er $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Kan ikke gendannes fra papirkurven. Kan ikke identificere gendannelsesdestinationen.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor blev ikke fundet til denne filtype.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Der opstod en fejl på serversiden.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Kunne ikke tømme mappen "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Der er $1 flere fejl.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Du kan oprette op til $1 mapper ad gangen.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Opret arkiv', 'cmdback' : 'Tilbage', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klip', 'cmddownload' : 'Downloade', 'cmdduplicate' : 'Dupliker', 'cmdedit' : 'Rediger fil', 'cmdextract' : 'Udpak filer fra arkiv', 'cmdforward' : 'Frem', 'cmdgetfile' : 'Vælg filer', 'cmdhelp' : 'Om denne software', 'cmdhome' : 'Hjem', 'cmdinfo' : 'Information', 'cmdmkdir' : 'Ny mappe', 'cmdmkdirin' : 'I en ny mappe', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Åben', 'cmdpaste' : 'Indsæt', 'cmdquicklook' : 'Vis', 'cmdreload' : 'Genindlæs', 'cmdrename' : 'Omdøb', 'cmdrm' : 'Slet', 'cmdtrash' : 'I papirkurven', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Gendan', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find filer', 'cmdup' : 'Gå til overordnet mappe', 'cmdupload' : 'Upload filer', 'cmdview' : 'Vis', 'cmdresize' : 'Tilpas størrelse & Roter', 'cmdsort' : 'Sorter', 'cmdnetmount' : 'Mount netværksdrev', // added 18.04.2012 'cmdnetunmount': 'Afmonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Til steder', // added 28.12.2014 'cmdchmod' : 'Skift tilstand', // from v2.1 added 20.6.2015 'cmdopendir' : 'Åbn en mappe', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Nulstil søjlebredde', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Fuld skærm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Flyt', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Tøm mappe', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Fortryd', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Gentag igen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Præferencer', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vælg alle', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Vælg ingen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverter valg', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Åbn i nyt vindue', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skjul (præference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Luk', 'btnSave' : 'Gem', 'btnRm' : 'Slet', 'btnApply' : 'Anvend', 'btnCancel' : 'Annuler', 'btnNo' : 'Nej', 'btnYes' : 'Ja', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Gå til $1 & godkend', // from v2.1 added 26.04.2012 'btnUnmount': 'Afmonter', // from v2.1 added 30.04.2012 'btnConv' : 'Konverter', // from v2.1 added 08.04.2014 'btnCwd' : 'Her', // from v2.1 added 22.5.2015 'btnVolume' : 'Diskenhed', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-type', // from v2.1 added 22.5.2015 'btnFileName':'Filnavn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Gem & Luk', // from v2.1 added 12.6.2015 'btnBackup' : 'Sikkerhedskopiering', // fromv2.1 added 28.11.2015 'btnRename' : 'Omdøb', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Omdøb(Alle)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Forrige ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Næste ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Gem som', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Åben mappe', 'ntffile' : 'Åben fil', 'ntfreload' : 'Genindlæs mappeindhold', 'ntfmkdir' : 'Opretter mappe', 'ntfmkfile' : 'Opretter filer', 'ntfrm' : 'Sletter filer', 'ntfcopy' : 'Kopier filer', 'ntfmove' : 'Flytter filer', 'ntfprepare' : 'Kontrol af eksisterende emner', 'ntfrename' : 'Omdøb filer', 'ntfupload' : 'Uploader filer', 'ntfdownload' : 'Downloader filer', 'ntfsave' : 'Gemmer filer', 'ntfarchive' : 'Opretter arkiv', 'ntfextract' : 'Udpakker filer fra arkiv', 'ntfsearch' : 'Søger filer', 'ntfresize' : 'Ændring af størrelsen på billeder', 'ntfsmth' : 'Gør noget', 'ntfloadimg' : 'Henter billede', 'ntfnetmount' : 'Mounter netværksdrev', // added 18.04.2012 'ntfnetunmount': 'Unmounter netværksdrev', // from v2.1 added 30.04.2012 'ntfdim' : 'Henter billeddimension', // added 20.05.2013 'ntfreaddir' : 'Læser folderinfomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Får URL til link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ændring af filtilstand', // from v2.1 added 20.6.2015 'ntfpreupload': 'Bekræftelse af upload filnavn', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Oprettelse af en fil til download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Få stiinformation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Behandler den uploadede fil', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Smider i papirkurv', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Udfører gendannelse fra papirkurven', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrollerer destinationsmappe', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Fortryder tidligere handling', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Gentager tidligere fortryd', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrol af indhold', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Papirkurv', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'ukendt', 'Today' : 'I dag', 'Yesterday' : 'I går', 'msJan' : 'januar', 'msFeb' : 'februar', 'msMar' : 'marts', 'msApr' : 'april', 'msMay' : 'Maj', 'msJun' : 'juni', 'msJul' : 'juli', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Marts', 'April' : 'April', 'May' : 'Maj', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Søndag', 'Monday' : 'Mandag', 'Tuesday' : 'Tirsdag', 'Wednesday' : 'Onsdag', 'Thursday' : 'Torsdag', 'Friday' : 'Fredag', 'Saturday' : 'Lørdag', 'Sun' : 'Søn', 'Mon' : 'Man', 'Tue' : 'Tir', 'Wed' : 'Ons', 'Thu' : 'Tor', 'Fri' : 'Fre', 'Sat' : 'Lør', /******************************** sort variants ********************************/ 'sortname' : 'efter navn', 'sortkind' : 'efter type', 'sortsize' : 'efter størrelse', 'sortdate' : 'efter dato', 'sortFoldersFirst' : 'Mapper først', 'sortperm' : 'efter tilladelse', // from v2.1.13 added 13.06.2016 'sortmode' : 'efter mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'efter ejer', // from v2.1.13 added 13.06.2016 'sortgroup' : 'efter gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Også Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NyFil.txt', // added 10.11.2015 'untitled folder' : 'NyFolder', // added 10.11.2015 'Archive' : 'NytArkiv', // from v2.1 added 10.11.2015 'untitled file' : 'NyFil.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fil', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bekræftelse påkrævet', 'confirmRm' : 'Er du sikker på du vil slette valgte filer?
Dette kan ikke fortrydes!', 'confirmRepl' : 'Erstat gammel fil med ny fil?', 'confirmRest' : 'Erstat eksisterende element med elementet i papirkurven?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Ikke i UTF-8
Konverter til UTF-8?
Indholdet bliver UTF-8 ved at gemme efter konvertering.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Tegnkodning af denne fil kunne ikke registreres. Det er nødvendigt at konvertere midlertidigt til UTF-8 til redigering.
Vælg tegnkodning af denne fil.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Det er blevet ændret.
Du mister arbejde, hvis du ikke gemmer ændringer.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Er du sikker på, at du vil flytte emner til papirkurven?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Er du sikker på, at du vil flytte emner til "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Anvend ved alle', 'name' : 'Navn', 'size' : 'Størrelse', 'perms' : 'Rettigheder', 'modify' : 'Ændret', 'kind' : 'Type', 'read' : 'læse', 'write' : 'skrive', 'noaccess' : 'ingen adgang', 'and' : 'og', 'unknown' : 'ukendt', 'selectall' : 'Vælg alle filer', 'selectfiles' : 'Vælg fil(er)', 'selectffile' : 'Vælg første fil', 'selectlfile' : 'Vælg sidste fil', 'viewlist' : 'Listevisning', 'viewicons' : 'Ikonvisning', 'viewSmall' : 'Små ikoner', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium ikoner', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Store ikoner', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ekstra store ikoner', // from v2.1.39 added 22.5.2018 'places' : 'Placeringer', 'calc' : 'Beregn', 'path' : 'Sti', 'aliasfor' : 'Alias for', 'locked' : 'Låst', 'dim' : 'Størrelser', 'files' : 'Filer', 'folders' : 'Mapper', 'items' : 'Emner', 'yes' : 'ja', 'no' : 'nej', 'link' : 'Link', 'searcresult' : 'Søgeresultater', 'selected' : 'valgte emner', 'about' : 'Om', 'shortcuts' : 'Genveje', 'help' : 'Hjælp', 'webfm' : 'Internet filmanager', 'ver' : 'Version', 'protocolver' : 'protokol version', 'homepage' : 'Projektside', 'docs' : 'Dokumentation', 'github' : 'Fork os på Github', 'twitter' : 'Følg os på Twitter', 'facebook' : 'Følg os på Facebook', 'team' : 'Hold', 'chiefdev' : 'hovedudvikler', 'developer' : 'udvikler', 'contributor' : 'bidragyder', 'maintainer' : 'vedligeholder', 'translator' : 'oversætter', 'icons' : 'Ikoner', 'dontforget' : 'og glem ikke at tage dit håndklæde', 'shortcutsof' : 'Gemveje deaktiveret', 'dropFiles' : 'Drop filer hertil', 'or' : 'eller', 'selectForUpload' : 'Vælg filer', 'moveFiles' : 'Flyt filer', 'copyFiles' : 'Kopier filer', 'restoreFiles' : 'Gendan emner', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Slet fra placering', 'aspectRatio' : 'Skærmformat', 'scale' : 'Skala', 'width' : 'Bredde', 'height' : 'Højde', 'resize' : 'Tilpas størrelse', 'crop' : 'Beskær', 'rotate' : 'Roter', 'rotate-cw' : 'Roter 90 grader med uret', 'rotate-ccw' : 'Roter 90 grader mod uret', 'degree' : 'Grader', 'netMountDialogTitle' : 'Mount netwærkdrev', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Vært', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Bruger', // added 18.04.2012 'pass' : 'Kodeord', // added 18.04.2012 'confirmUnmount' : 'Unmounter du $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Slip eller indsæt filer fra browseren', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Slip filer, indsæt webadresser eller billeder (udklipsholder) her', // from v2.1 added 07.04.2014 'encoding' : 'Indkodning', // from v2.1 added 19.12.2014 'locale' : 'Sprog', // from v2.1 added 19.12.2014 'searchTarget' : 'Mål: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Søg efter input MIME-type', // from v2.1 added 22.5.2015 'owner' : 'Ejer', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Andet', // from v2.1 added 20.6.2015 'execute' : 'Udfør', // from v2.1 added 20.6.2015 'perm' : 'Tilladelse', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mappe er tom', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mappe er tom\\A Drop for at tilføje enmer', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mappen er tom\\A Langt tryk for at tilføje emner', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalitet', // from v2.1.6 added 5.1.2016 'autoSync' : 'Autosync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Flyt op', // from v2.1.6 added 18.1.2016 'getLink' : 'Hent URL-link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Valgte emner ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Tillad offline adgang', // from v2.1.10 added 3.25.2016 'reAuth' : 'For at godkende igen', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Indlæser nu...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Åben flere filer', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Du prøver at åbne $1-filerne. Er du sikker på, at du vil åbne i browseren?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Søgeresultaterne er tomme i søgemålet.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Redigerer en fil.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Du har valgt $1 emner.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Du har $1 emner i udklipsholder.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementel søgning er kun fra den aktuelle visning.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Genindsæt', // from v2.1.15 added 3.8.2016 'complete' : '$1 færdig', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontekstmenu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sidevending', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Diskenheds rødder', // from v2.1.16 added 16.9.2016 'reset' : 'Nulstil', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Baggrundsfarve', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Farvevælger', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Aktiveret', // from v2.1.16 added 4.10.2016 'disabled' : 'Deaktiveret', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Søgeresultaterne er tomme i den aktuelle visning.\\ATryk på [Enter] for at udvide søgemålet.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Førstebogstavs søgeresultater er tomme i den aktuelle visning.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Tekstlabel', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minutter tilbage', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Åbn igen med valgt encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Gem med valgt encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vælg mappe', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Førstebogstavs søgning', // from v2.1.23 added 24.3.2017 'presets' : 'Forudindstillinger', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Det er for mange emner, så det kan ikke komme i papirkurven.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Tøm mappen "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Der er ingen emner i mappen "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Præference', // from v2.1.26 added 28.6.2017 'language' : 'Sprog', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialiser de indstillinger, der er gemt i denne browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Værktøjslinjens indstillinger', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tegn tilbage.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 linjer tilbage.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Omtrentlig filstørrelse', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokuser på elementet i dialog med musemarkering', // from v2.1.30 added 2.11.2017 'select' : 'Vælg', // from v2.1.30 added 23.11.2017 'selectAction' : 'Handling, når du vælger fil', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Åbn med den editor, der blev brugt sidst', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverter valg', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Er du sikker på, at du vil omdøbe $1 valgte emner som $2?
Dette kan ikke fortrydes!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch omdøbning', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Tal', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Tilføj prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Tilføj suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Skift filendelse', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolonneindstillinger (listevisning)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle ændringer påvirker straks arkivet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Eventuelle ændringer gennemføres ikke, før denne enhed fjernes.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Følgende disk(e) mounted på denne enhed unmountes også. Er du sikker på at unmounte den?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Valg info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmer, der viser filens hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info-emner (panelet til valg af info)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Tryk igen for at afslutte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Værktøjslinje', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbejdsområde', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Ikonstørrelse (ikonvisning)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Åbn det maksimerede editorvindue', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Da konvertering via API ikke er tilgængelig i øjeblikket, bedes du konvertere på webstedet.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Efter konvertering skal du uploade med elementets URL eller en downloadet fil for at gemme den konverterede fil.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konverter på stedet på $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrationer', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Denne elFinder har følgende eksterne tjenester integreret. Kontroller venligst vilkårene for brug, fortrolighedspolitik osv. inden du bruger det.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Vis skjulte emner', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skjul skjulte emner', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Vis / Skjul skjulte emner', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Filtyper, der skal aktiveres med "Ny fil"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type af tekstfilen', // from v2.1.41 added 7.8.2018 'add' : 'Tilføj', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Standard', // from v2.1.43 added 19.10.2018 'description' : 'Beskrivelse', // from v2.1.43 added 19.10.2018 'website' : 'Hjemmeside', // from v2.1.43 added 19.10.2018 'author' : 'Forfatter', // from v2.1.43 added 19.10.2018 'email' : 'Mail', // from v2.1.43 added 19.10.2018 'license' : 'Licens', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dette element kan ikke gemmes. For at undgå at miste redigeringerne skal du eksportere til din pc.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dobbeltklik på filen for at vælge den.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Brug fuldskærmstilstand', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ukendt', 'kindRoot' : 'Diskenheds rod', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappe', 'kindSelects' : 'Valg', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Ødelagt alias', // applications 'kindApp' : 'Applikation', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint præsentation', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash applikation', 'kindPDF' : 'Flytbart Dokument Format (PDF)', 'kindTorrent' : 'Bittorrent fil', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR arkiv', 'kindJAR' : 'Java JAR fil', 'kindTTF' : 'True Type skrift', 'kindOTF' : 'Open Type skrift', 'kindRPM' : 'RPM pakke', // texts 'kindText' : 'Tekstdokument', 'kindTextPlain' : 'Ren tekst', 'kindPHP' : 'PHP-kode', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML-dokument', 'kindJS' : 'Javascript-kode', 'kindRTF' : 'Rich Text Format', 'kindC' : 'Ckkode', 'kindCHeader' : 'C header-kode', 'kindCPP' : 'C++-kode', 'kindCPPHeader' : 'C++ header-kode', 'kindShell' : 'Unix-skal-script', 'kindPython' : 'Python-kode', 'kindJava' : 'Java-kode', 'kindRuby' : 'Ruby-kode', 'kindPerl' : 'Perlscript', 'kindSQL' : 'SQ- kode', 'kindXML' : 'XML-dokument', 'kindAWK' : 'AWK-kode', 'kindCSV' : 'Komma seperarede værdier', 'kindDOCBOOK' : 'Docbook XML-dokument', 'kindMarkdown' : 'Markdown-tekst', // added 20.7.2015 // images 'kindImage' : 'Billede', 'kindBMP' : 'BMP-billede', 'kindJPEG' : 'JPEG-billede', 'kindGIF' : 'GIF-billede', 'kindPNG' : 'PNG-billede', 'kindTIFF' : 'TIFF-billede', 'kindTGA' : 'TGA-billede', 'kindPSD' : 'Adobe Photoshop-billede', 'kindXBITMAP' : 'X bitmap-billede', 'kindPXM' : 'Pixelmator-billede', // media 'kindAudio' : 'Lydmedie', 'kindAudioMPEG' : 'MPEG-lyd', 'kindAudioMPEG4' : 'MPEG-4-lyd', 'kindAudioMIDI' : 'MIDI-lyd', 'kindAudioOGG' : 'Ogg Vorbis-lyd', 'kindAudioWAV' : 'WAV-lyd', 'AudioPlaylist' : 'MP3-spilleliste', 'kindVideo' : 'Videomedie', 'kindVideoDV' : 'DV-video', 'kindVideoMPEG' : 'MPEG-video', 'kindVideoMPEG4' : 'MPEG-4-video', 'kindVideoAVI' : 'AVI-video', 'kindVideoMOV' : 'Quick Time-video', 'kindVideoWM' : 'Windows Media-video', 'kindVideoFlash' : 'Flash-video', 'kindVideoMKV' : 'Matroska-video', 'kindVideoOGG' : 'Ogg-video' } }; }));PK Zdc__js/i18n/elfinder.fa.jsnuW+A/** * فارسی translation * @author Keyhan Mohammadpour * @author Farhad Zare * @version 2022-02-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fa = { translator : 'Keyhan Mohammadpour <keyhan_universityworks@yahoo.com>, Farhad Zare <farhad@persianoc.com>', language : 'فارسی', direction : 'rtl', dateFormat : 'd.m.Y H:i', // will show like: 28.02.2022 15:41 fancyDateFormat : '$1 H:i', // will show like: امروز 15:41 nonameDateFormat : 'ymd-His', // noname upload will show like: 220228-154144 messages : { 'getShareText' : 'اشتراک گذاری', 'Editor ': 'ویرایشگر کد', /********************************** errors **********************************/ 'error' : 'خطا', 'errUnknown' : 'خطای ناشناخته.', 'errUnknownCmd' : 'دستور ناشناخته.', 'errJqui' : 'تنظیمات کتابخانه JQuery UI شما به درستی انجام نشده است. این کتابخانه بایستی شامل Resizable ،Draggable و Droppable باشد.', 'errNode' : 'elfinder به درستی ایجاد نشده است.', 'errURL' : 'تنظیمات elfinder شما به درستی انجام نشده است. تنظیم Url را اصلاح نمایید.', 'errAccess' : 'محدودیت سطح دسترسی', 'errConnect' : 'امکان اتصال به مدیریت وجود ندارد.', 'errAbort' : 'ارتباط قطع شده است.', 'errTimeout' : 'مهلت زمانی ارتباط شما به اتمام رسیده است.', 'errNotFound' : 'تنظیم مدیریت یافت نشد.', 'errResponse' : 'پاسخ دریافتی از مدیریت صحیح نمی باشد.', 'errConf' : 'تنطیمات مدیریت به درستی انجام نشده است.', 'errJSON' : 'ماژول PHP JSON نصب نیست.', 'errNoVolumes' : 'درایوهای قابل خواندن یافت نشدند.', 'errCmdParams' : 'پارامترهای دستور "$1" به صورت صحیح ارسال نشده است.', 'errDataNotJSON' : 'داده ها در قالب JSON نمی باشند.', 'errDataEmpty' : 'داده دریافتی خالی است.', 'errCmdReq' : 'درخواست از سمت مدیریت نیازمند نام دستور می باشد.', 'errOpen' : 'امکان باز نمودن "$1" وجود ندارد.', 'errNotFolder' : 'آیتم موردنظر پوشه نیست.', 'errNotFile' : 'آیتم موردنظر فایل نیست.', 'errRead' : 'امکان خواندن "$1" وجود ندارد.', 'errWrite' : 'امکان نوشتن در درون "$1" وجود ندارد.', 'errPerm' : 'شما مجاز به انجام این عمل نمی باشید.', 'errLocked' : '"$1" قفل گردیده است و شما قادر به تغییر نام ، حذف و یا جابجایی آن نمی باشید.', 'errExists' : 'فایلی با نام "$1" هم اکنون وجود دارد.', 'errInvName' : 'نام انتخابی شما صحیح نمی باشد.', 'errInvDirname' : 'نام پوشه غیرمعتبر می باشد.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'پوشه مورد نظر یافت نشد.', 'errFileNotFound' : 'فایل مورد نظر یافت نشد.', 'errTrgFolderNotFound' : 'پوشه مقصد با نام "$1" یافت نشد.', 'errPopup' : 'مرورگر شما ار باز شدن پنجره popup جلوگیری می کند، لطفا تنظیمات مربوطه را در مرورگر خود فعال نمایید.', 'errMkdir' : 'امکان ایجاد پوشه ای با نام "$1" وجود ندارد.', 'errMkfile' : 'امکان ایجاد فایلی با نام "$1" وجود ندارد.', 'errRename' : 'امکان تغییر نام فایل "$1" وجود ندارد.', 'errCopyFrom' : 'کپی نمودن از درایو با نام "$1" ممکن نمی باشد.', 'errCopyTo' : 'کپی نمودن به درایو با نام "$1" ممکن نمی باشد.', 'errMkOutLink' : 'امکان ایجاد لینک به خارج از مسیر ریشه وجود ندارد.', // from v2.1 added 03.10.2015 'errUpload' : 'خطای آپلود', // old name - errUploadCommon 'errUploadFile' : 'امکان آپلود "$1" وجود ندارد.', // old name - errUpload 'errUploadNoFiles' : 'فایلی برای آپلود یافت نشد.', 'errUploadTotalSize' : 'حجم داده بیش از حد مجاز می باشد.', // old name - errMaxSize 'errUploadFileSize' : 'حجم فایل بیش از حد مجاز می باشد.', // old name - errFileMaxSize 'errUploadMime' : 'نوع فایل انتخابی مجاز نمی باشد.', 'errUploadTransfer' : 'در انتقال "$1" خطایی رخ داده است.', 'errUploadTemp' : 'امکان ایجاد فایل موقت جهت آپلود وجود ندارد.', // from v2.1 added 26.09.2015 'errNotReplace' : 'آیتم "$1" از قبل وجود دارد و امکان جایگزینی آن با آیتمی از نوع دیگر وجود ندارد.', // new 'errReplace' : 'امکان جایگزینی "$1" وجود ندارد.', 'errSave' : 'امکان ذخیره کردن "$1" وجود ندارد.', 'errCopy' : 'امکان کپی کردن "$1" وجود ندارد.', 'errMove' : 'امکان جابجایی "$1" وجود ندارد.', 'errCopyInItself' : 'امکان کپی کردن "$1" در درون خودش وجود ندارد.', 'errRm' : 'امکان حذف کردن "$1" وجود ندارد.', 'errTrash' : 'امکان حذف وجود ندارد.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'امکان حذف فایل(ها) از مبدا وجود ندارد.', 'errExtract' : 'امکان استخراج فایل فشرده "$1" وجود ندارد.', 'errArchive' : 'امکان ایجاد فایل فشرده وجود ندارد.', 'errArcType' : 'نوع ناشناخته برای فایل فشرده.', 'errNoArchive' : 'این فایل فشرده نیست یا اینکه این نوع فایل فشرده پشتیبانی نمی شود.', 'errCmdNoSupport' : 'مدیریت از این دستور پشتیبانی نمی کند.', 'errReplByChild' : 'امکان جایگزینی پوشه "$1" با یک آیتم از درون خودش وجود ندارد.', 'errArcSymlinks' : 'به دلایل مسائل امنیتی امکان باز کردن فایل فشرده دارای symlinks وجود ندارد.', // edited 24.06.2012 'errArcMaxSize' : 'فایل های فشرده به حداکثر اندازه تعیین شده رسیده اند.', 'errResize' : 'امکان تغییر اندازه "$1" وجود ندارد.', 'errResizeDegree' : 'درجه چرخش نامعتبر است.', // added 7.3.2013 'errResizeRotate' : 'امکان چرخش تصویر وجود ندارد.', // added 7.3.2013 'errResizeSize' : 'اندازه تصویر نامعتبر است.', // added 7.3.2013 'errResizeNoChange' : 'تغییری در اندازه تصویر ایجاد نشده است.', // added 7.3.2013 'errUsupportType' : 'این نوع فایل پشتیبانی نمی شود.', 'errNotUTF8Content' : 'فایل "$1" به صورت UTF-8 ذخیره نشده و امکان ویرایش آن وجود ندارد.', // added 9.11.2011 'errNetMount' : 'امکان اتصال "$1" وجود ندارد.', // added 17.04.2012 'errNetMountNoDriver' : 'این پروتکل پشتیبانی نمی شود.', // added 17.04.2012 'errNetMountFailed' : 'اتصال ناموفق بود.', // added 17.04.2012 'errNetMountHostReq' : 'میزبان موردنیاز است.', // added 18.04.2012 'errSessionExpires' : 'اعتبار جلسه کاری شما بدلیل عدم فعالیت برای مدت زمان طولانی به اتمام رسیده است.', 'errCreatingTempDir' : 'امکان ایجاد دایرکتوری موقت وجود ندارد: "$1"', 'errFtpDownloadFile' : 'امکان دریافت فایل از FTP وجود ندارد: "$1"', 'errFtpUploadFile' : 'امکان آپلود فایل به FTP وجود ندارد: "$1"', 'errFtpMkdir' : 'امکان ایجاد دایرکتوری برروی FTP وجود ندارد: "$1"', 'errArchiveExec' : 'خطا در زمان فشرده سازی این فایل‌ها: "$1"', 'errExtractExec' : 'خطا در زمان بازگشایی این فایل‌ها: "$1"', 'errNetUnMount' : 'امکان قطع اتصال وجود ندارد.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'امکان تبدیل به UTF-8 وجود ندارد', // from v2.1 added 08.04.2014 'errFolderUpload' : 'جهت آپلود کردن پوشه، از یک مرورگر مدرن استفاده نمایید.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'در هنگان جستجو برای "$1" خطایی رخ داده است. نتیجه جستجو به صورت ناتمام می باشد.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'اعتبارسنجی مجدد موردنیاز است.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'حداکثر تعداد انتخاب قابل قبول $1 می‌باشد.', // from v2.1.17 added 17.10.2016 'errRestore' : 'امکان بازیابی وجود ندارد. مقصد بازیابی نامشخص است.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'ویرایشگری برای این نوع فایل یافت نشد.', // from v2.1.25 added 23.5.2017 'errServerError' : 'خطایی در سمت سرور به وجود آمده است.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'امکان خالی کردن پوشه "$1" وجود ندارد.', // from v2.1.25 added 22.6.2017 'moreErrors' : '$1 خطای دیگر نیز وجود دارد.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'شما می توانید تا $1 پوشه در یک زمان ایجاد کنید.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'ایجاد فایل فشرده', 'cmdback' : 'بازگشت به عقب', 'cmdcopy' : 'کپی', 'cmdcut' : 'بریدن', 'cmddownload' : 'دانلود', 'cmdduplicate' : 'تکثیر فایل', 'cmdedit' : 'ویرایش محتوای فایل', 'cmdextract' : 'بازگشایی فایل فشرده', 'cmdforward' : 'حرکت به جلو', 'cmdgetfile' : 'انتخاب فایل‌ها', 'cmdhelp' : 'درباره این نرم‌افزار', 'cmdhome' : 'ریشه', 'cmdinfo' : 'مشاهده مشخصات', 'cmdmkdir' : 'پوشه جدید', 'cmdmkdirin' : 'انتقال به پوشه جدید', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'فایل جدید', 'cmdopen' : 'باز کردن', 'cmdpaste' : 'چسباندن', 'cmdquicklook' : 'پیش نمایش', 'cmdreload' : 'بارگذاری مجدد', 'cmdrename' : 'تغییر نام', 'cmdrm' : 'حذف', 'cmdtrash' : 'انتقال به سطل بازیافت', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'بازیابی', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'جستجوی فایل', 'cmdup' : 'رفتن به سطح بالاتر', 'cmdupload' : 'آپلود فایل', 'cmdview' : 'مشاهده', 'cmdresize' : 'تغییر اندازه و چرخش', 'cmdsort' : 'مرتب سازی', 'cmdnetmount' : 'اتصال درایو شبکه', // added 18.04.2012 'cmdnetunmount': 'قطع اتصال', // from v2.1 added 30.04.2012 'cmdplaces' : 'به مسیرهای', // added 28.12.2014 'cmdchmod' : 'تغییر حالت', // from v2.1 added 20.6.2015 'cmdopendir' : 'بازکردن یک پوشه', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'بازنشانی عرض ستون', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'حالت نمایش تمام صفحه', // from v2.1.15 added 03.08.2016 'cmdmove' : 'انتقال', // from v2.1.15 added 21.08.2016 'cmdempty' : 'خالی کردن پوشه', // from v2.1.25 added 22.06.2017 'cmdundo' : 'خنثی‌سازی', // from v2.1.27 added 31.07.2017 'cmdredo' : 'انجام مجدد', // from v2.1.27 added 31.07.2017 'cmdpreference': 'تنظیمات', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'انتخاب همه موارد', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'لغو انتخاب', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'انتخاب معکوس', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'باز کردن در پنجره جدید', // from v2.1.38 added 3.4.2018 'cmdhide' : 'مخفی (پیشنهادی)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'بستن', 'btnSave' : 'ذخیره', 'btnRm' : 'حذف', 'btnApply' : 'اعمال', 'btnCancel' : 'انصراف', 'btnNo' : 'خیر', 'btnYes' : 'بلی', 'btnMount' : 'اتصال', // added 18.04.2012 'btnApprove': 'رفتن به $1 و تایید', // from v2.1 added 26.04.2012 'btnUnmount': 'قطع اتصال', // from v2.1 added 30.04.2012 'btnConv' : 'تبدیل', // from v2.1 added 08.04.2014 'btnCwd' : 'اینجا', // from v2.1 added 22.5.2015 'btnVolume' : 'درایو', // from v2.1 added 22.5.2015 'btnAll' : 'همه', // from v2.1 added 22.5.2015 'btnMime' : 'نوع فایل', // from v2.1 added 22.5.2015 'btnFileName':'نام فایل', // from v2.1 added 22.5.2015 'btnSaveClose': 'ذخیره و بستن', // from v2.1 added 12.6.2015 'btnBackup' : 'پشتیبان‌گیری', // fromv2.1 added 28.11.2015 'btnRename' : 'تغییر نام', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'تغییر نام(همه)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'قبلی ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'بعدی ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'ذخیره با نام جدید', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'در حال باز کردن پوشه', 'ntffile' : 'در حال باز کردن فایل', 'ntfreload' : 'بارگذاری مجدد محتویات پوشه', 'ntfmkdir' : 'در حال ایجاد پوشه', 'ntfmkfile' : 'در حال ایجاد فایل', 'ntfrm' : 'در حال حذف موارد موردنظر', 'ntfcopy' : 'در حال کپی موارد موردنظر', 'ntfmove' : 'در حال انتقال موارد موردنظر', 'ntfprepare' : 'بررسی موارد موجود', 'ntfrename' : 'در حال تغییر نام فایل', 'ntfupload' : 'در حال آپلود فایل', 'ntfdownload' : 'در حال دانلود فایل', 'ntfsave' : 'در حال ذخیره فایل', 'ntfarchive' : 'در حال ایجاد فایل فشرده', 'ntfextract' : 'در حال استخراج فایل ها از حالت فشرده', 'ntfsearch' : 'در حال جستجوی فایل', 'ntfresize' : 'در حال تغییر اندازه تصاویر', 'ntfsmth' : 'درحال انجام عملیات ....', 'ntfloadimg' : 'در حال بارگذاری تصویر', 'ntfnetmount' : 'در حال اتصال درایو شبکه', // added 18.04.2012 'ntfnetunmount': 'قطع اتصال درایو شبکه', // from v2.1 added 30.04.2012 'ntfdim' : 'در حال محاسبه ابعاد تصویر', // added 20.05.2013 'ntfreaddir' : 'در حال دریافت مشخصات پوشه', // from v2.1 added 01.07.2013 'ntfurl' : 'در حال دریافت URL', // from v2.1 added 11.03.2014 'ntfchmod' : 'در حال تغییر نوع فایل', // from v2.1 added 20.6.2015 'ntfpreupload': 'در حال تایید نام فایل جهت آپلود', // from v2.1 added 31.11.2015 'ntfzipdl' : 'در حال ایجاد فایل جهت دانلود', // from v2.1.7 added 23.1.2016 'ntfparents' : 'در حال دریافت اطلاعات مسیر', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'در حال پردازش فایل آپلود شده', // from v2.1.17 added 2.11.2016 'ntftrash' : 'در حال انتقال به سطل بازیافت', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'در حال بازیابی از سطل بازیافت', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'بررسی پوشه مقصد', // from v2.1.24 added 3.5.2017 'ntfundo' : 'در حال خنثی‌سازی آخرین عملیات', // from v2.1.27 added 31.07.2017 'ntfredo' : 'در حال انجام مجدد آخرین عملیات', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'در حال بررسی مطالب', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'سطل بازیافت', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'نامعلوم', 'Today' : 'امروز', 'Yesterday' : 'دیروز', 'msJan' : 'ژانویه', 'msFeb' : 'فوریه', 'msMar' : 'مارس', 'msApr' : 'آوریل', 'msMay' : 'می', 'msJun' : 'جون', 'msJul' : 'جولای', 'msAug' : 'آگوست', 'msSep' : 'سپتامبر', 'msOct' : 'اکتبر', 'msNov' : 'نوامبر', 'msDec' : 'دسامبر', 'January' : 'ژانویه', 'February' : 'فوریه', 'March' : 'مارس', 'April' : 'آوریل', 'May' : 'می', 'June' : 'جون', 'July' : 'جولای', 'August' : 'آگوست', 'September' : 'سپتامبر', 'October' : 'اکتبر', 'November' : 'نوامبر', 'December' : 'دسامبر', 'Sunday' : 'یک‌شنبه', 'Monday' : 'دوشنبه', 'Tuesday' : 'سه‌شنبه', 'Wednesday' : 'چهارشنبه', 'Thursday' : 'پنج‌شنبه', 'Friday' : 'جمعه', 'Saturday' : 'شنبه', 'Sun' : 'یک‌شنبه', 'Mon' : 'دوشنبه', 'Tue' : 'سه‌شنبه', 'Wed' : 'چهارشنبه', 'Thu' : 'پنج‌شنبه', 'Fri' : 'جمعه', 'Sat' : 'شنبه', /******************************** sort variants ********************************/ 'sortname' : 'بر اساس نام', 'sortkind' : 'بر اساس نوع', 'sortsize' : 'بر اساس اندازه', 'sortdate' : 'بر اساس تاریخ', 'sortFoldersFirst' : 'پوشه‌ها در ابتدای لیست', 'sortperm' : 'براساس سطح دسترسی', // from v2.1.13 added 13.06.2016 'sortmode' : 'براساس مد دسترسی', // from v2.1.13 added 13.06.2016 'sortowner' : 'براساس مالک', // from v2.1.13 added 13.06.2016 'sortgroup' : 'براساس گروه', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'همچنین نمای درختی', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'فایل.txt جدید', // added 10.11.2015 'untitled folder' : 'پوشه جدید', // added 10.11.2015 'Archive' : 'بایگانی جدید', // from v2.1 added 10.11.2015 'untitled file' : 'فایل جدید.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: فایل', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'تایید نهایی عملیات ضروری است.', 'confirmRm' : 'آیا مطمئنید که موارد انتخابی حذف شوند؟ موارد حدف شده قابل بازیابی نخواهند بود!', 'confirmRepl' : 'مالیلد جایگزینی فایل قدیمی با فایل جدید انجام شود؟ (برای جایگزینی پوشه محتوای قدیمی با محتوای پوشه جدید ادغام خواهد شد. برای تهیه پشتیبانی و سپس جایگزینی گزینه پشتیبان‌گیری را انتخاب نمایید)', 'confirmRest' : 'آیا مایلید موارد موجود با موارد بازیابی شده از سطل بازیافت جایگزین شود؟', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 نیست
تبدیل به UTF-8 انجام شود؟
پس از ذخیره سازی محتوا به صورت UTF-8 خواهد بود.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'encoding این فایل قابل تشخیص نیست. جهت ویرایش نیاز است که به صورت موقت به UTF-8 تبدیل شود.
لطفا encoding فایل را انتخاب نمایید.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'تغییراتی اعمال شده است.
در صورت عدم ذخیره تغییرات از بین خواهد رفت.', // from v2.1 added 15.7.2015 'confirmTrash' : 'آیا مطمئنید که این موارد به سطل بازیافت منتقل شوند؟', //from v2.1.24 added 29.4.2017 'confirmMove' : 'آیا مطمئن هستید که می خواهید موارد را به "$1" منتقل کنید؟', //from v2.1.50 added 27.7.2019 'apllyAll' : 'اعمال تغییرات به همه موارد', 'name' : 'نام', 'size' : 'اندازه', 'perms' : 'سطح دسترسی', 'modify' : 'آخرین تغییرات', 'kind' : 'نوع', 'read' : 'خواندن', 'write' : 'نوشتن', 'noaccess' : 'دسترسی وجود ندارد', 'and' : 'و', 'unknown' : 'نامعلوم', 'selectall' : 'انتخاب همه موارد', 'selectfiles' : 'انتخاب یک یا چند مورد', 'selectffile' : 'انتخاب اولین مورد', 'selectlfile' : 'انتخاب آخرین مورد', 'viewlist' : 'حالت نمایش لیست', 'viewicons' : 'نمایش با آیکون', 'viewSmall' : 'آیکون‌های کوچک', // from v2.1.39 added 22.5.2018 'viewMedium' : 'آیکون‌های متوسط', // from v2.1.39 added 22.5.2018 'viewLarge' : 'آیکون‌های بزرگ', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'آیکون‌های خیلی بزرگ', // from v2.1.39 added 22.5.2018 'places' : 'مسیرها', 'calc' : 'محاسبه', 'path' : 'مسیر', 'aliasfor' : 'نام مستعار برای', 'locked' : 'قفل شده', 'dim' : 'ابعاد', 'files' : 'فایل‌ها', 'folders' : 'پوشه‌ها', 'items' : 'آیتم‌ها', 'yes' : 'بلی', 'no' : 'خیر', 'link' : 'لینک', 'searcresult' : 'نتایج جستجو', 'selected' : 'موارد انتخاب شده', 'about' : 'درباره', 'shortcuts' : 'میانبرها', 'help' : 'راهنمایی', 'webfm' : 'مدیر فایل تحت وب', 'ver' : 'نسخه', 'protocolver' : 'نسخه پروتکل', 'homepage' : 'صفحه اصلی پروژه', 'docs' : 'مستندات', 'github' : 'صفحه پروژه را در Github مشاهده کنید', 'twitter' : 'ما را در Twitter دنبال کنید', 'facebook' : 'به ما در facebook ملحق شوید', 'team' : 'تیم', 'chiefdev' : 'توسعه دهنده اصلی', 'developer' : 'توسعه دهنده', 'contributor' : 'مشارکت کننده', 'maintainer' : 'پشتیبان', 'translator' : 'مترجم', 'icons' : 'آیکون‌ها', 'dontforget' : 'و فراموش نکنید که حوله خود را بردارید', 'shortcutsof' : 'میانبرها غیرفعال شده‌اند.', 'dropFiles' : 'فایل ها در این بخش رها کنید.', 'or' : 'یا', 'selectForUpload' : 'انتخاب فایل جهت آپلود', 'moveFiles' : 'انتقال موارد', 'copyFiles' : 'کپی موارد', 'restoreFiles' : 'بازیابی موارد', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'حذف', 'aspectRatio' : 'نسبت تصویر', 'scale' : 'مقیاس', 'width' : 'طول', 'height' : 'ارتفاع', 'resize' : 'تغییر اندازه', 'crop' : 'بریدن', 'rotate' : 'چرخاندن', 'rotate-cw' : 'چرخاندن 90 درجه در جهت عقربه‌های ساعت', 'rotate-ccw' : 'چرخاندن 90 درجه در جهت خلاف عقربه‌های ساعت', 'degree' : '°', 'netMountDialogTitle' : 'اتصال درایو شبکه', // added 18.04.2012 'protocol' : 'پروتکل', // added 18.04.2012 'host' : 'میزبان', // added 18.04.2012 'port' : 'پورت', // added 18.04.2012 'user' : 'نام کاربری', // added 18.04.2012 'pass' : 'کلمه عبور', // added 18.04.2012 'confirmUnmount' : 'مطمئن به قطع اتصال $1 می باشد؟', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'فایل‌ها را به داخل این کادر بیندازید یا از حافظه paste کنید', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'فایل‌ها را به داخل این کادر بیندازید یا از داخل حافظه آدرس URL/تصاویر را paste کنید', // from v2.1 added 07.04.2014 'encoding' : 'نوع کد گذاری', // from v2.1 added 19.12.2014 'locale' : 'نوع Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'مقصد: $1', // from v2.1 added 22.5.2015 'searchMime' : 'جستجو براساس MIME Type وارد شده', // from v2.1 added 22.5.2015 'owner' : 'مالک', // from v2.1 added 20.6.2015 'group' : 'گروه', // from v2.1 added 20.6.2015 'other' : 'سایر', // from v2.1 added 20.6.2015 'execute' : 'قابل اجرا', // from v2.1 added 20.6.2015 'perm' : 'سطح دسترسی', // from v2.1 added 20.6.2015 'mode' : 'مد دسترسی', // from v2.1 added 20.6.2015 'emptyFolder' : 'پوشه خالی است', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'پوشه خالی است، فایل‌ها را جهت افزودن کشیده و رها کنید', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'پوشه خالی است، یک اشاره طولانی برای افزودن فایل کافی است', // from v2.1.6 added 30.12.2015 'quality' : 'کیفیت', // from v2.1.6 added 5.1.2016 'autoSync' : 'همگام‌سازی خودکار', // from v2.1.6 added 10.1.2016 'moveUp' : 'حرکت به بالا', // from v2.1.6 added 18.1.2016 'getLink' : 'دریافت URL لینک', // from v2.1.7 added 9.2.2016 'selectedItems' : 'موارد انتخاب شده ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'شناسه پوشه', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'اجازه دسترسی به صورت آفلاین', // from v2.1.10 added 3.25.2016 'reAuth' : 'جهت اعتبارسنجی مجدد', // from v2.1.10 added 3.25.2016 'nowLoading' : 'در حال بازگذاری...', // from v2.1.12 added 4.26.2016 'openMulti' : 'بازکردن چندین فایل', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'شما قصد باز کردن $1 فایل را دارید. آیا مایلید همه موارد در مرورگر باز شود؟', // from v2.1.12 added 5.14.2016 'emptySearch' : 'موردی یافت نشد.', // from v2.1.12 added 5.16.2016 'editingFile' : 'در حال ویرایش یک فایل.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'شما $1 مورد را انتخاب کرده‌اید.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'در حافظه $1 مورد وجود دارد.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'جستجوی افزایش فقط از نمای فعلی.', // from v2.1.13 added 6.30.2016 'reinstate' : 'بازگرداندن', // from v2.1.15 added 3.8.2016 'complete' : 'عملیات $1 انجام شد', // from v2.1.15 added 21.8.2016 'contextmenu' : 'منو راست', // from v2.1.15 added 9.9.2016 'pageTurning' : 'چرخش صفحه', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'ریشه‌های درایو', // from v2.1.16 added 16.9.2016 'reset' : 'بازنشانی', // from v2.1.16 added 1.10.2016 'bgcolor' : 'رنگ پس زمینه', // from v2.1.16 added 1.10.2016 'colorPicker' : 'انتخابگر رنگ', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'گرید 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'فعال شده', // from v2.1.16 added 4.10.2016 'disabled' : 'غیرفعال شده', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'در نمای فعلی موردی یافت نشد.\\Aبا فشردن کلید Enter مسیر جستجو را تغییر دهید.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'برای جستجوی تک حرفی در نمایش فعلی موردی یافت نشد.', // from v2.1.23 added 24.3.2017 'textLabel' : 'عنوان متنی', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 دقیقه باقیمانده', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'باز کردن مجدد با کد گذاری انتخاب شده', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'ذخیره با کد گذاری انتخاب شده', // from v2.1.19 added 2.12.2016 'selectFolder' : 'انتخاب پوشه', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'جستجوی تک حرفی', // from v2.1.23 added 24.3.2017 'presets' : 'از پیش تعیین شده', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'موارد زیاد است و امکان انتقال به سطل بازیافت وجود ندارد.', // from v2.1.25 added 9.6.2017 'TextArea' : 'ویرایش محتوا', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'خالی کردن پوشه "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'پوشه "$1" ‌ذاتا خالی است.', // from v2.1.25 added 22.6.2017 'preference' : 'تنظیمات', // from v2.1.26 added 28.6.2017 'language' : 'زبان', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'بازبینی تنظیمات ذخیره شده در این مرورگر', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'تنظیمات نوار ابزار', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 کاراکتر باقیمانده.', // from v2.1.29 added 30.8.2017 'linesLeft' : '$1 خط مانده است', // from v2.1.52 added 16.1.2020 'sum' : 'مجموع', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'اندازه فایل نامتعارف', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'انتخاب عناصر داخل دیالوگ با mouseover', // from v2.1.30 added 2.11.2017 'select' : 'انتخاب', // from v2.1.30 added 23.11.2017 'selectAction' : 'عملیات به هنگام انتخاب فایل', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'باز کردن با ویرایشگر مورداستفاده در آخرین دفعه', // from v2.1.30 added 23.11.2017 'selectinvert' : 'انتخاب معکوس', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'آیا مایل به تغییر نام $1 مورد انتخاب شده همانند $2 هستید؟
امکان بازگرداندن این تغییر پس از اعمالو جود ندارد!', // from v2.1.31 added 4.12.2017 'batchRename' : 'تغییرنام گروهی', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ عدد', // from v2.1.31 added 8.12.2017 'asPrefix' : 'افزودن پیشوند', // from v2.1.31 added 8.12.2017 'asSuffix' : 'افزودن پسوند', // from v2.1.31 added 8.12.2017 'changeExtention' : 'تغییر پسوند فایل', // from v2.1.31 added 8.12.2017 'columnPref' : 'تنظیمات ستون‌ها (حالت نمایش لیست)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'تمامی تغییرات به صورت آنی برروی فایل فشرده اعمال خواهد شد.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'تمامی تغییرات تا زمانی که اتصال این درایو قطع نشده است اعمال نخواهند شد.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'اتصال به درایوهای زیر قطع خواهد شد. آیا مطمئن به ادامه عملیات هستید؟', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'مشخصات', // from v2.1.33 added 7.3.2018 'hashChecker' : 'الگوریتم های نمایش hash فایل', // from v2.1.33 added 10.3.2018 'infoItems' : 'موارد اطلاعات', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'جهت خروج مجدد فشار دهید.', // from v2.1.38 added 1.4.2018 'toolbar' : 'نوار ابزار', // from v2.1.38 added 4.4.2018 'workspace' : 'فضای کاری', // from v2.1.38 added 4.4.2018 'dialog' : 'پنجره دیالوگ', // from v2.1.38 added 4.4.2018 'all' : 'همه', // from v2.1.38 added 4.4.2018 'iconSize' : 'اندازه آیکون‌ها (نمایش به صورت آیکون)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'باز کردن پنجره ویرایشگر به صورت تمام صفحه', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'بدلیل در دسترسی نبودن تبدیل از طریق API، لطفا برروی وب سایت تبدیل را انجام دهید.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'پس از تبدیل, شما بایستی از طریق آدرس URL یا فایل دریافت شده آپلود را انجاد دهید تا فایل تبدیل شده ذخیره گردد.', //from v2.1.40 added 8.7.2018 'convertOn' : 'تبدیل برروی سایت از $1', // from v2.1.40 added 10.7.2018 'integrations' : 'هماهنگ سازی‌ها', // from v2.1.40 added 11.7.2018 'integrationWith' : 'elFinder با سرویس های زیر هماهنگ شده است. لطفا ابتدا شرایط استفاده، مقررات حریم خصوصی و سایر موارد را مطالعه بفرمایید.', // from v2.1.40 added 11.7.2018 'showHidden' : 'نمایش موارد پنهان', // from v2.1.41 added 24.7.2018 'hideHidden' : 'موارد مخفی را پنهان کنید', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'نمایش / پنهان کردن موارد پنهان', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'انواع فایل برای فعال کردن با "فایل جدید"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'نوع فایل نوشتاری', // from v2.1.41 added 7.8.2018 'add' : 'اضافه کردن', // from v2.1.41 added 7.8.2018 'theme' : 'تم', // from v2.1.43 added 19.10.2018 'default' : 'پیش فرض', // from v2.1.43 added 19.10.2018 'description' : 'توضیحات', // from v2.1.43 added 19.10.2018 'website' : 'وب سایت', // from v2.1.43 added 19.10.2018 'author' : 'نویستده', // from v2.1.43 added 19.10.2018 'email' : 'ایمیل', // from v2.1.43 added 19.10.2018 'license' : 'لایسنس', // from v2.1.43 added 19.10.2018 'exportToSave' : 'این مورد ذخیره نمی شود برای جلوگیری از دست دادن ویرایش ها ، آنها را به رایانه خود منتقل کنید.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'برای انتخاب پرونده ، دوبار کلیک کنید.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'از حالت تمام صفحه استفاده کنید', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'نامعلوم', 'kindRoot' : 'ریشه درایو', // from v2.1.16 added 16.10.2016 'kindFolder' : 'پوشه', 'kindSelects' : 'انتخاب شده‌ها', // from v2.1.29 added 29.8.2017 'kindAlias' : 'اسم مستعار', 'kindAliasBroken' : 'اسم مستعار ناقص', // applications 'kindApp' : 'برنامه', 'kindPostscript' : 'سند Postscript', 'kindMsOffice' : 'سند Microsoft Office', 'kindMsWord' : 'سند Microsoft Word', 'kindMsExcel' : 'سند Microsoft Excel', 'kindMsPP' : 'فایل ارایه Microsoft Powerpoint', 'kindOO' : 'سند Open Office', 'kindAppFlash' : 'برنامه فلش', 'kindPDF' : 'سند قابل حمل (PDF)', 'kindTorrent' : 'فایل تورنت', 'kind7z' : 'فایل فشرده 7z', 'kindTAR' : 'فایل فشرده TAR', 'kindGZIP' : 'فایل فشرده GZIP', 'kindBZIP' : 'فایل فشرده BZIP', 'kindXZ' : 'فایل فشرده XZ', 'kindZIP' : 'فایل فشرده ZIP', 'kindRAR' : 'فایل فشرده RAR', 'kindJAR' : 'فایل JAR مربوط به جاوا', 'kindTTF' : 'فونت True Type', 'kindOTF' : 'فونت Open Type', 'kindRPM' : 'بسته RPM', // texts 'kindText' : 'سند متنی', 'kindTextPlain' : 'سند متنی ساده', 'kindPHP' : 'سورس کد PHP', 'kindCSS' : 'فایل style sheet', 'kindHTML' : 'سند HTML', 'kindJS' : 'سورس کد Javascript', 'kindRTF' : 'سند متنی غنی', 'kindC' : 'سورس کد C', 'kindCHeader' : 'سورس کد C header', 'kindCPP' : 'سورس کد C++', 'kindCPPHeader' : 'سورس کد C++ header', 'kindShell' : 'اسکریپت شل یونیکس', 'kindPython' : 'سورس کد Python', 'kindJava' : 'سورس کد Java', 'kindRuby' : 'سورس کد Ruby', 'kindPerl' : 'اسکریپت Perl', 'kindSQL' : 'سورس کد SQL', 'kindXML' : 'سند XML', 'kindAWK' : 'سورس کد AWK', 'kindCSV' : 'مقادیر جداشده با کامل', 'kindDOCBOOK' : 'سند Docbook XML', 'kindMarkdown' : 'سند متنی Markdown', // added 20.7.2015 // images 'kindImage' : 'تصویر', 'kindBMP' : 'تصویر BMP', 'kindJPEG' : 'تصویر JPEG', 'kindGIF' : 'تصویر GIF', 'kindPNG' : 'تصویر PNG', 'kindTIFF' : 'تصویر TIFF', 'kindTGA' : 'تصویر TGA', 'kindPSD' : 'تصویر Adobe Photoshop', 'kindXBITMAP' : 'تصویر X bitmap', 'kindPXM' : 'تصویر Pixelmator', // media 'kindAudio' : 'فایل صوتی', 'kindAudioMPEG' : 'فایل صوتی MPEG', 'kindAudioMPEG4' : 'فایل صوتی MPEG-4', 'kindAudioMIDI' : 'فایل صوتی MIDI', 'kindAudioOGG' : 'فایل صوتی Ogg Vorbis', 'kindAudioWAV' : 'فایل صوتی WAV', 'AudioPlaylist' : 'لیست پخش MP3', 'kindVideo' : 'فایل ویدیویی', 'kindVideoDV' : 'فایل ویدیویی DV', 'kindVideoMPEG' : 'فایل ویدیویی MPEG', 'kindVideoMPEG4' : 'فایل ویدیویی MPEG-4', 'kindVideoAVI' : 'فایل ویدیویی AVI', 'kindVideoMOV' : 'فایل ویدیویی Quick Time', 'kindVideoWM' : 'فایل ویدیویی Windows Media', 'kindVideoFlash' : 'فایل ویدیویی Flash', 'kindVideoMKV' : 'فایل ویدیویی Matroska', 'kindVideoOGG' : 'فایل ویدیویی Ogg' } }; }));PK Z::js/i18n/elfinder.uk.jsnuW+A/** * Українська мова translation * @author ITLancer * @author cjayho * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.uk = { translator : 'ITLancer, cjayho <cj.fooser@gmail.com>', language : 'Українська мова', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 03.03.2022 18:02 fancyDateFormat : '$1 H:i', // will show like: сьогодні 18:02 nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-180221 messages : { 'getShareText' : 'Поділіться', 'Editor ': 'Редактор коду', /********************************** errors **********************************/ 'error' : 'Помилка', 'errUnknown' : 'Невідома помилка.', 'errUnknownCmd' : 'Невідома команда.', 'errJqui' : 'Неправильне налаштування jQuery UI. Відсутні компоненти: selectable, draggable, droppable.', 'errNode' : 'Відсутній елемент DOM для створення elFinder.', 'errURL' : 'Неправильне налаштування! Не вказана опція URL.', 'errAccess' : 'Доступ заборонено.', 'errConnect' : 'Не вдалося з’єднатися з backend.', 'errAbort' : 'З’єднання розірване.', 'errTimeout' : 'Тайм-аут з’єднання.', 'errNotFound' : 'Не знайдено backend.', 'errResponse' : 'Неправильна відповідь від backend.', 'errConf' : 'Неправильне налаштування backend.', 'errJSON' : 'Модуль PHP JSON не встановлено.', 'errNoVolumes' : 'Немає доступних для читання директорій.', 'errCmdParams' : 'Неправильні параметри для команди "$1".', 'errDataNotJSON' : 'Дані не у форматі JSON.', 'errDataEmpty' : 'Дані відсутні.', 'errCmdReq' : 'Backend вимагає назву команди.', 'errOpen' : 'Неможливо відкрити "$1".', 'errNotFolder' : 'Об’єкт не є папкою.', 'errNotFile' : 'Об’єкт не є файлом.', 'errRead' : 'Неможливо прочитати "$1".', 'errWrite' : 'Неможливо записати в "$1".', 'errPerm' : 'Помилка доступу.', 'errLocked' : 'Файл "$1" заблоковано і його неможливо перемістити, перейменувати чи вилучити.', 'errExists' : 'Файл з назвою "$1" вже існує.', 'errInvName' : 'Недійсна назва файла.', 'errInvDirname' : 'Недійсна назва теки.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Теку не знайдено.', 'errFileNotFound' : 'Файл не знайдено.', 'errTrgFolderNotFound' : 'Цільову теку "$1" не знайдено.', 'errPopup' : 'Браузер забороняє відкривати popup-вікно. Дозвольте у налаштування браузера, щоб відкрити файл.', 'errMkdir' : 'Неможливо створити теку "$1".', 'errMkfile' : 'Неможливо створити файл "$1".', 'errRename' : 'Неможливо перейменувати файл "$1".', 'errCopyFrom' : 'Копіювання файлів з тому "$1" не дозволено.', 'errCopyTo' : 'Копіювання файлів на том "$1" не дозволено.', 'errMkOutLink' : 'Неможливо створити посилання у місце за межами кореневої теки носія.', // from v2.1 added 03.10.2015 'errUpload' : 'Помилка відвантаження.', // old name - errUploadCommon 'errUploadFile' : 'Неможливо відвантажити файл "$1".', // old name - errUpload 'errUploadNoFiles' : 'Не знайдено файлів для відвантаження.', 'errUploadTotalSize' : 'Об\'єм даних перевищив встановлений ліміт.', // old name - errMaxSize 'errUploadFileSize' : 'Об\'єм файла перевищив встановлений ліміт.', // old name - errFileMaxSize 'errUploadMime' : 'Файли цього типу заборонені.', 'errUploadTransfer' : '"$1" : помилка передачі.', 'errUploadTemp' : 'Неможливо створити тимчасовий файл для відвантаження.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Об\'єкт "$1" вже існує тут та не може бути заміненим на об\'єкт іншого типу.', // new 'errReplace' : 'Неможливо замінити "$1".', 'errSave' : 'Неможливо записати "$1".', 'errCopy' : 'Неможливо скопіювати "$1".', 'errMove' : 'Неможливо перенести "$1".', 'errCopyInItself' : 'Неможливо скопіювати "$1" сам у себе.', 'errRm' : 'Неможливо вилучити "$1".', 'errTrash' : 'Неможливо пересунути до смітника.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Неможливо видалити оригінальний(і) файл(и).', 'errExtract' : 'Неможливо розпакувати файли з "$1".', 'errArchive' : 'Неможливо створити архів.', 'errArcType' : 'Тип архіву не підтримується.', 'errNoArchive' : 'Файл не є архівом, або є архівом, тип якого не підтримується.', 'errCmdNoSupport' : 'Серверна частина не підтримує цієї команди.', 'errReplByChild' : 'Папка “$1” не може бути замінена елементом, який вона містить.', 'errArcSymlinks' : 'З міркувань безпеки заборонено розпаковувати архіви з символічними посиланнями.', // edited 24.06.2012 'errArcMaxSize' : 'Розмір файлів архіву перевищує допустиме значення.', 'errResize' : 'Неможливо масштабувати "$1".', 'errResizeDegree' : 'Недійсний кут обертання.', // added 7.3.2013 'errResizeRotate' : 'Неможливо повернути світлину.', // added 7.3.2013 'errResizeSize' : 'Недійсний розмір світлини.', // added 7.3.2013 'errResizeNoChange' : 'Розмір світлини не змінено.', // added 7.3.2013 'errUsupportType' : 'Непідтримуваний тип файла.', 'errNotUTF8Content' : 'Файл "$1" не в UTF-8 і не може бути відредагований.', // added 9.11.2011 'errNetMount' : 'Неможливо змонтувати "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Непідтримуваний протокл.', // added 17.04.2012 'errNetMountFailed' : 'В процесі монтування сталася помилка.', // added 17.04.2012 'errNetMountHostReq' : 'Необхідно вказати хост.', // added 18.04.2012 'errSessionExpires' : 'Час сеансу минув через неактивність.', 'errCreatingTempDir' : 'НЕможливо створити тимчасову директорію: "$1"', 'errFtpDownloadFile' : 'Неможливо завантажити файл з FTP: "$1"', 'errFtpUploadFile' : 'Неможливо завантажити файл на FTP: "$1"', 'errFtpMkdir' : 'Неможливо створити віддалений каталог на FTP: "$1"', 'errArchiveExec' : 'Помилка при архівації файлів: "$1"', 'errExtractExec' : 'Помилка при розархівуванні файлів: "$1"', 'errNetUnMount' : 'Неможливо демонтувати', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Неможливо конвертувати в UTF - 8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Використовуйте Google Chrome, якщо ви хочете завантажити папку', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Час пошуку "$1" вийшов. Результат пошуку частковий', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Необхідна повторна авторизація.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Максимальна кількість об\'єктів що можна обрати складає $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Неможливо відновити зі смітника: неможливо визначити місце куди відновлювати.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Для цього типу файлів не знайдено редактора.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Помилка на боці сервера.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Неможливо спорожнити теку "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Є також ще $1 помилок.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Ви можете створити до $1 папки одночасно.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Архівувати', 'cmdback' : 'Назад', 'cmdcopy' : 'Копівати', 'cmdcut' : 'Вирізати', 'cmddownload' : 'Завантажити', 'cmdduplicate' : 'Дублювати', 'cmdedit' : 'Редагувати файл', 'cmdextract' : 'Розпакувати файли з архіву', 'cmdforward' : 'Вперед', 'cmdgetfile' : 'Вибрати файли', 'cmdhelp' : 'Про програму', 'cmdhome' : 'Додому', 'cmdinfo' : 'Інформація', 'cmdmkdir' : 'Створити теку', 'cmdmkdirin' : 'До нової теки', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Створити файл', 'cmdopen' : 'Відкрити', 'cmdpaste' : 'Вставити', 'cmdquicklook' : 'Попередній перегляд', 'cmdreload' : 'Перечитати', 'cmdrename' : 'Перейменувати', 'cmdrm' : 'Вилучити', 'cmdtrash' : 'До смітника', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Відновити', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Шукати файли', 'cmdup' : 'На 1 рівень вгору', 'cmdupload' : 'Відвантажити файли', 'cmdview' : 'Перегляд', 'cmdresize' : 'Масштабувати зображення', 'cmdsort' : 'Сортування', 'cmdnetmount' : 'Змонтувати мережевий диск', // added 18.04.2012 'cmdnetunmount': 'Розмонтувати', // from v2.1 added 30.04.2012 'cmdplaces' : 'До Місць', // added 28.12.2014 'cmdchmod' : 'Змінити права', // from v2.1 added 20.6.2015 'cmdopendir' : 'Відкрии директорію', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Скинути ширину стовпчика', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Повний екран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Пересунути', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Спорожнити теку', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Скасувати', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Відновити', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Налаштування', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Вибрати усі', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Зняти вибір', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Інвертувати вибір', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Відкрити у новому вікні', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Сховати (Налаштування)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Закрити', 'btnSave' : 'Зберегти', 'btnRm' : 'Вилучити', 'btnApply' : 'Застосувати', 'btnCancel' : 'Скасувати', 'btnNo' : 'Ні', 'btnYes' : 'Так', 'btnMount' : 'Підключити', // added 18.04.2012 'btnApprove': 'Перейти в $1 і прийняти', // from v2.1 added 26.04.2012 'btnUnmount': 'Відключити', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертувати', // from v2.1 added 08.04.2014 'btnCwd' : 'Тут', // from v2.1 added 22.5.2015 'btnVolume' : 'Розділ', // from v2.1 added 22.5.2015 'btnAll' : 'Всі', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Назва файла', // from v2.1 added 22.5.2015 'btnSaveClose': 'Зберегти і вийти', // from v2.1 added 12.6.2015 'btnBackup' : 'Резервна копія', // fromv2.1 added 28.11.2015 'btnRename' : 'Перейменувати', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Перейменуваті(Усі)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Попер. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Наступ. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Зберегти як', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Відкрити теку', 'ntffile' : 'Відкрити файл', 'ntfreload' : 'Перечитати вміст теки', 'ntfmkdir' : 'Створення теки', 'ntfmkfile' : 'Створення файлів', 'ntfrm' : 'Вилучити файли', 'ntfcopy' : 'Копіювати файли', 'ntfmove' : 'Перенести файли', 'ntfprepare' : 'Підготовка до копіювання файлів', 'ntfrename' : 'Перейменувати файли', 'ntfupload' : 'Відвантажити файли', 'ntfdownload' : 'Завантажити файли', 'ntfsave' : 'Записати файли', 'ntfarchive' : 'Створення архіву', 'ntfextract' : 'Розпаковування архіву', 'ntfsearch' : 'Пошук файлів', 'ntfresize' : 'Зміна розміру світлини', 'ntfsmth' : 'Виконуємо', 'ntfloadimg' : 'Завантаження зображення', 'ntfnetmount' : 'Монтування мережевого диска', // added 18.04.2012 'ntfnetunmount': 'Розмонтування мережевого диска', // from v2.1 added 30.04.2012 'ntfdim' : 'Визначення розміру світлини', // added 20.05.2013 'ntfreaddir' : 'Читання інформації директорії', // from v2.1 added 01.07.2013 'ntfurl' : 'отримання URL посилання', // from v2.1 added 11.03.2014 'ntfchmod' : 'Зміна прав файлу', // from v2.1 added 20.6.2015 'ntfpreupload': 'Перевірка імені завантажуваного файла', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Створення файлу для завантаження', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Отримання інформації про шлях', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обробка вивантаженого файлу', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Переміщуємо до смітника', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Відновлюємо зі смітника', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Перевіряємо теку призначення', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Скасування попередньої дії', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Повторення раніше скасованої дії', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Перевірка вмісту', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Смітник', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'невідомо', 'Today' : 'сьогодні', 'Yesterday' : 'вчора', 'msJan' : 'Січ', 'msFeb' : 'Лют', 'msMar' : 'Бер', 'msApr' : 'Кві', 'msMay' : 'Тра', 'msJun' : 'Чер', 'msJul' : 'Лип', 'msAug' : 'Сер', 'msSep' : 'Вер', 'msOct' : 'Жов', 'msNov' : 'Лис', 'msDec' : 'Гру', 'January' : 'січня', 'February' : 'лютого', 'March' : 'березня', 'April' : 'квітня', 'May' : 'травня', 'June' : 'червня', 'July' : 'липня', 'August' : 'серпня', 'September' : 'вересня', 'October' : 'жовтня', 'November' : 'листопада', 'December' : 'грудня', 'Sunday' : 'Неділя', 'Monday' : 'Понеділок', 'Tuesday' : 'Вівторок', 'Wednesday' : 'Середа', 'Thursday' : 'Четвер', 'Friday' : 'П’ятниця', 'Saturday' : 'Субота', 'Sun' : 'Нд', 'Mon' : 'Пн', 'Tue' : 'Вт', 'Wed' : 'Ср', 'Thu' : 'Чт', 'Fri' : 'Пт', 'Sat' : 'Сб', /******************************** sort variants ********************************/ 'sortname' : 'за назвою', 'sortkind' : 'за типом', 'sortsize' : 'за розміром', 'sortdate' : 'за датою', 'sortFoldersFirst' : 'Список тек', 'sortperm' : 'за дозволами', // from v2.1.13 added 13.06.2016 'sortmode' : 'за режимом', // from v2.1.13 added 13.06.2016 'sortowner' : 'за власником', // from v2.1.13 added 13.06.2016 'sortgroup' : 'за групою', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Також вигляд дерева', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'неназваний файл.txt', // added 10.11.2015 'untitled folder' : 'неназвана тека', // added 10.11.2015 'Archive' : 'НовийАрхів', // from v2.1 added 10.11.2015 'untitled file' : 'НовийФайл.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Файл', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2 ', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Необхідне підтвердження', 'confirmRm' : 'Ви справді хочете вилучити файли?
Операція незворотня!', 'confirmRepl' : 'Замінити старий файл новим? (при наявності тек вони будуть об\'єднані. Для резервної копії та заміни оберіть Резервну Копію)', 'confirmRest' : 'Замінити існуючий об\'єкт об\'єктом зі смітника?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Не у UTF-8
Конвертувати у UTF-8?
Вміст стане у UTF-8 збереженням після конвертації.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Кодування символів цього файлу неможливо визначити. Потрібно тимчасово конвертувати його у UTF-8 для редагування.
Оберіть кодування цього файлу.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Було внесено зміни.
Якщо ії не зберегти, їх буде втрачено.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Ви точно бажаєте перемістити ці об\'єкти до смітника?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Ви точно бажаєте перемістити об\'єкти до "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Застосувати до всіх', 'name' : 'Назва', 'size' : 'Розмір', 'perms' : 'Доступи', 'modify' : 'Змінено', 'kind' : 'Тип', 'read' : 'читання', 'write' : 'запис', 'noaccess' : 'недоступно', 'and' : 'і', 'unknown' : 'невідомо', 'selectall' : 'Вибрати всі файли', 'selectfiles' : 'Вибрати файл(и)', 'selectffile' : 'Вибрати перший файл', 'selectlfile' : 'Вибрати останній файл', 'viewlist' : 'Списком', 'viewicons' : 'Значками', 'viewSmall' : 'Маленькі значки', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Середні значки', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Великі значки', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Дуже великі значки', // from v2.1.39 added 22.5.2018 'places' : 'Розташування', 'calc' : 'Вирахувати', 'path' : 'Шлях', 'aliasfor' : 'Аліас для', 'locked' : 'Заблоковано', 'dim' : 'Розміри', 'files' : 'Файли', 'folders' : 'теки', 'items' : 'Елементи', 'yes' : 'так', 'no' : 'ні', 'link' : 'Посилання', 'searcresult' : 'Результати пошуку', 'selected' : 'Вибрані елементи', 'about' : 'Про', 'shortcuts' : 'Ярлики', 'help' : 'Допомога', 'webfm' : 'Web-менеджер файлів', 'ver' : 'Версія', 'protocolver' : 'версія протоколу', 'homepage' : 'Сторінка проекту', 'docs' : 'Документація', 'github' : 'Fork us on Github', 'twitter' : 'Слідкуйте у Твітері', 'facebook' : 'Приєднуйтесь у фейсбуці', 'team' : 'Автори', 'chiefdev' : 'головний розробник', 'developer' : 'розробник', 'contributor' : 'учасник', 'maintainer' : 'супроводжувач', 'translator' : 'перекладач', 'icons' : 'Значки', 'dontforget' : 'і не забудьте рушничок', 'shortcutsof' : 'Створення посилань вимкнено', 'dropFiles' : 'Кидайте файли сюди', 'or' : 'або', 'selectForUpload' : 'Виберіть файли для відвантаження', 'moveFiles' : 'Перемістити файли', 'copyFiles' : 'Копіювати файли', 'restoreFiles' : 'Відновити об\'єкти', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Вилучити з розташувань', 'aspectRatio' : 'Співвідношення', 'scale' : 'Масштаб', 'width' : 'Ширина', 'height' : 'Висота', 'resize' : 'Змінити розмір', 'crop' : 'Обрізати', 'rotate' : 'Повернути', 'rotate-cw' : 'Повернути на 90 градусів за год. стр.', 'rotate-ccw' : 'Повернути на 90 градусів проти год. стр.', 'degree' : 'Градус', 'netMountDialogTitle' : 'Змонтувати носій у мережі', // added 18.04.2012 'protocol' : 'версія протоколу', // added 18.04.2012 'host' : 'Хост', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Логін', // added 18.04.2012 'pass' : 'Пароль', // added 18.04.2012 'confirmUnmount' : 'Ви відмонтовуєте $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Перетягніть або вставте файли з оглядача', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Перетягніть файли, Вставте URL або світлини (з буфера обміну) сюди', // from v2.1 added 07.04.2014 'encoding' : 'Кодування', // from v2.1 added 19.12.2014 'locale' : 'Локаль', // from v2.1 added 19.12.2014 'searchTarget' : 'Призначення: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Пошук за введеним типом MIME', // from v2.1 added 22.5.2015 'owner' : 'Власник', // from v2.1 added 20.6.2015 'group' : 'Група', // from v2.1 added 20.6.2015 'other' : 'Інші', // from v2.1 added 20.6.2015 'execute' : 'Виконання', // from v2.1 added 20.6.2015 'perm' : 'Дозвіл', // from v2.1 added 20.6.2015 'mode' : 'Режим', // from v2.1 added 20.6.2015 'emptyFolder' : 'Тека порожня', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Тека порожня\\A Перетягніть об\'єкти для додавання', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Тека порожня\\A Для додавання об\'єктів торкніть та утримуйте', // from v2.1.6 added 30.12.2015 'quality' : 'Якість', // from v2.1.6 added 5.1.2016 'autoSync' : 'Авто синх.', // from v2.1.6 added 10.1.2016 'moveUp' : 'Пересунути вгору', // from v2.1.6 added 18.1.2016 'getLink' : 'Отримати URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Обрані об\'єкти ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID теки', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Дозволити доступ офлайн', // from v2.1.10 added 3.25.2016 'reAuth' : 'Для реаутентифікації', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Зараз завантажуємо...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Відкрити декілька файлів', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Ви намагаєтесь відкрити $1 файлів. Ви впевнені що хочете відкрити ії у оглядачі?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Пошук не дав результатів у обраному місці.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Редагує файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Ви обрали $1 об\'єктів.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'У вас є $1 об\'єктів у буфері обміну.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Інкрементний пошук є тільки для поточного перегляду.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Відновити', // from v2.1.15 added 3.8.2016 'complete' : '$1 виконано', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контекстне меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Обертання сторінки', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Кореневі теки носіїв', // from v2.1.16 added 16.9.2016 'reset' : 'Обнулити', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Колір фону', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Обрати колір', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'сітка 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Увімкнено', // from v2.1.16 added 4.10.2016 'disabled' : 'Вимкнено', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Результати пошуку у поточному перегляді відсутні.\\AНатисніть [Enter] для розширення критеріїв пошуку.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Результати пошуку за першою літерою відсутні у поточному перегляді.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Текстова мітка', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 хв. залишилось', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Відкрити знову з обраним кодуванням', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Зберегти з обраним кодуванням', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Обрати теку', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Пошук за першою літерою', // from v2.1.23 added 24.3.2017 'presets' : 'Шаблони', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Дуже багато об\'єктів для переміщення у смітник.', // from v2.1.25 added 9.6.2017 'TextArea' : 'ТекстовеПоле', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Спорожнити теку "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Тека "$1" порожня.', // from v2.1.25 added 22.6.2017 'preference' : 'Налаштування', // from v2.1.26 added 28.6.2017 'language' : 'Мова', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Ініціювати налаштування збережені у цьому оглядачі', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Налаштування лотку інструментів', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 символів залишилось.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 рядків залишилось.', // from v2.1.52 added 16.1.2020 'sum' : 'Сума', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Приблизний розмір файу', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фокусувати елемент діалога при наведенні курсора миші', // from v2.1.30 added 2.11.2017 'select' : 'Обрати', // from v2.1.30 added 23.11.2017 'selectAction' : 'Дія при виборі файла', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Відкрити редактором, що використовувався крайній раз.', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Інвертувати вибір', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Ви точно хочете перейменувати $1 обраних об\'єктів на кшталт $2?
Це незворотна дія!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Пакетне перейменування', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Число', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Додати префікс', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Додати суфікс', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Змінити розширення', // from v2.1.31 added 8.12.2017 'columnPref' : 'Налаштування стовпчиків (вигляд списку)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Усі зміни будуть негайно застосовані у архіві.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Деякі зміни не буде видно до розмонтування носія.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Наступний(і) носій(ї) на цьому носії також не змонтовані. Ви точно хочете відмонтувати носій?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Інформація про обране', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Алгоритми для показу хешу файла', // from v2.1.33 added 10.3.2018 'infoItems' : 'Інформаційні об\'єкти (Панель інформації про обране)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Натисніть знову для виходу.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Панель інструментів', // from v2.1.38 added 4.4.2018 'workspace' : 'Робочий простір', // from v2.1.38 added 4.4.2018 'dialog' : 'Діалог', // from v2.1.38 added 4.4.2018 'all' : 'Усі', // from v2.1.38 added 4.4.2018 'iconSize' : 'Розмір значків (вигляд значків)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Відкрити розгорнуте вікно редактора', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Через неможливість конвертування API, сконвертуйте на вебсайті.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Після конвертування вам треба завантажити за допомогою URL або збереженого файу, для збереження конвертованого файлу.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертувати сайт з $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Інтеграції', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Цей elFinder має наступні інтегровані сервіси. Перевірте умови використання, політику приватності та інше перед використанням.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Показати приховані об\'єкти', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Сховати приховані об\'єкти', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Показати/Сховати приховані о\'єкти', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Типи файлів, які можна створювати', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Тип текстового файлу', // from v2.1.41 added 7.8.2018 'add' : 'Додати', // from v2.1.41 added 7.8.2018 'theme' : 'Тема', // from v2.1.43 added 19.10.2018 'default' : 'Як зазвичай', // from v2.1.43 added 19.10.2018 'description' : 'Опис', // from v2.1.43 added 19.10.2018 'website' : 'Веб-сайт', // from v2.1.43 added 19.10.2018 'author' : 'Автор', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Ліцензія', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Об\'єкт неможливо зберегти. Щоб уникнути втрати правок вам треба експортувати ії до себе у пристрій.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Двічі клацніть файл для вибору.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Використовувати повноекранний режим', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Невідомо', 'kindRoot' : 'Коренева тека носія', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Вибір', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Аліас', 'kindAliasBroken' : 'Пошкоджений аліас', // applications 'kindApp' : 'Програма', 'kindPostscript' : 'Документ Postscript', 'kindMsOffice' : 'Документ Microsoft Office', 'kindMsWord' : 'Документ Microsoft Word', 'kindMsExcel' : 'Документ Microsoft Excel', 'kindMsPP' : 'Презентація Microsoft Powerpoint', 'kindOO' : 'Документ Open Office', 'kindAppFlash' : 'Flash-додаток', 'kindPDF' : 'Портативний формат документів (PDF)', 'kindTorrent' : 'Файл Bittorrent', 'kind7z' : 'Архів 7z', 'kindTAR' : 'Архів TAR', 'kindGZIP' : 'Архів GZIP', 'kindBZIP' : 'Архів BZIP', 'kindXZ' : 'Архів XZ', 'kindZIP' : 'Архів ZIP', 'kindRAR' : 'Архів RAR', 'kindJAR' : 'Файл Java JAR', 'kindTTF' : 'Шрифт True Type', 'kindOTF' : 'Шрифт Open Type', 'kindRPM' : 'Пакунок RPM', // texts 'kindText' : 'Текстовий документ', 'kindTextPlain' : 'Простий текст', 'kindPHP' : 'Код PHP', 'kindCSS' : 'Каскадна таблиця стилів (CSS)', 'kindHTML' : 'Документ HTML', 'kindJS' : 'Код Javascript', 'kindRTF' : 'Файл RTF', 'kindC' : 'Код C', 'kindCHeader' : 'Заголовковий код C', 'kindCPP' : 'Код C++', 'kindCPPHeader' : 'Заголовковий код C++', 'kindShell' : 'Скрипт Unix shell', 'kindPython' : 'Код Python', 'kindJava' : 'Код Java', 'kindRuby' : 'Код Ruby', 'kindPerl' : 'Код Perl', 'kindSQL' : 'Код SQL', 'kindXML' : 'Документ XML', 'kindAWK' : 'Код AWK', 'kindCSV' : 'Значення розділені комою (CSV)', 'kindDOCBOOK' : 'Документ Docbook XML', 'kindMarkdown' : 'Текст Markdown', // added 20.7.2015 // images 'kindImage' : 'Зображення', 'kindBMP' : 'Зображення BMP', 'kindJPEG' : 'Зображення JPEG', 'kindGIF' : 'Зображення GIF', 'kindPNG' : 'Зображення PNG', 'kindTIFF' : 'Зображення TIFF', 'kindTGA' : 'Зображення TGA', 'kindPSD' : 'Зображення Adobe Photoshop', 'kindXBITMAP' : 'Зображення X bitmap', 'kindPXM' : 'Зображення Pixelmator', // media 'kindAudio' : 'Аудіо', 'kindAudioMPEG' : 'Аудіо MPEG', 'kindAudioMPEG4' : 'Аудіо MPEG-4', 'kindAudioMIDI' : 'Аудіо MIDI', 'kindAudioOGG' : 'Аудіо Ogg Vorbis', 'kindAudioWAV' : 'Аудіо WAV', 'AudioPlaylist' : 'Список відтворення MP3', 'kindVideo' : 'Відео', 'kindVideoDV' : 'Відео DV', 'kindVideoMPEG' : 'Відео MPEG', 'kindVideoMPEG4' : 'Відео MPEG-4', 'kindVideoAVI' : 'Відео AVI', 'kindVideoMOV' : 'Відео Quick Time', 'kindVideoWM' : 'Відео Windows Media', 'kindVideoFlash' : 'Відео Flash', 'kindVideoMKV' : 'Відео Matroska', 'kindVideoOGG' : 'Відео Ogg' } }; })); PK Z,,js/i18n/elfinder.ar.jsnuW+A/** * Arabic translation * @author Khamis Alqutob * @author Tawfek Daghistani * @author Atef Ben Ali * @version 2022-02-25 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ar = { translator : 'Khamis Alqutob <alqutob@outlook.com>, Tawfek Daghistani <tawfekov@gmail.com>, Atef Ben Ali <atef.bettaib@gmail.com>', language : 'Arabic', direction : 'rtl', dateFormat : 'M d, Y h:i A', // will show like: شباط 25, 2022 06:20 PM fancyDateFormat : '$1 h:i A', // will show like: اليوم 06:20 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 220225-182023 messages : { 'getShareText' : 'يشارك', 'Editor ': 'محرر الكود', /********************************** errors **********************************/ 'error' : 'خطأ', 'errUnknown' : 'خطأ غير معروف .', 'errUnknownCmd' : 'أمر غير معروف .', 'errJqui' : 'تكوين jQuery UI غير صالح. يجب تضمين المكونات القابلة للتحديد والقابلة للسحب والإفلات', 'errNode' : 'يتطلب elFinder إنشاء عنصر DOM.', 'errURL' : 'تكوين elFinder غير صالح ! لم يتم تعيين خيار رابط URL', 'errAccess' : 'الوصول مرفوض .', 'errConnect' : 'تعذر الاتصال مع خادم الخلفية', 'errAbort' : 'تم فصل الإتصال', 'errTimeout' : 'نفذ وقت الاتصال.', 'errNotFound' : 'الخادوم الخلفي غير موجود .', 'errResponse' : 'رد غير مقبول من الخادوم الخلفي', 'errConf' : 'خطأ في الإعدادات الخاصة بالخادوم الخلفي ', 'errJSON' : 'موديول PHP JSON module غير مثبت ', 'errNoVolumes' : 'الأحجام المقروءة غير متوفرة', 'errCmdParams' : 'معلمات غير صالحة للأمر "$1".', 'errDataNotJSON' : 'البيانات ليست من نوع JSON ', 'errDataEmpty' : 'البيانات فارغة', 'errCmdReq' : 'الخادوم الخلفي يتطلب اسم الأمر ', 'errOpen' : 'غير قادر على فتح "$1".', 'errNotFolder' : 'العنصر ليس مجلد', 'errNotFile' : 'العنصر ليس ملف', 'errRead' : 'غير قادر على قراءة "$1".', 'errWrite' : 'غير قادر على الكتابة في "$1".', 'errPerm' : 'وصول مرفوض ', 'errLocked' : '"$1" مقفل ولا يمكن إعادة تسميته أو نقله أو إزالته.', 'errExists' : 'العنصر الذي يحمل الاسم "$1" موجود مسبقاً.', 'errInvName' : 'اسم الملف غير صالح', 'errInvDirname' : 'اسم مجلد غير صالح', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'المجلد غير موجود', 'errFileNotFound' : 'الملف غير موجود', 'errTrgFolderNotFound' : 'المجلد الهدف "$1" غير موجود ', 'errPopup' : 'المتصفح منع من فتح نافذة منبثقة. لفتح ملف ، قم بتمكينه في خيارات المتصفح', 'errMkdir' : ' غير قادر على إنشاء مجلد "$1".', 'errMkfile' : ' غير قادر على إنشاء ملف "$1".', 'errRename' : 'غير قادر على إعادة تسمية "$1".', 'errCopyFrom' : 'نسخ الملفات من الدليل "$1" غير مسموح.', 'errCopyTo' : 'نسخ الملفات إلى الدليل "$1" غير مسموح .', 'errMkOutLink' : 'تعذر إنشاء رابط إلى خارج جذر الدليل.', // from v2.1 added 03.10.2015 'errUpload' : 'خطأ في عملية الرفع.', // old name - errUploadCommon 'errUploadFile' : 'غير قادر على رفع "$1".', // old name - errUpload 'errUploadNoFiles' : 'لم يتم العثور على ملفات للتحميل .', 'errUploadTotalSize' : 'البيانات تتجاوز الحد الأقصى للحجم المسموح به.', // old name - errMaxSize 'errUploadFileSize' : 'تجاوز الملف الحد الأقصى للحجم المسموح به.', // old name - errFileMaxSize 'errUploadMime' : 'نوع الملف غير مسموح به.', 'errUploadTransfer' : '"$1" خطأ نقل.', 'errUploadTemp' : 'تعذر إنشاء ملف مؤقت للتحميل .', // from v2.1 added 26.09.2015 'errNotReplace' : 'الكائن "$1" موجود بالفعل في هذا الموقع ولا يمكن استبداله بكائن بنوع آخر.', // new 'errReplace' : 'غير قادر على استبدال "$1".', 'errSave' : 'غير قادر على حفظ "$1".', 'errCopy' : 'غير قادر على نسخ "$1".', 'errMove' : 'غير قادر على نقل "$1".', 'errCopyInItself' : 'غير قادر على نسخ "$1" داخل نفسه.', 'errRm' : 'غير قادر على إزالة "$1".', 'errTrash' : 'غير قادر في سلة المهملات', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'تعذر إزالة ملف (ملفات) المصدر.', 'errExtract' : 'غير قادر على استخراج الملفات من "$1".', 'errArchive' : 'غير قادر على إنشاء ملف مضغوط.', 'errArcType' : 'نوع الملف المضغوط غير مدعوم.', 'errNoArchive' : 'هذا الملف ليس ملف مضغوط أو ذو صيغة غير مدعومة.', 'errCmdNoSupport' : 'الخادوم الخلفي لا يدعم هذا الأمر ', 'errReplByChild' : 'لا يمكن استبدال المجلد "$1" بعنصر محتوِ فيه.', 'errArcSymlinks' : 'لأسباب أمنية ، تم رفض فك ضغط الأرشيفات التي تحتوي على روابط رمزية أو ملفات بأسماء غير مسموح بها.', // edited 24.06.2012 'errArcMaxSize' : 'تتجاوز ملفات الأرشيف الحجم الأقصى المسموح به.', 'errResize' : 'تعذر تغيير حجم "$1".', 'errResizeDegree' : 'درجة تدوير غير صالحة.', // added 7.3.2013 'errResizeRotate' : 'تعذر تدوير الصورة.', // added 7.3.2013 'errResizeSize' : 'حجم الصورة غير صالح.', // added 7.3.2013 'errResizeNoChange' : 'حجم الصورة لم يتغير.', // added 7.3.2013 'errUsupportType' : 'نوع ملف غير مدعوم.', 'errNotUTF8Content' : 'الملف "$1" ليس بتنسيق UTF-8 ولا يمكن تحريره.', // added 9.11.2011 'errNetMount' : 'غير قادر على التثبيت "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'بروتوكول غير مدعوم.', // added 17.04.2012 'errNetMountFailed' : 'فشل التثبيت.', // added 17.04.2012 'errNetMountHostReq' : 'المضيف مطلوب.', // added 18.04.2012 'errSessionExpires' : 'انتهت جلسة العمل الخاصة بك بسبب عدم الفاعلية.', 'errCreatingTempDir' : 'تعذر إنشاء دليل مؤقت: "$1"', 'errFtpDownloadFile' : 'تعذر تنزيل الملف من FTP: "$1"', 'errFtpUploadFile' : 'تعذر تحميل الملف إلى FTP: "$1"', 'errFtpMkdir' : 'تعذر إنشاء دليل عن بعد في FTP: "$1"', 'errArchiveExec' : 'خطأ أثناء أرشفة الملفات: "$1"', 'errExtractExec' : 'خطأ أثناء استخراج الملفات: "$1"', 'errNetUnMount' : 'غير قادر على فك التثبيت.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'غير قابل للتحويل إلى UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'جرب المتصفح الحديث ، إذا كنت ترغب في تحميل المجلد.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'انتهت المهلة أثناء البحث "$1". نتيجة البحث جزئية.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'مطلوب إعادة التفويض.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'الحد الأقصى لعدد العناصر القابلة للتحديد هو $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'غير قادر على الاستعادة من سلة المهملات. لا يمكن تحديد وجهة الاستعادة.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'لم يتم العثور على المحرر لهذا النوع من الملفات.', // from v2.1.25 added 23.5.2017 'errServerError' : 'حدث خطأ من جانب الخادم.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'تعذر إفراغ المجلد "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'يوجد $1 أخطاء إضافية.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'يمكنك إنشاء ما يصل إلى $1 مجلد في وقت واحد.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'إنشاء أرشيف', 'cmdback' : 'العودة', 'cmdcopy' : 'نسخ', 'cmdcut' : 'قص', 'cmddownload' : 'تنزيل', 'cmdduplicate' : 'تكرار', 'cmdedit' : 'تحرير الملف', 'cmdextract' : 'إستخراج الملفات من الأرشيف', 'cmdforward' : 'الأمام', 'cmdgetfile' : 'اختيار الملفات', 'cmdhelp' : 'عن هذه البرمجية', 'cmdhome' : 'الجذر', 'cmdinfo' : 'الحصول على معلومات والمشاركة', 'cmdmkdir' : 'مجلد جديد', 'cmdmkdirin' : 'داخل مجلد جديد', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'ملف جديد', 'cmdopen' : 'فتح', 'cmdpaste' : 'لصق', 'cmdquicklook' : 'معاينة', 'cmdreload' : 'إعادة تحميل', 'cmdrename' : 'إعادة تسمية', 'cmdrm' : 'حذف', 'cmdtrash' : 'داخل سلة المهملات', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'إستعادة', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'بحث عن ملفات', 'cmdup' : 'انتقل إلى المجلد الأصل', 'cmdupload' : 'رفع ملفات', 'cmdview' : 'عرض', 'cmdresize' : 'تغيير الحجم والتدوير', 'cmdsort' : 'فرز', 'cmdnetmount' : 'تثبيت حجم الشبكة', // added 18.04.2012 'cmdnetunmount': 'إلغاء التثبيت', // from v2.1 added 30.04.2012 'cmdplaces' : 'الى الاماكن', // added 28.12.2014 'cmdchmod' : 'تغيير النمط', // from v2.1 added 20.6.2015 'cmdopendir' : 'فتح مجلد', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'إعادة تعيين عرض العمود', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'ملء الشاشة', // from v2.1.15 added 03.08.2016 'cmdmove' : 'نقل', // from v2.1.15 added 21.08.2016 'cmdempty' : 'تفريغ المجلد', // from v2.1.25 added 22.06.2017 'cmdundo' : 'تراجع', // from v2.1.27 added 31.07.2017 'cmdredo' : 'إعادة', // from v2.1.27 added 31.07.2017 'cmdpreference': 'التفضيلات', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'تحديد الكل', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'تحديد لا شيء', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'عكس الاختيار', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'فتح في نافذة جديدة', // from v2.1.38 added 3.4.2018 'cmdhide' : 'إخفاء (الأفضلية)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'إغلاق', 'btnSave' : 'حفظ', 'btnRm' : 'إزالة', 'btnApply' : 'تطبيق', 'btnCancel' : 'إلغاء', 'btnNo' : 'لا', 'btnYes' : 'نعم', 'btnMount' : 'تثبيت', // added 18.04.2012 'btnApprove': 'انتقل إلى $1 والموافقة', // from v2.1 added 26.04.2012 'btnUnmount': 'إلغاء التثبيت', // from v2.1 added 30.04.2012 'btnConv' : 'تحويل', // from v2.1 added 08.04.2014 'btnCwd' : 'هنا', // from v2.1 added 22.5.2015 'btnVolume' : 'الحجم', // from v2.1 added 22.5.2015 'btnAll' : 'الكل', // from v2.1 added 22.5.2015 'btnMime' : 'نوع التمثيل الصامت', // from v2.1 added 22.5.2015 'btnFileName':'إسم الملف', // from v2.1 added 22.5.2015 'btnSaveClose': 'حفظ وإغلاق', // from v2.1 added 12.6.2015 'btnBackup' : 'نسخ احتياطي', // fromv2.1 added 28.11.2015 'btnRename' : 'إعادة تسمية', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'إعادة تسمية (الجميع)', // from v2.1.24 added 6.4.2017 'btnPrevious' : '($1/$2) السابق', // from v2.1.24 added 11.5.2017 'btnNext' : '($1/$2) التالي', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'حفظ كــ', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'فتح مجلد', 'ntffile' : 'فتح ملف', 'ntfreload' : 'إعادة تحميل محتوى المجلد', 'ntfmkdir' : 'إنشاء مجلد', 'ntfmkfile' : 'إنشاء ملفات', 'ntfrm' : 'حذف العناصر', 'ntfcopy' : 'نسخ العناصر', 'ntfmove' : 'نقل االعناصر', 'ntfprepare' : 'فحص العناصر الموجودة', 'ntfrename' : 'إعادة تسمية الملفات', 'ntfupload' : 'تحميل الملفات', 'ntfdownload' : 'تنزيل الملفات', 'ntfsave' : 'حفظ الملفات', 'ntfarchive' : 'إنشاء أرشيف', 'ntfextract' : 'استخراج ملفات من الأرشيف', 'ntfsearch' : 'البحث في الملفات', 'ntfresize' : 'تغيير حجم الصور', 'ntfsmth' : 'القيام بشيء ما', 'ntfloadimg' : 'تحميل الصورة', 'ntfnetmount' : 'تثبيت حجم الشبكة', // added 18.04.2012 'ntfnetunmount': 'إلغاء تثبيت حجم الشبكة', // from v2.1 added 30.04.2012 'ntfdim' : 'اكتساب أبعاد الصورة', // added 20.05.2013 'ntfreaddir' : 'قراءة معلومات المجلد', // from v2.1 added 01.07.2013 'ntfurl' : 'الحصول على URL الرابط', // from v2.1 added 11.03.2014 'ntfchmod' : 'تغيير نمط الملف', // from v2.1 added 20.6.2015 'ntfpreupload': 'التحقق من اسم ملف التحميل', // from v2.1 added 31.11.2015 'ntfzipdl' : 'إنشاء ملف للتنزيل', // from v2.1.7 added 23.1.2016 'ntfparents' : 'الحصول على معلومات المسار', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'معالجة الملف المرفوع', // from v2.1.17 added 2.11.2016 'ntftrash' : 'القيام بالرمي في القمامة', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'القيام بالاستعادة من سلة المهملات', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'التحقق من مجلد الوجهة', // from v2.1.24 added 3.5.2017 'ntfundo' : 'التراجع عن العملية السابقة', // from v2.1.27 added 31.07.2017 'ntfredo' : 'إعادة التراجع السابق', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'فحص المحتويات', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'مهملات', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'غير معلوم', 'Today' : 'اليوم', 'Yesterday' : 'الأمس', 'msJan' : 'كانون الثاني', 'msFeb' : 'شباط', 'msMar' : 'آذار', 'msApr' : 'نيسان', 'msMay' : 'أيار', 'msJun' : 'حزيران', 'msJul' : 'تموز', 'msAug' : 'آب', 'msSep' : 'أيلول', 'msOct' : 'تشرين الأول', 'msNov' : 'تشرين الثاني', 'msDec' : 'كانون الأول ', 'January' : 'كانون الثاني', 'February' : 'شباط', 'March' : 'آذار', 'April' : 'نيسان', 'May' : 'أيار', 'June' : 'حزيران', 'July' : 'تموز', 'August' : 'آب', 'September' : 'أيلول', 'October' : 'تشرين الأول', 'November' : 'تشرين الثاني', 'December' : 'كانون الثاني', 'Sunday' : 'الأحد', 'Monday' : 'الاثنين', 'Tuesday' : 'الثلاثاء', 'Wednesday' : 'الإربعاء', 'Thursday' : 'الخميس', 'Friday' : 'الجمعة', 'Saturday' : 'السبت', 'Sun' : 'الأحد', 'Mon' : 'الاثنين', 'Tue' : 'الثلاثاء', 'Wed' : 'الإربعاء', 'Thu' : 'الخميس', 'Fri' : 'الجمعة', 'Sat' : 'السبت', /******************************** sort variants ********************************/ 'sortname' : 'حسب الاسم', 'sortkind' : 'حسب النوع', 'sortsize' : 'حسب الحجم', 'sortdate' : 'حسب التاريخ', 'sortFoldersFirst' : 'المجلدات أولا', 'sortperm' : 'حسب الصلاحية', // from v2.1.13 added 13.06.2016 'sortmode' : 'حسب النمط', // from v2.1.13 added 13.06.2016 'sortowner' : 'حسب المالك', // from v2.1.13 added 13.06.2016 'sortgroup' : 'حسب المجموعة', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'أيضا عرض الشجرة', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'مجلد جديد', // added 10.11.2015 'Archive' : 'أرشيف جديد', // from v2.1 added 10.11.2015 'untitled file' : 'الملف الجديد.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ملف', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'التأكيد مطلوب', 'confirmRm' : 'هل تريد بالتأكيد إزالة العناصر نهائيًا؟
لا يمكن التراجع عن هذا الإجراء! ', 'confirmRepl' : 'استبدال الملف القديم بملف جديد؟ (إذا كان يحتوي على مجلدات ، فسيتم دمجه. للنسخ الاحتياطي والاستبدال ، حدد النسخ الاحتياطي.)', 'confirmRest' : 'هل تريد استبدال العنصر الموجود بالعنصر الموجود في المهملات؟', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'ليس بصيغة UTF-8
التحويل إلى UTF-8؟
تصبح المحتويات UTF-8 بالحفظ بعد التحويل.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'تعذر الكشف عن ترميز الأحرف لهذا الملف. تحتاج إلى التحويل مؤقتاً إلى UTF-8 للتحرير.
الرجاء تحديد ترميز الأحرف لهذا الملف.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'لقد تم تعديله.
قد تخسر العمل إذا لم تقم بحفظ التغييرات.', // from v2.1 added 15.7.2015 'confirmTrash' : 'هل أنت متأكد أنك تريد نقل العناصر إلى سلة المهملات؟', //from v2.1.24 added 29.4.2017 'confirmMove' : 'هل أنت متأكد أنك تريد نقل العناصر إلى "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'تطبيق على الكل', 'name' : 'الاسم', 'size' : 'الحجم', 'perms' : 'الصلاحيات', 'modify' : 'التعديل', 'kind' : 'النوع', 'read' : 'قابل للقراءة', 'write' : 'قابل للكتابة', 'noaccess' : 'وصول ممنوع', 'and' : 'و', 'unknown' : 'غير معروف', 'selectall' : 'تحديد كل العناصر', 'selectfiles' : 'تحديد العناصر', 'selectffile' : 'تحديد العنصر الأول', 'selectlfile' : 'تحديد العنصر الأخير', 'viewlist' : 'عرض القائمة', 'viewicons' : 'عرض أيْقونات', 'viewSmall' : 'أيقونات صغيرة', // from v2.1.39 added 22.5.2018 'viewMedium' : 'أيقونات متوسطة', // from v2.1.39 added 22.5.2018 'viewLarge' : 'أيقونات كبيرة', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'أيقونات كبيرة جداً', // from v2.1.39 added 22.5.2018 'places' : 'المواقع', 'calc' : 'حساب', 'path' : 'المسار', 'aliasfor' : 'اسم مستعار لـ', 'locked' : 'مقفل', 'dim' : 'الأبعاد', 'files' : 'ملفات', 'folders' : 'مجلدات', 'items' : 'عناصر', 'yes' : 'نعم', 'no' : 'لا', 'link' : 'الرابط', 'searcresult' : 'نتائج البحث', 'selected' : 'العناصر المحددة', 'about' : 'حول', 'shortcuts' : 'الاختصارات', 'help' : 'المساعدة', 'webfm' : 'مدير ملفات الويب', 'ver' : 'الإصدار', 'protocolver' : 'إصدار البرتوكول', 'homepage' : 'رئيسية المشروع', 'docs' : 'الوثائق', 'github' : 'شاركنا على Github', 'twitter' : 'تابعنا على تويتر', 'facebook' : 'انضم إلينا على الفيس بوك', 'team' : 'الفريق', 'chiefdev' : 'رئيس المبرمجين', 'developer' : 'مبرمج', 'contributor' : 'مساهم', 'maintainer' : 'مشرف', 'translator' : 'مترجم', 'icons' : 'أيقونات', 'dontforget' : 'ولا تنس أن تأخذ المنشفة', 'shortcutsof' : 'الاختصارات غير مفعلة', 'dropFiles' : 'إفلات الملفات هنا', 'or' : 'أو', 'selectForUpload' : 'اختر الملفات', 'moveFiles' : 'نقل العناصر', 'copyFiles' : 'نسخ العناصر', 'restoreFiles' : 'استعادة العناصر', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'إزالة من الأماكن', 'aspectRatio' : 'ابعاد متزنة', 'scale' : 'مقياس', 'width' : 'عرض', 'height' : 'طول', 'resize' : 'تغيير الحجم', 'crop' : 'قص', 'rotate' : 'تدوير', 'rotate-cw' : 'استدارة 90 درجة مع عقارب الساعة', 'rotate-ccw' : 'استدارة 90 درجة عكس عقارب الساعة', 'degree' : '°', 'netMountDialogTitle' : 'تثبيت حجم الشبكة', // added 18.04.2012 'protocol' : 'البروتوكول', // added 18.04.2012 'host' : 'المضيف', // added 18.04.2012 'port' : 'المنفذ', // added 18.04.2012 'user' : 'المستخدم', // added 18.04.2012 'pass' : 'كلمة المرور', // added 18.04.2012 'confirmUnmount' : 'هل أنت متأكد من إلغاء تثبيت $1؟', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'قم بإسقاط أو لصق الملفات من المتصفح', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'قم بإسقاط الملفات أو لصق الروابط أو الصور (الحافظة) هنا', // from v2.1 added 07.04.2014 'encoding' : 'الترميز', // from v2.1 added 19.12.2014 'locale' : 'اللغة', // from v2.1 added 19.12.2014 'searchTarget' : 'الهدف: $1', // from v2.1 added 22.5.2015 'searchMime' : 'البحث عن طريق إدخال نوع MIME', // from v2.1 added 22.5.2015 'owner' : 'المالك', // from v2.1 added 20.6.2015 'group' : 'المجموعة', // from v2.1 added 20.6.2015 'other' : 'أخرى', // from v2.1 added 20.6.2015 'execute' : 'تنفيذ', // from v2.1 added 20.6.2015 'perm' : 'التصريح', // from v2.1 added 20.6.2015 'mode' : 'النمط', // from v2.1 added 20.6.2015 'emptyFolder' : 'المجلد فارغ', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'المجلد فارغ\\إفلات لإضافة عناصر', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'المجلد فارغ\\نقرة طويلة لإضافة العناصر', // from v2.1.6 added 30.12.2015 'quality' : 'النوعية', // from v2.1.6 added 5.1.2016 'autoSync' : 'مزامنة آلية', // from v2.1.6 added 10.1.2016 'moveUp' : 'تحريك لأعلى', // from v2.1.6 added 18.1.2016 'getLink' : 'الحصول على رابط URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'العناصر المحددة ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'معرف المجلد', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'السماح بالوصول دون اتصال', // from v2.1.10 added 3.25.2016 'reAuth' : 'لإعادة المصادقة', // from v2.1.10 added 3.25.2016 'nowLoading' : 'جاري التحميل الآن...', // from v2.1.12 added 4.26.2016 'openMulti' : 'فتح ملفات متعددة', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'أنت تحاول فتح $1 ملف. هل أنت متأكد أنك تريد الفتح في المتصفح؟', // from v2.1.12 added 5.14.2016 'emptySearch' : 'نتائج البحث فارغة في هدف البحث.', // from v2.1.12 added 5.16.2016 'editingFile' : 'إنها تقوم بتحرير ملف.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'لقد قمت بتحديد $1 عناصر.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'يوجد لديك $1 عناصر في الحافظة.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'البحث المتزايد هو فقط من العرض الحالي.', // from v2.1.13 added 6.30.2016 'reinstate' : 'إعادة', // from v2.1.15 added 3.8.2016 'complete' : '$1 إكتمل', // from v2.1.15 added 21.8.2016 'contextmenu' : 'قائمة السياق', // from v2.1.15 added 9.9.2016 'pageTurning' : 'قلب الصفحة', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'جذور الحجم', // from v2.1.16 added 16.9.2016 'reset' : 'إعادة تعيين', // from v2.1.16 added 1.10.2016 'bgcolor' : 'لون الخلفية', // from v2.1.16 added 1.10.2016 'colorPicker' : 'أداة انتقاء اللون', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'شبكة 8 بكسل', // from v2.1.16 added 4.10.2016 'enabled' : 'مفعل', // from v2.1.16 added 4.10.2016 'disabled' : 'معطل', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'نتائج البحث فارغة في العرض الحالي. \\ اضغط على [Enter] لتوسيع هدف البحث.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'نتائج البحث الحرف الأول فارغة في العرض الحالي.', // from v2.1.23 added 24.3.2017 'textLabel' : 'تسمية نصية', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 دقائق باقية', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'إعادة فتح مع الترميز المحدد', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'حفظ مع الترميز المحدد', // from v2.1.19 added 2.12.2016 'selectFolder' : 'تحديد مجلد', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'البحث بالحرف الأول', // from v2.1.23 added 24.3.2017 'presets' : 'الإعدادات المسبقة', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'هناك عدد كبير جداً من العناصر لذا لا يمكن وضعها في سلة المهملات.', // from v2.1.25 added 9.6.2017 'TextArea' : 'منطقة النص', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'إفراغ المجلد "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'لا توجد عناصر في مجلد "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'الأفضلية', // from v2.1.26 added 28.6.2017 'language' : 'اللغة', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'تهيئة الإعدادات المحفوظة في هذا المتصفح', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'إعدادات شريط الأدوات', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 حروف متبقية.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 سطور متبقية.', // from v2.1.52 added 16.1.2020 'sum' : 'المجموع', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'حجم ملف تقريبي', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'التركيز على عنصر الحوار مع تمرير الماوس', // from v2.1.30 added 2.11.2017 'select' : 'حدد', // from v2.1.30 added 23.11.2017 'selectAction' : 'الإجراء عند تحديد الملف', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'الفتح باستخدام المحرر المستخدم آخر مرة', // from v2.1.30 added 23.11.2017 'selectinvert' : 'عكس الاختيار', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'هل أنت متأكد أنك تريد إعادة تسمية $1 عناصر محددة مثل $2؟
هذا لا يمكن التراجع عنه !', // from v2.1.31 added 4.12.2017 'batchRename' : 'إعادة تسمية الحزمة', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ رقم', // from v2.1.31 added 8.12.2017 'asPrefix' : 'إضافة بادئة', // from v2.1.31 added 8.12.2017 'asSuffix' : 'إضافة لاحقة', // from v2.1.31 added 8.12.2017 'changeExtention' : 'تغيير الامتداد', // from v2.1.31 added 8.12.2017 'columnPref' : 'إعدادات الأعمدة (عرض القائمة)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'ستنعكس جميع التغييرات على الفور على الأرشيف.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'لن تنعكس أي تغييرات حتى يتم فك هذا المجلد.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'المجلد (المجلدات) التالية المركبة على هذا المجلد غير مثبتة أيضاً. هل أنت متأكد من إلغاء تحميله؟', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'معلومات التحديد', // from v2.1.33 added 7.3.2018 'hashChecker' : 'خوارزميات لإظهار تجزئة الملف', // from v2.1.33 added 10.3.2018 'infoItems' : 'عناصر المعلومات (لوحة معلومات التحديد)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'اضغط مرة أخرى للخروج.', // from v2.1.38 added 1.4.2018 'toolbar' : 'شريط الأدوات', // from v2.1.38 added 4.4.2018 'workspace' : 'مساحة العمل', // from v2.1.38 added 4.4.2018 'dialog' : 'الحوار', // from v2.1.38 added 4.4.2018 'all' : 'الكل', // from v2.1.38 added 4.4.2018 'iconSize' : 'حجم الأيقونة (عرض الأيقونات)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'افتح نافذة المحرر المكبرة', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'نظراً لعدم توفر التحويل بواسطة API حالياً ، يرجى التحويل على موقع الويب.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'بعد التحويل ، يجب أن تقوم بالتحميل مع عنوان رابط العنصر أو الملف الذي تم تنزيله لحفظ الملف المحول.', //from v2.1.40 added 8.7.2018 'convertOn' : 'تحويل على موقع $1', // from v2.1.40 added 10.7.2018 'integrations' : 'تكاملات', // from v2.1.40 added 11.7.2018 'integrationWith' : 'يحتوي elFinder على الخدمات الخارجية التالية المتكاملة. يرجى التحقق من شروط الاستخدام وسياسة الخصوصية وما إلى ذلك قبل استخدامها.', // from v2.1.40 added 11.7.2018 'showHidden' : 'إظهار العناصر المخفية', // from v2.1.41 added 24.7.2018 'hideHidden' : 'إخفاء العناصر المخفية', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'إظهار / إخفاء العناصر المخفية', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'أنواع الملفات لتفعيلها مع "ملف جديد"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'نوع الملف النصي', // from v2.1.41 added 7.8.2018 'add' : 'إضافة', // from v2.1.41 added 7.8.2018 'theme' : 'الثيم', // from v2.1.43 added 19.10.2018 'default' : 'الافتراضي', // from v2.1.43 added 19.10.2018 'description' : 'الوصف', // from v2.1.43 added 19.10.2018 'website' : 'الموقع الالكتروني', // from v2.1.43 added 19.10.2018 'author' : 'المؤلف', // from v2.1.43 added 19.10.2018 'email' : 'البريد الالكتروني', // from v2.1.43 added 19.10.2018 'license' : 'الرخصة', // from v2.1.43 added 19.10.2018 'exportToSave' : 'لا يمكن حفظ هذا العنصر. لتجنب فقدان التحريرات التي تحتاجها للتصدير إلى جهاز الكمبيوتر الخاص بك.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'انقر نقراً مزدوجاً فوق الملف لتحديده.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'استخدام وضع ملء الشاشة', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'غير معروف', 'kindRoot' : 'جذر الحجم', // from v2.1.16 added 16.10.2016 'kindFolder' : 'مجلد', 'kindSelects' : 'مختارات', // from v2.1.29 added 29.8.2017 'kindAlias' : 'اسم مستعار', 'kindAliasBroken' : 'اسم مستعار مكسور', // applications 'kindApp' : 'التطبيق', 'kindPostscript' : 'وثيقة Postscript', 'kindMsOffice' : 'وثيقة Microsoft Office', 'kindMsWord' : 'وثيقة Microsoft Word', 'kindMsExcel' : 'وثيقة Microsoft Excel', 'kindMsPP' : 'عرض تقديمي Microsoft Powerpoint', 'kindOO' : 'وثيقة Open Office', 'kindAppFlash' : 'تطبيق فلاش', 'kindPDF' : 'تنسيق الوثائق المحمولة (PDF)', 'kindTorrent' : 'ملف Bittorrent ', 'kind7z' : 'أرشيف 7z', 'kindTAR' : 'أرشيف TAR', 'kindGZIP' : 'أرشيف GZIP', 'kindBZIP' : 'أرشيف BZIP', 'kindXZ' : 'أرشيف XZ', 'kindZIP' : 'أرشيف ZIP', 'kindRAR' : 'أرشيف RAR', 'kindJAR' : 'أرشيف Java JAR', 'kindTTF' : 'خط True Type ', 'kindOTF' : 'خط Open Type ', 'kindRPM' : 'حزمة RPM', // texts 'kindText' : 'وثيقة نصية', 'kindTextPlain' : 'نص عادي', 'kindPHP' : 'مصدر PHP', 'kindCSS' : 'ورقة الأنماط المتتالية', 'kindHTML' : 'وثيقة HTML', 'kindJS' : 'مصدر Javascript', 'kindRTF' : 'تنسيق نص منسق', 'kindC' : 'مصدر C', 'kindCHeader' : 'مصدر C header', 'kindCPP' : 'مصدر C++', 'kindCPPHeader' : 'مصدر C++ header', 'kindShell' : 'مصدر Unix shell', 'kindPython' : 'مصدر Python', 'kindJava' : 'مصدر Java', 'kindRuby' : 'مصدر Ruby', 'kindPerl' : 'مصدر Perl', 'kindSQL' : 'مصدر SQL', 'kindXML' : 'وثيقة XML', 'kindAWK' : 'مصدر AWK', 'kindCSV' : 'ملف CSV', 'kindDOCBOOK' : 'وثيقة Docbook XML', 'kindMarkdown' : 'نص Markdown', // added 20.7.2015 // images 'kindImage' : 'صورة', 'kindBMP' : 'صورة BMP', 'kindJPEG' : 'صورة JPEG', 'kindGIF' : 'صورة GIF', 'kindPNG' : 'صورة PNG', 'kindTIFF' : 'صورة TIFF', 'kindTGA' : 'صورة TGA', 'kindPSD' : 'صورة Adobe Photoshop', 'kindXBITMAP' : 'صورة X bitmap', 'kindPXM' : 'صورة Pixelmator', // media 'kindAudio' : 'وسائط صوت', 'kindAudioMPEG' : 'ملف صوتي MPEG ', 'kindAudioMPEG4' : 'ملف صوتي MPEG-4', 'kindAudioMIDI' : 'ملف صوتي MIDI', 'kindAudioOGG' : 'ملف صوتي Ogg Vorbis', 'kindAudioWAV' : 'ملف صوتي WAV', 'AudioPlaylist' : 'قائمة تشغيل MP3', 'kindVideo' : 'وسائط فيديو', 'kindVideoDV' : 'ملف فيديو DV', 'kindVideoMPEG' : 'ملف فيديو MPEG', 'kindVideoMPEG4' : 'ملف فيديو MPEG-4', 'kindVideoAVI' : 'ملف فيديو AVI', 'kindVideoMOV' : 'ملف فيديو Quick Time', 'kindVideoWM' : 'ملف فيديو Windows Media', 'kindVideoFlash' : 'ملف فيديو Flash', 'kindVideoMKV' : 'ملف فيديو Matroska', 'kindVideoOGG' : 'ملف فيديو Ogg' } }; }));PK Zjs/i18n/elfinder.fr.jsnuW+A/** * française translation * @author Régis Guyomarch * @author Benoit Delachaux * @author Jonathan Grunder * @version 2022-03-01 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fr = { translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>', language : 'française', direction : 'ltr', dateFormat : 'd/M/Y H:i', // will show like: 01/Mar/2022 12:27 fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 12:27 nonameDateFormat : 'ymd-His', // noname upload will show like: 220301-122726 messages : { 'getShareText' : 'Partagez', 'Editor ': 'Editeur de codes', /********************************** errors **********************************/ 'error' : 'Erreur', 'errUnknown' : 'Erreur inconnue.', 'errUnknownCmd' : 'Commande inconnue.', 'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.', 'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.', 'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.', 'errAccess' : 'Accès refusé.', 'errConnect' : 'Impossible de se connecter au backend.', 'errAbort' : 'Connexion interrompue.', 'errTimeout' : 'Délai de connexion dépassé.', 'errNotFound' : 'Backend non trouvé.', 'errResponse' : 'Mauvaise réponse du backend.', 'errConf' : 'Mauvaise configuration du backend.', 'errJSON' : 'Le module PHP JSON n\'est pas installé.', 'errNoVolumes' : 'Aucun volume lisible.', 'errCmdParams' : 'Mauvais paramétrage de la commande "$1".', 'errDataNotJSON' : 'Les données ne sont pas au format JSON.', 'errDataEmpty' : 'Données inexistantes.', 'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.', 'errOpen' : 'Impossible d\'ouvrir "$1".', 'errNotFolder' : 'Cet objet n\'est pas un dossier.', 'errNotFile' : 'Cet objet n\'est pas un fichier.', 'errRead' : 'Impossible de lire "$1".', 'errWrite' : 'Impossible d\'écrire dans "$1".', 'errPerm' : 'Permission refusée.', 'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.', 'errExists' : 'Un élément nommé "$1" existe déjà.', 'errInvName' : 'Nom de fichier incorrect.', 'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Dossier non trouvé.', 'errFileNotFound' : 'Fichier non trouvé.', 'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.', 'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.', 'errMkdir' : 'Impossible de créer le dossier "$1".', 'errMkfile' : 'Impossible de créer le fichier "$1".', 'errRename' : 'Impossible de renommer "$1".', 'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".', 'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".', 'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015 'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon 'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload 'errUploadNoFiles' : 'Aucun fichier à envoyer.', 'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize 'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize 'errUploadMime' : 'Type de fichier non autorisé.', 'errUploadTransfer' : '"$1" erreur transfert.', 'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new 'errReplace' : 'Impossible de remplacer "$1".', 'errSave' : 'Impossible de sauvegarder "$1".', 'errCopy' : 'Impossible de copier "$1".', 'errMove' : 'Impossible de déplacer "$1".', 'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.', 'errRm' : 'Impossible de supprimer "$1".', 'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).', 'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".', 'errArchive' : 'Impossible de créer l\'archive.', 'errArcType' : 'Type d\'archive non supporté.', 'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.', 'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.', 'errReplByChild' : 'Le dossier “$1” ne peut pas être remplacé par un élément qu\'il contient.', 'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012 'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.', 'errResize' : 'Impossible de redimensionner "$1".', 'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013 'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013 'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013 'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013 'errUsupportType' : 'Type de fichier non supporté.', 'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011 'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012 'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012 'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012 'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.', 'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"', 'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"', 'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"', 'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"', 'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"', 'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"', 'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Il y a $1 d\'erreurs supplémentaires.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Vous pouvez créer jusqu\'à $1 dossiers à la fois.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Créer une archive', 'cmdback' : 'Précédent', 'cmdcopy' : 'Copier', 'cmdcut' : 'Couper', 'cmddownload' : 'Télécharger', 'cmdduplicate' : 'Dupliquer', 'cmdedit' : 'Éditer le fichier', 'cmdextract' : 'Extraire les fichiers de l\'archive', 'cmdforward' : 'Suivant', 'cmdgetfile' : 'Sélectionner les fichiers', 'cmdhelp' : 'À propos de ce logiciel', 'cmdhome' : 'Accueil', 'cmdinfo' : 'Informations', 'cmdmkdir' : 'Nouveau dossier', 'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nouveau fichier', 'cmdopen' : 'Ouvrir', 'cmdpaste' : 'Coller', 'cmdquicklook' : 'Prévisualiser', 'cmdreload' : 'Actualiser', 'cmdrename' : 'Renommer', 'cmdrm' : 'Supprimer', 'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Trouver les fichiers', 'cmdup' : 'Remonter au dossier parent', 'cmdupload' : 'Envoyer les fichiers', 'cmdview' : 'Vue', 'cmdresize' : 'Redimensionner l\'image', 'cmdsort' : 'Trier', 'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012 'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Vers Favoris', // added 28.12.2014 'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Masquer (Préférence)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fermer', 'btnSave' : 'Sauvegarder', 'btnRm' : 'Supprimer', 'btnApply' : 'Confirmer', 'btnCancel' : 'Annuler', 'btnNo' : 'Non', 'btnYes' : 'Oui', 'btnMount' : 'Monter', // added 18.04.2012 'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012 'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Ici', // from v2.1 added 22.5.2015 'btnVolume' : 'Le volume', // from v2.1 added 22.5.2015 'btnAll' : 'Tous', // from v2.1 added 22.5.2015 'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Enregistrer & Ferme', // from v2.1 added 12.6.2015 'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015 'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ouvrir le dossier', 'ntffile' : 'Ouvrir le fichier', 'ntfreload' : 'Actualiser le contenu du dossier', 'ntfmkdir' : 'Création du dossier', 'ntfmkfile' : 'Création des fichiers', 'ntfrm' : 'Supprimer les éléments', 'ntfcopy' : 'Copier les éléments', 'ntfmove' : 'Déplacer les éléments', 'ntfprepare' : 'Préparation de la copie des éléments', 'ntfrename' : 'Renommer les fichiers', 'ntfupload' : 'Envoi des fichiers', 'ntfdownload' : 'Téléchargement des fichiers', 'ntfsave' : 'Sauvegarder les fichiers', 'ntfarchive' : 'Création de l\'archive', 'ntfextract' : 'Extraction des fichiers de l\'archive', 'ntfsearch' : 'Recherche des fichiers', 'ntfresize' : 'Redimensionner les images', 'ntfsmth' : 'Fait quelque chose', 'ntfloadimg' : 'Chargement de l\'image', 'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012 'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012 'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013 'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013 'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Vérification du contenu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Inconnue', 'Today' : 'Aujourd\'hui', 'Yesterday' : 'Hier', 'msJan' : 'Jan', 'msFeb' : 'Fév', 'msMar' : 'Mar', 'msApr' : 'Avr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aoû', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Déc', 'January' : 'Janvier', 'February' : 'Février', 'March' : 'Mars', 'April' : 'Avril', 'May' : 'Mai', 'June' : 'Juin', 'July' : 'Huillet', 'August' : 'Août', 'September' : 'Septembre', 'October' : 'Octobre', 'November' : 'Novembre', 'December' : 'Décembre', 'Sunday' : 'Dimanche', 'Monday' : 'Lundi', 'Tuesday' : 'Mardi', 'Wednesday' : 'Mercredi', 'Thursday' : 'Jeudi', 'Friday' : 'Vendredi', 'Saturday' : 'Samedi', 'Sun' : 'Dim', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Jeu', 'Fri' : 'Ven', 'Sat' : 'Sam', /******************************** sort variants ********************************/ 'sortname' : 'par nom', 'sortkind' : 'par type', 'sortsize' : 'par taille', 'sortdate' : 'par date', 'sortFoldersFirst' : 'Dossiers en premier', 'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016 'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015 'untitled folder' : 'NouveauDossier', // added 10.11.2015 'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NouveauFichier.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fichier', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation requise', 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
Cela ne peut être annulé !', 'confirmRepl' : 'Supprimer l\'ancien fichier par le nouveau ?', 'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
Convertir en UTF-8 ?
Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ce fichier a été modifié.
Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Voulez-vous vraiment déplacer les éléments vers "$1" ?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Appliquer à tous', 'name' : 'Nom', 'size' : 'Taille', 'perms' : 'Autorisations', 'modify' : 'Modifié', 'kind' : 'Type', 'read' : 'Lecture', 'write' : 'Écriture', 'noaccess' : 'Pas d\'accès', 'and' : 'et', 'unknown' : 'inconnu', 'selectall' : 'Sélectionner tous les éléments', 'selectfiles' : 'Sélectionner le(s) élément(s)', 'selectffile' : 'Sélectionner le premier élément', 'selectlfile' : 'Sélectionner le dernier élément', 'viewlist' : 'Vue par liste', 'viewicons' : 'Vue par icônes', 'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018 'places' : 'Favoris', 'calc' : 'Calculer', 'path' : 'Chemin', 'aliasfor' : 'Raccourcis pour', 'locked' : 'Verrouiller', 'dim' : 'Dimensions', 'files' : 'Fichiers', 'folders' : 'Dossiers', 'items' : 'Éléments', 'yes' : 'oui', 'no' : 'non', 'link' : 'Lien', 'searcresult' : 'Résultats de la recherche', 'selected' : 'Éléments sélectionnés', 'about' : 'À propos', 'shortcuts' : 'Raccourcis', 'help' : 'Aide', 'webfm' : 'Gestionnaire de fichier Web', 'ver' : 'Version', 'protocolver' : 'Version du protocole', 'homepage' : 'Page du projet', 'docs' : 'La documentation', 'github' : 'Forkez-nous sur Github', 'twitter' : 'Suivez nous sur twitter', 'facebook' : 'Joignez-nous facebook', 'team' : 'Équipe', 'chiefdev' : 'Développeur en chef', 'developer' : 'Développeur', 'contributor' : 'Contributeur', 'maintainer' : 'Mainteneur', 'translator' : 'Traducteur', 'icons' : 'Icônes', 'dontforget' : 'et n\'oubliez pas votre serviette', 'shortcutsof' : 'Raccourcis désactivés', 'dropFiles' : 'Déposez les fichiers ici', 'or' : 'ou', 'selectForUpload' : 'Sélectionner les fichiers à envoyer', 'moveFiles' : 'Déplacer les éléments', 'copyFiles' : 'Copier les éléments', 'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Retirer des favoris', 'aspectRatio' : 'Ratio d’affichage', 'scale' : 'Mise à l\'échelle', 'width' : 'Largeur', 'height' : 'Hauteur', 'resize' : 'Redimensionner', 'crop' : 'Recadrer', 'rotate' : 'Rotation', 'rotate-cw' : 'Rotation de 90 degrés horaire', 'rotate-ccw' : 'Rotation de 90 degrés antihoraire', 'degree' : '°', 'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012 'protocol' : 'Protocole', // added 18.04.2012 'host' : 'Hôte', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilisateur', // added 18.04.2012 'pass' : 'Mot de passe', // added 18.04.2012 'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014 'encoding' : 'Encodage', // from v2.1 added 19.12.2014 'locale' : 'Encodage régional', // from v2.1 added 19.12.2014 'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015 'owner' : 'Propriétaire', // from v2.1 added 20.6.2015 'group' : 'Groupe', // from v2.1 added 20.6.2015 'other' : 'Autre', // from v2.1 added 20.6.2015 'execute' : 'Exécuter', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'quality' : 'Qualité', // from v2.1.6 added 5.1.2016 'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016 'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016 'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016 'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016 'complete' : '$1 complété', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016 'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Actif', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Aucun résultat trouvé.\\AAppuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017 'presets' : 'Présélections', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Préférence', // from v2.1.26 added 28.6.2017 'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caractères restants.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 de lignes restantes.', // from v2.1.52 added 16.1.2020 'sum' : 'Somme', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Concentrez-vous sur l\'élément de dialogue avec le survol de la souris', // from v2.1.30 added 2.11.2017 'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
L\'action est définitive !', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018 'infoItems' : 'Éléments d\'information (panneau d\'informations de sélection)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018 'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018 'all' : 'Tout', // from v2.1.38 added 4.4.2018 'iconSize' : 'Taille des icônes (vue Icônes)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Ouvrir la fenêtre agrandie de l\'éditeur', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Étant donné que la conversion par API n\'est pas disponible actuellement, veuillez effectuer la conversion sur le site Web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Après la conversion, vous devez télécharger l\'URL de l\'élément ou un fichier téléchargé pour enregistrer le fichier converti.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convertissez sur le site de $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Intégrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Cet elFinder intègre les services externes suivants. Veuillez vérifier les conditions d\'utilisation, la politique de confidentialité, etc. avant de l\'utiliser.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Afficher les éléments cachés', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Masquer les éléments cachés', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Afficher/Masquer les éléments masqués', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Types de fichiers à activer avec "Nouveau fichier"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type de fichier texte', // from v2.1.41 added 7.8.2018 'add' : 'Ajouter', // from v2.1.41 added 7.8.2018 'theme' : 'Défaut', // from v2.1.43 added 19.10.2018 'default' : 'défaut', // from v2.1.43 added 19.10.2018 'description' : 'La description', // from v2.1.43 added 19.10.2018 'website' : 'Site Internet', // from v2.1.43 added 19.10.2018 'author' : 'Auteure', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'la licence', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Cet élément ne peut pas être enregistré. Pour éviter de perdre les modifications, vous devez exporter vers votre PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double-cliquez sur le fichier pour le sélectionner.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Utiliser le mode plein écran', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Inconnu', 'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dossier', 'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Raccourci', 'kindAliasBroken' : 'Raccourci cassé', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Présentation Microsoft PowerPoint', 'kindOO' : 'Document OpenOffice', 'kindAppFlash' : 'Application Flash', 'kindPDF' : 'Format de document portable (PDF)', 'kindTorrent' : 'Fichier BitTorrent', 'kind7z' : 'Archive 7z', 'kindTAR' : 'Archive TAR', 'kindGZIP' : 'Archive GZIP', 'kindBZIP' : 'Archive BZIP', 'kindXZ' : 'Archive XZ', 'kindZIP' : 'Archive ZIP', 'kindRAR' : 'Archive RAR', 'kindJAR' : 'Fichier Java JAR', 'kindTTF' : 'Police True Type', 'kindOTF' : 'Police Open Type', 'kindRPM' : 'Package RPM', // texts 'kindText' : 'Document Text', 'kindTextPlain' : 'Texte non formaté', 'kindPHP' : 'Source PHP', 'kindCSS' : 'Feuille de style en cascade', 'kindHTML' : 'Document HTML', 'kindJS' : 'Source JavaScript', 'kindRTF' : 'Format de texte enrichi (Rich Text Format)', 'kindC' : 'Source C', 'kindCHeader' : 'Source header C', 'kindCPP' : 'Source C++', 'kindCPPHeader' : 'Source header C++', 'kindShell' : 'Shell script Unix', 'kindPython' : 'Source Python', 'kindJava' : 'Source Java', 'kindRuby' : 'Source Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Source SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Source AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Texte de démarque', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'Image BMP', 'kindJPEG' : 'Image JPEG', 'kindGIF' : 'Image GIF', 'kindPNG' : 'Image PNG', 'kindTIFF' : 'Image TIFF', 'kindTGA' : 'Image TGA', 'kindPSD' : 'Image Adobe Photoshop', 'kindXBITMAP' : 'Image X bitmap', 'kindPXM' : 'Image Pixelmator', // media 'kindAudio' : 'Son', 'kindAudioMPEG' : 'Son MPEG', 'kindAudioMPEG4' : 'Son MPEG-4', 'kindAudioMIDI' : 'Son MIDI', 'kindAudioOGG' : 'Son Ogg Vorbis', 'kindAudioWAV' : 'Son WAV', 'AudioPlaylist' : 'Liste de lecture audio', 'kindVideo' : 'Vidéo', 'kindVideoDV' : 'Vidéo DV', 'kindVideoMPEG' : 'Vidéo MPEG', 'kindVideoMPEG4' : 'Vidéo MPEG-4', 'kindVideoAVI' : 'Vidéo AVI', 'kindVideoMOV' : 'Vidéo Quick Time', 'kindVideoWM' : 'Vidéo Windows Media', 'kindVideoFlash' : 'Vidéo Flash', 'kindVideoMKV' : 'Vidéo Matroska', 'kindVideoOGG' : 'Vidéo Ogg' } }; }));PK Z"js/i18n/elfinder.ca.jsnuW+A/** * Català translation * @author Sergio Jovani * @version 2022-02-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ca = { translator : 'Sergio Jovani <lesergi@gmail.com>', language : 'Català', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: febr. 28, 2022 11:14 AM fancyDateFormat : '$1 h:i A', // will show like: Avui 11:14 AM nonameDateFormat : 'ymd-His', // noname upload will show like: 220228-111450 messages : { 'getShareText' : 'Compartir', 'Editor ': 'Editor de codi', /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Error desconegut.', 'errUnknownCmd' : 'Ordre desconeguda.', 'errJqui' : 'La configuració de jQuery UI no és vàlida. S\'han d\'incloure els components "selectable", "draggable" i "droppable".', 'errNode' : 'elFinder necessita crear elements DOM.', 'errURL' : 'La configuració de l\'elFinder no és vàlida! L\'opció URL no està configurada.', 'errAccess' : 'Accés denegat.', 'errConnect' : 'No s\'ha pogut connectar amb el rerefons.', 'errAbort' : 'S\'ha interromput la connexió.', 'errTimeout' : 'Temps de connexió excedit.', 'errNotFound' : 'No s\'ha trobat el rerefons.', 'errResponse' : 'La resposta del rerefons no és vàlida.', 'errConf' : 'La configuració del rerefons no és vàlida.', 'errJSON' : 'No està instal·lat el mòdul JSON del PHP.', 'errNoVolumes' : 'No s\'han trobat volums llegibles.', 'errCmdParams' : 'Els paràmetres per l\'ordre "$1" no són vàlids.', 'errDataNotJSON' : 'Les dades no són JSON.', 'errDataEmpty' : 'Les dades estan buides.', 'errCmdReq' : 'La sol·licitud del rerefons necessita el nom de l\'ordre.', 'errOpen' : 'No s\'ha pogut obrir "$1".', 'errNotFolder' : 'L\'objecte no és una carpeta.', 'errNotFile' : 'L\'objecte no és un fitxer.', 'errRead' : 'No s\'ha pogut llegir "$1".', 'errWrite' : 'No s\'ha pogut escriure a "$1".', 'errPerm' : 'Permís denegat.', 'errLocked' : '"$1" està bloquejat i no podeu canviar-li el nom, moure-lo ni suprimir-lo.', 'errExists' : 'Ja existeix un fitxer anomenat "$1".', 'errInvName' : 'El nom de fitxer no és vàlid.', 'errInvDirname' : 'Nom de carpeta no vàlid.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'No s\'ha trobat la carpeta.', 'errFileNotFound' : 'No s\'ha trobat el fitxer.', 'errTrgFolderNotFound' : 'No s\'ha trobat la carpeta de destí "$1".', 'errPopup' : 'El navegador ha evitat obrir una finestra emergent. Autoritzeu-la per obrir el fitxer.', 'errMkdir' : 'No s\'ha pogut crear la carpeta "$1".', 'errMkfile' : 'No s\'ha pogut crear el fitxer "$1".', 'errRename' : 'No s\'ha pogut canviar el nom de "$1".', 'errCopyFrom' : 'No està permès copiar fitxers des del volum "$1".', 'errCopyTo' : 'No està permès copiar fitxers al volum "$1".', 'errMkOutLink' : 'No es pot crear un enllaç fora de l\'arrel del volum.', // from v2.1 added 03.10.2015 'errUpload' : 'S\'ha produït un error en la càrrega.', // old name - errUploadCommon 'errUploadFile' : 'No s\'ha pogut carregar "$1".', // old name - errUpload 'errUploadNoFiles' : 'No s\'han trobat fitxers per carregar.', 'errUploadTotalSize' : 'Les dades excedeixen la mida màxima permesa.', // old name - errMaxSize 'errUploadFileSize' : 'El fitxer excedeix la mida màxima permesa.', // old name - errFileMaxSize 'errUploadMime' : 'El tipus de fitxer no està permès.', 'errUploadTransfer' : 'S\'ha produït un error en transferir "$1".', 'errUploadTemp' : 'No es pot crear un fitxer temporal per carregar-lo.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'objecte "$1" ja existeix en aquesta ubicació i no es pot substituir per un altre tipus.', // new 'errReplace' : 'No es pot substituir "$1".', 'errSave' : 'No s\'ha pogut desar "$1".', 'errCopy' : 'No s\'ha pogut copiar "$1".', 'errMove' : 'No s\'ha pogut moure "$1".', 'errCopyInItself' : 'No s\'ha pogut copiar "$1" a si mateix.', 'errRm' : 'No s\'ha pogut suprimir "$1".', 'errTrash' : 'No es pot a la paperera.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'No es poden eliminar els fitxers font.', 'errExtract' : 'No s\'han pogut extreure els fitxers de "$1".', 'errArchive' : 'No s\'ha pogut crear l\'arxiu.', 'errArcType' : 'El tipus d\'arxiu no està suportat.', 'errNoArchive' : 'El fitxer no és un arxiu o és un tipus no suportat.', 'errCmdNoSupport' : 'El rerefons no suporta aquesta ordre.', 'errReplByChild' : 'No es pot reemplaçar la carpeta “$1” per un element que conté.', 'errArcSymlinks' : 'Per raons de seguretat, no es permet extreure arxius que contenen enllaços simbòlics.', // edited 24.06.2012 'errArcMaxSize' : 'Els fitxers de l\'arxiu excedeixen la mida màxima permesa.', 'errResize' : 'No s\'ha pogut redimensionar "$1".', 'errResizeDegree' : 'El grau de rotació no és vàlid.', // added 7.3.2013 'errResizeRotate' : 'No es pot girar la imatge.', // added 7.3.2013 'errResizeSize' : 'Mida de la imatge no vàlida.', // added 7.3.2013 'errResizeNoChange' : 'La mida de la imatge no ha canviat.', // added 7.3.2013 'errUsupportType' : 'El tipus de fitxer no està suportat.', 'errNotUTF8Content' : 'El fitxer "$1" no està en UTF-8 i no es pot editar.', // added 9.11.2011 'errNetMount' : 'No es pot muntar "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocol no compatible.', // added 17.04.2012 'errNetMountFailed' : 'El muntatge ha fallat.', // added 17.04.2012 'errNetMountHostReq' : 'Es requereix amfitrió.', // added 18.04.2012 'errSessionExpires' : 'La teva sessió ha caducat per inactivitat.', 'errCreatingTempDir' : 'No es pot crear el directori temporal: "$1"', 'errFtpDownloadFile' : 'No es pot descarregar el fitxer des d\'FTP: "$1"', 'errFtpUploadFile' : 'No es pot carregar el fitxer a FTP: "$1"', 'errFtpMkdir' : 'No es pot crear un directori remot a FTP: "$1"', 'errArchiveExec' : 'Error en arxivar fitxers: "$1"', 'errExtractExec' : 'Error en extreure fitxers: "$1"', 'errNetUnMount' : 'No es pot desmuntar.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'No convertible a UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Proveu el navegador modern, si voleu carregar la carpeta.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'S\'ha esgotat el temps en cercar "$1". El resultat de la cerca és parcial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Cal una reautorització.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'El nombre màxim d\'articles seleccionables és d\' $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'No es pot restaurar des de la paperera. No es pot identificar la destinació de la restauració.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'No s\'ha trobat l\'editor per a aquest tipus de fitxer.', // from v2.1.25 added 23.5.2017 'errServerError' : 'S\'ha produït un error al costat del servidor.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'No es pot buidar la carpeta "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Hi ha errors d\' $1 més.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Podeu crear fins a $1 carpetes alhora.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Crea arxiu', 'cmdback' : 'Enrere', 'cmdcopy' : 'Copia', 'cmdcut' : 'Retalla', 'cmddownload' : 'Descarrega', 'cmdduplicate' : 'Duplica', 'cmdedit' : 'Edita el fitxer', 'cmdextract' : 'Extreu els fitxers de l\'arxiu', 'cmdforward' : 'Endavant', 'cmdgetfile' : 'Selecciona els fitxers', 'cmdhelp' : 'Quant a aquest programari', 'cmdhome' : 'Inici', 'cmdinfo' : 'Obté informació', 'cmdmkdir' : 'Nova carpeta', 'cmdmkdirin' : 'A la carpeta nova', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nou fitxer', 'cmdopen' : 'Obre', 'cmdpaste' : 'Enganxa', 'cmdquicklook' : 'Previsualitza', 'cmdreload' : 'Torna a carregar', 'cmdrename' : 'Canvia el nom', 'cmdrm' : 'Suprimeix', 'cmdtrash' : 'A les escombraries', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurar', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Cerca fitxers', 'cmdup' : 'Vés al directori superior', 'cmdupload' : 'Carrega fitxers', 'cmdview' : 'Visualitza', 'cmdresize' : 'Redimensiona la imatge', 'cmdsort' : 'Ordena', 'cmdnetmount' : 'Munta el volum de xarxa', // added 18.04.2012 'cmdnetunmount': 'Desmuntar', // from v2.1 added 30.04.2012 'cmdplaces' : 'A Llocs', // added 28.12.2014 'cmdchmod' : 'Canvia el mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Obre una carpeta', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Restableix l\'amplada de la columna', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Pantalla completa', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Moure\'s', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Buida la carpeta', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Desfer', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refer', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferències', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Seleccionar tot', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Seleccioneu cap', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverteix la selecció', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Obre en una finestra nova', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Amaga (preferència)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Tanca', 'btnSave' : 'Desa', 'btnRm' : 'Suprimeix', 'btnApply' : 'Aplica', 'btnCancel' : 'Cancel·la', 'btnNo' : 'No', 'btnYes' : 'Sí', 'btnMount' : 'Munta', // added 18.04.2012 'btnApprove': 'Anar a $1 i aprovar', // from v2.1 added 26.04.2012 'btnUnmount': 'Desmuntar', // from v2.1 added 30.04.2012 'btnConv' : 'Converteix', // from v2.1 added 08.04.2014 'btnCwd' : 'Aquí', // from v2.1 added 22.5.2015 'btnVolume' : 'Volum', // from v2.1 added 22.5.2015 'btnAll' : 'Tots', // from v2.1 added 22.5.2015 'btnMime' : 'Tipus MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nom de l\'arxiu', // from v2.1 added 22.5.2015 'btnSaveClose': 'Desa i tanca', // from v2.1 added 12.6.2015 'btnBackup' : 'Còpia de seguretat', // fromv2.1 added 28.11.2015 'btnRename' : 'Canvia el nom', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Canvia el nom (tots)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Anterior ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Pròxim ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Guardar com', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'S\'està obrint la carpeta', 'ntffile' : 'S\'està obrint el fitxer', 'ntfreload' : 'S\'està tornant a carregar el contingut de la carpeta', 'ntfmkdir' : 'S\'està creant el directori', 'ntfmkfile' : 'S\'estan creant el fitxers', 'ntfrm' : 'S\'estan suprimint els fitxers', 'ntfcopy' : 'S\'estan copiant els fitxers', 'ntfmove' : 'S\'estan movent els fitxers', 'ntfprepare' : 'S\'està preparant per copiar fitxers', 'ntfrename' : 'S\'estan canviant els noms del fitxers', 'ntfupload' : 'S\'estan carregant els fitxers', 'ntfdownload' : 'S\'estan descarregant els fitxers', 'ntfsave' : 'S\'estan desant els fitxers', 'ntfarchive' : 'S\'està creant l\'arxiu', 'ntfextract' : 'S\'estan extreient els fitxers de l\'arxiu', 'ntfsearch' : 'S\'estan cercant els fitxers', 'ntfresize' : 'Canviar la mida de les imatges', 'ntfsmth' : 'S\'estan realitzant operacions', 'ntfloadimg' : 'S\'està carregant la imatge', 'ntfnetmount' : 'Muntatge del volum de xarxa', // added 18.04.2012 'ntfnetunmount': 'S\'està desmuntant el volum de xarxa', // from v2.1 added 30.04.2012 'ntfdim' : 'Adquisició de la dimensió de la imatge', // added 20.05.2013 'ntfreaddir' : 'Lectura de la informació de la carpeta', // from v2.1 added 01.07.2013 'ntfurl' : 'Obtenint l\'URL de l\'enllaç', // from v2.1 added 11.03.2014 'ntfchmod' : 'Canvi de mode de fitxer', // from v2.1 added 20.6.2015 'ntfpreupload': 'S\'està verificant el nom del fitxer de càrrega', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creació d\'un fitxer per descarregar', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obtenció d\'informació del camí', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'S\'està processant el fitxer penjat', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Fent llençar a les escombraries', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'S\'està fent la restauració des de la paperera', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'S\'està comprovant la carpeta de destinació', // from v2.1.24 added 3.5.2017 'ntfundo' : 'S\'està desfent l\'operació anterior', // from v2.1.27 added 31.07.2017 'ntfredo' : 'S\'està refent l\'anterior desfet', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Comprovació de continguts', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Paperera', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'desconegut', 'Today' : 'Avui', 'Yesterday' : 'Ahir', 'msJan' : 'gen.', 'msFeb' : 'febr.', 'msMar' : 'març', 'msApr' : 'abr.', 'msMay' : 'maig', 'msJun' : 'juny', 'msJul' : 'jul.', 'msAug' : 'ag.', 'msSep' : 'set.', 'msOct' : 'oct.', 'msNov' : 'nov.', 'msDec' : 'des.', 'January' : 'gener', 'February' : 'febrer', 'March' : 'març', 'April' : 'Abril', 'May' : 'maig', 'June' : 'juny', 'July' : 'juliol', 'August' : 'Agost', 'September' : 'setembre', 'October' : 'Octubre', 'November' : 'de novembre', 'December' : 'desembre', 'Sunday' : 'diumenge', 'Monday' : 'dilluns', 'Tuesday' : 'dimarts', 'Wednesday' : 'dimecres', 'Thursday' : 'dijous', 'Friday' : 'divendres', 'Saturday' : 'dissabte', 'Sun' : 'diumenge', 'Mon' : 'dilluns', 'Tue' : 'dimarts', 'Wed' : 'dimecres', 'Thu' : 'dijous', 'Fri' : 'divendres', 'Sat' : 'dissabte', /******************************** sort variants ********************************/ 'sortname' : 'per nom', 'sortkind' : 'per tipus', 'sortsize' : 'per mida', 'sortdate' : 'per data', 'sortFoldersFirst' : 'Primer les carpetes', 'sortperm' : 'amb permís', // from v2.1.13 added 13.06.2016 'sortmode' : 'per modalitat', // from v2.1.13 added 13.06.2016 'sortowner' : 'pel propietari', // from v2.1.13 added 13.06.2016 'sortgroup' : 'per grup', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'També Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Nou fitxer.txt', // added 10.11.2015 'untitled folder' : 'Carpeta nova', // added 10.11.2015 'Archive' : 'Nou Arxiu', // from v2.1 added 10.11.2015 'untitled file' : 'Nou fitxer.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Dossier', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Es necessita confirmació', 'confirmRm' : 'Voleu suprimir els fitxers?
L\'acció es podrà desfer!', 'confirmRepl' : 'Voleu reemplaçar el fitxer antic amb el nou?', 'confirmRest' : 'Voleu substituir l\'element existent per l\'element de la paperera?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'No és a UTF-8
Convertiu a UTF-8?
Els continguts es converteixen en UTF-8 desant després de la conversió.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'No s\'ha pogut detectar la codificació de caràcters d\'aquest fitxer. S\'ha de convertir temporalment a UTF-8 per editar-lo.
Seleccioneu la codificació de caràcters d\'aquest fitxer.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'S\'ha modificat.
Perdre feina si no deseu els canvis.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Esteu segur que voleu moure els elements a la paperera?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Esteu segur que voleu moure els elements a "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Aplica a tot', 'name' : 'Nom', 'size' : 'Mida', 'perms' : 'Permisos', 'modify' : 'Modificat', 'kind' : 'Tipus', 'read' : 'llegir', 'write' : 'escriure', 'noaccess' : 'sense accés', 'and' : 'i', 'unknown' : 'desconegut', 'selectall' : 'Selecciona tots els fitxers', 'selectfiles' : 'Selecciona el(s) fitxer(s)', 'selectffile' : 'Selecciona el primer fitxer', 'selectlfile' : 'Selecciona l\'últim fitxer', 'viewlist' : 'Vista en llista', 'viewicons' : 'Vista en icones', 'viewSmall' : 'Petites icones', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Icones mitjanes', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Icones grans', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Icones extra grans', // from v2.1.39 added 22.5.2018 'places' : 'Llocs', 'calc' : 'Calcula', 'path' : 'Camí', 'aliasfor' : 'Àlies per', 'locked' : 'Bloquejat', 'dim' : 'Dimensions', 'files' : 'Fitxers', 'folders' : 'Carpetes', 'items' : 'Elements', 'yes' : 'sí', 'no' : 'no', 'link' : 'Enllaç', 'searcresult' : 'Resultats de la cerca', 'selected' : 'Elements seleccionats', 'about' : 'Quant a', 'shortcuts' : 'Dreceres', 'help' : 'Ajuda', 'webfm' : 'Gestor de fitxers web', 'ver' : 'Versió', 'protocolver' : 'versió de protocol', 'homepage' : 'Pàgina del projecte', 'docs' : 'Documentació', 'github' : 'Bifurca\'ns a GitHub', 'twitter' : 'Segueix-nos a Twitter', 'facebook' : 'Uniu-vos a Facebook', 'team' : 'Equip', 'chiefdev' : 'cap desenvolupador', 'developer' : 'desenvolupador', 'contributor' : 'col·laborador', 'maintainer' : 'mantenidor', 'translator' : 'traductor', 'icons' : 'Icones', 'dontforget' : 'i no oblideu agafar la vostra tovallola', 'shortcutsof' : 'Les dreceres estan inhabilitades', 'dropFiles' : 'Arrossegueu els fitxers aquí', 'or' : 'o', 'selectForUpload' : 'Seleccioneu els fitxer a carregar', 'moveFiles' : 'Mou els fitxers', 'copyFiles' : 'Copia els fitxers', 'restoreFiles' : 'Restaurar elements', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Suprimeix dels llocs', 'aspectRatio' : 'Relació d\'aspecte', 'scale' : 'Escala', 'width' : 'Amplada', 'height' : 'Alçada', 'resize' : 'Redimensiona', 'crop' : 'Retalla', 'rotate' : 'Girar', 'rotate-cw' : 'Gireu 90 graus CW', 'rotate-ccw' : 'Gireu 90 graus cap a la dreta', 'degree' : '°', 'netMountDialogTitle' : 'Munta el volum de xarxa', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Amfitrió', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Usuari', // added 18.04.2012 'pass' : 'Contrasenya', // added 18.04.2012 'confirmUnmount' : 'Esteu desmuntant $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Deixa anar o enganxar fitxers des del navegador', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Deixa anar fitxers, enganxar URL o imatges (porta-retalls) aquí', // from v2.1 added 07.04.2014 'encoding' : 'Codificació', // from v2.1 added 19.12.2014 'locale' : 'Localització', // from v2.1 added 19.12.2014 'searchTarget' : 'Objectiu: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Cerca per tipus MIME d\'entrada', // from v2.1 added 22.5.2015 'owner' : 'Propietari', // from v2.1 added 20.6.2015 'group' : 'Grup', // from v2.1 added 20.6.2015 'other' : 'Altres', // from v2.1 added 20.6.2015 'execute' : 'Executar', // from v2.1 added 20.6.2015 'perm' : 'Permís', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'La carpeta està buida', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'La carpeta està buida\\A Drop per afegir elements', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'La carpeta està buida\\Un toc llarg per afegir elements', // from v2.1.6 added 30.12.2015 'quality' : 'Qualitat', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sincronització automàtica', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mou-te', // from v2.1.6 added 18.1.2016 'getLink' : 'Obteniu l\'enllaç URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Articles seleccionats ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID de la carpeta', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permet l\'accés fora de línia', // from v2.1.10 added 3.25.2016 'reAuth' : 'Per tornar a autenticar', // from v2.1.10 added 3.25.2016 'nowLoading' : 'S\'està carregant...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Obriu diversos fitxers', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Esteu provant d\'obrir els fitxers $1. Esteu segur que voleu obrir-lo al navegador?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Els resultats de la cerca estan buits a l\'objectiu de la cerca.', // from v2.1.12 added 5.16.2016 'editingFile' : 'És editar un fitxer.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Heu seleccionat articles d\' $1.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Tens articles d\' $1 al porta-retalls.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'La cerca incremental només és des de la vista actual.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reintegrar', // from v2.1.15 added 3.8.2016 'complete' : '$1 completat', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menú contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Pas de pàgina', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Arrels de volum', // from v2.1.16 added 16.9.2016 'reset' : 'Restableix', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Color de fons', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selector de colors', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Quadrícula de 8 píxels', // from v2.1.16 added 4.10.2016 'enabled' : 'Habilitat', // from v2.1.16 added 4.10.2016 'disabled' : 'Discapacitat', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Els resultats de la cerca estan buits a la vista actual.\\APmeu [Retorn] per ampliar l\'objectiu de la cerca.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Els resultats de la cerca de la primera lletra estan buits a la vista actual.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etiqueta de text', // from v2.1.17 added 13.10.2016 'minsLeft' : 'Queden $1 min', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Torna a obrir amb la codificació seleccionada', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Desa amb la codificació seleccionada', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Seleccioneu la carpeta', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Recerca de la primera lletra', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Hi ha massa articles perquè no es puguin a la paperera.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Àrea de text', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Buida la carpeta "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'No hi ha elements a una carpeta "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferència', // from v2.1.26 added 28.6.2017 'language' : 'Llenguatge', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicialitzeu la configuració desada en aquest navegador', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Configuració de la barra d\'eines', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caràcters restants.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... Queden 1 $ línies.', // from v2.1.52 added 16.1.2020 'sum' : 'Suma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Mida aproximada del fitxer', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Centra\'t en l\'element de diàleg amb el ratolí', // from v2.1.30 added 2.11.2017 'select' : 'Seleccioneu', // from v2.1.30 added 23.11.2017 'selectAction' : 'Acció en seleccionar un fitxer', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Obriu amb l\'editor utilitzat l\'última vegada', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverteix la selecció', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Esteu segur que voleu canviar el nom de $1 als elements seleccionats com ara $2?
Això no es pot desfer!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Canviar el nom del lot', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Número', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Afegeix un prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Afegeix un sufix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Canvia l\'extensió', // from v2.1.31 added 8.12.2017 'columnPref' : 'Configuració de les columnes (visualització de llista)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tots els canvis es reflectiran immediatament a l\'arxiu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Qualsevol canvi no es reflectirà fins que no desmunteu aquest volum.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Els següents volums muntats en aquest volum també s\'han desmuntat. Segur que el desmuntareu?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informació de selecció', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorismes per mostrar el hash del fitxer', // from v2.1.33 added 10.3.2018 'infoItems' : 'Elements d\'informació (tauler d\'informació de selecció)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Premeu de nou per sortir.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra d\'eines', // from v2.1.38 added 4.4.2018 'workspace' : 'Espai de treball', // from v2.1.38 added 4.4.2018 'dialog' : 'Diàleg', // from v2.1.38 added 4.4.2018 'all' : 'Tots', // from v2.1.38 added 4.4.2018 'iconSize' : 'Mida de les icones (visualització d\'icones)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Obriu la finestra de l\'editor maximitzat', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Com que la conversió per API no està disponible actualment, feu la conversió al lloc web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Després de la conversió, s\'ha de carregar amb l\'URL de l\'element o un fitxer descarregat per desar el fitxer convertit.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converteix al lloc de $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integracions', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Aquest elFinder té integrats els següents serveis externs. Consulteu les condicions d\'ús, la política de privadesa, etc. abans d\'utilitzar-lo.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostra els elements ocults', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Amaga els elements ocults', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Mostra/amaga els elements ocults', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipus de fitxers per activar amb "Fitxer nou"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipus de fitxer de text', // from v2.1.41 added 7.8.2018 'add' : 'Afegeix', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Per defecte', // from v2.1.43 added 19.10.2018 'description' : 'Descripció', // from v2.1.43 added 19.10.2018 'website' : 'Lloc web', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'Correu electrònic', // from v2.1.43 added 19.10.2018 'license' : 'llicència', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Aquest element no es pot desar. Per evitar perdre les edicions, heu d\'exportar-les al vostre ordinador.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Feu doble clic al fitxer per seleccionar-lo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Utilitzeu el mode de pantalla completa', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconegut', 'kindRoot' : 'Arrel de volum', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Carpeta', 'kindSelects' : 'Seleccions', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Àlies', 'kindAliasBroken' : 'Àlies no vàlid', // applications 'kindApp' : 'Aplicació', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document del Microsoft Office', 'kindMsWord' : 'Document del Microsoft Word', 'kindMsExcel' : 'Document del Microsoft Excel', 'kindMsPP' : 'Presentació del Microsoft Powerpoint', 'kindOO' : 'Document de l\'Open Office', 'kindAppFlash' : 'Aplicació Flash', 'kindPDF' : 'Document PDF', 'kindTorrent' : 'Fitxer Bittorrent', 'kind7z' : 'Arxiu 7z', 'kindTAR' : 'Arxiu TAR', 'kindGZIP' : 'Arxiu GZIP', 'kindBZIP' : 'Arxiu BZIP', 'kindXZ' : 'Arxiu XZ', 'kindZIP' : 'Arxiu ZIP', 'kindRAR' : 'Arxiu RAR', 'kindJAR' : 'Fitxer JAR de Java', 'kindTTF' : 'Tipus de lletra True Type', 'kindOTF' : 'Tipus de lletra Open Type', 'kindRPM' : 'Paquet RPM', // texts 'kindText' : 'Document de text', 'kindTextPlain' : 'Document de text net', 'kindPHP' : 'Codi PHP', 'kindCSS' : 'Full d\'estils CSS', 'kindHTML' : 'Document HTML', 'kindJS' : 'Codi Javascript', 'kindRTF' : 'Document RTF', 'kindC' : 'Codi C', 'kindCHeader' : 'Codi de caçalera C', 'kindCPP' : 'Codi C++', 'kindCPPHeader' : 'Codi de caçalera C++', 'kindShell' : 'Script Unix', 'kindPython' : 'Codi Python', 'kindJava' : 'Codi Java', 'kindRuby' : 'Codi Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Codi SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Codi AWK', 'kindCSV' : 'Document CSV', 'kindDOCBOOK' : 'Document XML de Docbook', 'kindMarkdown' : 'Text de reducció', // added 20.7.2015 // images 'kindImage' : 'Imatge', 'kindBMP' : 'Imatge BMP', 'kindJPEG' : 'Imatge JPEG', 'kindGIF' : 'Imatge GIF', 'kindPNG' : 'Imatge PNG', 'kindTIFF' : 'Imatge TIFF', 'kindTGA' : 'Imatge TGA', 'kindPSD' : 'Imatge Adobe Photoshop', 'kindXBITMAP' : 'Imatge X bitmap', 'kindPXM' : 'Imatge Pixelmator', // media 'kindAudio' : 'Fitxer d\'àudio', 'kindAudioMPEG' : 'Fitxer d\'àudio MPEG', 'kindAudioMPEG4' : 'Fitxer d\'àudio MPEG-4', 'kindAudioMIDI' : 'Fitxer d\'àudio MIDI', 'kindAudioOGG' : 'Fitxer d\'àudio Ogg Vorbis', 'kindAudioWAV' : 'Fitxer d\'àudio WAV', 'AudioPlaylist' : 'Llista de reproducció MP3', 'kindVideo' : 'Fitxer de vídeo', 'kindVideoDV' : 'Fitxer de vídeo DV', 'kindVideoMPEG' : 'Fitxer de vídeo MPEG', 'kindVideoMPEG4' : 'Fitxer de vídeo MPEG-4', 'kindVideoAVI' : 'Fitxer de vídeo AVI', 'kindVideoMOV' : 'Fitxer de vídeo Quick Time', 'kindVideoWM' : 'Fitxer de vídeo Windows Media', 'kindVideoFlash' : 'Fitxer de vídeo Flash', 'kindVideoMKV' : 'Fitxer de vídeo Matroska', 'kindVideoOGG' : 'Fitxer de vídeo Ogg' } }; }));PK Zcn:ggjs/i18n/elfinder.ro.jsnuW+A/** * Română translation * @author Cristian Tabacitu * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ro = { translator : 'Cristian Tabacitu <hello@tabacitu.ro>', language : 'Română', direction : 'ltr', dateFormat : 'd M Y h:i', // will show like: 03 Mar 2022 11:15 fancyDateFormat : '$1 h:i A', // will show like: Astăzi 11:15 AM nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-111529 messages : { 'getShareText' : 'Acțiune', 'Editor ': 'Editor de coduri', /********************************** errors **********************************/ 'error' : 'Eroare', 'errUnknown' : 'Eroare necunoscută.', 'errUnknownCmd' : 'Comandă necunoscuta.', 'errJqui' : 'Configurație jQuery UI necunoscută. Componentele selectable, draggable și droppable trebuie să fie incluse.', 'errNode' : 'elFinder necesită ca DOM Element să fie creat.', 'errURL' : 'Configurație elFinder nevalidă! URL option nu este setat.', 'errAccess' : 'Acces interzis.', 'errConnect' : 'Nu ne-am putut conecta la backend.', 'errAbort' : 'Conexiunea a fost oprită.', 'errTimeout' : 'Conexiunea a fost întreruptă.', 'errNotFound' : 'Nu am gasit backend-ul.', 'errResponse' : 'Răspuns backend greșit.', 'errConf' : 'Configurație backend greșită.', 'errJSON' : 'Modulul PHP JSON nu este instalat.', 'errNoVolumes' : 'Volumele citibile nu sunt disponibile.', 'errCmdParams' : 'Parametri greșiți pentru comanda "$1".', 'errDataNotJSON' : 'Datele nu sunt în format JSON.', 'errDataEmpty' : 'Datele sunt goale.', 'errCmdReq' : 'Cererea către backend necesită un nume de comandă.', 'errOpen' : 'Nu am putut deschide "$1".', 'errNotFolder' : 'Obiectul nu este un dosar.', 'errNotFile' : 'Obiectul nu este un fișier.', 'errRead' : 'Nu am putut citi "$1".', 'errWrite' : 'Nu am putu scrie în "$1".', 'errPerm' : 'Nu ai permisiunea necesară.', 'errLocked' : '"$1" este blocat și nu poate fi redenumit, mutat sau șters.', 'errExists' : 'Un fișier cu numele "$1" există deja.', 'errInvName' : 'Numele pentru fișier este greșit.', 'errInvDirname' : 'Nume de folder nevalid.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Nu am găsit dosarul.', 'errFileNotFound' : 'Nu am găsit fișierul.', 'errTrgFolderNotFound' : 'Nu am găsit dosarul pentru destinație "$1".', 'errPopup' : 'Browserul tău a prevenit deschiderea ferestrei popup. Pentru a deschide fișierul permite deschidere ferestrei.', 'errMkdir' : 'Nu am putut crea dosarul "$1".', 'errMkfile' : 'Nu am putut crea fișierul "$1".', 'errRename' : 'Nu am putut redenumi "$1".', 'errCopyFrom' : 'Copierea fișierelor de pe volumul "$1" este interzisă.', 'errCopyTo' : 'Copierea fișierelor către volumul "$1" este interzisă.', 'errMkOutLink' : 'Nu am putut crea linkul în afara volumului rădăcină.', // from v2.1 added 03.10.2015 'errUpload' : 'Eroare de upload.', // old name - errUploadCommon 'errUploadFile' : 'Nu am putut urca "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nu am găsit fișiere pentru a le urca.', 'errUploadTotalSize' : 'Datele depâșest limita maximă de mărime.', // old name - errMaxSize 'errUploadFileSize' : 'Fișierul este prea mare.', // old name - errFileMaxSize 'errUploadMime' : 'Acest tip de fișier nu este permis.', 'errUploadTransfer' : 'Eroare la transferarea "$1".', 'errUploadTemp' : 'Nu am putut crea fișierul temporar pentru upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obiectul "$1" există deja în acest loc și nu poate fi înlocuit de un obiect de alt tip.', // new 'errReplace' : 'Nu am putut înlocui "$1".', 'errSave' : 'Nu am putut salva "$1".', 'errCopy' : 'Nu am putut copia "$1".', 'errMove' : 'Nu am putut muta "$1".', 'errCopyInItself' : 'Nu am putut copia "$1" în el însuși.', 'errRm' : 'Nu am putut șterge "$1".', 'errTrash' : 'Imposibil în coșul de gunoi.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nu am putut șterge fișierul sursă.', 'errExtract' : 'Nu am putut extrage fișierele din "$1".', 'errArchive' : 'Nu am putut crea arhiva.', 'errArcType' : 'Arhiva este de un tip nesuportat.', 'errNoArchive' : 'Fișierul nu este o arhiva sau este o arhivă de un tip necunoscut.', 'errCmdNoSupport' : 'Backend-ul nu suportă această comandă.', 'errReplByChild' : 'Dosarul “$1” nu poate fi înlocuit de un element pe care el îl conține.', 'errArcSymlinks' : 'Din motive de securitate, arhiva nu are voie să conțină symlinks sau fișiere cu nume interzise.', // edited 24.06.2012 'errArcMaxSize' : 'Fișierul arhivei depășește mărimea maximă permisă.', 'errResize' : 'Nu am putut redimensiona "$1".', 'errResizeDegree' : 'Grad de rotație nevalid.', // added 7.3.2013 'errResizeRotate' : 'Imaginea nu a fost rotită.', // added 7.3.2013 'errResizeSize' : 'Mărimea imaginii este nevalidă.', // added 7.3.2013 'errResizeNoChange' : 'Mărimea imaginii nu a fost schimbată.', // added 7.3.2013 'errUsupportType' : 'Tipul acesta de fișier nu este suportat.', 'errNotUTF8Content' : 'Fișierul "$1" nu folosește UTF-8 și nu poate fi editat.', // added 9.11.2011 'errNetMount' : 'Nu am putut încărca "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocol nesuportat.', // added 17.04.2012 'errNetMountFailed' : 'Încărcare eșuată.', // added 17.04.2012 'errNetMountHostReq' : 'Gazda este necesară.', // added 18.04.2012 'errSessionExpires' : 'Sesiunea a expirat datorită lipsei de activitate.', 'errCreatingTempDir' : 'Nu am putut crea fișierul temporar: "$1"', 'errFtpDownloadFile' : 'Nu am putut descarca fișierul de pe FTP: "$1"', 'errFtpUploadFile' : 'Nu am putut încărca fișierul pe FTP: "$1"', 'errFtpMkdir' : 'Nu am putut crea acest dosar pe FTP: "$1"', 'errArchiveExec' : 'Eroare la arhivarea fișierelor: "$1"', 'errExtractExec' : 'Eroare la dezarhivarea fișierelor: "$1"', 'errNetUnMount' : 'Nu am putut elimina volumul', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nu poate fi convertit la UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Pentru a urca dosare încearcă Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timpul expirat în timpul căutării „$1”. Rezultatul căutării este parțial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Este necesară reautorizarea.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Numărul maxim de articole selectabile este de 1 USD.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nu se poate restabili din coșul de gunoi. Nu se poate identifica destinația de restaurare.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editorul nu a fost găsit pentru acest tip de fișier.', // from v2.1.25 added 23.5.2017 'errServerError' : 'A apărut o eroare pe partea serverului.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nu se poate goli folderul „$1”.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Mai sunt erori de $1.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Puteți crea până la $1 foldere simultan.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Creeaza arhivă', 'cmdback' : 'Înapoi', 'cmdcopy' : 'Copiază', 'cmdcut' : 'Taie', 'cmddownload' : 'Descarcă', 'cmdduplicate' : 'Creează duplicat', 'cmdedit' : 'Modifică fișier', 'cmdextract' : 'Extrage fișierele din arhivă', 'cmdforward' : 'Înainte', 'cmdgetfile' : 'Alege fișiere', 'cmdhelp' : 'Despre acest software', 'cmdhome' : 'Acasă', 'cmdinfo' : 'Informații', 'cmdmkdir' : 'Dosar nou', 'cmdmkdirin' : 'În folderul nou', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Fișier nou', 'cmdopen' : 'Deschide', 'cmdpaste' : 'Lipește', 'cmdquicklook' : 'Previzualizează', 'cmdreload' : 'Reîncarcă', 'cmdrename' : 'Redenumește', 'cmdrm' : 'Șterge', 'cmdtrash' : 'În gunoi', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restabili', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Găsește fișiere', 'cmdup' : 'Mergi la dosarul părinte', 'cmdupload' : 'Urcă fișiere', 'cmdview' : 'Vezi', 'cmdresize' : 'Redimensionează & rotește', 'cmdsort' : 'Sortează', 'cmdnetmount' : 'Încarcă volum din rețea', // added 18.04.2012 'cmdnetunmount': 'Elimină volum', // from v2.1 added 30.04.2012 'cmdplaces' : 'La Locuri', // added 28.12.2014 'cmdchmod' : 'Schimbă mod', // from v2.1 added 20.6.2015 'cmdopendir' : 'Deschide un folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Resetați lățimea coloanei', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Ecran complet', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mișcare', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Goliți folderul', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Anula', // from v2.1.27 added 31.07.2017 'cmdredo' : 'A reface', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferințe', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Selectează tot', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Selectați niciunul', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverseaza selectia', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Deschide într-o fereastră nouă', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ascunde (Preferință)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Închide', 'btnSave' : 'Salvează', 'btnRm' : 'Șterge', 'btnApply' : 'Aplică', 'btnCancel' : 'Anulează', 'btnNo' : 'Nu', 'btnYes' : 'Da', 'btnMount' : 'Încarcă', // added 18.04.2012 'btnApprove': 'Mergi la $1 și aprobă', // from v2.1 added 26.04.2012 'btnUnmount': 'Elimină volum', // from v2.1 added 30.04.2012 'btnConv' : 'Convertește', // from v2.1 added 08.04.2014 'btnCwd' : 'Aici', // from v2.1 added 22.5.2015 'btnVolume' : 'Volum', // from v2.1 added 22.5.2015 'btnAll' : 'Toate', // from v2.1 added 22.5.2015 'btnMime' : 'Tipuri MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nume fișier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salvează și închide', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Redenumiți', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Redenumiți(Toate)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Anterior ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Următorul ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Salvează ca', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Deschide dosar', 'ntffile' : 'Deschide fișier', 'ntfreload' : 'Actualizează conținutul dosarului', 'ntfmkdir' : 'Se creează dosarul', 'ntfmkfile' : 'Se creează fișierele', 'ntfrm' : 'Șterge fișiere', 'ntfcopy' : 'Copiază fișiere', 'ntfmove' : 'Mută fișiere', 'ntfprepare' : 'Pregătește copierea fișierelor', 'ntfrename' : 'Redenumește fișiere', 'ntfupload' : 'Se urcă fișierele', 'ntfdownload' : 'Se descarcă fișierele', 'ntfsave' : 'Salvează fișiere', 'ntfarchive' : 'Se creează arhiva', 'ntfextract' : 'Se extrag fișierele din arhivă', 'ntfsearch' : 'Se caută fișierele', 'ntfresize' : 'Se redimnesionează imaginile', 'ntfsmth' : 'Se întamplă ceva', 'ntfloadimg' : 'Se încarcă imaginea', 'ntfnetmount' : 'Se încarcă volumul din rețea', // added 18.04.2012 'ntfnetunmount': 'Se elimină volumul din rețea', // from v2.1 added 30.04.2012 'ntfdim' : 'Se preiau dimensiunile imaginii', // added 20.05.2013 'ntfreaddir' : 'Se citesc informațiile dosarului', // from v2.1 added 01.07.2013 'ntfurl' : 'Se preia URL-ul din link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Se schimba modul de fișier', // from v2.1 added 20.6.2015 'ntfpreupload': 'Se verifică numele fișierului de încărcare', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Crearea unui fișier pentru descărcare', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obținerea informațiilor despre cale', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Se procesează fișierul încărcat', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Aruncă la gunoi', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Se efectuează restaurarea din coșul de gunoi', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Se verifică folderul de destinație', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Se anulează operația anterioară', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Se reface anularea anterioară', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Verificarea conținutului', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Gunoi', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'necunoscută', 'Today' : 'Astăzi', 'Yesterday' : 'Ieri', 'msJan' : 'Ian', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Aprilie', 'msMay' : 'Mai', 'msJun' : 'Iun', 'msJul' : 'Iul', 'msAug' : 'aug', 'msSep' : 'sept', 'msOct' : 'oct', 'msNov' : 'nov', 'msDec' : 'Dec', 'January' : 'Ianuarie', 'February' : 'Februarie', 'March' : 'Martie', 'April' : 'Aprilie', 'May' : 'Mai', 'June' : 'Iunie', 'July' : 'Iulie', 'August' : 'August', 'September' : 'Septembrie', 'October' : 'Octombrie', 'November' : 'Noiembrie', 'December' : 'Decembrie', 'Sunday' : 'Duminică', 'Monday' : 'Luni', 'Tuesday' : 'Marți', 'Wednesday' : 'Miercuri', 'Thursday' : 'Joi', 'Friday' : 'Vineri', 'Saturday' : 'Sâmbătă', 'Sun' : 'Du', 'Mon' : 'Lu', 'Tue' : 'Ma', 'Wed' : 'Mi', 'Thu' : 'Jo', 'Fri' : 'Vi', 'Sat' : 'Sâ', /******************************** sort variants ********************************/ 'sortname' : 'după nume', 'sortkind' : 'după tip', 'sortsize' : 'după mărime', 'sortdate' : 'după dată', 'sortFoldersFirst' : 'Dosarele primele', 'sortperm' : 'cu permisiunea', // from v2.1.13 added 13.06.2016 'sortmode' : 'după mod', // from v2.1.13 added 13.06.2016 'sortowner' : 'de catre proprietar', // from v2.1.13 added 13.06.2016 'sortgroup' : 'pe grupe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'De asemenea, Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'FisierNou.txt', // added 10.11.2015 'untitled folder' : 'DosarNou', // added 10.11.2015 'Archive' : 'ArhivaNoua', // from v2.1 added 10.11.2015 'untitled file' : 'Fișier nou.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fișier', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Este necesară confirmare', 'confirmRm' : 'Ești sigur că vrei să ștergi fișierele?
Acțiunea este ireversibilă!', 'confirmRepl' : 'Înlocuiește fișierul vechi cu cel nou?', 'confirmRest' : 'Înlocuiți elementul existent cu articolul din coșul de gunoi?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nu este în UTF-8
Convertim la UTF-8?
Conținutul devine UTF-8 după salvarea conversiei.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Codificarea caracterelor acestui fișier nu a putut fi detectată. Trebuie să se convertească temporar în UTF-8 pentru editare.
Selectați codificarea caracterelor pentru acest fișier.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Au avut loc modificări.
Dacă nu salvezi se vor pierde modificările.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sigur doriți să mutați articolele în coșul de gunoi?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Sigur doriți să mutați articole în „$1”?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Aplică pentru toate', 'name' : 'Nume', 'size' : 'Mărime', 'perms' : 'Permisiuni', 'modify' : 'Modificat la', 'kind' : 'Tip', 'read' : 'citire', 'write' : 'scriere', 'noaccess' : 'acces interzis', 'and' : 'și', 'unknown' : 'necunoscut', 'selectall' : 'Alege toate fișierele', 'selectfiles' : 'Alege fișier(e)', 'selectffile' : 'Alege primul fișier', 'selectlfile' : 'Alege ultimul fișier', 'viewlist' : 'Vezi ca listă', 'viewicons' : 'Vezi ca icoane', 'viewSmall' : 'Pictograme mici', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Pictograme medii', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Pictograme mari', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Pictograme foarte mari', // from v2.1.39 added 22.5.2018 'places' : 'Locuri', 'calc' : 'Calculează', 'path' : 'Cale', 'aliasfor' : 'Alias pentru', 'locked' : 'Securizat', 'dim' : 'Dimensiuni', 'files' : 'Fișiere', 'folders' : 'Dosare', 'items' : 'Elemente', 'yes' : 'da', 'no' : 'nu', 'link' : 'Legătură', 'searcresult' : 'Rezultatele căutării', 'selected' : 'elemente alese', 'about' : 'Despre', 'shortcuts' : 'Scurtături', 'help' : 'Ajutor', 'webfm' : 'Manager web pentru fișiere', 'ver' : 'Versiune', 'protocolver' : 'versiune protocol', 'homepage' : 'Pagina proiectului', 'docs' : 'Documentație', 'github' : 'Fork nou pe Github', 'twitter' : 'Urmărește-ne pe twitter', 'facebook' : 'Alătura-te pe facebook', 'team' : 'Echipa', 'chiefdev' : 'dezvoltator șef', 'developer' : 'dezvoltator', 'contributor' : 'contribuitor', 'maintainer' : 'întreţinător', 'translator' : 'traducător', 'icons' : 'Icoane', 'dontforget' : 'și nu uita să-ți iei prosopul', 'shortcutsof' : 'Scurtăturile sunt dezactivate', 'dropFiles' : 'Dă drumul fișierelor aici', 'or' : 'sau', 'selectForUpload' : 'Alege fișiere pentru a le urca', 'moveFiles' : 'Mută fișiere', 'copyFiles' : 'Copiază fișiere', 'restoreFiles' : 'Restaurați articolele', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Șterge din locuri', 'aspectRatio' : 'Raportul de aspect', 'scale' : 'Scală', 'width' : 'Lățime', 'height' : 'Înălțime', 'resize' : 'Redimensionează', 'crop' : 'Decupează', 'rotate' : 'Rotește', 'rotate-cw' : 'Rotește cu 90° în sensul ceasului', 'rotate-ccw' : 'Rotește cu 90° în sensul invers ceasului', 'degree' : '°', 'netMountDialogTitle' : 'Încarcă volum din rețea', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Gazdă', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilizator', // added 18.04.2012 'pass' : 'Parolă', // added 18.04.2012 'confirmUnmount' : 'Vrei să elimini volumul $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drag&drop sau lipește din browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drag&drop sau lipește fișiere aici', // from v2.1 added 07.04.2014 'encoding' : 'Encodare', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Țintă: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Caută după tipul MIME', // from v2.1 added 22.5.2015 'owner' : 'Proprietar', // from v2.1 added 20.6.2015 'group' : 'grup', // from v2.1 added 20.6.2015 'other' : 'Alte', // from v2.1 added 20.6.2015 'execute' : 'A executa', // from v2.1 added 20.6.2015 'perm' : 'Permisiune', // from v2.1 added 20.6.2015 'mode' : 'Mod', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folderul este gol', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folderul este gol\\A Drop pentru a adăuga elemente', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Dosarul este gol\\A Atingeți lung pentru a adăuga elemente', // from v2.1.6 added 30.12.2015 'quality' : 'Calitate', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto-sincronizare', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mișcă-te în sus', // from v2.1.6 added 18.1.2016 'getLink' : 'Obțineți linkul URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Articole selectate ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID dosar', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permite accesul offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Pentru a se re-autentifica', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Acum se încarcă...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Deschideți mai multe fișiere', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Încercați să deschideți fișierele $1. Sigur doriți să deschideți în browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Rezultatele căutării sunt goale în ținta de căutare.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Este editarea unui fișier.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Ați selectat articole de 1 USD.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Aveți articole de 1 USD în clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Căutarea incrementală este numai din vizualizarea curentă.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reintroduceți', // from v2.1.15 added 3.8.2016 'complete' : '1 dolar complet', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Meniul contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Întoarcerea paginii', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Rădăcini de volum', // from v2.1.16 added 16.9.2016 'reset' : 'Resetează', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Culoare de fundal', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selector de culoare', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grilă 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Activat', // from v2.1.16 added 4.10.2016 'disabled' : 'Dezactivat', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Rezultatele căutării sunt goale în vizualizarea curentă.\\APăsați [Enter] pentru a extinde ținta de căutare.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Rezultatele căutării cu prima literă sunt goale în vizualizarea curentă.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etichetă text', // from v2.1.17 added 13.10.2016 'minsLeft' : '1 $ min. rămase', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Redeschideți cu codificarea selectată', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Salvați cu codificarea selectată', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Selectați folderul', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Căutare prima literă', // from v2.1.23 added 24.3.2017 'presets' : 'Presetări', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Sunt prea multe articole, așa că nu pot fi la gunoi.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Goliți folderul „$1”.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Nu există elemente într-un folder „$1”.', // from v2.1.25 added 22.6.2017 'preference' : 'Preferinţă', // from v2.1.26 added 28.6.2017 'language' : 'Limba', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inițializați setările salvate în acest browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Setările barei de instrumente', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caractere rămase.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 1 $ linii rămase.', // from v2.1.52 added 16.1.2020 'sum' : 'Sumă', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Dimensiunea aspră a fișierului', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Concentrați-vă pe elementul de dialog cu mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Selectați', // from v2.1.30 added 23.11.2017 'selectAction' : 'Acțiune când selectați fișierul', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Deschideți cu editorul folosit ultima dată', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverseaza selectia', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sigur doriți să redenumiți $1 elementele selectate, cum ar fi $2?
Acest lucru nu poate fi anulat!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Redenumirea lotului', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Număr', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Adăugați prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Adăugați sufix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Schimbați extensia', // from v2.1.31 added 8.12.2017 'columnPref' : 'Setări coloane (vizualizare listă)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Toate modificările se vor reflecta imediat în arhivă.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Orice modificare nu se va reflecta până când nu demontați acest volum.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Următoarele volume montate pe acest volum au fost, de asemenea, demontate. Ești sigur că o demontați?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informații de selecție', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmi pentru a afișa hash-ul fișierului', // from v2.1.33 added 10.3.2018 'infoItems' : 'Elemente de informații (panoul de informații de selecție)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Apăsați din nou pentru a ieși.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Bara de instrumente', // from v2.1.38 added 4.4.2018 'workspace' : 'Spațiu de lucru', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Toate', // from v2.1.38 added 4.4.2018 'iconSize' : 'Dimensiunea pictogramei (vizualizarea pictogramelor)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Deschideți fereastra editorului maximizat', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Deoarece conversia prin API nu este disponibilă în prezent, vă rugăm să efectuați conversia pe site.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'După conversie, trebuie să fiți încărcat cu adresa URL a articolului sau cu un fișier descărcat pentru a salva fișierul convertit.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convertiți pe site-ul de $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrari', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Acest elFinder are următoarele servicii externe integrate. Vă rugăm să verificați termenii de utilizare, politica de confidențialitate etc. înainte de a o utiliza.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Afișează elementele ascunse', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ascunde elementele ascunse', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Afișează/Ascunde elementele ascunse', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipuri de fișiere de activat cu „Fișier nou”', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipul fișierului text', // from v2.1.41 added 7.8.2018 'add' : 'Adăuga', // from v2.1.41 added 7.8.2018 'theme' : 'Temă', // from v2.1.43 added 19.10.2018 'default' : 'Mod implicit', // from v2.1.43 added 19.10.2018 'description' : 'Descriere', // from v2.1.43 added 19.10.2018 'website' : 'Site-ul web', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licență', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Acest articol nu poate fi salvat. Pentru a evita pierderea editărilor, trebuie să exportați pe computer.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Faceți dublu clic pe fișier pentru a-l selecta.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Utilizați modul ecran complet', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Necunoscut', 'kindRoot' : 'Rădăcină de volum', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dosar', 'kindSelects' : 'Selecții', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias stricat', // applications 'kindApp' : 'Aplicație', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Prezentare Microsoft Powerpoint', 'kindOO' : 'Document Open Office', 'kindAppFlash' : 'Aplicație Flash', 'kindPDF' : 'Document Portabil (PDF)', 'kindTorrent' : 'Fișier Bittorrent', 'kind7z' : 'Arhivă 7z', 'kindTAR' : 'Arhivă TAR', 'kindGZIP' : 'Arhivă GZIP', 'kindBZIP' : 'Arhivă BZIP', 'kindXZ' : 'Arhivă XZ', 'kindZIP' : 'Arhivă ZIP', 'kindRAR' : 'Arhivă RAR', 'kindJAR' : 'Fișier Java JAR', 'kindTTF' : 'Font True Type', 'kindOTF' : 'Font Open Type', 'kindRPM' : 'Pachet RPM', // texts 'kindText' : 'Document text', 'kindTextPlain' : 'Text simplu', 'kindPHP' : 'Sursă PHP', 'kindCSS' : 'Fișier de stil (CSS)', 'kindHTML' : 'Document HTML', 'kindJS' : 'Sursă Javascript', 'kindRTF' : 'Text formatat (rich text)', 'kindC' : 'Sursă C', 'kindCHeader' : 'Sursă C header', 'kindCPP' : 'Sursă C++', 'kindCPPHeader' : 'Sursă C++ header', 'kindShell' : 'Script terminal Unix', 'kindPython' : 'Sursă Python', 'kindJava' : 'Sursă Java', 'kindRuby' : 'Sursă Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Sursă SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Sursă AWK', 'kindCSV' : 'Valori separate de virgulă (CSV)', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Text Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagine', 'kindBMP' : 'Imagine BMP', 'kindJPEG' : 'Imagine JPEG', 'kindGIF' : 'Imagine GIF', 'kindPNG' : 'Imagine PNG', 'kindTIFF' : 'Imagine TIFF', 'kindTGA' : 'Imagine TGA', 'kindPSD' : 'Imagine Adobe Photoshop', 'kindXBITMAP' : 'Imagine X bitmap', 'kindPXM' : 'Imagine Pixelmator', // media 'kindAudio' : 'Audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Playlist MP3', 'kindVideo' : 'Video', 'kindVideoDV' : 'Video DV', 'kindVideoMPEG' : 'Video MPEG', 'kindVideoMPEG4' : 'Video MPEG-4', 'kindVideoAVI' : 'Video AVI', 'kindVideoMOV' : 'Video Quick Time', 'kindVideoWM' : 'Video Windows Media', 'kindVideoFlash' : 'Video Flash', 'kindVideoMKV' : 'Video Matroska', 'kindVideoOGG' : 'Video Ogg' } }; })); PK Zc;22js/i18n/elfinder.fo.jsnuW+A/** * Faroese translation * @author Marius Hammer * @version 2022-03-01 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fo = { translator : 'Marius Hammer <marius@vrg.fo>', language : 'Faroese', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 01.03.2022 11:44 fancyDateFormat : '$1 H:i', // will show like: Í dag 11:44 nonameDateFormat : 'ymd-His', // noname upload will show like: 220301-114438 messages : { 'getShareText' : 'Deildu', 'Editor ': 'Kóðaritill', /********************************** errors **********************************/ 'error' : 'Villa íkomin', 'errUnknown' : 'Ókend villa.', 'errUnknownCmd' : 'Ókend boð.', 'errJqui' : 'Ógildig jQuery UI konfiguratión. Vælbærar, sum kunnu hálast runt og kunnu sleppast skulu takast við.', 'errNode' : 'elFinder krevur DOM Element stovna.', 'errURL' : 'Ugyldig elFinder konfiguration! URL stilling er ikki ásett.', 'errAccess' : 'Atgongd nokta.', 'errConnect' : 'Far ikki samband við backend.', 'errAbort' : 'Sambandi avbrotið.', 'errTimeout' : 'Sambandi broti av.', 'errNotFound' : 'Backend ikki funnið.', 'errResponse' : 'Ógildugt backend svar.', 'errConf' : 'Ógildugt backend konfiguratión.', 'errJSON' : 'PHP JSON modulið er ikki innstallera.', 'errNoVolumes' : 'Lesiligar mappur er ikki atkomulig.', 'errCmdParams' : 'Ógildigar stillingar fyri kommando "$1".', 'errDataNotJSON' : 'Dáta er ikki JSON.', 'errDataEmpty' : 'Dáta er tømt.', 'errCmdReq' : 'Backend krevur eitt kommando navn.', 'errOpen' : 'Kundi ikki opna "$1".', 'errNotFolder' : 'Luturin er ikki ein mappa.', 'errNotFile' : 'Luturin er ikki ein fíla.', 'errRead' : 'Kundi ikki lesa til "$1".', 'errWrite' : 'Kundi ikki skriva til "$1".', 'errPerm' : 'Atgongd nokta.', 'errLocked' : '"$1" er løst og kann ikki umdoybast, flytast ella strikast.', 'errExists' : 'Tað finst longu ein fíla við navn "$1".', 'errInvName' : 'Ógildugt fíla navn.', 'errInvDirname' : 'Ógilt nafn möppu.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappa ikki funnin.', 'errFileNotFound' : 'Fíla ikki funnin.', 'errTrgFolderNotFound' : 'Mappan "$1" bleiv ikke funnin.', 'errPopup' : 'Kagin forðaði í at opna eitt popup-vindeyga. Fyri at opna fíluna, aktivera popup-vindeygu í tínum kaga stillingum.', 'errMkdir' : '\'Kundi ikki stovna mappu "$1".', 'errMkfile' : 'Kundi ikki stovna mappu "$1".', 'errRename' : 'Kundi ikki umdoyba "$1".', 'errCopyFrom' : 'Kopiering av fílum frá mappuni "$1" er ikke loyvt.', 'errCopyTo' : 'Kopiering av fílum til mappuna "$1" er ikke loyvt.', 'errMkOutLink' : 'Ikki ført fyri at stovna leinkju til uttanfyri \'volume\' rót.', // from v2.1 added 03.10.2015 'errUpload' : 'Innlegginar feilur.', // old name - errUploadCommon 'errUploadFile' : 'Kundi ikki leggja "$1" inn.', // old name - errUpload 'errUploadNoFiles' : 'Ongar fílar funnir at leggja inn.', 'errUploadTotalSize' : 'Dátain er størri enn mest loyvda støddin.', // old name - errMaxSize 'errUploadFileSize' : 'Fíla er størri enn mest loyvda støddin.', // old name - errFileMaxSize 'errUploadMime' : 'Fílu slag ikki góðkent.', 'errUploadTransfer' : '"$1" innleggingar feilur.', 'errUploadTemp' : 'Ikki ført fyri at gera fyribils fílu fyri innlegging.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Lutur "$1" finst longu á hesum stað og can ikki skiftast út av lutið av øðrum slag.', // new 'errReplace' : 'Ikki ført fyri at erstattae "$1".', 'errSave' : 'Kundi ikki goyma "$1".', 'errCopy' : 'Kundi ikki kopiera "$1".', 'errMove' : 'Kundi ikki flyta "$1".', 'errCopyInItself' : 'Kundi ikki kopiera "$1" inn í seg sjálva.', 'errRm' : 'Kundi ikki strika "$1".', 'errTrash' : 'Ekki hægt að fara í ruslið.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Ikki ført fyri at strika keldu fíla(r).', 'errExtract' : 'Kundi ikki útpakka fílar frá "$1".', 'errArchive' : 'Kundi ikki stovna arkiv.', 'errArcType' : 'Arkiv slagið er ikki stuðla.', 'errNoArchive' : 'Fílan er ikki eitt arkiv ella er ikki eitt stuðla arkiva slag.', 'errCmdNoSupport' : 'Backend stuðlar ikki hesi boð.', 'errReplByChild' : 'appan "$1" kann ikki erstattast av einari vøru, hon inniheldur.', 'errArcSymlinks' : 'Av trygdarávum grundum, noktaði skipanin at pakka út arkivir ið innihalda symlinks ella fílur við nøvn ið ikki eru loyvd.', // edited 24.06.2012 'errArcMaxSize' : 'Arkiv fílar fylla meir enn mest loyvda støddin.', 'errResize' : 'Kundi ikki broyta støddina á "$1".', 'errResizeDegree' : 'Ógildugt roterings stig.', // added 7.3.2013 'errResizeRotate' : 'Ikki ført fyri at rotera mynd.', // added 7.3.2013 'errResizeSize' : 'Ógildug myndastødd.', // added 7.3.2013 'errResizeNoChange' : 'Mynda stødd ikki broytt.', // added 7.3.2013 'errUsupportType' : 'Ikki stuðla fíla slag.', 'errNotUTF8Content' : 'Fílan "$1" er ikki í UTF-8 og kann ikki vera rættað.', // added 9.11.2011 'errNetMount' : 'Kundi ikki "mounta" "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ikki stuðla protokol.', // added 17.04.2012 'errNetMountFailed' : 'Mount miseydnaðist.', // added 17.04.2012 'errNetMountHostReq' : 'Host kravt.', // added 18.04.2012 'errSessionExpires' : 'Tín seta er útgingin vegna óvirkniy.', 'errCreatingTempDir' : 'Ikki ført fyri at stovna fyribils fíluskrá: "$1"', 'errFtpDownloadFile' : 'Ikki ført fyri at taka fílu niður frá FTP: "$1"', 'errFtpUploadFile' : 'Ikki ført fyri at leggja fílu til FTP: "$1"', 'errFtpMkdir' : 'Ikki ført fyri at stovna fjar-fílaskrá á FTP: "$1"', 'errArchiveExec' : 'Villa íkomin undir arkiveran af fílar: "$1"', 'errExtractExec' : 'Villa íkomin undir útpakking af fílum: "$1"', 'errNetUnMount' : 'Unable to unmount', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kann ikki broytast til UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Royn Google Chrome, um tú ynskir at leggja mappu innn.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Tími rann út þegar leitað var að "$1". Leitarniðurstaða er að hluta.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Endurheimild er krafist.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Hámarksfjöldi vara sem hægt er að velja er $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Ekki er hægt að endurheimta úr ruslinu. Ekki er hægt að bera kennsl á endurheimtunarstaðinn.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Ritstjóri fannst ekki fyrir þessa skráartegund.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Villa kom upp á þjóninum.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Ekki tókst að tæma möppuna "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Það eru $1 villur í viðbót.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Þú getur búið til allt að $1 möppur í einu.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Stovna arkiv', 'cmdback' : 'Aftur\'', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klipp', 'cmddownload' : 'Tak niður', 'cmdduplicate' : 'Tvífalda', 'cmdedit' : 'Rætta fílu', 'cmdextract' : 'Pakka út fílar úr arkiv', 'cmdforward' : 'Fram', 'cmdgetfile' : 'Vel fílar', 'cmdhelp' : 'Um hesa software', 'cmdhome' : 'Heim', 'cmdinfo' : 'Fá upplýsingar', 'cmdmkdir' : 'Nýggja mappu', 'cmdmkdirin' : 'Inn í nýja möppu', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nýggja fílu', 'cmdopen' : 'Opna', 'cmdpaste' : 'Set inn', 'cmdquicklook' : 'Forsýning', 'cmdreload' : 'Les inn umaftur', 'cmdrename' : 'Umdoyp', 'cmdrm' : 'Strika', 'cmdtrash' : 'Í ruslið', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Endurheimta', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Finn fílar', 'cmdup' : 'Eitt stig upp', 'cmdupload' : 'Legg fílar inn', 'cmdview' : 'Síggj', 'cmdresize' : 'Tillaga stødd & Roter', 'cmdsort' : 'Raða', 'cmdnetmount' : 'Settu hljóðstyrk netkerfisins', // added 18.04.2012 'cmdnetunmount': 'Aftengja', // from v2.1 added 30.04.2012 'cmdplaces' : 'Til støð', // added 28.12.2014 'cmdchmod' : 'Broytir stíl', // from v2.1 added 20.6.2015 'cmdopendir' : 'Opnaðu möppu', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Endurstilla dálkbreidd', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Fullur skjár', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Færa', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Tæmdu möppuna', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Afturkalla', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Gera aftur', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Kjörstillingar', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Velja allt', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Veldu ekkert', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Snúa vali við', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Opna í nýjum glugga', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Fela (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Lat aftur', 'btnSave' : 'Goym', 'btnRm' : 'Strika', 'btnApply' : 'Brúka', 'btnCancel' : 'Angra', 'btnNo' : 'Nei', 'btnYes' : 'Ja', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Farðu í $1 og samþykktu', // from v2.1 added 26.04.2012 'btnUnmount': 'Aftengja', // from v2.1 added 30.04.2012 'btnConv' : 'Konverter', // from v2.1 added 08.04.2014 'btnCwd' : 'Her', // from v2.1 added 22.5.2015 'btnVolume' : 'Hljóðstyrkur', // from v2.1 added 22.5.2015 'btnAll' : 'Øll', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Slag', // from v2.1 added 22.5.2015 'btnFileName':'Fílunavn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Goym & Lat aftur', // from v2.1 added 12.6.2015 'btnBackup' : 'Öryggisafrit', // fromv2.1 added 28.11.2015 'btnRename' : 'Endurnefna', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Endurnefna (Allt)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Fyrri ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Næst ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Vista sem', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Opna mappu', 'ntffile' : '\'Opna fílu', 'ntfreload' : 'Les innaftur mappu innihald', 'ntfmkdir' : 'Stovnar mappu', 'ntfmkfile' : 'Stovnar fílur', 'ntfrm' : 'Strikar fílur', 'ntfcopy' : 'Kopierar fílur', 'ntfmove' : 'Flytur fílar', 'ntfprepare' : 'Ger klárt at kopiera fílar', 'ntfrename' : 'Umdoyp fílar', 'ntfupload' : 'Leggur inn fílar', 'ntfdownload' : 'Tekur fílar niður', 'ntfsave' : 'Goymir fílar', 'ntfarchive' : 'Stovnar arkiv', 'ntfextract' : 'Útpakkar fílar frá arkiv', 'ntfsearch' : 'Leitar eftir fílum', 'ntfresize' : 'Broytir stødd á fílur', 'ntfsmth' : '\'Ger okkurt >_<', 'ntfloadimg' : 'Lesur mynd inn', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Tekur mynda vídd', // added 20.05.2013 'ntfreaddir' : 'Lesur mappu upplýsingar', // from v2.1 added 01.07.2013 'ntfurl' : 'Far URL af leinkju', // from v2.1 added 11.03.2014 'ntfchmod' : 'Broyti fílu stíl', // from v2.1 added 20.6.2015 'ntfpreupload': 'Kannar fílunavnið á fílu', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Að búa til skrá til að sækja', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Að sækja upplýsingar um slóð', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Er að vinna úr skránni sem hlaðið var upp', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Er að henda í ruslið', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Að gera endurheimt úr ruslinu', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Athugar áfangamöppu', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Afturkallar fyrri aðgerð', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Endurgerir fyrra afturkallað', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Athugun á innihaldi', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Ruslið', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'ókent', 'Today' : 'Í dag', 'Yesterday' : 'Í gjár', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Des', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Mars', 'April' : 'Apríl', 'May' : 'Mai', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'Desember', 'Sunday' : 'Sunnudag', 'Monday' : 'Mánadag', 'Tuesday' : 'Týsdag', 'Wednesday' : 'Mikudag', 'Thursday' : 'Hósdag', 'Friday' : 'Fríggjadag', 'Saturday' : 'Leygardag', 'Sun' : 'Sun', 'Mon' : 'Mán', 'Tue' : 'Týs', 'Wed' : 'Mik', 'Thu' : 'Hós', 'Fri' : 'Frí', 'Sat' : 'Ley', /******************************** sort variants ********************************/ 'sortname' : 'eftir navn', 'sortkind' : 'eftir slag', 'sortsize' : 'eftir stødd', 'sortdate' : 'eftir dato', 'sortFoldersFirst' : 'mappur fyrst', 'sortperm' : 'með leyfi', // from v2.1.13 added 13.06.2016 'sortmode' : 'eftir ham', // from v2.1.13 added 13.06.2016 'sortowner' : 'eftir eiganda', // from v2.1.13 added 13.06.2016 'sortgroup' : 'eftir hópi', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Einnig Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NýggjaFílu.txt', // added 10.11.2015 'untitled folder' : 'NýggjaMappu', // added 10.11.2015 'Archive' : 'NýtArkiv', // from v2.1 added 10.11.2015 'untitled file' : 'Nýskrá.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Skrá', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Váttan kravd', 'confirmRm' : 'Ert tú vísur í at tú ynskir at strika fílarnar?
Hetta kann ikki angrast!', 'confirmRepl' : 'Erstatta gomlu fílu við nýggja?', 'confirmRest' : 'Skipta út núverandi hlut með hlutnum í ruslinu?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Brúka á øll', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Ekki var hægt að greina stafakóðun þessarar skráar. Það þarf að breyta tímabundið í UTF-8 til að breyta.
Vinsamlegast veldu táknkóðun þessarar skráar.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Er blivi rættað.
Missir sínar broytingar um tú ikki goymir.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Ertu viss um að þú viljir færa hluti í ruslafötuna?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Ertu viss um að þú viljir færa hluti í "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Brúka til øll', 'name' : 'Navn', 'size' : 'Stødd', 'perms' : 'Rættindi', 'modify' : 'Rættað', 'kind' : 'Slag', 'read' : 'síggja', 'write' : 'broyta', 'noaccess' : 'onga atgongd', 'and' : 'og', 'unknown' : 'ókent', 'selectall' : 'Vel allar fílur', 'selectfiles' : 'Vel fílu(r)', 'selectffile' : 'Vel fyrstu fílu', 'selectlfile' : 'Vel síðstu fílu', 'viewlist' : 'Lista vísing', 'viewicons' : 'Ikon vísing', 'viewSmall' : 'Lítil tákn', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Miðlungs tákn', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Stór tákn', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra stór tákn', // from v2.1.39 added 22.5.2018 'places' : 'Støð', 'calc' : 'Rokna', 'path' : 'Stiga', 'aliasfor' : 'Hjánavn fyri', 'locked' : 'Læst', 'dim' : 'Vídd', 'files' : 'Fílur', 'folders' : 'Mappur', 'items' : 'Myndir', 'yes' : 'ja', 'no' : 'nei', 'link' : 'Leinkja', 'searcresult' : 'Leiti úrslit', 'selected' : 'valdar myndir', 'about' : 'Um', 'shortcuts' : 'Snarvegir', 'help' : 'Hjálp', 'webfm' : 'Web fílu umsitan', 'ver' : 'Útgáva', 'protocolver' : 'protokol versión', 'homepage' : 'Verkætlan heim', 'docs' : 'Skjalfesting', 'github' : 'Mynda okkum á Github', 'twitter' : 'Fylg okkum á twitter', 'facebook' : 'Fylg okkum á facebook', 'team' : 'Lið', 'chiefdev' : 'forritaleiðari', 'developer' : 'forritari', 'contributor' : 'stuðulsveitari', 'maintainer' : 'viðlíkahaldari', 'translator' : 'umsetari', 'icons' : 'Ikonir', 'dontforget' : 'og ekki gleyma að taka handklæðið þitt', 'shortcutsof' : 'Snarvegir sligi frá', 'dropFiles' : 'Slepp fílur her', 'or' : 'ella', 'selectForUpload' : 'Vel fílur at leggja inn', 'moveFiles' : 'Flyt fílur', 'copyFiles' : 'Kopier fílur', 'restoreFiles' : 'Endurheimta hluti', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Flyt frá støð', 'aspectRatio' : 'Skermformat', 'scale' : 'Skalera', 'width' : 'Longd', 'height' : 'Hædd', 'resize' : 'Tilliga stødd', 'crop' : 'Sker til', 'rotate' : 'Rotera', 'rotate-cw' : 'Rotera 90 gradir við urið', 'rotate-ccw' : 'otera 90 gradir móti urið', 'degree' : '°', 'netMountDialogTitle' : 'Settu hljóðstyrk netkerfisins', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Brúkari', // added 18.04.2012 'pass' : 'Loyniorð', // added 18.04.2012 'confirmUnmount' : 'Ertu að taka $1 af?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Hála ella set innn fílar frá kaga', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Hála ella set inn fílar frá URls her', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Tungumál', // from v2.1 added 19.12.2014 'searchTarget' : 'skotmark: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Leita við input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Eigari', // from v2.1 added 20.6.2015 'group' : 'Bólkur', // from v2.1 added 20.6.2015 'other' : 'Annað', // from v2.1 added 20.6.2015 'execute' : 'Útfør', // from v2.1 added 20.6.2015 'perm' : 'Rættindi', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mappan er tóm', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mappan er tóm\\Slepptu til að bæta við hlutum', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mappan er tóm\\Langsmellið til að bæta við hlutum', // from v2.1.6 added 30.12.2015 'quality' : 'Gæði', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sjálfvirk samstilling', // from v2.1.6 added 10.1.2016 'moveUp' : 'Fara upp', // from v2.1.6 added 18.1.2016 'getLink' : 'Fáðu slóð tengil', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Valdir hlutir ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Auðkenni möppu', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Leyfa aðgang án nettengingar', // from v2.1.10 added 3.25.2016 'reAuth' : 'Til að sannvotta aftur', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Hleður núna...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Opnaðu margar skrár', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Þú ert að reyna að opna $1 skrárnar. Ertu viss um að þú viljir opna í vafra?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Leitarniðurstöður eru tómar í leitarmarkmiði.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Það er verið að breyta skrá.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Þú hefur valið $1 atriði.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Þú ert með $1 atriði á klippiborðinu.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Stigvaxandi leit er aðeins frá núverandi skjá.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Settu aftur inn', // from v2.1.15 added 3.8.2016 'complete' : '$1 lokið', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Samhengisvalmynd', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Blaðsnúningur', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Rætur bindi', // from v2.1.16 added 16.9.2016 'reset' : 'Endurstilla', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Bakgrunns litur', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Litaplokkari', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Virkt', // from v2.1.16 added 4.10.2016 'disabled' : 'Öryrkjar', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Leitarniðurstöður eru tómar í núverandi yfirliti.\\AÝttu á [Enter] til að stækka leitarmarkmiðið.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Fyrsta stafur leitarniðurstöður eru tómar í núverandi skjá.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Texti merki', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mín eftir', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Opnaðu aftur með valinni kóðun', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Vistaðu með völdum kóðun', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Veldu möppu', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Fyrsta stafs leit', // from v2.1.23 added 24.3.2017 'presets' : 'Forstillingar', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Það er of mikið af hlutum svo það má ekki fara í ruslið.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Tæmdu möppuna "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Það eru engin atriði í möppunni "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Tungumál', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Uppstilltu stillingarnar sem vistaðar eru í þessum vafra', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Stillingar tækjastikunnar', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 stafir eftir.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 línur eftir.', // from v2.1.52 added 16.1.2020 'sum' : 'Summa', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Gróf skráarstærð', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Einbeittu þér að þætti gluggans með músinni', // from v2.1.30 added 2.11.2017 'select' : 'Veljið', // from v2.1.30 added 23.11.2017 'selectAction' : 'Aðgerð þegar skrá er valin', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Opna með ritlinum sem notaður var síðast', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Snúa vali við', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Ertu viss um að þú viljir endurnefna $1 valin atriði eins og $2?
Ekki er hægt að afturkalla þetta!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Endurnefna runu', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Númer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Bæta við forskeyti', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Bæta við viðskeyti', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Breyta eftirnafn', // from v2.1.31 added 8.12.2017 'columnPref' : 'Dálkastillingar (listayfirlit)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Allar breytingar birtast strax í skjalasafninu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Allar breytingar munu ekki endurspeglast fyrr en aftengdu þetta hljóðstyrk.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Eftirfarandi bindi(r) sem sett voru á þetta bindi voru einnig afsett. Ertu viss um að taka það af?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Upplýsingar um val', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Reiknirit til að sýna skráarhash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Upplýsingaatriði (upplýsingaborð fyrir val)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Ýttu aftur til að hætta.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Tækjastikan', // from v2.1.38 added 4.4.2018 'workspace' : 'Vinnurými', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Allt', // from v2.1.38 added 4.4.2018 'iconSize' : 'Táknstærð (táknskjár)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Opnaðu hámarks ritstjóragluggann', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Vegna þess að umbreyting með API er ekki í boði eins og er, vinsamlegast umbreyttu á vefsíðunni.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Eftir umbreytingu verður þú að vera hlaðið upp með vefslóð hlutarins eða niðurhalðri skrá til að vista breyttu skrána.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Umbreyttu á síðunni $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Samþættingar', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Þessi elFinder hefur eftirfarandi ytri þjónustu samþætta. Vinsamlegast athugaðu notkunarskilmála, persónuverndarstefnu osfrv. áður en þú notar það.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Sýndu falin atriði', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Fela falin atriði', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Sýna/fela falin atriði', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Skráargerðir til að virkja með "Ný skrá"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tegund textaskráarinnar', // from v2.1.41 added 7.8.2018 'add' : 'Bæta við', // from v2.1.41 added 7.8.2018 'theme' : 'Þema', // from v2.1.43 added 19.10.2018 'default' : 'Sjálfgefna', // from v2.1.43 added 19.10.2018 'description' : 'Lýsing', // from v2.1.43 added 19.10.2018 'website' : 'Vefsíða', // from v2.1.43 added 19.10.2018 'author' : 'Höfundur', // from v2.1.43 added 19.10.2018 'email' : 'Tölvupóstur', // from v2.1.43 added 19.10.2018 'license' : 'Leyfi', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Ekki er hægt að vista þetta atriði. Til að forðast að tapa breytingunum þarftu að flytja út á tölvuna þína.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Tvísmelltu á skrána til að velja hana.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Notaðu fullskjástillingu', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ókent', 'kindRoot' : 'Hljóðstyrksrót', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappa', 'kindSelects' : 'Valmöguleikar', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Hjánavn', 'kindAliasBroken' : 'Óvirki hjánavn', // applications 'kindApp' : 'Applikatión', 'kindPostscript' : 'Postscript skjal', 'kindMsOffice' : 'Microsoft Office skjal', 'kindMsWord' : 'Microsoft Word skjal', 'kindMsExcel' : 'Microsoft Excel skjal', 'kindMsPP' : 'Microsoft Powerpoint framløga', 'kindOO' : 'Open Office skjal', 'kindAppFlash' : 'Flash applikatión', 'kindPDF' : 'Færanlegt skjalasnið (PDF)', 'kindTorrent' : 'Bittorrent fíla', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR arkiv', 'kindJAR' : 'Java JAR ffílaile', 'kindTTF' : 'True Type leturgerð', 'kindOTF' : 'Opnaðu leturgerð', 'kindRPM' : 'RPM pakki', // texts 'kindText' : 'Text skjal', 'kindTextPlain' : 'Reinur tekstur', 'kindPHP' : 'PHP kelda', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML skjal', 'kindJS' : 'Javascript kelda', 'kindRTF' : 'Rich Text Format (RTF)', 'kindC' : 'C kelda', 'kindCHeader' : 'C header kelda', 'kindCPP' : 'C++ kelda', 'kindCPPHeader' : 'C++ header kelda', 'kindShell' : 'Unix skel handrit', 'kindPython' : 'Python kelda', 'kindJava' : 'Java kelda', 'kindRuby' : 'Ruby kelda', 'kindPerl' : 'Perl handrit', 'kindSQL' : 'SQL kelda', 'kindXML' : 'XML skjal', 'kindAWK' : 'AWK kelda', 'kindCSV' : 'Comma separated values (CSV)', 'kindDOCBOOK' : 'Docbook XML skjal', 'kindMarkdown' : 'Markdown texti', // added 20.7.2015 // images 'kindImage' : 'Mynd', 'kindBMP' : 'BMP mynd', 'kindJPEG' : 'JPEG mynd', 'kindGIF' : 'GIF mynd', 'kindPNG' : 'PNG mynd', 'kindTIFF' : 'TIFF mynd', 'kindTGA' : 'TGA mynd', 'kindPSD' : 'Adobe Photoshop mynd', 'kindXBITMAP' : 'X bitmap mynd', 'kindPXM' : 'Pixelmator mynd', // media 'kindAudio' : 'Hljóðmiðlar', 'kindAudioMPEG' : 'MPEG ljóðfíla', 'kindAudioMPEG4' : 'MPEG-4 ljóðfíla', 'kindAudioMIDI' : 'MIDI ljóðfíla', 'kindAudioOGG' : 'Ogg Vorbis ljóðfíla', 'kindAudioWAV' : 'WAV ljóðfíla', 'AudioPlaylist' : 'MP3 playlisti', 'kindVideo' : 'Myndbandsmiðlar', 'kindVideoDV' : 'DV filmur', 'kindVideoMPEG' : 'MPEG filmur', 'kindVideoMPEG4' : 'MPEG-4 filmur', 'kindVideoAVI' : 'AVI filmur', 'kindVideoMOV' : 'Quick Time filmur', 'kindVideoWM' : 'Windows Media filmur', 'kindVideoFlash' : 'Flash filmur', 'kindVideoMKV' : 'Matroska filmur', 'kindVideoOGG' : 'Ogg filmur' } }; }));PK Z#FFjs/i18n/elfinder.ug_CN.jsnuW+A/** * ئ‍ۇيغۇرچە translation * @author تەرجىمە قىلغۇچى: ئۆتكۈر بىز شىركىتى info@otkur.biz * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ug_CN = { translator : 'تەرجىمە قىلغۇچى: ئۆتكۈر بىز شىركىتى info@otkur.biz', language : 'ئ‍ۇيغۇرچە', direction : 'rtl', dateFormat : 'Y-m-d H:i', // will show like: 2022-03-03 16:56 fancyDateFormat : '$1 H:i', // will show like: بۈگۈن 16:56 nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-165611 messages : { 'getShareText' : 'ھەمبەھىرلەش', 'Editor ': 'كود تەھرىرلىگۈچى', /********************************** errors **********************************/ 'error' : 'خاتالىق', 'errUnknown' : 'كۈتۈلمىگەن خاتالىقكەن.', 'errUnknownCmd' : 'كۈتۈلمىگەن بۇيرۇقكەن.', 'errJqui' : 'jQuery UI تەڭشىكى توغرا بولمىغان. چوقۇم Selectable، draggable، droppabl قاتارلىق بۆلەكلەر بولۇشى كېرەك.', 'errNode' : 'elFinder DOM ئېلىمىنتلىرىنى قۇرالىشى كېرەك.', 'errURL' : 'elFinder تەڭشىكى توغرا بولمىغان! URL تەڭشىكى يېزىلمىغان.', 'errAccess' : 'زىيارەت قىلىش چەكلەنگەن.', 'errConnect' : 'ئارقا سۇپىغا ئۇلاش مەغلۇپ بولدى..', 'errAbort' : 'ئارقا سۇپىغا توختىتىلدى.', 'errTimeout' : 'ئارقا سۇپىغا بەلگىلەنگەن ۋاقىتتا ئۇلىيالمىدى.', 'errNotFound' : 'ئارقا سۇپا تېپىلمىدى.', 'errResponse' : 'ئارقا سۇپىدىن توغرا بولمىغان ئىنكاس قايتتى.', 'errConf' : 'ئارقا سۇپا تەڭشىكى توغرا ئەمەس.', 'errJSON' : 'PHP JSON بۆلىكى قاچىلانمىغان.', 'errNoVolumes' : 'ئوقۇشقا بولىدىغان ھۈججەت خالتىسى يوق.', 'errCmdParams' : 'پارامېتىر خاتا، بۇيرۇق: "$1".', 'errDataNotJSON' : 'ئارقا سۇپا قايتۇرغان سانلىق مەلۇمات توغرا بولغان JSON ئەمەسكەن.', 'errDataEmpty' : 'ئارقا سۇپا قايتۇرغان سانلىق مەلۇمات قۇرۇقكەن.', 'errCmdReq' : 'ئارقا سۇپىدىكى بۇيرۇقنىڭ ئ‍سىمى تەمىنلىنىشى كېرەك.', 'errOpen' : '"$1"نى ئاچالمىدى.', 'errNotFolder' : 'ئوبىكىت مۇندەرىجە ئەمەسكەن.', 'errNotFile' : 'ئوبىكىت ھۈججەت ئەمەسكەن.', 'errRead' : '"$1"نى ئوقۇيالمىدى.', 'errWrite' : '"$1"نى يازالمىدى.', 'errPerm' : 'ھوقۇق يوق.', 'errLocked' : '"$1" تاقالغان,ئۆزگەرتەلمەيسىز.', 'errExists' : '"$1" ناملىق ھۈججەت باركەن.', 'errInvName' : 'توغرا بولمىغان ھۈججەت قىسقۇچ ئىسمى.', 'errInvDirname' : 'ھۆججەت قىسقۇچنىڭ ئىسمى ئىناۋەتسىز.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'ھۈججەت قىسقۇچنى تاپالمىدى.', 'errFileNotFound' : 'ھۈججەتنى تاپالمىدى.', 'errTrgFolderNotFound' : '"$1" ناملىق ھۈججەت قىسقۇچنى تاپالمىدى.', 'errPopup' : 'سەكرەپ چىققان يېڭى بەتنى تور كۆرگۈچ كۆرسەتمىدى، ئۈستىدىكى ئەسكەرتىشتىن تور كۆرگۈچنى كۆرسىتىشكە تەڭشەڭ.', 'errMkdir' : '"$1" ناملىق ھۈججەت قىسقۇچنى قۇرالمىدى.', 'errMkfile' : '"$1" ناملىق ھۈججەتنى قۇرالمىدى.', 'errRename' : '"$1" ناملىق ھۈججەتنىڭ ئىسمىنى يېڭىلاش مەغلۇپ بولدى.', 'errCopyFrom' : ' "$1" ناملىق ئورۇندىن ھۈججەت كۆچۈرۈش چەكلەنگەن.', 'errCopyTo' : '"$1" ناملىق ئورۇنغا ھۈججەت كۆچۈرۈش چەكلەنگەن.', 'errMkOutLink' : 'ئاۋاز يىلتىزىنىڭ سىرتىغا ئۇلىنىش قۇرالمىدى.', // from v2.1 added 03.10.2015 'errUpload' : 'يۈكلەشتە خاتالىق كۆرۈلدى.', // old name - errUploadCommon 'errUploadFile' : '"$1" ناملىق ھۈججەتنى يۈكلەشتە خاتالىق كۆرۈلدى.', // old name - errUpload 'errUploadNoFiles' : 'يۈكلىمەكچى بولغان ھۈججەت تېپىلمىدى.', 'errUploadTotalSize' : 'سانلىق مەلۇمات چوڭلىقى چەكلىمىدىن ئېشىپ كەتكەن..', // old name - errMaxSize 'errUploadFileSize' : 'ھۈججەت چوڭلىقى چەكلىمىدىن ئېشىپ كەتكەن..', // old name - errFileMaxSize 'errUploadMime' : 'چەكلەنگەن ھۈججەت شەكلى.', 'errUploadTransfer' : '"$1" ناملىق ھۈججەتنى يوللاشتا خاتالىق كۆرۈلدى.', 'errUploadTemp' : 'يوللاش ئۈچۈن ۋاقىتلىق ھۆججەت ھاسىل قىلالمىدى.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" ناملىق ھۈججەت باركەن، ئالماشتۇرۇشقا بولمايدۇ.', // new 'errReplace' : '"$1" ناملىق ھۈججەتنى ئالماشتۇرۇش مەغلۇپ بولدى.', 'errSave' : '"$1" ناملىق ھۈججەتنى ساقلاش مەغلۇپ بولدى.', 'errCopy' : '"$1" ناملىق ھۈججەتنى كۆچۈرۈش مەغلۇپ بولدى.', 'errMove' : '"$1" ناملىق ھۈججەتنى يۆتكەش مەغلۇپ بولدى.', 'errCopyInItself' : '"$1" ناملىق ھۈججەتنى ئەسلى ئورنىغا يۆتكەش مەغلۇپ بولدى.', 'errRm' : '"$1" ناملىق ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.', 'errTrash' : 'ئەخلەت ساندۇقىغا كىرەلمىدى.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'ئەسلى ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.', 'errExtract' : ' "$1" ناملىق مەلۇماتتىن ھۈججەت ئايرىش مەغلۇپ بولدى..', 'errArchive' : 'پىرىسلانغان ھۈججەت ھاسىللاش مەغلۇپ بولدى.', 'errArcType' : 'بۇ خىل پىرىسلانغان ھۈججەت شەكلىنى سىستېما بىر تەرەپ قىلالمىدى.', 'errNoArchive' : 'ھۈججەت پىرىسلانغان ھۈججەت ئەمەس، ياكى توغرا پىرىسلانمىغان.', 'errCmdNoSupport' : 'بۇ خىل بۇيرۇقنى بىر تەرەپ قىلالمىدى.', 'errReplByChild' : '“$1” ناملىق ھۈججەت قىسقۇچنى ئالماشۇتۇرۇشقا بولمايدۇ.', 'errArcSymlinks' : 'بىخەتەرلىك ئۈچۈن بۇ مەشغۇلات ئەمەلدىن قالدۇرۇلدى..', // edited 24.06.2012 'errArcMaxSize' : 'پىرىسلانغان ھۈججەتنىڭ چوڭلىقى چەكلىمىدىن ئېشىپ كەنكەن.', 'errResize' : ' "$1" چوڭلۇقنى تەڭشەشكە بولمىدى.', 'errResizeDegree' : 'توغرا بولمىغان پىقىرىتىش گىرادۇسى', // added 7.3.2013 'errResizeRotate' : 'رەسىمنى پىقىرىتىشقا بولمىدى.', // added 7.3.2013 'errResizeSize' : 'توغرا بولمىغان رەسىم چوڭلىقى.', // added 7.3.2013 'errResizeNoChange' : 'رەسىم چوڭلىقى ئۆزگەرمىگەن.', // added 7.3.2013 'errUsupportType' : 'قوللىمايدىغان ھۈججەت شەكلى.', 'errNotUTF8Content' : '"$1" ناملىق ھۈججەتنىڭ كودى UTF-8ئەمەسكەن، تەھرىرلىگىلى بولمايدۇ.', // added 9.11.2011 'errNetMount' : ' "$1" نى يۈكلەشتە خاتلىق يۈز بەردى..', // added 17.04.2012 'errNetMountNoDriver' : 'بۇ خىل پروتوكول قوللانمىدى..', // added 17.04.2012 'errNetMountFailed' : 'يۈكلەش مەغلۇپ بولدى.', // added 17.04.2012 'errNetMountHostReq' : 'مۇلازىمىتىرنى كۆرسىتىپ بېرىڭ.', // added 18.04.2012 'errSessionExpires' : 'سىزنىڭ ھەرىكەتسىزلىكىڭىز سەۋەبىدىن ۋاقتىڭىز توشتى.', 'errCreatingTempDir' : 'ۋاقىتلىق مۇندەرىجە قۇرالمىدى: "$ 1"', 'errFtpDownloadFile' : 'FTP دىن ھۆججەت چۈشۈرۈشكە ئامالسىز: "$ 1"', 'errFtpUploadFile' : 'FTP غا ھۆججەت يۈكلىيەلمىدى: "$ 1"', 'errFtpMkdir' : 'FTP دا يىراقتىن مۇندەرىجە قۇرالمىدى: "$ 1"', 'errArchiveExec' : 'ھۆججەتلەرنى ئارخىپلاشتۇرغاندا خاتالىق: "$ 1"', 'errExtractExec' : 'ھۆججەتلەرنى چىقىرىشتا خاتالىق: "$ 1"', 'errNetUnMount' : 'ساناقسىز.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8 غا ئايلاندۇرغىلى بولمايدۇ', // from v2.1 added 08.04.2014 'errFolderUpload' : 'ئەگەر ھۆججەت قىسقۇچنى يۈكلىمەكچى بولسىڭىز ، زامانىۋى توركۆرگۈنى سىناپ بېقىڭ.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '«$ 1» نى ئىزدەۋاتقاندا ۋاقتى ئۆتتى. ئىزدەش نەتىجىسى قىسمەن.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'قايتا ھوقۇق بېرىش تەلەپ قىلىنىدۇ.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'تاللىغىلى بولىدىغان تۈرلەرنىڭ ئەڭ كۆپ سانى 1 دوللار.', // from v2.1.17 added 17.10.2016 'errRestore' : 'ئەخلەت ساندۇقىدىن ئەسلىگە كەلتۈرگىلى بولمايدۇ. ئەسلىگە كەلتۈرۈش مەنزىلىنى ئېنىقلىيالمىدى.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'تەھرىرلىگۈچ بۇ ھۆججەت تىپىغا تېپىلمىدى.', // from v2.1.25 added 23.5.2017 'errServerError' : 'مۇلازىمېتىر تەرەپتە خاتالىق كۆرۈلدى.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$ 1" ھۆججەت قىسقۇچىنى بوشاتقىلى بولمايدۇ.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'يەنە 1 دوللار خاتالىق بار.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'بىرلا ۋاقىتتا $ 1 ھۆججەت قىسقۇچ قۇرالايسىز.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'پىرىسلاش', 'cmdback' : 'قايتىش', 'cmdcopy' : 'كۆچۈرۈش', 'cmdcut' : 'كېسىش', 'cmddownload' : 'چۈشۈرۈش', 'cmdduplicate' : 'نۇسخىلاش', 'cmdedit' : 'تەھرىرلەش', 'cmdextract' : 'پىرىستىن ھۈججەت چىقىرىش', 'cmdforward' : 'ئ‍الدىغا مېڭىش', 'cmdgetfile' : 'تاللاش', 'cmdhelp' : 'ئەپ ھەققىدە', 'cmdhome' : 'باش بەت', 'cmdinfo' : 'ئۇچۇرلىرى', 'cmdmkdir' : 'يېڭى ھۈججەت قىسقۇچ', 'cmdmkdirin' : 'يېڭى ھۆججەت قىسقۇچقا', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'يېڭى ھۈججەت', 'cmdopen' : 'ئېچىش', 'cmdpaste' : 'چاپلاش', 'cmdquicklook' : 'كۆرۈش', 'cmdreload' : 'يېڭىلاش', 'cmdrename' : 'نام يېڭىلاش', 'cmdrm' : 'ئۆچۈرۈش', 'cmdtrash' : 'ئەخلەت ساندۇقىغا', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'ئەسلىگە كەلتۈرۈش', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ھۈججەت ئىزدەش', 'cmdup' : 'ئالدىنقى مۇندەرىجىگە بېرىش', 'cmdupload' : 'يۈكلەش', 'cmdview' : 'كۆرۈش', 'cmdresize' : 'چوڭلىقىنى تەڭشەش', 'cmdsort' : 'تەرتىپ', 'cmdnetmount' : 'توردىن قوشۇش', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'جايلارغا', // added 28.12.2014 'cmdchmod' : 'ھالەتنى ئۆزگەرتىش', // from v2.1 added 20.6.2015 'cmdopendir' : 'ھۆججەت قىسقۇچنى ئېچىڭ', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'ستون كەڭلىكىنى ئەسلىگە كەلتۈرۈڭ', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'تولۇق ئېكران', // from v2.1.15 added 03.08.2016 'cmdmove' : 'يۆتكەڭ', // from v2.1.15 added 21.08.2016 'cmdempty' : 'قىسقۇچنى بوش قويۇڭ', // from v2.1.25 added 22.06.2017 'cmdundo' : 'ئەمەلدىن قالدۇرۇش', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'مايىللىق', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'ھەممىنى تاللاڭ', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'ھېچقايسىسىنى تاللىماڭ', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'تەتۈر تاللاش', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'يېڭى كۆزنەكتە ئېچىڭ', // from v2.1.38 added 3.4.2018 'cmdhide' : 'يوشۇرۇش (مايىللىق)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'تاقاش', 'btnSave' : 'ساقلاش', 'btnRm' : 'ئۆچۈرۈش', 'btnApply' : 'ئىشلىتىش', 'btnCancel' : 'بېكارلاش', 'btnNo' : 'ياق', 'btnYes' : 'ھەئە', 'btnMount' : 'يۈكلەش', // added 18.04.2012 'btnApprove': 'Goto $ 1 & تەستىق', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'ئايلاندۇرۇش', // from v2.1 added 08.04.2014 'btnCwd' : 'بۇ يەردە', // from v2.1 added 22.5.2015 'btnVolume' : 'ھەجىم', // from v2.1 added 22.5.2015 'btnAll' : 'ھەممىسى', // from v2.1 added 22.5.2015 'btnMime' : 'MIME تىپى', // from v2.1 added 22.5.2015 'btnFileName':'ھۆججەت ئىسمى', // from v2.1 added 22.5.2015 'btnSaveClose': 'ساقلاش ۋە تاقاش', // from v2.1 added 12.6.2015 'btnBackup' : 'زاپاسلاش', // fromv2.1 added 28.11.2015 'btnRename' : 'ئىسىمنى ئۆزگەرتىش', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'ئالدىنقى ($ 1 / $ 2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'كېيىنكى ($ 1 / $ 2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'قىسقۇچنى ئېچىش', 'ntffile' : 'ھۈججەتنى ئېچىش', 'ntfreload' : 'يېڭىلاش', 'ntfmkdir' : 'قىسقۇچ قۇرۇش', 'ntfmkfile' : 'ھۈججەت قۇرۇش', 'ntfrm' : 'ئۆچۈرۈش', 'ntfcopy' : 'كۆچۈرۈش', 'ntfmove' : 'يۆتكەش', 'ntfprepare' : 'كۆچۈرۈش تەييارلىقى', 'ntfrename' : 'نام يېڭىلاش', 'ntfupload' : 'يۈكلەش', 'ntfdownload' : 'چۈشۈرۈش', 'ntfsave' : 'ساقلاش', 'ntfarchive' : 'پىرىسلاش', 'ntfextract' : 'پىرىستىن يېشىش', 'ntfsearch' : 'ئىزدەش', 'ntfresize' : 'چوڭلىقى ئۆزگەرتىلىۋاتىدۇ', 'ntfsmth' : 'ئالدىراش >_<', 'ntfloadimg' : 'رەسىم ئېچىلىۋاتىدۇ', 'ntfnetmount' : 'تور ھۈججىتى يۈكلىنىۋاتىدۇ', // added 18.04.2012 'ntfnetunmount': 'تور ئاۋازىنى ئۆچۈرۈۋېتىش', // from v2.1 added 30.04.2012 'ntfdim' : 'رەسىم ئۆلچىمىگە ئېرىشىش', // added 20.05.2013 'ntfreaddir' : 'قىسقۇچ ئۇچۇرلىرىنى ئوقۇش', // from v2.1 added 01.07.2013 'ntfurl' : 'ئۇلىنىش ئادرېسىغا ئېرىشىش', // from v2.1 added 11.03.2014 'ntfchmod' : 'ھۆججەت ھالىتىنى ئۆزگەرتىش', // from v2.1 added 20.6.2015 'ntfpreupload': 'يۈكلەش ھۆججەت نامىنى دەلىللەش', // from v2.1 added 31.11.2015 'ntfzipdl' : 'چۈشۈرۈش ئۈچۈن ھۆججەت قۇرۇش', // from v2.1.7 added 23.1.2016 'ntfparents' : 'يول ئۇچۇرىغا ئېرىشىش', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'يۈكلەنگەن ھۆججەتنى بىر تەرەپ قىلىش', // from v2.1.17 added 2.11.2016 'ntftrash' : 'ئەخلەت ساندۇقىغا تاشلاش', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'ئەخلەت ساندۇقىدىن ئەسلىگە كەلتۈرۈش', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'نىشان ھۆججەت قىسقۇچىنى تەكشۈرۈش', // from v2.1.24 added 3.5.2017 'ntfundo' : 'ئالدىنقى مەشغۇلاتنى بىكار قىلىش', // from v2.1.27 added 31.07.2017 'ntfredo' : 'ئىلگىرىكى ئەمەلدىن قالدۇرۇش', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'مەزمۇننى تەكشۈرۈش', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'ئەخلەت ساندۇقى', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'ئېنىق ئەمەس', 'Today' : 'بۈگۈن', 'Yesterday' : 'تۆنۈگۈن', 'msJan' : '1-ئاي', 'msFeb' : '2-ئاي', 'msMar' : '3-ئاي', 'msApr' : '4-ئاي', 'msMay' : '5-ئاي', 'msJun' : '6-ئاي', 'msJul' : '7-ئاي', 'msAug' : '8-ئاي', 'msSep' : '9-ئ‍اي', 'msOct' : '10-ئاي', 'msNov' : '11-ئاي', 'msDec' : '12-ئاي', 'January' : '1-ئاي', 'February' : '2-ئاي', 'March' : '3-ئاي', 'April' : '4-ئاي', 'May' : '5-ئاي', 'June' : '6-ئاي', 'July' : '7-ئاي', 'August' : '8-ئاي', 'September' : '9-ئاي', 'October' : '10-ئاي', 'November' : '11-ئاي', 'December' : '12-ئاي', 'Sunday' : 'يەكشەنبە', 'Monday' : 'دۈشەنبە', 'Tuesday' : 'سەيشەنبە', 'Wednesday' : 'چارشەنبە', 'Thursday' : 'پەيشەنبە', 'Friday' : 'جۈمە', 'Saturday' : 'شەنبە', 'Sun' : 'يە', 'Mon' : 'دۈ', 'Tue' : 'سە', 'Wed' : 'چا', 'Thu' : 'پە', 'Fri' : 'جۈ', 'Sat' : 'شە', /******************************** sort variants ********************************/ 'sortname' : 'نامى ', 'sortkind' : 'شەكلى ', 'sortsize' : 'چوڭلىقى', 'sortdate' : 'ۋاقتى', 'sortFoldersFirst' : 'قىسقۇچلار باشتا', 'sortperm' : 'رۇخسەت بىلەن', // from v2.1.13 added 13.06.2016 'sortmode' : 'by mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'ئىگىسى تەرىپىدىن', // from v2.1.13 added 13.06.2016 'sortgroup' : 'گۇرۇپپا بويىچە', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'يېڭى ھۆججەت.txt', // added 10.11.2015 'untitled folder' : 'يېڭى ھۆججەت قىسقۇچ', // added 10.11.2015 'Archive' : 'يېڭى ئارخېۋى', // from v2.1 added 10.11.2015 'untitled file' :'يېڭىھۆججەت.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ھۆججەت', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'مۇقىملاشتۇرۇڭ', 'confirmRm' : 'راستىنلا ئۆچۈرەمسىز?
كەينىگە قايتۇرغىلى بولمايدۇ!', 'confirmRepl' : 'ھازىرقى ھۈججەت بىلەن كونىسىنى ئالماشتۇرامسىز?', 'confirmRest' : 'مەۋجۇت نەرسىنى ئەخلەت ساندۇقىغا ئالماشتۇرۇڭ؟', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 دا ئەمەس
UTF-8 غا ئايلاندۇرامسىز؟
مەزمۇن ئۆزگەرتىلگەندىن كېيىن تېجەش ئارقىلىق UTF-8 غا ئايلىنىدۇ.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'بۇ ھۆججەتنىڭ ھەرپ-بەلگە كودلىرىنى بايقىغىلى بولمايدۇ. ئۇنى تەھرىرلەش ئۈچۈن UTF-8 غا ۋاقىتلىق ئۆزگەرتىش كېرەك.
بۇ ھۆججەتنىڭ ھەرپ-بەلگە كودلىرىنى تاللاڭ.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'ئۇ ئۆزگەرتىلدى.
ئۆزگەرتىشنى ساقلىمىسىڭىز خىزمەتتىن ئايرىلىدۇ.', // from v2.1 added 15.7.2015 'confirmTrash' : 'نەرسىلەرنى ئەخلەت ساندۇقىغا يۆتكىمەكچىمۇ؟', //from v2.1.24 added 29.4.2017 'confirmMove' : 'تۈرلەرنى «$ 1» غا يۆتكىمەكچىمۇ؟', //from v2.1.50 added 27.7.2019 'apllyAll' : 'ھەممىسىگە ئىشلىتىش', 'name' : 'نامى', 'size' : 'چوڭلىقى', 'perms' : 'ھوقۇق', 'modify' : 'ئۆزگەرگەن ۋاقتى', 'kind' : 'تۈرى', 'read' : 'ئوقۇش', 'write' : 'يېزىش', 'noaccess' : 'ھوقۇق يوق', 'and' : 'ھەم', 'unknown' : 'ئېنىق ئەمەس', 'selectall' : 'ھەممىنى تاللاش', 'selectfiles' : 'تاللاش', 'selectffile' : 'بىرىنچىسىنى تاللاش', 'selectlfile' : 'ئەڭ ئاخىرقىسىنى تاللاش', 'viewlist' : 'جەدۋەللىك كۆرىنىشى', 'viewicons' : 'رەسىملىك كۆرىنىشى', 'viewSmall' : 'كىچىك سىنبەلگىلەر', // from v2.1.39 added 22.5.2018 'viewMedium' : 'ئوتتۇرا سىنبەلگىلەر', // from v2.1.39 added 22.5.2018 'viewLarge' : 'چوڭ سىنبەلگىلەر', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'قوشۇمچە چوڭ سىنبەلگىلەر', // from v2.1.39 added 22.5.2018 'places' : 'ئورنى', 'calc' : 'ھېسابلاش', 'path' : 'ئورنى', 'aliasfor' : 'باشقا نامى', 'locked' : 'تاقالغان', 'dim' : 'چوڭلىقى', 'files' : 'ھۈججەت', 'folders' : 'قىسقۇچ', 'items' : 'تۈرلەر', 'yes' : 'ھەئە', 'no' : 'ياق', 'link' : 'ئۇلىنىش', 'searcresult' : 'ئىزدەش نەتىجىسى', 'selected' : 'تاللانغان تۈرلەر', 'about' : 'چۈشەنچە', 'shortcuts' : 'تېز كونۇپكىلار', 'help' : 'ياردەم', 'webfm' : 'تور ھۈججەتلىرىنى باشقۇرۇش', 'ver' : 'نەشرى', 'protocolver' : 'پروتوكول نەشرى', 'homepage' : 'تۈر باش بېتى', 'docs' : 'ھۈججەت', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'گۇرۇپپا', 'chiefdev' : 'باش پىروگراممىر', 'developer' : 'پىروگراممىر', 'contributor' : 'تۆھپىكار', 'maintainer' : 'ئاسرىغۇچى', 'translator' : 'تەرجىمان', 'icons' : 'سىنبەلگە', 'dontforget' : 'تەرىڭىزنى سۈرتىدىغان قولياغلىقىڭىزنى ئۇنۇتماڭ جۇمۇ', 'shortcutsof' : 'تېز كونۇپكىلار چەكلەنگەن', 'dropFiles' : 'ھۈججەتنى موشۇ يەرگە تاشلاڭ', 'or' : 'ياكى', 'selectForUpload' : 'يۈكلىمەكچى بولغان ھۈججەتنى تاللاڭ', 'moveFiles' : 'يۆتكەش', 'copyFiles' : 'كۆچۈرۈش', 'restoreFiles' : 'تۈرلەرنى ئەسلىگە كەلتۈرۈش', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'ھۈججەتلەرنى ئۆچۈرۈش', 'aspectRatio' : 'نىسبىتىنى ساقلاش', 'scale' : 'نىسبىتى', 'width' : 'ئۇزۇنلىقى', 'height' : 'ئىگىزلىكى', 'resize' : 'چوڭلىقىنى تەڭشەش', 'crop' : 'كېسىش', 'rotate' : 'پىقىرىتىش', 'rotate-cw' : 'سائەت ئىستىرىلكىسى بويىچە 90 گىرادۇس پىقىرىتىش', 'rotate-ccw' : 'سائەت ئىستىرىلكىسىنى تەتۈر يۆنىلىشى بويىچە 90گىرادۇس پىقىرىتىش', 'degree' : 'گىرادۇس', 'netMountDialogTitle' : 'تور ئاۋازى', // added 18.04.2012 'protocol' : 'پىروتوكڭل', // added 18.04.2012 'host' : 'مۇلازىمىتىر', // added 18.04.2012 'port' : 'پورت', // added 18.04.2012 'user' : 'ئەزا', // added 18.04.2012 'pass' : 'ئىم', // added 18.04.2012 'confirmUnmount' : 'سىز $ 1 نى ھېسابلىمايسىز؟', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'توركۆرگۈدىن ھۆججەتلەرنى تاشلاش ياكى چاپلاش', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'ھۆججەتلەرنى بۇ يەرگە تاشلاڭ ، URL ياكى رەسىملەرنى چاپلاڭ', // from v2.1 added 07.04.2014 'encoding' : 'كودلاش', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'نىشان: $ 1', // from v2.1 added 22.5.2015 'searchMime' : 'كىرگۈزۈش MIME تىپى ئارقىلىق ئىزدەش', // from v2.1 added 22.5.2015 'owner' : 'ئىگىسى', // from v2.1 added 20.6.2015 'group' : 'گۇرۇپپا', // from v2.1 added 20.6.2015 'other' : 'باشقىلىرى', // from v2.1 added 20.6.2015 'execute' : 'ئىجرا قىلىڭ', // from v2.1 added 20.6.2015 'perm' : 'ئىجازەت', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'ھۆججەت قىسقۇچ قۇرۇق', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'ھۆججەت قىسقۇچ قۇرۇق \\ تۈر قوشۇش ئۈچۈن تاشلاش', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'ھۆججەت قىسقۇچ قۇرۇق \\ تۈر قوشۇش ئۈچۈن ئۇزۇن چېكىش', // from v2.1.6 added 30.12.2015 'quality' : 'سۈپەت', // from v2.1.6 added 5.1.2016 'autoSync' : 'ئاپتوماتىك ماسقەدەملەش', // from v2.1.6 added 10.1.2016 'moveUp' : 'يۆتكەڭ', // from v2.1.6 added 18.1.2016 'getLink' : 'URL ئۇلىنىشىغا ئېرىشىڭ', // from v2.1.7 added 9.2.2016 'selectedItems' : 'تاللانغان تۈرلەر ($ 1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ھۆججەت قىسقۇچ كىملىكى', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'تورسىز زىيارەت قىلىشقا يول قويۇڭ', // from v2.1.10 added 3.25.2016 'reAuth' : 'قايتا دەلىللەش', // from v2.1.10 added 3.25.2016 'nowLoading' : 'ھازىر يۈكلەۋاتىدۇ ...', // from v2.1.12 added 4.26.2016 'openMulti' : 'كۆپ ھۆججەتلەرنى ئېچىڭ', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'سىز $ 1 ھۆججىتىنى ئاچماقچى بولۇۋاتىسىز. توركۆرگۈدە ئاچماقچىمۇ؟', // from v2.1.12 added 5.14.2016 'emptySearch' : 'ئىزدەش نەتىجىسى ئىزدەش نىشانىدا قۇرۇق.', // from v2.1.12 added 5.16.2016 'editingFile' : 'ئۇ ھۆججەتنى تەھرىرلەۋاتىدۇ.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'سىز $ 1 تۈرنى تاللىدىڭىز.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'چاپلاش تاختىسىدا 1 دوللارلىق نەرسە بار.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'كۆپەيتىلگەن ئىزدەش پەقەت ھازىرقى كۆرۈنۈشتىن كەلگەن.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$ 1 تامام', // from v2.1.15 added 21.8.2016 'contextmenu' : 'مەزمۇن تىزىملىكى', // from v2.1.15 added 9.9.2016 'pageTurning' : 'بەت ئايلانمىسى', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'توم يىلتىزى', // from v2.1.16 added 16.9.2016 'reset' : 'ئەسلىگە قايتۇرۇش', // from v2.1.16 added 1.10.2016 'bgcolor' : 'تەگلىك رەڭگى', // from v2.1.16 added 1.10.2016 'colorPicker' : 'رەڭ تاللىغۇچ', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'قوزغىتىلدى', // from v2.1.16 added 4.10.2016 'disabled' : 'چەكلەنگەن', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'نۆۋەتتىكى كۆرۈنۈشتە ئىزدەش نەتىجىسى قۇرۇق. \\ APress [Enter] ئىزدەش نىشانىنى كېڭەيتىش.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'نۆۋەتتىكى كۆرۈنۈشتە بىرىنچى ھەرىپ ئىزدەش نەتىجىسى قۇرۇق.', // from v2.1.23 added 24.3.2017 'textLabel' : 'تېكىست بەلگىسى', // from v2.1.17 added 13.10.2016 'minsLeft' : '1 مىنۇت قالدى', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'تاللانغان كودلاش ئارقىلىق قايتا ئېچىڭ', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'تاللانغان كودلاش ئارقىلىق ساقلاڭ', // from v2.1.19 added 2.12.2016 'selectFolder' : 'ھۆججەت قىسقۇچنى تاللاڭ', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'بىرىنچى خەت ئىزدەش', // from v2.1.23 added 24.3.2017 'presets' : 'ئالدىن بەلگىلەيدۇ', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'ئۇ بەك كۆپ نەرسە بولغاچقا ئەخلەت ساندۇقىغا كىرەلمەيدۇ.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '«$ 1» ھۆججەت قىسقۇچىنى بىكار قىلىڭ.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '«$ 1» ھۆججەت قىسقۇچىدا ھېچقانداق نەرسە يوق.', // from v2.1.25 added 22.6.2017 'preference' : 'مايىللىق', // from v2.1.26 added 28.6.2017 'language' : 'تىل', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'بۇ توركۆرگۈدە ساقلانغان تەڭشەكلەرنى قوزغىتىڭ', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'قورالبالدىقى تەڭشىكى', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 1 دوللار قالدى.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $ 1 قۇر قالدى.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'ھۆججەت چوڭلۇقى', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'چاشقىنەك ئارقىلىق دىئالوگ ئېلېمېنتىغا دىققەت قىلىڭ', // from v2.1.30 added 2.11.2017 'select' : 'تاللاڭ', // from v2.1.30 added 23.11.2017 'selectAction' : 'ھۆججەت تاللىغاندا ھەرىكەت', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'ئالدىنقى قېتىم ئىشلىتىلگەن تەھرىرلىگۈچ بىلەن ئېچىڭ', // from v2.1.30 added 23.11.2017 'selectinvert' : 'تەتۈر تاللاش', // from v2.1.30 added 25.11.2017 'renameMultiple' : '$ 2 غا ئوخشاش $ 1 تاللانغان تۈرنىڭ ئىسمىنى ئۆزگەرتمەكچىمۇ؟
بۇنى ئەمەلدىن قالدۇرغىلى بولمايدۇ.', // from v2.1.31 added 4.12.2017 'batchRename' : 'گۇرۇپپا نامىنى ئۆزگەرتىش', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ سان', // from v2.1.31 added 8.12.2017 'asPrefix' : 'ئالدى قوشۇلغۇچى قوشۇڭ', // from v2.1.31 added 8.12.2017 'asSuffix' : 'قوشۇمچى قوشۇڭ', // from v2.1.31 added 8.12.2017 'changeExtention' : 'كېڭەيتىلمىنى ئۆزگەرتىش', // from v2.1.31 added 8.12.2017 'columnPref' : 'ستون تەڭشىكى (تىزىملىك كۆرۈنۈشى)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'بارلىق ئۆزگەرتىشلەر ئارخىپقا دەرھال ئەكىس ئەتتۈرىدۇ.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'بۇ ئاۋازنى قاچىلىمىغۇچە ھەر قانداق ئۆزگىرىش ئەكس ئەتمەيدۇ.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'بۇ ھەجىمگە ئورنىتىلغان تۆۋەندىكى توم (لار) مۇ ساناقسىز. ئۇنى ئۆچۈرەمسىز؟', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'تاللاش ئۇچۇرى', // from v2.1.33 added 7.3.2018 'hashChecker' : 'ئالگورىزىملار ھۆججەتنى كۆرسىتىپ بېرىدۇ', // from v2.1.33 added 10.3.2018 'infoItems' : 'ئۇچۇر تۈرلىرى (تاللاش ئۇچۇر تاختىسى)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'چېكىنىش ئۈچۈن يەنە بىر قېتىم بېسىڭ.', // from v2.1.38 added 1.4.2018 'toolbar' : 'قورالبالدىقى', // from v2.1.38 added 4.4.2018 'workspace' : 'خىزمەت بوشلۇقى', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'ھەممىسى', // from v2.1.38 added 4.4.2018 'iconSize' : 'سىنبەلگە چوڭلۇقى (سىنبەلگە كۆرۈنۈشى)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'چوڭايتىلغان تەھرىرلىگۈچ كۆزنىكىنى ئېچىڭ', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'API نى ئۆزگەرتىش ھازىرچە بولمىغاچقا ، توربېكەتكە ئايلاندۇرۇڭ.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'ئۆزگەرتىلگەندىن كېيىن ، چوقۇم ئۆزگەرتىلگەن ھۆججەتنى ساقلاش ئۈچۈن چوقۇم URL ئادرېسى ياكى چۈشۈرۈلگەن ھۆججەت بىلەن يۈكلىنىشىڭىز كېرەك.', //from v2.1.40 added 8.7.2018 'convertOn' : '$ 1 تور بېتىگە ئايلاندۇرۇڭ', // from v2.1.40 added 10.7.2018 'integrations' : 'بىرىكتۈرۈش', // from v2.1.40 added 11.7.2018 'integrationWith' : 'بۇ elFinder نىڭ تۆۋەندىكى تاشقى مۇلازىمەتلىرى بىرلەشتۈرۈلگەن. ئىشلىتىشتىن بۇرۇن ئىشلىتىش شەرتلىرى ، مەخپىيەتلىك تۈزۈمى قاتارلىقلارنى تەكشۈرۈپ بېقىڭ.', // from v2.1.40 added 11.7.2018 'showHidden' : 'يوشۇرۇن تۈرلەرنى كۆرسەت', // from v2.1.41 added 24.7.2018 'hideHidden' : 'يوشۇرۇن نەرسىلەرنى يوشۇرۇش', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'يوشۇرۇن تۈرلەرنى كۆرسىتىش / يوشۇرۇش', // from v2.1.41 added 24.7.2018 'makefileTypes' : '«يېڭى ھۆججەت» ئارقىلىق قوزغىتىدىغان ھۆججەت تىپلىرى', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'تېكىست ھۆججىتىنىڭ تىپى', // from v2.1.41 added 7.8.2018 'add' : 'قوش', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'سۈكۈتتىكى', // from v2.1.43 added 19.10.2018 'description' : 'چۈشەندۈرۈش', // from v2.1.43 added 19.10.2018 'website' : 'تور بېكەت', // from v2.1.43 added 19.10.2018 'author' : 'ئاپتور', // from v2.1.43 added 19.10.2018 'email' : 'ئېلخەت', // from v2.1.43 added 19.10.2018 'license' : 'ئىجازەتنامە', // from v2.1.43 added 19.10.2018 'exportToSave' : 'بۇ تۈرنى ساقلىغىلى بولمايدۇ. تەھرىرلەشنى يوقىتىپ قويۇشتىن ساقلىنىش ئۈچۈن كومپيۇتېرىڭىزغا ئېكسپورت قىلىشىڭىز كېرەك.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'ئۇنى تاللاش ئۈچۈن ھۆججەتنى قوش چېكىڭ.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'پۈتۈن ئېكران ھالىتىنى ئىشلىتىڭ', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'ئېنىق ئەمەس', 'kindRoot' : 'توم يىلتىز', // from v2.1.16 added 16.10.2016 'kindFolder' : 'ھۈججەت قىسقۇچ', 'kindSelects' : 'تاللاش', // from v2.1.29 added 29.8.2017 'kindAlias' : 'باشقا نامى', 'kindAliasBroken' : 'باشقا نامى خاتا', // applications 'kindApp' : 'كود ھۈججىتى', 'kindPostscript' : 'Postscript ھۈججىتى', 'kindMsOffice' : 'Microsoft Office ھۈججىتى', 'kindMsWord' : 'Microsoft Word ھۈججىتى', 'kindMsExcel' : 'Microsoft Excel ھۈججىتى', 'kindMsPP' : 'Microsoft Powerpoint ھۈججىتى', 'kindOO' : 'Open Office ھۈججىتى', 'kindAppFlash' : 'Flash ھۈججىتى', 'kindPDF' : 'ئېلىپ يۈرۈشكە ئەپلىك ھۆججەت فورماتى (PDF)', 'kindTorrent' : 'Bittorrent ھۈججىتى', 'kind7z' : '7z ھۈججىتى', 'kindTAR' : 'TAR ھۈججىتى', 'kindGZIP' : 'GZIP ھۈججىتى', 'kindBZIP' : 'BZIP ھۈججىتى', 'kindXZ' : 'XZ ھۈججىتى', 'kindZIP' : 'ZIP ھۈججىتى', 'kindRAR' : 'RAR ھۈججىتى', 'kindJAR' : 'Java JAR ھۈججىتى', 'kindTTF' : 'True Type فونت', 'kindOTF' : 'Open Type فونت', 'kindRPM' : 'RPM', // texts 'kindText' : 'تېكىست', 'kindTextPlain' : 'تېكىست', 'kindPHP' : 'PHP ھۈججىتى', 'kindCSS' : 'CSS ھۈججىتى', 'kindHTML' : 'HTML ھۈججىتى', 'kindJS' : 'Javascript ھۈججىتى', 'kindRTF' : 'RTF ھۈججىتى', 'kindC' : 'C ھۈججىتى', 'kindCHeader' : 'C باش ھۈججىتى', 'kindCPP' : 'C++ ھۈججىتى', 'kindCPPHeader' : 'C++ باش ھۈججىتى', 'kindShell' : 'Unix سىكىرىپت ھۈججىتى', 'kindPython' : 'Python ھۈججىتى', 'kindJava' : 'Java ھۈججىتى', 'kindRuby' : 'Ruby ھۈججىتى', 'kindPerl' : 'Perl ھۈججىتى', 'kindSQL' : 'SQL ھۈججىتى', 'kindXML' : 'XML ھۈججىتى', 'kindAWK' : 'AWK ھۈججىتى', 'kindCSV' : 'CSV ھۈججىتى', 'kindDOCBOOK' : 'Docbook XML ھۈججىتى', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'رەسىم', 'kindBMP' : 'BMP رەسىم', 'kindJPEG' : 'JPEG رەسىم', 'kindGIF' : 'GIF رەسىم', 'kindPNG' : 'PNG رەسىم', 'kindTIFF' : 'TIFF رەسىم', 'kindTGA' : 'TGA رەسىم', 'kindPSD' : 'Adobe Photoshop رەسىم', 'kindXBITMAP' : 'X bitmap رەسىم', 'kindPXM' : 'Pixelmator رەسىم', // media 'kindAudio' : 'ئاۋاز', 'kindAudioMPEG' : 'MPEG ئاۋاز', 'kindAudioMPEG4' : 'MPEG-4 ئاۋاز', 'kindAudioMIDI' : 'MIDI ئاۋاز', 'kindAudioOGG' : 'Ogg Vorbis ئاۋاز', 'kindAudioWAV' : 'WAV ئاۋاز', 'AudioPlaylist' : 'MP3 قويۇش تىزىملىكى', 'kindVideo' : 'سىن', 'kindVideoDV' : 'DV سىن', 'kindVideoMPEG' : 'MPEG سىن', 'kindVideoMPEG4' : 'MPEG-4 سىن', 'kindVideoAVI' : 'AVI سىن', 'kindVideoMOV' : 'Quick Time سىن', 'kindVideoWM' : 'Windows Media سىن', 'kindVideoFlash' : 'Flash سىن', 'kindVideoMKV' : 'Matroska سىن', 'kindVideoOGG' : 'Ogg سىن' } }; })); PK Z{>>js/i18n/elfinder.bg.jsnuW+A/** * Bulgarian translation * @author Stamo Petkov * @author Nikolay Petkov * @version 2022-02-25 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.bg = { translator : 'Stamo Petkov <stamo.petkov@gmail.com>, Nikolay Petkov <office@cmstory.com>', language : 'Bulgarian', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 25.02.2022 18:31 fancyDateFormat : '$1 H:i', // will show like: днес 18:31 nonameDateFormat : 'Ymd-His', // noname upload will show like: 20220225-183105 messages : { 'getShareText' : 'Сподели', 'Editor ': 'Редактор на кодове', /********************************** errors **********************************/ 'error' : 'Грешка', 'errUnknown' : 'Непозната грешка.', 'errUnknownCmd' : 'Непозната команда.', 'errJqui' : 'Грешна конфигурация на jQuery UI. Компонентите selectable, draggable и droppable трябва да са включени.', 'errNode' : 'elFinder изисква да бъде създаден DOM елемент.', 'errURL' : 'Грешка в настройките на elFinder! не е зададена стойност на URL.', 'errAccess' : 'Достъп отказан.', 'errConnect' : 'Няма връзка със сървъра.', 'errAbort' : 'Връзката е прекъсната.', 'errTimeout' : 'Просрочена връзка.', 'errNotFound' : 'Сървърът не е намерен.', 'errResponse' : 'Грешен отговор от сървъра.', 'errConf' : 'Грешни настройки на сървъра.', 'errJSON' : 'Не е инсталиран модул на PHP за JSON.', 'errNoVolumes' : 'Няма дялове достъпни за четене.', 'errCmdParams' : 'Грешни параметри на командата "$1".', 'errDataNotJSON' : 'Данните не са JSON.', 'errDataEmpty' : 'Липсват данни.', 'errCmdReq' : 'Запитването от сървъра изисква име на команда.', 'errOpen' : 'Неуспешно отваряне на "$1".', 'errNotFolder' : 'Обектът не е папка.', 'errNotFile' : 'Обектът не е файл.', 'errRead' : 'Неуспешно прочитане на "$1".', 'errWrite' : 'Неуспешен запис в "$1".', 'errPerm' : 'Разрешение отказано.', 'errLocked' : '"$1" е заключен и не може да бъде преименуван, местен или премахван.', 'errExists' : 'Вече съществува файл с име "$1"', 'errInvName' : 'Грешно име на файл.', 'errInvDirname' : 'Невалидно име на папка.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Папката не е открита.', 'errFileNotFound' : 'Файлът не е открит.', 'errTrgFolderNotFound' : 'Целевата папка "$1" не е намерена.', 'errPopup' : 'Браузъра блокира отварянето на прозорец. За да отворите файла, разрешете отварянето в настройките на браузъра.', 'errMkdir' : 'Неуспешно създаване на папка "$1".', 'errMkfile' : 'Неуспешно създаване на файл "$1".', 'errRename' : 'Неуспешно преименуване на "$1".', 'errCopyFrom' : 'Копирането на файлове от том "$1" не е разрешено.', 'errCopyTo' : 'Копирането на файлове в том "$1" не е разрешено.', 'errMkOutLink' : 'Неуспех при създаване на връзка извън началото на ресурса.', // from v2.1 added 03.10.2015 'errUpload' : 'Грешка при качване.', // old name - errUploadCommon 'errUploadFile' : 'Неуспешно качване на "$1".', // old name - errUpload 'errUploadNoFiles' : 'Не са намерени файлове за качване.', 'errUploadTotalSize' : 'Данните превишават максимално допостумия размер.', // old name - errMaxSize 'errUploadFileSize' : 'Файлът превишава максимално допустимия размер.', // old name - errFileMaxSize 'errUploadMime' : 'Непозволен тип на файла.', 'errUploadTransfer' : '"$1" грешка при предаване.', 'errUploadTemp' : 'Неуспешно създаване на временен файл за качване.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Обект "$1" вече съществува на това място и не може да бъде заменен от обект от друг тип.', // new 'errReplace' : 'Не може да се замени "$1".', 'errSave' : 'Не може да се запише "$1".', 'errCopy' : 'Не може да се копира "$1".', 'errMove' : 'Не може да се премести "$1".', 'errCopyInItself' : 'Не може да се копира "$1" върху самия него.', 'errRm' : 'Не може да се премахне "$1".', 'errTrash' : 'Не може да се премести в кошчето', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Не може да се премахне изходния файл(ове).', 'errExtract' : 'Не може да се извлекат файловете от "$1".', 'errArchive' : 'Не може да се създаде архив.', 'errArcType' : 'Неподдържан тип на архива.', 'errNoArchive' : 'Файлът не е архив или е от неподдържан тип.', 'errCmdNoSupport' : 'Сървъра не поддържа тази команда.', 'errReplByChild' : 'Папката “$1” не може да бъде заменена от съдържащ се в нея елемент.', 'errArcSymlinks' : 'От съображения за сигурност няма да бъдат разопаковани архиви съдържащи symlinks.', // edited 24.06.2012 'errArcMaxSize' : 'Архивните файлове превишават максимално допустимия размер.', 'errResize' : 'Не може да се преоразмери "$1".', 'errResizeDegree' : 'Невалиден градус за ротация.', // added 7.3.2013 'errResizeRotate' : 'Изображението не е ротирано.', // added 7.3.2013 'errResizeSize' : 'Невалиден размер на изображение.', // added 7.3.2013 'errResizeNoChange' : 'Размерът на изображението не е променен.', // added 7.3.2013 'errUsupportType' : 'Неподдържан тип на файл.', 'errNotUTF8Content' : 'Файл "$1" не е в UTF-8 формат и не може да бъде редактиран.', // added 9.11.2011 'errNetMount' : 'Не може да се монтира "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Неподдържан протокол.', // added 17.04.2012 'errNetMountFailed' : 'Монтирането не е успешно.', // added 17.04.2012 'errNetMountHostReq' : 'Хост се изисква.', // added 18.04.2012 'errSessionExpires' : 'Сесията ви изтече поради липса на активност.', 'errCreatingTempDir' : 'Не може да се създаде временна директория: "$1"', 'errFtpDownloadFile' : 'Не може да се изтегли файл от FTP: "$1"', 'errFtpUploadFile' : 'Не може да се качи файл на FTP: "$1"', 'errFtpMkdir' : 'Не може да се създаде директория на FTP: "$1"', 'errArchiveExec' : 'Грешка при архивиране на файлове: "$1"', 'errExtractExec' : 'Грешка при разархивиране на файлове: "$1"', 'errNetUnMount' : 'Не може да се размонтира', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Не е конвертируем до UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Опитайте Google Chrome, ако искате да качите папка.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Времето изтече при търсенето на "$1". Резултатът от търсенето е частичен.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Необходимо е повторно оторизиране.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Максималният брой избрани файлове е $ 1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Не може да се възстанови от кошчето. Не може да се определи местоположението за възстановяване.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Не е намерен редактор за този тип файл.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Възникна грешка на сървъра.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Папката "$1" не може да се изпразни.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Има още $1 грешки.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Можете да създадете до $1 папки наведнъж.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Създай архив', 'cmdback' : 'Назад', 'cmdcopy' : 'Копирай', 'cmdcut' : 'Изрежи', 'cmddownload' : 'Свали', 'cmdduplicate' : 'Дублирай', 'cmdedit' : 'Редактирай файл', 'cmdextract' : 'Извлечи файловете от архива', 'cmdforward' : 'Напред', 'cmdgetfile' : 'Избери файлове', 'cmdhelp' : 'За тази програма', 'cmdhome' : 'Начало', 'cmdinfo' : 'Получете информация и споделете', 'cmdmkdir' : 'Нова папка', 'cmdmkdirin' : 'В нова папка', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Нов файл', 'cmdopen' : 'Отвори', 'cmdpaste' : 'Вмъкни', 'cmdquicklook' : 'Преглед', 'cmdreload' : 'Презареди', 'cmdrename' : 'Преименувай', 'cmdrm' : 'Изтрий', 'cmdtrash' : 'В кошчето', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Възстанови', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Намери файлове', 'cmdup' : 'Една директория нагоре', 'cmdupload' : 'Качи файлове', 'cmdview' : 'Виж', 'cmdresize' : 'Промени изображение', 'cmdsort' : 'Подреди', 'cmdnetmount' : 'Монтирай мрежов ресурс', // added 18.04.2012 'cmdnetunmount': 'Размонтирай', // from v2.1 added 30.04.2012 'cmdplaces' : 'Към избрани', // added 28.12.2014 'cmdchmod' : 'Промяна на вид', // from v2.1 added 20.6.2015 'cmdopendir' : 'Отвори папка', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Нулирай ширината на колоната', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Цял екран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Премести', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Изпразни папката', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Отмени', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Преправи', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Настройки', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Избери всичко', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Избери нищо', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Обърни селекцията', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Отвори в нов прозорец', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Скрий (лично)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Затвори', 'btnSave' : 'Запиши', 'btnRm' : 'Премахни', 'btnApply' : 'Приложи', 'btnCancel' : 'Отказ', 'btnNo' : 'Не', 'btnYes' : 'Да', 'btnMount' : 'Монтирай', // added 18.04.2012 'btnApprove': 'Отиди на $1 и одобри', // from v2.1 added 26.04.2012 'btnUnmount': 'Размонтирай', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертирай', // from v2.1 added 08.04.2014 'btnCwd' : 'Тук', // from v2.1 added 22.5.2015 'btnVolume' : 'Ресурс', // from v2.1 added 22.5.2015 'btnAll' : 'Всички', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Име', // from v2.1 added 22.5.2015 'btnSaveClose': 'Запази и затвори', // from v2.1 added 12.6.2015 'btnBackup' : 'Архивирай', // fromv2.1 added 28.11.2015 'btnRename' : 'Преименувай', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Преименувай(Всички)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Пред ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'След ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Запази като', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Отваряне на папка', 'ntffile' : 'Отваряне на файл', 'ntfreload' : 'Презареждане съдържанието на папка', 'ntfmkdir' : 'Създава се директория', 'ntfmkfile' : 'Създава се файл', 'ntfrm' : 'Изтриване на файлове', 'ntfcopy' : 'Копиране на файлове', 'ntfmove' : 'Преместване на файлове', 'ntfprepare' : 'Подготовка за копиране на файлове', 'ntfrename' : 'Преименуване на файлове', 'ntfupload' : 'Качват се файлове', 'ntfdownload' : 'Свалят се файлове', 'ntfsave' : 'Запис на файлове', 'ntfarchive' : 'Създава се архив', 'ntfextract' : 'Извличат се файловете от архив', 'ntfsearch' : 'Търсят се файлове', 'ntfresize' : 'Преоразмеряват се изображения', 'ntfsmth' : 'Зает съм >_<', 'ntfloadimg' : 'Зареждат се изображения', 'ntfnetmount' : 'Монтира се мрежов ресурс', // added 18.04.2012 'ntfnetunmount': 'Размонтира се мрежов ресурс', // from v2.1 added 30.04.2012 'ntfdim' : 'Извличат се размерите на изображение', // added 20.05.2013 'ntfreaddir' : 'Извлича се информация за папка', // from v2.1 added 01.07.2013 'ntfurl' : 'Взима се URL от връзка', // from v2.1 added 11.03.2014 'ntfchmod' : 'Променя се вида на файл', // from v2.1 added 20.6.2015 'ntfpreupload': 'Проверка на името на файла за качване', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Създаване на файл за изтегляне', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Получава се информация за пътя', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обработка на качения файл', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Прехвърлят се позиции в кошчето', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Извършва се възстановяване от кошчето', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Проверка на целевата папка', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Отмяна на предишната операция', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Възстановяване на предходните отменени', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Проверка на съдържанието', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Кошче', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'неизвестна', 'Today' : 'днес', 'Yesterday' : 'вчера', 'msJan' : 'яну', 'msFeb' : 'фев', 'msMar' : 'мар', 'msApr' : 'апр', 'msMay' : 'май', 'msJun' : 'юни', 'msJul' : 'юли', 'msAug' : 'авг', 'msSep' : 'сеп', 'msOct' : 'окт', 'msNov' : 'ное', 'msDec' : 'дек', 'January' : 'януари', 'February' : 'февруари', 'March' : 'март', 'April' : 'април', 'May' : 'май', 'June' : 'юни', 'July' : 'юли', 'August' : 'август', 'September' : 'септември', 'October' : 'октомври', 'November' : 'ноември', 'December' : 'декември', 'Sunday' : 'неделя', 'Monday' : 'понеделник', 'Tuesday' : 'вторник', 'Wednesday' : 'сряда', 'Thursday' : 'четвъртък', 'Friday' : 'петък', 'Saturday' : 'събота', 'Sun' : 'нед', 'Mon' : 'пон', 'Tue' : 'вто', 'Wed' : 'сря', 'Thu' : 'чет', 'Fri' : 'пет', 'Sat' : 'съб', /******************************** sort variants ********************************/ 'sortname' : 'по име', 'sortkind' : 'по вид', 'sortsize' : 'по размер', 'sortdate' : 'по дата', 'sortFoldersFirst' : 'Папките първи', 'sortperm' : 'по права', // from v2.1.13 added 13.06.2016 'sortmode' : 'по вид', // from v2.1.13 added 13.06.2016 'sortowner' : 'по собственик', // from v2.1.13 added 13.06.2016 'sortgroup' : 'по група', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Също дървовиден изглед', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Нов файл.txt', // added 10.11.2015 'untitled folder' : 'Нова папка', // added 10.11.2015 'Archive' : 'Нов архив', // from v2.1 added 10.11.2015 'untitled file' : 'Нов файл.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Файл', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Изисква се подтвърждение', 'confirmRm' : 'Сигурни ли сте, че желаете да премахнете файловете?
Това действие е необратимо!', 'confirmRepl' : 'Да заменя ли стария файл с новия?', 'confirmRest' : 'Да се замени ли съществуващата позиция с тази в кошчето?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Не е в UTF-8 формат
Конвертиране до UTF-8?
Съдържанието става в UTF-8 формат при запазване след конверсията.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Кодирането на този файл не може да бъде открито. Необходимо е временно да се преобразува в UTF-8 за редактиране.
Моля, изберете кодиране на този файл.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Има направени промени.
Те ще бъдат загубени, ако не запишете промените.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Наистина ли искате да преместите позиции в кошчето за боклук?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Наистина ли искате да преместите елементи в "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Приложи за всички', 'name' : 'Име', 'size' : 'Размер', 'perms' : 'Права', 'modify' : 'Променено', 'kind' : 'Вид', 'read' : 'четене', 'write' : 'запис', 'noaccess' : 'без достъп', 'and' : 'и', 'unknown' : 'непознат', 'selectall' : 'Избери всички файлове', 'selectfiles' : 'Избери файл(ове)', 'selectffile' : 'Избери първият файл', 'selectlfile' : 'Избери последният файл', 'viewlist' : 'Изглед списък', 'viewicons' : 'Изглед икони', 'viewSmall' : 'Малки икони', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Средни икони', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Големи икони', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Много големи икони', // from v2.1.39 added 22.5.2018 'places' : 'Избрани', 'calc' : 'Изчисли', 'path' : 'Път', 'aliasfor' : 'Връзка към', 'locked' : 'Заключен', 'dim' : 'Размери', 'files' : 'Файлове', 'folders' : 'Папки', 'items' : 'Позиции', 'yes' : 'да', 'no' : 'не', 'link' : 'Връзка', 'searcresult' : 'Резултати от търсенето', 'selected' : 'Избрани позиции', 'about' : 'За', 'shortcuts' : 'Бързи клавиши', 'help' : 'Помощ', 'webfm' : 'Файлов менажер за Интернет', 'ver' : 'Версия', 'protocolver' : 'версия на протокола', 'homepage' : 'Начало', 'docs' : 'Документация', 'github' : 'Разклонение в Github', 'twitter' : 'Последвайте ни в Twitter', 'facebook' : 'Присъединете се към нас във Facebook', 'team' : 'Екип', 'chiefdev' : 'Главен разработчик', 'developer' : 'разработчик', 'contributor' : 'сътрудник', 'maintainer' : 'поддръжка', 'translator' : 'преводач', 'icons' : 'Икони', 'dontforget' : 'и не забравяйте да си вземете кърпата', 'shortcutsof' : 'Преките пътища са изключени', 'dropFiles' : 'Пуснете файловете тук', 'or' : 'или', 'selectForUpload' : 'Избери файлове', 'moveFiles' : 'Премести файлове', 'copyFiles' : 'Копирай файлове', 'restoreFiles' : 'Възстанови файлове', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Премахни от избрани', 'aspectRatio' : 'Отношение', 'scale' : 'Мащаб', 'width' : 'Ширина', 'height' : 'Височина', 'resize' : 'Преоразмери', 'crop' : 'Отрежи', 'rotate' : 'Ротирай', 'rotate-cw' : 'Ротирай 90 градуса CW', 'rotate-ccw' : 'Ротирай 90 градуса CCW', 'degree' : '°', 'netMountDialogTitle' : 'Монтиране на мрежов ресурс', // added 18.04.2012 'protocol' : 'Протокол', // added 18.04.2012 'host' : 'Хост', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Потребител', // added 18.04.2012 'pass' : 'Парола', // added 18.04.2012 'confirmUnmount' : 'Ще размонтирате $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Пусни или вмъкни файлове от браузера', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Тук поснете файловете, URL адресите или изображенията от клипборда', // from v2.1 added 07.04.2014 'encoding' : 'Кодировка', // from v2.1 added 19.12.2014 'locale' : 'Локали', // from v2.1 added 19.12.2014 'searchTarget' : 'Цел: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Търсене по въведен MIME тип', // from v2.1 added 22.5.2015 'owner' : 'Собственик', // from v2.1 added 20.6.2015 'group' : 'Група', // from v2.1 added 20.6.2015 'other' : 'Други', // from v2.1 added 20.6.2015 'execute' : 'Изпълнява', // from v2.1 added 20.6.2015 'perm' : 'Разрешение', // from v2.1 added 20.6.2015 'mode' : 'Вид', // from v2.1 added 20.6.2015 'emptyFolder' : 'Папката е празна', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Папката е празна\\A Влачи и пусни за да добавите файлове', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Папката е празна\\A Докоснете дълго за да добавите позиции', // from v2.1.6 added 30.12.2015 'quality' : 'Качество', // from v2.1.6 added 5.1.2016 'autoSync' : 'Автоматично синхронизиране', // from v2.1.6 added 10.1.2016 'moveUp' : 'Премести нагоре', // from v2.1.6 added 18.1.2016 'getLink' : 'Вземи URL връзка', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Избрани позиции ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Папка ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Позволи офлайн достъп', // from v2.1.10 added 3.25.2016 'reAuth' : 'За повторно удостоверяване', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Сега се зарежда...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Отваряне на няколко файла', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Опитвате се да отворите $1 файла. Наистина ли искате да ги отворите в браузъра?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Няма резултат от търсенето.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Редактира се файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Вие сте избрали $1 позиции.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Имате $1 позиции в клипборда.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Инкременталното търсене е само от текущия изглед.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Възстановяване', // from v2.1.15 added 3.8.2016 'complete' : '$1 завършени', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контекстно меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Завъртане на страницата', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Начала на ресурси', // from v2.1.16 added 16.9.2016 'reset' : 'Нулиране', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Цвят на фона', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Средство за избиране на цвят', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px мрежа', // from v2.1.16 added 4.10.2016 'enabled' : 'Активно', // from v2.1.16 added 4.10.2016 'disabled' : 'Неактивно', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Няма резултат от търсенето в текущия изглед.\\AНатиснете [Enter] за да разширите целта на търсене.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Резултатите от търсенето на първата буква са празни в текущия изглед.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Текстов етикет', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 мин остават', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Отваряне отново с избрано кодиране', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Запазете с избраното кодиране', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Избери папка', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Търсене по първа буква', // from v2.1.23 added 24.3.2017 'presets' : 'Мостри', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Прекалено много позиции, не може да премести в кошчето.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Текстово поле', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Изпразнете папка "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'В папка "$1" няма позиции.', // from v2.1.25 added 22.6.2017 'preference' : 'Настройки', // from v2.1.26 added 28.6.2017 'language' : 'Настройка на езика', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Инициализирайте настройките запаметени в този браузър', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Настройки на лентата с инструменти', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 символа остават.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 оставени редове.', // from v2.1.52 added 16.1.2020 'sum' : 'Сумарно', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Груб размер на файла', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фокусирайте върху елемента в диалоговия прозорец с мишката', // from v2.1.30 added 2.11.2017 'select' : 'Избери', // from v2.1.30 added 23.11.2017 'selectAction' : 'Действие при избор на файл', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Отворете с редактора, използван за последен път', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Обърнете селекцията', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Наистина ли искате да преименувате $1 избрани позиции като $2?
Това не може да бъде отменено!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Групово преименуване', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Номер', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Добави префикс', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Добави суфикс', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Промени разширение', // from v2.1.31 added 8.12.2017 'columnPref' : 'Настройки за колони (Изглед в списък)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Всички промени ще се отразят незабавно в архива.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Промените няма да се отразят, докато не размонтирате този диск.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Следните томове, монтирани на този том, също са демонтирани. Сигурен ли си, че ще го демонтираш?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Информация за селекцията', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Алгоритми за показване на файловия хеш', // from v2.1.33 added 10.3.2018 'infoItems' : 'Информационни елементи (информационен панел за избор)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Натиснете отново, за да излезете.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Лента с инструменти', // from v2.1.38 added 4.4.2018 'workspace' : 'Работно пространство', // from v2.1.38 added 4.4.2018 'dialog' : 'Диалог', // from v2.1.38 added 4.4.2018 'all' : 'Всички', // from v2.1.38 added 4.4.2018 'iconSize' : 'Размер на иконите (изглед с икони)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Отваря максимизиран прозорец на редактора', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Тъй като в момента не е налична API за конверсията, моля, конвертирайте в уебсайта.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'След конверсията трябва да го качите с URL адреса или изтегления файл, за да запазите конвертирания файл.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертиране на сайта от $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Интеграции', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Този elFinder има следните интегрирани външни услуги. Моля, проверете условията за ползване, декларацията за поверителност и т.н., преди да ги използвате.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Покажи скритите елементи', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Скрий скритите елементи', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Покажи/скрий скритите елементи', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Типове файлове за активиране с "Нов файл"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Тип на текстовия файл', // from v2.1.41 added 7.8.2018 'add' : 'Добавете', // from v2.1.41 added 7.8.2018 'theme' : 'Тема', // from v2.1.43 added 19.10.2018 'default' : 'По подразбиране', // from v2.1.43 added 19.10.2018 'description' : 'Описание', // from v2.1.43 added 19.10.2018 'website' : 'уебсайт', // from v2.1.43 added 19.10.2018 'author' : 'Автор', // from v2.1.43 added 19.10.2018 'email' : 'електронна поща', // from v2.1.43 added 19.10.2018 'license' : 'Лиценз', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Този елемент не може да бъде запазен. За да избегнете загубата на редакциите, трябва да експортирате на вашия компютър.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Щракнете двукратно върху файла, за да го изберете.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Използвайте режим на цял екран', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Непознат', 'kindRoot' : 'Начало на ресурс', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Селекции', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Връзка', 'kindAliasBroken' : 'Счупена връзка', // applications 'kindApp' : 'Приложение', 'kindPostscript' : 'Postscript документ', 'kindMsOffice' : 'Microsoft Office документ', 'kindMsWord' : 'Microsoft Word документ', 'kindMsExcel' : 'Microsoft Excel документ', 'kindMsPP' : 'Microsoft Powerpoint презентация', 'kindOO' : 'Open Office документ', 'kindAppFlash' : 'Flash приложение', 'kindPDF' : 'PDF документ', 'kindTorrent' : 'Bittorrent файл', 'kind7z' : '7z архив', 'kindTAR' : 'TAR архив', 'kindGZIP' : 'GZIP архив', 'kindBZIP' : 'BZIP архив', 'kindXZ' : 'XZ архив', 'kindZIP' : 'ZIP архив', 'kindRAR' : 'RAR архив', 'kindJAR' : 'Java JAR файл', 'kindTTF' : 'True Type шрифт', 'kindOTF' : 'Open Type шрифт', 'kindRPM' : 'RPM пакет', // texts 'kindText' : 'Текстов документ', 'kindTextPlain' : 'Чист текст', 'kindPHP' : 'PHP изходен код', 'kindCSS' : 'CSS таблица със стилове', 'kindHTML' : 'HTML документ', 'kindJS' : 'Javascript изходен код', 'kindRTF' : 'RTF текстови файл', 'kindC' : 'C изходен код', 'kindCHeader' : 'C header изходен код', 'kindCPP' : 'C++ изходен код', 'kindCPPHeader' : 'C++ header изходен код', 'kindShell' : 'Unix shell изходен код', 'kindPython' : 'Python изходен код', 'kindJava' : 'Java изходен код', 'kindRuby' : 'Ruby изходен код', 'kindPerl' : 'Perl изходен код', 'kindSQL' : 'SQL изходен код', 'kindXML' : 'XML документ', 'kindAWK' : 'AWK изходен код', 'kindCSV' : 'CSV стойности разделени със запетая', 'kindDOCBOOK' : 'Docbook XML документ', 'kindMarkdown' : 'Markdown текст', // added 20.7.2015 // images 'kindImage' : 'Изображение', 'kindBMP' : 'BMP изображение', 'kindJPEG' : 'JPEG изображение', 'kindGIF' : 'GIF изображение', 'kindPNG' : 'PNG изображение', 'kindTIFF' : 'TIFF изображение', 'kindTGA' : 'TGA изображение', 'kindPSD' : 'Adobe Photoshop изображение', 'kindXBITMAP' : 'X bitmap изображение', 'kindPXM' : 'Pixelmator изображение', // media 'kindAudio' : 'Аудио медия', 'kindAudioMPEG' : 'MPEG звук', 'kindAudioMPEG4' : 'MPEG-4 звук', 'kindAudioMIDI' : 'MIDI звук', 'kindAudioOGG' : 'Ogg Vorbis звук', 'kindAudioWAV' : 'WAV звук', 'AudioPlaylist' : 'MP3 списък за изпълнение', 'kindVideo' : 'Видео медия', 'kindVideoDV' : 'DV филм', 'kindVideoMPEG' : 'MPEG филм', 'kindVideoMPEG4' : 'MPEG-4 филм', 'kindVideoAVI' : 'AVI филм', 'kindVideoMOV' : 'Quick Time филм', 'kindVideoWM' : 'Windows Media филм', 'kindVideoFlash' : 'Flash филм', 'kindVideoMKV' : 'Matroska филм', 'kindVideoOGG' : 'Ogg филм' } }; })); DPK Zlljs/i18n/elfinder.cs.jsnuW+A/** * Čeština translation * @author RobiNN * @author Jay Gridley * @version 2022-02-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.cs = { translator : 'RobiNN <kelcakrobo@gmail.com>, Jay Gridley <gridley.jay@hotmail.com>', language : 'Čeština', direction : 'ltr', dateFormat : 'd. m. Y H:i', // will show like: 28. 02. 2022 11:30 fancyDateFormat : '$1 H:i', // will show like: Dnes 11:30 nonameDateFormat : 'ymd-His', // noname upload will show like: 220228-113024 messages : { 'getShareText' : 'Podíl', 'Editor ': 'Editor kódu', /********************************** errors **********************************/ 'error' : 'Chyba', 'errUnknown' : 'Neznámá chyba.', 'errUnknownCmd' : 'Neznámý příkaz.', 'errJqui' : 'Nedostačující konfigurace jQuery UI. Musí být zahrnuty komponenty Selectable, Draggable a Droppable.', 'errNode' : 'elFinder vyžaduje vytvořený DOM Elementu.', 'errURL' : 'Chybná konfigurace elFinderu! Není nastavena hodnota URL.', 'errAccess' : 'Přístup zamítnut.', 'errConnect' : 'Nepodařilo se připojit k backendu.', 'errAbort' : 'Připojení zrušeno.', 'errTimeout' : 'Vypšel limit pro připojení.', 'errNotFound' : 'Backend nenalezen.', 'errResponse' : 'Nesprávná odpověď backendu.', 'errConf' : 'Nepsrávná konfigurace backendu.', 'errJSON' : 'PHP modul JSON není nainstalován.', 'errNoVolumes' : 'Není dostupný čitelný oddíl.', 'errCmdParams' : 'Nesprávné parametry příkazu "$1".', 'errDataNotJSON' : 'Data nejsou ve formátu JSON.', 'errDataEmpty' : 'Data jsou prázdná.', 'errCmdReq' : 'Dotaz backendu vyžaduje název příkazu.', 'errOpen' : 'Chyba při otevírání "$1".', 'errNotFolder' : 'Objekt není složka.', 'errNotFile' : 'Objekt není soubor.', 'errRead' : 'Chyba při čtení "$1".', 'errWrite' : 'Chyba při zápisu do "$1".', 'errPerm' : 'Přístup odepřen.', 'errLocked' : '"$1" je uzamčený a nemůže být přejmenován, přesunut nebo smazán.', 'errExists' : 'Soubor s názvem "$1" již existuje.', 'errInvName' : 'Nesprávný název souboru.', 'errInvDirname' : 'Neplatný název adresáře.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Složka nenalezena.', 'errFileNotFound' : 'Soubor nenalezen.', 'errTrgFolderNotFound' : 'Cílová složka "$1" nenalezena.', 'errPopup' : 'Prohlížeč zabránil otevření vyskakovacího okna. K otevření souboru, povolte vyskakovací okno v prohlížeči.', 'errMkdir' : 'Nepodařilo se vytvořit složku "$1".', 'errMkfile' : 'Nepodařilo se vytvořit soubor "$1".', 'errRename' : 'Nepodařilo se přejmenovat "$1".', 'errCopyFrom' : 'Kopírování souborů z oddílu "$1" není povoleno.', 'errCopyTo' : 'Kopírování souborů do oddílu "$1" není povoleno.', 'errMkOutLink' : 'Nelze vytvořit odkaz mimo kořenového svazku.', // from v2.1 added 03.10.2015 'errUpload' : 'Chyba nahrávání.', // old name - errUploadCommon 'errUploadFile' : 'Nepodařilo se nahrát "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nejsou vybrány žádné soubory k nahrání.', 'errUploadTotalSize' : 'Překročena maximální povolená velikost dat.', // old name - errMaxSize 'errUploadFileSize' : 'Překročena maximální povolená velikost souboru.', // old name - errFileMaxSize 'errUploadMime' : 'Nepovolený typ souboru.', 'errUploadTransfer' : '"$1" chyba přenosu.', 'errUploadTemp' : 'Nelze vytvořit dočasný soubor pro upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" v tomto umístění již existuje a nelze jej nahradit s jiným typem objektu.', // new 'errReplace' : 'Nelze nahradit "$1".', 'errSave' : '"$1" nelze uložit.', 'errCopy' : '"$1" nelze zkopírovat.', 'errMove' : '"$1" nelze přemístit.', 'errCopyInItself' : '"$1" nelze zkopírovat do sebe sama.', 'errRm' : '"$1" nelze odstranit.', 'errTrash' : 'Nelze se dostat do koše.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nelze odstranit zdrojový soubor(y).', 'errExtract' : 'Nelze extrahovat soubory z "$1".', 'errArchive' : 'Nelze vytvořit archív.', 'errArcType' : 'Nepodporovaný typ archívu.', 'errNoArchive' : 'Soubor není archív nebo má nepodporovaný formát.', 'errCmdNoSupport' : 'Backend tento příkaz nepodporuje.', 'errReplByChild' : 'Složka "$1" nemůže být nahrazena souborem, který sama obsahuje.', 'errArcSymlinks' : 'Z bezpečnostních důvodů je zakázáno rozbalit archívy obsahující symlinky.', // edited 24.06.2012 'errArcMaxSize' : 'Soubory archívu překračují maximální povolenou velikost.', 'errResize' : 'Nepodařilo se změnit velikost obrázku "$1".', 'errResizeDegree' : 'Neplatný stupeň rotace.', // added 7.3.2013 'errResizeRotate' : 'Nelze otočit obrázek.', // added 7.3.2013 'errResizeSize' : 'Neplatná velikost obrázku.', // added 7.3.2013 'errResizeNoChange' : 'Velikost obrazu se nezmění.', // added 7.3.2013 'errUsupportType' : 'Nepodporovaný typ souboru.', 'errNotUTF8Content' : 'Soubor "$1" nemá ani obsah kódovaný v UTF-8 a nelze změnit.', // added 9.11.2011 'errNetMount' : 'Není možné se připojit "$ 1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012 'errNetMountFailed' : 'Připojení se nezdařilo.', // added 17.04.2012 'errNetMountHostReq' : 'Hostitel se vyžaduje.', // added 18.04.2012 'errSessionExpires' : 'Relace byla ukončena z důvodu nečinnosti.', 'errCreatingTempDir' : 'Nelze vytvořit dočasný adresář: "$1"', 'errFtpDownloadFile' : 'Nelze stáhnout soubor z FTP: "$1"', 'errFtpUploadFile' : 'Nelze nahrát soubor na FTP: "$1"', 'errFtpMkdir' : 'Nepodařilo se vytvořit vzdálený adresář na FTP: "$1"', 'errArchiveExec' : 'Při archivaci do souboru došlo k chybě: "$1"', 'errExtractExec' : 'Chyba při extrahování souboru: "$1"', 'errNetUnMount' : 'Nepodařilo se odpojit', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nelze převést na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Chcete-li nahrát složku, zkuste moderní prohlížeč.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Vypršení časového limitu při hledání "$1". Je částečně výsledkem hledání.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Opětovné povolení je nutné.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maximální počet volitelných předmětů je $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nelze obnovit z koše. Nelze identifikovat cíl obnovení.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor tohoto typu souboru nebyl nalezen.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Došlo k chybě na straně serveru.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nelze vyprázdnit složku "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existují ještě další $1 chyby.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Můžete vytvořit až $1 složek najednou.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Vytvořit archív', 'cmdback' : 'Zpět', 'cmdcopy' : 'Kopírovat', 'cmdcut' : 'Vyjmout', 'cmddownload' : 'Stáhnout', 'cmdduplicate' : 'Duplikovat', 'cmdedit' : 'Upravit soubor', 'cmdextract' : 'Rozbalit archív', 'cmdforward' : 'Vpřed', 'cmdgetfile' : 'Vybrat soubory', 'cmdhelp' : 'O softwaru', 'cmdhome' : 'Domů', 'cmdinfo' : 'Zobrazit informace', 'cmdmkdir' : 'Nová složka', 'cmdmkdirin' : 'Do nové složky', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nový soubor', 'cmdopen' : 'Otevřít', 'cmdpaste' : 'Vložit', 'cmdquicklook' : 'Náhled', 'cmdreload' : 'Obnovit', 'cmdrename' : 'Přejmenovat', 'cmdrm' : 'Smazat', 'cmdtrash' : 'Do koše', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Obnovit', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Najít soubory', 'cmdup' : 'Přejít do nadřazené složky', 'cmdupload' : 'Nahrát soubor(y)', 'cmdview' : 'Zobrazit', 'cmdresize' : 'Změnit velikost', 'cmdsort' : 'Seřadit', 'cmdnetmount' : 'Připojit síťovou jednotku', // added 18.04.2012 'cmdnetunmount': 'Odpojit', // from v2.1 added 30.04.2012 'cmdplaces' : 'Umístění', // added 28.12.2014 'cmdchmod' : 'Změnit režim', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otevření složky', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Obnovení šířku sloupce', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Celá obrazovka', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Posouvat', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vyprázdnit složku', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Krok zpět', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Udělat to znovu', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preference', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vyberat vše', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Nic nevyberať', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertovat výběr', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otevři v novém okně', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skrýt (Předvolba)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zavřít', 'btnSave' : 'Uložit', 'btnRm' : 'Odstranit', 'btnApply' : 'Použít', 'btnCancel' : 'Zrušit', 'btnNo' : 'Ne', 'btnYes' : 'Ano', 'btnMount' : 'Připojit', // added 18.04.2012 'btnApprove': 'Přejít do části 1 $ & schválit', // from v2.1 added 26.04.2012 'btnUnmount': 'Odpojit', // from v2.1 added 30.04.2012 'btnConv' : 'Převést', // from v2.1 added 08.04.2014 'btnCwd' : 'Tu', // from v2.1 added 22.5.2015 'btnVolume' : 'Médium', // from v2.1 added 22.5.2015 'btnAll' : 'Všechno', // from v2.1 added 22.5.2015 'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015 'btnFileName':'Název souboru', // from v2.1 added 22.5.2015 'btnSaveClose': 'Uložit & zavřít', // from v2.1 added 12.6.2015 'btnBackup' : 'Zálohovat', // fromv2.1 added 28.11.2015 'btnRename' : 'Přejmenovat', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Přejmenovat vše', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Předch ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Další ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Uložit jako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otevírání složky', 'ntffile' : 'Otevírání souboru', 'ntfreload' : 'Obnovování obsahu složky', 'ntfmkdir' : 'Vytváření složky', 'ntfmkfile' : 'Vytváření souborů', 'ntfrm' : 'Vymazání položek', 'ntfcopy' : 'Kopírování položek', 'ntfmove' : 'Přemístění položek', 'ntfprepare' : 'Kontrola existujících položek', 'ntfrename' : 'Přejmenovávání souborů', 'ntfupload' : 'Nahrávání souborů', 'ntfdownload' : 'Stahování souborů', 'ntfsave' : 'Ukládání souborů', 'ntfarchive' : 'Vytváření archívu', 'ntfextract' : 'Rozbalování souborů z archívu', 'ntfsearch' : 'Vyhledávání souborů', 'ntfresize' : 'Změna velikosti obrázků', 'ntfsmth' : 'Čekejte prosím...', 'ntfloadimg' : 'Načítání obrázků', 'ntfnetmount' : 'Připojení síťového média', // added 18.04.2012 'ntfnetunmount': 'Odpojení síťového média', // from v2.1 added 30.04.2012 'ntfdim' : 'Získejte rozměr obrazu', // added 20.05.2013 'ntfreaddir' : 'Přečtěte si informace o složce', // from v2.1 added 01.07.2013 'ntfurl' : 'Získejte adresu URL odkazu', // from v2.1 added 11.03.2014 'ntfchmod' : 'Změna souboru', // from v2.1 added 20.6.2015 'ntfpreupload': 'Zkontrolujte název nahravaného souboru', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Vytvořit soubor ke stažení', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Získání informací o cestě', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Zpracování nahraného souboru', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Hodit do koše', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Obnova z koše', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrola cílové složky', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Zrušit předchozí operaci', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Obnovit předchozí zrušení', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrola obsahu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Koš', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'neznámý', 'Today' : 'Dnes', 'Yesterday' : 'Včera', 'msJan' : 'Led', 'msFeb' : 'Úno', 'msMar' : 'Bře', 'msApr' : 'Dub', 'msMay' : 'Kvě', 'msJun' : 'Čer', 'msJul' : 'Čec', 'msAug' : 'Srp', 'msSep' : 'Zář', 'msOct' : 'Říj', 'msNov' : 'Lis', 'msDec' : 'Pro', 'January' : 'Leden', 'February' : 'Únor', 'March' : 'Březen', 'April' : 'Duben', 'May' : 'Květen', 'June' : 'Červen', 'July' : 'Červenec', 'August' : 'Srpen', 'September' : 'Září', 'October' : 'Říjen', 'November' : 'Listopad', 'December' : 'Prosinec', 'Sunday' : 'Neděle', 'Monday' : 'Pondělí', 'Tuesday' : 'Úterý', 'Wednesday' : 'Středa', 'Thursday' : 'Čtvrtek', 'Friday' : 'Pátek', 'Saturday' : 'Sobota', 'Sun' : 'Ne', 'Mon' : 'Po', 'Tue' : 'Út', 'Wed' : 'St', 'Thu' : 'Čt', 'Fri' : 'Pá', 'Sat' : 'So', /******************************** sort variants ********************************/ 'sortname' : 'dle jména', 'sortkind' : 'dle typu', 'sortsize' : 'dle velikosti', 'sortdate' : 'dle data', 'sortFoldersFirst' : 'Napřed složky', 'sortperm' : 'dle povolení', // from v2.1.13 added 13.06.2016 'sortmode' : 'dle módu', // from v2.1.13 added 13.06.2016 'sortowner' : 'dle majitele', // from v2.1.13 added 13.06.2016 'sortgroup' : 'dle skupiny', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Také stromové zobrazení', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Nový soubor.txt', // added 10.11.2015 'untitled folder' : 'Nová složka', // added 10.11.2015 'Archive' : 'Nový archiv', // from v2.1 added 10.11.2015 'untitled file' : 'Nový soubor.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 soubor', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Požadováno potvrzení', 'confirmRm' : 'Opravdu chcete odstranit tyto soubory?
Operace nelze vrátit!', 'confirmRepl' : 'Nahradit staré soubory novými?', 'confirmRest' : 'Nahradit stávající položku položkou z koše?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Není v UTF-8, převést do UTF-8?
Obsah po převodu se stává UTF-8.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Kódování tohoto souboru nemoholo rozpoznán. Pro úpravy je třeba dočasně převést do kódování UTF-8.
Prosím, vyberte kódování znaků souboru.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Byl změněn.
Pokud obsahuje neuložené změny, dojde ke ztrátě práce.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Opravdu chcete položky přesunout do koše?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Opravdu chcete položky přesunout do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Pro všechny', 'name' : 'Název', 'size' : 'Velikost', 'perms' : 'Práva', 'modify' : 'Upravený', 'kind' : 'Typ', 'read' : 'čtení', 'write' : 'zápis', 'noaccess' : 'přístup odepřen', 'and' : 'a', 'unknown' : 'neznámý', 'selectall' : 'Vybrat všechny položky', 'selectfiles' : 'Vybrat položku(y)', 'selectffile' : 'Vybrat první položku', 'selectlfile' : 'Vybrat poslední položku', 'viewlist' : 'Seznam', 'viewicons' : 'Ikony', 'viewSmall' : 'Malé ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Střední ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Velké ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra velké ikony', // from v2.1.39 added 22.5.2018 'places' : 'Místa', 'calc' : 'Vypočítat', 'path' : 'Cesta', 'aliasfor' : 'Zástupce pro', 'locked' : 'Uzamčený', 'dim' : 'Rozměry', 'files' : 'Soubory', 'folders' : 'Složky', 'items' : 'Položky', 'yes' : 'ano', 'no' : 'ne', 'link' : 'Odkaz', 'searcresult' : 'Výsledky hledání', 'selected' : 'vybrané položky', 'about' : 'O softwaru', 'shortcuts' : 'Zkratky', 'help' : 'Nápověda', 'webfm' : 'Webový správce souborů', 'ver' : 'Verze', 'protocolver' : 'verze protokolu', 'homepage' : 'Domovská stránka projektu', 'docs' : 'Dokumentace', 'github' : 'Najdete nás na Gitgube', 'twitter' : 'Následujte nás na Twitteri', 'facebook' : 'Připojte se k nám na Facebooku', 'team' : 'Tým', 'chiefdev' : 'séf vývojářů', 'developer' : 'vývojár', 'contributor' : 'spolupracovník', 'maintainer' : 'údržba', 'translator' : 'překlad', 'icons' : 'Ikony', 'dontforget' : 'a nezapomeňte si vzít plavky', 'shortcutsof' : 'Zkratky nejsou povoleny', 'dropFiles' : 'Sem přetáhněte soubory', 'or' : 'nebo', 'selectForUpload' : 'Vyberte soubory', 'moveFiles' : 'Přesunout sobory', 'copyFiles' : 'Zkopírovat soubory', 'restoreFiles' : 'Obnovit položky', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Odstranit z míst', 'aspectRatio' : 'Poměr stran', 'scale' : 'Měřítko', 'width' : 'Šířka', 'height' : 'Výška', 'resize' : 'Změnit vel.', 'crop' : 'Ořezat', 'rotate' : 'Otočit', 'rotate-cw' : 'Otočit o +90 stupňů', 'rotate-ccw' : 'Otočit o -90 stupňů', 'degree' : ' stupňů', 'netMountDialogTitle' : 'Připojení síťového média', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Hostitel', // added 18.04.2012 'port' : 'Přístav', // added 18.04.2012 'user' : 'Uživatel', // added 18.04.2012 'pass' : 'Heslo', // added 18.04.2012 'confirmUnmount' : 'Chcete odpojit $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Přemístěte nebo přesuňte soubory z prohlížeče', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Zde přemístěte nebo přesuňte soubory a adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kódování', // from v2.1 added 19.12.2014 'locale' : 'Lokalizce', // from v2.1 added 19.12.2014 'searchTarget' : 'Cíl: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Vyhledávání podle vstupního MIME typu', // from v2.1 added 22.5.2015 'owner' : 'Majitel', // from v2.1 added 20.6.2015 'group' : 'Skupina', // from v2.1 added 20.6.2015 'other' : 'Ostatní', // from v2.1 added 20.6.2015 'execute' : 'Spustit', // from v2.1 added 20.6.2015 'perm' : 'Povolení', // from v2.1 added 20.6.2015 'mode' : 'Režim', // from v2.1 added 20.6.2015 'emptyFolder' : 'Složka je prázdná', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Složka je prázdná, přesunout nebo zkontrolovat položky', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Složka je prázdná, dlouhim kliknutím přidáte položky', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatická synchronizace', // from v2.1.6 added 10.1.2016 'moveUp' : 'Přesunout nahoru', // from v2.1.6 added 18.1.2016 'getLink' : 'Získat URL odkaz', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Vybrané položky ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID složky', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Povolit přístup offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Znovu ověřit', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Načítání...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otevření více souborů', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Pokoušíte se otevřít soubor $1. Chcete jej otevřít v prohlížeči?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Výsledky hledání jsou prázdné', // from v2.1.12 added 5.16.2016 'editingFile' : 'Upravujete soubor.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vybrali jste $1 položky.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Máte $1 položky v schránce.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementální hledání je pouze z aktuálního zobrazení.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Obnovit', // from v2.1.15 added 3.8.2016 'complete' : '$1 kompletní', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Otáčení stránky', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Kořeny média', // from v2.1.16 added 16.9.2016 'reset' : 'Obnovit', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Barva pozadí', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Výběr barvy', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px mřížka', // from v2.1.16 added 4.10.2016 'enabled' : 'Povoleno', // from v2.1.16 added 4.10.2016 'disabled' : 'Zakázáno', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Výsledky hledání jsou prázdné v aktuálním zobrazení.\\Stisknutím tlačítka [Enter] rozšíříte vyhledávání cíle.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Výsledky vyhledávání prvního listu jsou v aktuálním zobrazení prázdné.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minut zůstává', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otevřít pomocí zvoleného kódování', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Uložit s vybraným kódováním', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vyberte složku', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Hledání prvního listu', // from v2.1.23 added 24.3.2017 'presets' : 'Předvolby', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Je to příliš mnoho položek, takže se nemohou dostat do koše.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textarea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vyprázdnit složku "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Ve složce "$1" nejsou žádné položky.', // from v2.1.25 added 22.6.2017 'preference' : 'Předvolby', // from v2.1.26 added 28.6.2017 'language' : 'Nastavte jazyk', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializujte nastavení uložená v tomto prohlížeči', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Nastavení panelu nástrojů', // from v2.1.27 added 2.8.2017 'charsLeft' : '...$1 znaků zbývá.', // from v2.1.29 added 30.8.2017 'linesLeft' : '...$1 řádků zůstává.', // from v2.1.52 added 16.1.2020 'sum' : 'Součet', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Hrubá velikost souboru', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Zaměření na prvek dialogu s mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Vybrat', // from v2.1.30 added 23.11.2017 'selectAction' : 'Akce při vybraném souboru', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otevřít pomocí naposledy použitého editoru', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Obrátit výběr položek', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Opravdu chcete přejmenovat $1 vybraných položek, jako například $2
Není to možné vrátit zpět!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch přejmenování', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Číslo', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Přidat předponu', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Přidat příponu', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Změnit příponu', // from v2.1.31 added 8.12.2017 'columnPref' : 'Nastavení sloupců (Zobrazení seznamu)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Všechny změny se okamžitě projeví v archivu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Jakékoliv změny se nebudou odrážet, dokud nebude tento svazek odpojen.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Následující svazky namontované na tomto svazku jsou také odpojeny. Opravdu ji odpojíte?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informace o výběru', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmy pro zobrazení hashování souborů', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informační položky (panel s informacemi o výběru)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Dalším stisknutím opustíte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Panel nástrojů', // from v2.1.38 added 4.4.2018 'workspace' : 'Pracovní prostor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogové okno', // from v2.1.38 added 4.4.2018 'all' : 'Všechno', // from v2.1.38 added 4.4.2018 'iconSize' : 'Velikost ikony (zobrazení ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otevřete maximalizované okno editora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Protože konverze podle API momentálně není k dispozici, převeďte na webové stránce.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konverzi musíte nahrát převeden soubor pomocí URL položky nebo stažený soubor k uložení převedeného souboru.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Převést na stránce $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrace', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Tento elFinder má integrované následující externí služby. Před použitím zkontrolujte podmínky používání, zásady ochrany osobních údajů atd.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Zobrazit skryté položky', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skrýt skryté položky', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Zobrazit/skrýt skryté položky', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy souborů, jež mají být povoleny pomocí "Nový soubor"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ textového souboru', // from v2.1.41 added 7.8.2018 'add' : 'Přidat', // from v2.1.41 added 7.8.2018 'theme' : 'Téma', // from v2.1.43 added 19.10.2018 'default' : 'Výchozí', // from v2.1.43 added 19.10.2018 'description' : 'Popis', // from v2.1.43 added 19.10.2018 'website' : 'Stránka', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licence', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Tuto položku nelze uložit. Abyste se vyhnuli ztrátě úprav, musíte je exportovat do počítače.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Poklepáním na soubor jej vyberte.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Použít režim celé obrazovky', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznámý', 'kindRoot' : 'Kořen média', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Složka', 'kindSelects' : 'Výběry', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Přezdívka', 'kindAliasBroken' : 'Zlomený alias', // applications 'kindApp' : 'Aplikace', 'kindPostscript' : 'Dokument Postscriptu', 'kindMsOffice' : 'Dokument Microsoft Office', 'kindMsWord' : 'Dokument Microsoft Word', 'kindMsExcel' : 'Dokument Microsoft Excel', 'kindMsPP' : 'Prezentace Microsoft Powerpoint', 'kindOO' : 'Otevřít dokument Office', 'kindAppFlash' : 'Flash aplikace', 'kindPDF' : 'PDF', 'kindTorrent' : 'Soubor BitTorrent', 'kind7z' : 'Archív 7z', 'kindTAR' : 'Archív TAR', 'kindGZIP' : 'Archív GZIP', 'kindBZIP' : 'Archív BZIP', 'kindXZ' : 'Archív XZ', 'kindZIP' : 'Archív ZIP', 'kindRAR' : 'Archív RAR', 'kindJAR' : 'Soubor Java JAR', 'kindTTF' : 'True Type písmo', 'kindOTF' : 'Otevřete písmo Type', 'kindRPM' : 'RPM balíček', // texts 'kindText' : 'Textový dokument', 'kindTextPlain' : 'Čistý text', 'kindPHP' : 'PHP zdrojový kód', 'kindCSS' : 'Kaskádové styly', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript zdrojový kód', 'kindRTF' : 'Formát RTF', 'kindC' : 'C zdrojový kód', 'kindCHeader' : 'C hlavička', 'kindCPP' : 'C++ zdrojový kód', 'kindCPPHeader' : 'C++ hlavička', 'kindShell' : 'Unix shell skript', 'kindPython' : 'Python zdrojový kód', 'kindJava' : 'Java zdrojový kód', 'kindRuby' : 'Ruby zdrojový kód', 'kindPerl' : 'Perl skript', 'kindSQL' : 'SQL zdrojový kód', 'kindXML' : 'Dokument XML', 'kindAWK' : 'AWK zdrojový kód', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Obrázek', 'kindBMP' : 'Obrázek BMP', 'kindJPEG' : 'Obrázek JPEG', 'kindGIF' : 'Obrázek GIF', 'kindPNG' : 'Obrázek PNG', 'kindTIFF' : 'Obrázek TIFF', 'kindTGA' : 'Obrázek TGA', 'kindPSD' : 'Obrázek Adobe Photoshop', 'kindXBITMAP' : 'Obrázek X bitmapa', 'kindPXM' : 'Obrázek Pixelmator', // media 'kindAudio' : 'Audio sobory', 'kindAudioMPEG' : 'Zvuk MPEG', 'kindAudioMPEG4' : 'Zvuk MPEG-4', 'kindAudioMIDI' : 'Zvuk MIDI', 'kindAudioOGG' : 'Zvuk Ogg Vorbis', 'kindAudioWAV' : 'Zvuk WAV', 'AudioPlaylist' : 'Seznam skladeb MP3', 'kindVideo' : 'Video sobory', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; }));PK Zn js/i18n/elfinder.sv.jsnuW+A/** * Svenska translation * @author Gabriel Satzger * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sv = { translator : 'Gabriel Satzger <gabriel.satzger@sbg.se>', language : 'Svenska', direction : 'ltr', dateFormat : 'Y-m-d H:i', // will show like: 2022-03-03 15:33 fancyDateFormat : '$1 H:i', // will show like: Idag 15:33 nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-153348 messages : { 'getShareText' : 'Dela med sig', 'Editor ': 'Kodredigerare', /********************************** errors **********************************/ 'error' : 'Fel', 'errUnknown' : 'Okänt error.', 'errUnknownCmd' : 'Okänt kommando.', 'errJqui' : 'Felaktig jQuery UI konfiguration. Komponenterna selectable, draggable och droppable måste vara inkluderade.', 'errNode' : 'elFinder kräver att DOM Elementen skapats.', 'errURL' : 'Felaktig elFinder konfiguration! URL parametern är inte satt.', 'errAccess' : 'Åtkomst nekad.', 'errConnect' : 'Kan inte ansluta till backend.', 'errAbort' : 'Anslutningen avbröts.', 'errTimeout' : 'Anslutningen löpte ut.', 'errNotFound' : 'Backend hittades inte.', 'errResponse' : 'Ogiltig backend svar.', 'errConf' : 'Ogiltig backend konfiguration.', 'errJSON' : 'PHP JSON modul är inte installerad.', 'errNoVolumes' : 'Läsbara volymer är inte tillgängliga.', 'errCmdParams' : 'Ogiltiga parametrar för kommandot "$1".', 'errDataNotJSON' : 'Datan är inte JSON.', 'errDataEmpty' : 'Datan är tom.', 'errCmdReq' : 'Backend begäran kräver kommandonamn.', 'errOpen' : 'Kan inte öppna "$1".', 'errNotFolder' : 'Objektet är inte en mapp.', 'errNotFile' : 'Objektet är inte en fil.', 'errRead' : 'Kan inte läsa "$1".', 'errWrite' : 'Kan inte skriva till "$1".', 'errPerm' : 'Tillstånd nekat.', 'errLocked' : '"$1" är låst och kan inte döpas om, flyttas eller tas bort.', 'errExists' : 'Fil med namn "$1" finns redan.', 'errInvName' : 'Ogiltigt filnamn.', 'errInvDirname' : 'Ogiltigt mappnamn.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappen hittades inte.', 'errFileNotFound' : 'Filen hittades inte.', 'errTrgFolderNotFound' : 'Målmappen "$1" hittades inte.', 'errPopup' : 'Webbläsaren hindrade popup-fönstret att öppnas. Ändra i webbläsarens inställningar för att kunna öppna filen.', 'errMkdir' : 'Kan inte skapa mappen "$1".', 'errMkfile' : 'Kan inte skapa filen "$1".', 'errRename' : 'Kan inte döpa om "$1".', 'errCopyFrom' : 'Kopiera filer från volym "$1" tillåts inte.', 'errCopyTo' : 'Kopiera filer till volym "$1" tillåts inte.', 'errMkOutLink' : 'Det går inte att skapa en länk utanför volymroten.', // from v2.1 added 03.10.2015 'errUpload' : 'Error vid uppladdningen.', // old name - errUploadCommon 'errUploadFile' : 'Kan inte ladda upp "$1".', // old name - errUpload 'errUploadNoFiles' : 'Inga filer hittades för uppladdning.', 'errUploadTotalSize' : 'Data överskrider den högsta tillåtna storleken.', // old name - errMaxSize 'errUploadFileSize' : 'Filen överskrider den högsta tillåtna storleken.', // old name - errFileMaxSize 'errUploadMime' : 'Otillåten filtyp.', 'errUploadTransfer' : '"$1" överföringsfel.', 'errUploadTemp' : 'Det gick inte att göra en tillfällig fil för uppladdning.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" finns redan på den här platsen och kan inte ersättas av objekt med en annan typ.', // new 'errReplace' : 'Det går inte att ersätta "$1".', 'errSave' : 'Kan inte spara "$1".', 'errCopy' : 'Kan inte kopiera "$1".', 'errMove' : 'Kan inte flytta "$1".', 'errCopyInItself' : 'Kan inte flytta "$1" till sig själv.', 'errRm' : 'Kan inte ta bort "$1".', 'errTrash' : 'Kan inte hamna i papperskorgen.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Det går inte att ta bort källfil(er).', 'errExtract' : 'Kan inte packa upp filen från "$1".', 'errArchive' : 'Kan inte skapa arkiv.', 'errArcType' : 'Arkivtypen stöds inte.', 'errNoArchive' : 'Filen är inte av typen arkiv.', 'errCmdNoSupport' : 'Backend stöder inte detta kommando.', 'errReplByChild' : 'Mappen “$1” kan inte ersättas av ett objekt den innehåller.', 'errArcSymlinks' : 'Av säkerhetsskäl nekas arkivet att packas upp då det innehåller symboliska länkar eller filer med ej tillåtna namn.', // edited 24.06.2012 'errArcMaxSize' : 'Arkivfiler överskrider största tillåtna storlek.', 'errResize' : 'Kan inte ändra storlek "$1".', 'errResizeDegree' : 'Ogiltig rotationsgrad.', // added 7.3.2013 'errResizeRotate' : 'Det går inte att rotera bilden.', // added 7.3.2013 'errResizeSize' : 'Ogiltig bildstorlek.', // added 7.3.2013 'errResizeNoChange' : 'Bildstorleken har inte ändrats.', // added 7.3.2013 'errUsupportType' : 'Filtypen stöds inte.', 'errNotUTF8Content' : 'Filen "$1" är inte i UTF-8 och kan inte redigeras.', // added 9.11.2011 'errNetMount' : 'Kan inte koppla "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protokollet stöds inte.', // added 17.04.2012 'errNetMountFailed' : 'Kopplingen misslyckades.', // added 17.04.2012 'errNetMountHostReq' : 'Host krävs.', // added 18.04.2012 'errSessionExpires' : 'Din session har löpt ut på grund av inaktivitet.', 'errCreatingTempDir' : 'Det gick inte att skapa en tillfällig katalog: "$1"', 'errFtpDownloadFile' : 'Det gick inte att ladda ner filen från FTP: "$1"', 'errFtpUploadFile' : 'Det gick inte att ladda upp filen till FTP: "$1"', 'errFtpMkdir' : 'Det går inte att skapa fjärrkatalog på FTP: "$1"', 'errArchiveExec' : 'Fel vid arkivering av filer: "$1"', 'errExtractExec' : 'Fel vid extrahering av filer: "$1"', 'errNetUnMount' : 'Det går inte att avmontera.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Ej konvertibel till UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prova den moderna webbläsaren, om du vill ladda upp mappen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Tidsgränsen tog slut när du sökte efter "$1". Sökresultatet är delvis.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Återauktorisering krävs.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max antal valbara föremål är $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Det gick inte att återställa från papperskorgen. Kan inte identifiera återställningsdestinationen.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Det gick inte att hitta redigeraren för denna filtyp.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Fel uppstod på serversidan.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Det gick inte att tömma mappen "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Det finns $1 fler fel.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Du kan skapa upp till $1 mappar åt gången.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Skapa arkiv', 'cmdback' : 'Tillbaka', 'cmdcopy' : 'Kopiera', 'cmdcut' : 'Klipp ut', 'cmddownload' : 'Ladda ned', 'cmdduplicate' : 'Duplicera', 'cmdedit' : 'Redigera fil', 'cmdextract' : 'Extrahera filer från arkiv', 'cmdforward' : 'Framåt', 'cmdgetfile' : 'Välj filer', 'cmdhelp' : 'Om denna programvara', 'cmdhome' : 'Hem', 'cmdinfo' : 'Visa info', 'cmdmkdir' : 'Ny mapp', 'cmdmkdirin' : 'Till ny mapp', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Öppna', 'cmdpaste' : 'Klistra in', 'cmdquicklook' : 'Förhandsgranska', 'cmdreload' : 'Ladda om', 'cmdrename' : 'Döp om', 'cmdrm' : 'Radera', 'cmdtrash' : 'Till papperskorgen', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Återställ', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Hitta filer', 'cmdup' : 'Gå till överordnade katalog', 'cmdupload' : 'Ladda upp filer', 'cmdview' : 'Visa', 'cmdresize' : 'Ändra bildstorlek', 'cmdsort' : 'Sortera', 'cmdnetmount' : 'Montera nätverksvolym', // added 18.04.2012 'cmdnetunmount': 'Avmontera', // from v2.1 added 30.04.2012 'cmdplaces' : 'Till platser', // added 28.12.2014 'cmdchmod' : 'Ändra läge', // from v2.1 added 20.6.2015 'cmdopendir' : 'Öppna en mapp', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Återställ kolumnbredd', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Fullskärm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Flytta', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Töm mappen', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Ångra', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Göra om', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Inställningar', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Välj alla', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Välj ingen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertera urval', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Öppna i nytt fönster', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Dölj (preferens)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Stäng', 'btnSave' : 'Spara', 'btnRm' : 'Ta bort', 'btnApply' : 'Verkställ', 'btnCancel' : 'Ångra', 'btnNo' : 'Nej', 'btnYes' : 'Ja', 'btnMount' : 'Montera', // added 18.04.2012 'btnApprove': 'Gå till $1 och godkänn', // from v2.1 added 26.04.2012 'btnUnmount': 'Avmontera', // from v2.1 added 30.04.2012 'btnConv' : 'Konvertera', // from v2.1 added 08.04.2014 'btnCwd' : 'Här', // from v2.1 added 22.5.2015 'btnVolume' : 'Volym', // from v2.1 added 22.5.2015 'btnAll' : 'Allt', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-typ', // from v2.1 added 22.5.2015 'btnFileName':'Filnamn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Spara & Stäng', // from v2.1 added 12.6.2015 'btnBackup' : 'Säkerhetskopiering', // fromv2.1 added 28.11.2015 'btnRename' : 'Döp om', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Byt namn (alla)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Föregående ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Nästa ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Spara som', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Öppnar mapp', 'ntffile' : 'Öppnar fil', 'ntfreload' : 'Laddar om mappinnehållet', 'ntfmkdir' : 'Skapar katalog', 'ntfmkfile' : 'Skapar fil', 'ntfrm' : 'Tar bort filer', 'ntfcopy' : 'Kopierar filer', 'ntfmove' : 'Flyttar filer', 'ntfprepare' : 'Förbereder att flytta filer', 'ntfrename' : 'Döper om filer', 'ntfupload' : 'Laddar upp filer', 'ntfdownload' : 'Laddar ner filer', 'ntfsave' : 'Sparar filer', 'ntfarchive' : 'Skapar arkiv', 'ntfextract' : 'Extraherar filer från arkiv', 'ntfsearch' : 'Söker filer', 'ntfresize' : 'Ändra storlek på bilder', 'ntfsmth' : 'Gör någonting >_<', 'ntfloadimg' : 'Laddar bild', 'ntfnetmount' : 'kopplar nätverksvolym', // added 18.04.2012 'ntfnetunmount': 'Avmonterar nätverksvolym', // from v2.1 added 30.04.2012 'ntfdim' : 'Skaffa bilddimension', // added 20.05.2013 'ntfreaddir' : ' Läser mappinformation', // from v2.1 added 01.07.2013 'ntfurl' : 'Hämtar URL till länk', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ändra filläge', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifierar uppladdningsfilens namn', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Skapa en fil för nedladdning', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Hämta sökvägsinformation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Bearbetar den uppladdade filen', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Håller på att slänga i soporna', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Återställer från papperskorgen', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrollerar målmapp', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Ångra föregående åtgärd', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Gör om föregående ångrat', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrollerar innehållet', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Skräp', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'okänt', 'Today' : 'Idag', 'Yesterday' : 'Igår', 'msJan' : 'Jan', 'msFeb' : 'feb', 'msMar' : 'Mar', 'msApr' : 'apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'jul', 'msAug' : 'aug', 'msSep' : 'sep', 'msOct' : 'Okt', 'msNov' : 'nov', 'msDec' : 'dec', 'January' : 'Januari', 'February' : 'Februari', 'March' : 'Mars', 'April' : 'april', 'May' : 'Maj', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Augusti', 'September' : 'September', 'October' : 'Oktober', 'November' : 'november', 'December' : 'december', 'Sunday' : 'Söndag', 'Monday' : 'Måndag', 'Tuesday' : 'Tisdag', 'Wednesday' : 'Onsdag', 'Thursday' : 'Torsdag', 'Friday' : 'Fredag', 'Saturday' : 'Lördag', 'Sun' : 'Sön', 'Mon' : 'Mån', 'Tue' : 'Tis', 'Wed' : 'Ons', 'Thu' : 'Tor', 'Fri' : 'Fre', 'Sat' : 'Lör', /******************************** sort variants ********************************/ 'sortname' : 'efter namn', 'sortkind' : 'efter sort', 'sortsize' : 'efter storlek', 'sortdate' : 'efter datum', 'sortFoldersFirst' : 'Mappar först', 'sortperm' : 'med tillstånd', // from v2.1.13 added 13.06.2016 'sortmode' : 'efter läge', // from v2.1.13 added 13.06.2016 'sortowner' : 'efter läge', // from v2.1.13 added 13.06.2016 'sortgroup' : 'efter grupp', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Även Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Ny fil.txt', // added 10.11.2015 'untitled folder' : 'Ny mapp', // added 10.11.2015 'Archive' : 'Nytt Arkiv', // from v2.1 added 10.11.2015 'untitled file' : 'Ny fil.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fil', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bekräftelse krävs', 'confirmRm' : 'Är du säker på att du vill ta bort filer?
Detta kan inte ångras!', 'confirmRepl' : 'Ersätt den gamla filen med en ny?', 'confirmRest' : 'Ersätta befintliga objekt med objektet i papperskorgen?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Inte i UTF-8
Konvertera till UTF-8?
Innehåll blir UTF-8 genom att spara efter konvertering.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Det gick inte att upptäcka teckenkodning för den här filen. Den måste tillfälligt konverteras till UTF-8 för redigering.
Välj teckenkodning för denna fil.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Den har ändrats.
Förlorar arbete om du inte sparar ändringar.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Är du säker på att du vill flytta föremål till papperskorgen?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Är du säker på att du vill flytta objekt till "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Använd för alla', 'name' : 'Namn', 'size' : 'Storlek', 'perms' : 'Rättigheter', 'modify' : 'Ändrad', 'kind' : 'Sort', 'read' : 'läs', 'write' : 'skriv', 'noaccess' : 'ingen åtkomst', 'and' : 'och', 'unknown' : 'okänd', 'selectall' : 'Välj alla filer', 'selectfiles' : 'Välj fil(er)', 'selectffile' : 'Välj första filen', 'selectlfile' : 'Välj sista filen', 'viewlist' : 'Listvy', 'viewicons' : 'Ikonvy', 'viewSmall' : 'Små ikoner', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medelstora ikoner', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Stora ikoner', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra stora ikoner', // from v2.1.39 added 22.5.2018 'places' : 'Platser', 'calc' : 'Beräkna', 'path' : 'Sökväg', 'aliasfor' : 'Alias för', 'locked' : 'Låst', 'dim' : 'Dimensioner', 'files' : 'Filer', 'folders' : 'Mappar', 'items' : 'Objekt', 'yes' : 'ja', 'no' : 'nej', 'link' : 'Länk', 'searcresult' : 'Sökresultat', 'selected' : 'valda objekt', 'about' : 'Om', 'shortcuts' : 'Genväg', 'help' : 'Hjälp', 'webfm' : 'Webbfilhanterare', 'ver' : 'Version', 'protocolver' : 'protokolversion', 'homepage' : 'Projekt hemsida', 'docs' : 'Dokumentation', 'github' : 'Forka oss på Github', 'twitter' : 'Följ oss på twitter', 'facebook' : 'Följ oss på facebook', 'team' : 'Team', 'chiefdev' : 'senior utvecklare', 'developer' : 'utvecklare', 'contributor' : 'bidragsgivare', 'maintainer' : 'underhållare', 'translator' : 'översättare', 'icons' : 'Ikoner', 'dontforget' : 'och glöm inte att ta med din handduk', 'shortcutsof' : 'Genvägar avaktiverade', 'dropFiles' : 'Släpp filerna här', 'or' : 'eller', 'selectForUpload' : 'Välj filer att ladda upp', 'moveFiles' : 'Flytta filer', 'copyFiles' : 'Kopiera filer', 'restoreFiles' : 'Återställ objekt', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Ta bort från platser', 'aspectRatio' : 'Aspekt ratio', 'scale' : 'Skala', 'width' : 'Bredd', 'height' : 'Höjd', 'resize' : 'Ändra storlek', 'crop' : 'Beskär', 'rotate' : 'Rotera', 'rotate-cw' : 'Rotera 90 grader medurs', 'rotate-ccw' : 'Rotera 90 grader moturs', 'degree' : 'Grader', 'netMountDialogTitle' : 'Koppla nätverksvolym', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Värd', // added 18.04.2012 'port' : 'Hamn', // added 18.04.2012 'user' : 'användare', // added 18.04.2012 'pass' : 'Lösenord', // added 18.04.2012 'confirmUnmount' : 'Avmonterar du $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Släpp eller klistra in filer från webbläsaren', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Släpp filer, klistra in webbadresser eller bilder (klippbord) här', // from v2.1 added 07.04.2014 'encoding' : 'Kodning', // from v2.1 added 19.12.2014 'locale' : 'Plats', // from v2.1 added 19.12.2014 'searchTarget' : 'Mål: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Sök efter indata MIME-typ', // from v2.1 added 22.5.2015 'owner' : 'Ägare', // from v2.1 added 20.6.2015 'group' : 'Grupp', // from v2.1 added 20.6.2015 'other' : 'Övrig', // from v2.1 added 20.6.2015 'execute' : 'Kör', // from v2.1 added 20.6.2015 'perm' : 'Lov', // from v2.1 added 20.6.2015 'mode' : 'Läge', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mappen är tom', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mappen är tom\\A Släpp för att lägga till objekt', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mappen är tom\\En lång tryckning för att lägga till objekt', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalitet', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatisk synkronisering', // from v2.1.6 added 10.1.2016 'moveUp' : 'Flytta upp', // from v2.1.6 added 18.1.2016 'getLink' : 'Få URL-länk', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Valda föremål ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Mapp-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Tillåt offlineåtkomst', // from v2.1.10 added 3.25.2016 'reAuth' : 'För att autentisera på nytt', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Laddar...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Öppna flera filer', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Du försöker öppna $1-filerna. Är du säker på att du vill öppna i webbläsaren?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Sökresultaten är tomma i sökmålet.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Det är att redigera en fil.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Du har valt $1 objekt.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Du har $1 objekt i urklippet.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementell sökning är endast från den aktuella vyn.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Återställ', // from v2.1.15 added 3.8.2016 'complete' : '$1 färdig', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Innehållsmeny', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sidvändning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volymrötter', // from v2.1.16 added 16.9.2016 'reset' : 'Återställa', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Bakgrundsfärg', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Färgväljare', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px rutnät', // from v2.1.16 added 4.10.2016 'enabled' : 'Aktiverad', // from v2.1.16 added 4.10.2016 'disabled' : 'Inaktiverad', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Sökresultaten är tomma i den aktuella vyn.\\ATryck på [Retur] för att utöka sökmålet.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Sökresultaten för första bokstaven är tomma i den aktuella vyn.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Textetikett', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 min kvar', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Öppna igen med vald kodning', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Spara med vald kodning', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Välj mapp', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Första bokstavssökning', // from v2.1.23 added 24.3.2017 'presets' : 'Förinställningar', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Det är för många föremål så att det inte kan hamna i papperskorgen.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Töm mappen "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Det finns inga objekt i mappen "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferens', // from v2.1.26 added 28.6.2017 'language' : 'Språk', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initiera inställningarna som sparats i den här webbläsaren', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Verktygsfältsinställningar', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tecken kvar.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 rader kvar.', // from v2.1.52 added 16.1.2020 'sum' : 'Belopp', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Grov filstorlek', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokusera på elementet av dialog med muspekaren', // from v2.1.30 added 2.11.2017 'select' : 'Välj', // from v2.1.30 added 23.11.2017 'selectAction' : 'Åtgärd när du väljer fil', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Öppna med den editor som användes förra gången', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invertera urval', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Är du säker på att du vill byta namn på $1 valda objekt som $2?
Detta kan inte ångras!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Byt namn på batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Lägg till prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Lägg till suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Ändra förlängning', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolumninställningar (listvy)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alla ändringar kommer omedelbart att återspeglas i arkivet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Eventuella ändringar kommer inte att återspeglas förrän avmontering av denna volym.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Följande volym(er) monterade på denna volym avmonterade också. Är du säker på att avmontera den?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Urvalsinformation', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmer för att visa filens hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Infoobjekt (panel med urvalsinformation)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Tryck igen för att avsluta.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Verktygsfält', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbetsutrymme', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Allt', // from v2.1.38 added 4.4.2018 'iconSize' : 'Ikonstorlek (ikonvy)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Öppna fönstret för maximerad redigering', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Eftersom konvertering via API för närvarande inte är tillgänglig, vänligen konvertera på webbplatsen.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Efter konvertering måste du ladda upp med objektets URL eller en nedladdad fil för att spara den konverterade filen.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konvertera på webbplatsen för $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrationer', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Denna elFinder har följande externa tjänster integrerade. Vänligen kontrollera användarvillkoren, integritetspolicyn etc. innan du använder den.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Visa dolda föremål', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Göm dolda föremål', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Visa/dölj dolda objekt', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Filtyper att aktivera med "Ny fil"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ av textfil', // from v2.1.41 added 7.8.2018 'add' : 'Lägg till', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Standard', // from v2.1.43 added 19.10.2018 'description' : 'Beskrivning', // from v2.1.43 added 19.10.2018 'website' : 'Hemsida', // from v2.1.43 added 19.10.2018 'author' : 'Författare', // from v2.1.43 added 19.10.2018 'email' : 'E-post', // from v2.1.43 added 19.10.2018 'license' : 'Licens', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Det här objektet kan inte sparas. För att undvika att förlora redigeringarna måste du exportera till din PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dubbelklicka på filen för att välja den.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Använd helskärmsläge', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Okänd', 'kindRoot' : 'Volymrot', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mapp', 'kindSelects' : 'Urval', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Trasigt alias', // applications 'kindApp' : 'Applikation', 'kindPostscript' : 'Postscript', 'kindMsOffice' : 'Microsoft Office', 'kindMsWord' : 'Microsoft Word', 'kindMsExcel' : 'Microsoft Excel', 'kindMsPP' : 'Microsoft Powerpoint', 'kindOO' : 'Open Office', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent', 'kind7z' : '7z', 'kindTAR' : 'TAR', 'kindGZIP' : 'GZIP', 'kindBZIP' : 'BZIP', 'kindXZ' : 'XZ', 'kindZIP' : 'ZIP', 'kindRAR' : 'RAR', 'kindJAR' : 'Java JAR', 'kindTTF' : 'True Type', 'kindOTF' : 'Open Type', 'kindRPM' : 'RPM', // texts 'kindText' : 'Text', 'kindTextPlain' : 'Vanlig text', 'kindPHP' : 'PHP', 'kindCSS' : 'Cascading stilark', 'kindHTML' : 'HTML', 'kindJS' : 'Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C', 'kindCHeader' : 'C header', 'kindCPP' : 'C++', 'kindCPPHeader' : 'C++ header', 'kindShell' : 'Unix-skalskript', 'kindPython' : 'Python', 'kindJava' : 'Java', 'kindRuby' : 'Ruby', 'kindPerl' : 'Perl', 'kindSQL' : 'SQL', 'kindXML' : 'XML', 'kindAWK' : 'AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Bild', 'kindBMP' : 'BMP', 'kindJPEG' : 'JPEG', 'kindGIF' : 'GIF', 'kindPNG' : 'PNG', 'kindTIFF' : 'TIFF', 'kindTGA' : 'TGA', 'kindPSD' : 'Adobe Photoshop', 'kindXBITMAP' : 'X bitmap', 'kindPXM' : 'Pixelmator', // media 'kindAudio' : 'Ljudmedia', 'kindAudioMPEG' : 'MPEG-ljud', 'kindAudioMPEG4' : 'MPEG-4-ljud', 'kindAudioMIDI' : 'MIDI-ljud', 'kindAudioOGG' : 'Ogg Vorbis ljud', 'kindAudioWAV' : 'WAV-ljud', 'AudioPlaylist' : 'MP3-spellista', 'kindVideo' : 'Videomedia', 'kindVideoDV' : 'DV-film', 'kindVideoMPEG' : 'MPEG-film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI-film', 'kindVideoMOV' : 'Quicktime film', 'kindVideoWM' : 'Windows media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Filmen Matroska', 'kindVideoOGG' : 'Ogg film' } }; })); PK Zjs/i18n/elfinder.tr.jsnuW+A/** * Türkçe translation * @author I.Taskinoglu & A.Kaya * @author Abdullah ELEN * @author Osman KAYAN * @author alikayan95@gmail.com * @author Cengiz AKCAN cengiz@vobo.company * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.tr = { translator : 'I.Taskinoglu & A.Kaya <alikaya@armsyazilim.com>, Abdullah ELEN <abdullahelen@msn.com>, Osman KAYAN <osmnkayan@gmail.com>, alikayan95@gmail.com, Cengiz AKCAN cengiz@vobo.company', language : 'Türkçe', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 03.03.2022 15:56 fancyDateFormat : '$1 H:i', // will show like: Bugün 15:56 nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-155625 messages : { 'getShareText' : 'Paylaş', 'Editor ': 'Kod Düzenleyici', /********************************** errors **********************************/ 'error' : 'Hata', 'errUnknown' : 'Bilinmeyen hata.', 'errUnknownCmd' : 'Bilinmeyen komut.', 'errJqui' : 'Geçersiz jQuery UI yapılandırması. Seçilebilir, sürükle ve bırak bileşenlerini içermelidir.', 'errNode' : 'elFinder, DOM Element\'ini oluşturması gerekir.', 'errURL' : 'Geçersiz elFinder yapılandırması! URL seçeneği ayarlı değil.', 'errAccess' : 'Erişim engellendi.', 'errConnect' : 'Sunucuya bağlanamıyor.', 'errAbort' : 'Bağlantı durduruldu.', 'errTimeout' : 'Bağlantı zaman aşımı.', 'errNotFound' : 'Sunucu bulunamadı.', 'errResponse' : 'Geçersiz sunucu yanıtı.', 'errConf' : 'Geçersiz sunucu yapılandırması.', 'errJSON' : 'PHP JSON modülü kurulu değil.', 'errNoVolumes' : 'Okunabilir birimler mevcut değil.', 'errCmdParams' : '"$1" komutu için geçersiz parametre.', 'errDataNotJSON' : 'Bu veri JSON formatında değil.', 'errDataEmpty' : 'Boş veri.', 'errCmdReq' : 'Sunucu isteği için komut adı gerekli.', 'errOpen' : '"$1" açılamıyor.', 'errNotFolder' : 'Bu nesne bir klasör değil.', 'errNotFile' : 'Bu nesne bir dosya değil.', 'errRead' : '"$1" okunamıyor.', 'errWrite' : '"$1" yazılamıyor.', 'errPerm' : 'Yetki engellendi.', 'errLocked' : '"$1" kilitli. Bu nedenle taşıma, yeniden adlandırma veya kaldırma yapılamıyor.', 'errExists' : '"$1" adında bir dosya zaten var.', 'errInvName' : 'Geçersiz dosya ismi.', 'errInvDirname' : 'Geçersiz klasör ismi', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Klasör bulunamıyor.', 'errFileNotFound' : 'Dosya bulunamadı.', 'errTrgFolderNotFound' : 'Hedef klasör "$1" bulunamadı.', 'errPopup' : 'Tarayıcı popup penceresi açmayı engelledi. Tarayıcı ayarlarından dosya açmayı aktif hale getirin.', 'errMkdir' : 'Klasör oluşturulamıyor "$1".', 'errMkfile' : '"$1" dosyası oluşturulamıyor.', 'errRename' : '"$1" yeniden adlandırma yapılamıyor.', 'errCopyFrom' : '"$1" biriminden dosya kopyalamaya izin verilmedi.', 'errCopyTo' : '"$1" birimine dosya kopyalamaya izin verilmedi.', 'errMkOutLink' : 'Kök birim dışında bir bağlantı oluşturulamıyor', // from v2.1 added 03.10.2015 'errUpload' : 'Dosya yükleme hatası.', // old name - errUploadCommon 'errUploadFile' : '"$1" dosya yüklenemedi.', // old name - errUpload 'errUploadNoFiles' : 'Yüklenecek dosya bulunamadı.', 'errUploadTotalSize' : 'Veri izin verilen boyuttan büyük.', // old name - errMaxSize 'errUploadFileSize' : 'Dosya izin verilen boyuttan büyük.', // old name - errFileMaxSize 'errUploadMime' : 'Dosya türüne izin verilmedi.', 'errUploadTransfer' : '"$1" transfer hatası.', 'errUploadTemp' : 'Yükleme için geçici dosya yapılamıyor.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" nesnesi bu konumda zaten var ve başka türde nesne ile değiştirilemez.', // new 'errReplace' : 'Değişiklik yapılamıyor "$1".', 'errSave' : '"$1" kaydedilemiyor.', 'errCopy' : '"$1" kopyalanamıyor.', 'errMove' : '"$1" taşınamıyor.', 'errCopyInItself' : '"$1" kendi içine kopyalanamaz.', 'errRm' : '"$1" kaldırılamıyor.', 'errTrash' : 'Çöp kutusuna taşınamıyor.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kaynak dosya(lar) kaldırılamıyor.', 'errExtract' : '"$1" kaynağından dosyalar çıkartılamıyor.', 'errArchive' : 'Arşiv oluşturulamıyor.', 'errArcType' : 'Desteklenmeyen arşiv türü.', 'errNoArchive' : 'Dosya arşiv değil veya desteklenmeyen arşiv türü.', 'errCmdNoSupport' : 'Sunucu bu komutu desteklemiyor.', 'errReplByChild' : '“$1” klasörü içerdiği bir öğe tarafından değiştirilemez.', 'errArcSymlinks' : 'Sembolik bağlantıları içeren arşivlerin açılması güvenlik nedeniyle reddedildi.', // edited 24.06.2012 'errArcMaxSize' : 'Arşiv dosyaları izin verilen maksimum boyutu aştı.', 'errResize' : '"$1" yeniden boyutlandırılamıyor.', 'errResizeDegree' : 'Geçersiz döndürme derecesi.', // added 7.3.2013 'errResizeRotate' : 'Resim döndürülemiyor.', // added 7.3.2013 'errResizeSize' : 'Geçersiz resim boyutu.', // added 7.3.2013 'errResizeNoChange' : 'Resim boyutu değiştirilemez.', // added 7.3.2013 'errUsupportType' : 'Desteklenmeyen dosya türü.', 'errNotUTF8Content' : 'Dosya "$1" UTF-8 olmadığından düzenlenemez.', // added 9.11.2011 'errNetMount' : '"$1" bağlanamadı.', // added 17.04.2012 'errNetMountNoDriver' : 'Desteklenmeyen protokol.', // added 17.04.2012 'errNetMountFailed' : 'Bağlama hatası.', // added 17.04.2012 'errNetMountHostReq' : 'Sunucu gerekli.', // added 18.04.2012 'errSessionExpires' : 'Uzun süre işlem yapılmadığından oturumunuz sonlandı.', 'errCreatingTempDir' : 'Geçici dizin oluşturulamıyor: "$1"', 'errFtpDownloadFile' : 'Dosya FTP: "$1" adresinden indirilemiyor.', 'errFtpUploadFile' : 'Dosya FTP: "$1" adresine yüklenemiyor.', 'errFtpMkdir' : 'FTP: "$1" üzerinde uzak dizin oluşturulamıyor.', 'errArchiveExec' : '"$1" Dosyalarında arşivlenirken hata oluştu.', 'errExtractExec' : '"$1" Dosyaları arşivden çıkartılırken hata oluştu.', 'errNetUnMount' : 'Bağlantı kaldırılamıyor.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8\'e dönüştürülemez.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Klasör yükleyebilmek için daha modern bir tarayıcıya ihtiyacınız var.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" araması zaman aşımına uğradı. Kısmi arama sonuçları listeleniyor.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Yeniden yetkilendirme gerekiyor.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maksimum seçilebilir öge sayısı $1 adettir', // from v2.1.17 added 17.10.2016 'errRestore' : 'Çöp kutusundan geri yüklenemiyor. Geri yükleme notkası belirlenemiyor.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editör bu dosya türünü bulamıyor.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Sunucu tarafında beklenilmeyen bir hata oluştu.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" klasörü boşaltılamıyor.', // from v2.1.25 added 22.6.2017 'moreErrors' : '"$1" veya daha fazla hata', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Tek seferde 1$\'a kadar klasör oluşturabilirsiniz.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Arşiv oluştur', 'cmdback' : 'Geri', 'cmdcopy' : 'Kopyala', 'cmdcut' : 'Kes', 'cmddownload' : 'İndir', 'cmdduplicate' : 'Çoğalt', 'cmdedit' : 'Dosyayı düzenle', 'cmdextract' : 'Arşivden dosyaları çıkart', 'cmdforward' : 'İleri', 'cmdgetfile' : 'Dosyaları seç', 'cmdhelp' : 'Bu yazılım hakkında', 'cmdhome' : 'Anasayfa', 'cmdinfo' : 'Bilgi göster', 'cmdmkdir' : 'Yeni klasör', 'cmdmkdirin' : 'Yeni Klasör / aç', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Yeni dosya', 'cmdopen' : 'Aç', 'cmdpaste' : 'Yapıştır', 'cmdquicklook' : 'Ön izleme', 'cmdreload' : 'Geri Yükle', 'cmdrename' : 'Yeniden Adlandır', 'cmdrm' : 'Sil', 'cmdtrash' : 'Çöpe at', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'geri yükle', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Dosyaları bul', 'cmdup' : 'Üst dizine çık', 'cmdupload' : 'Dosyaları yükle', 'cmdview' : 'Görüntüle', 'cmdresize' : 'Resmi yeniden boyutlandır', 'cmdsort' : 'Sırala', 'cmdnetmount' : 'Bağlı ağ birimi', // added 18.04.2012 'cmdnetunmount': 'Devredışı bırak', // from v2.1 added 30.04.2012 'cmdplaces' : 'Yerlere', // added 28.12.2014 'cmdchmod' : 'Mod değiştir', // from v2.1 added 20.6.2015 'cmdopendir' : 'Klasör aç', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Sütun genişliğini sıfırla', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Tam ekran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Taşı', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Klasörü boşalt', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Geri al', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Yinele', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Tercihler', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tümünü seç', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Seçimi temizle', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Diğerlerini seç', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Yeni Sekmede aç', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ögeyi Gizle', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Kapat', 'btnSave' : 'Kaydet', 'btnRm' : 'Kaldır', 'btnApply' : 'Uygula', 'btnCancel' : 'İptal', 'btnNo' : 'Hayır', 'btnYes' : 'Evet', 'btnMount' : 'Bağla', // added 18.04.2012 'btnApprove': 'Git $1 & onayla', // from v2.1 added 26.04.2012 'btnUnmount': 'Bağlantıyı kes', // from v2.1 added 30.04.2012 'btnConv' : 'Dönüştür', // from v2.1 added 08.04.2014 'btnCwd' : 'Buraya', // from v2.1 added 22.5.2015 'btnVolume' : 'Birim', // from v2.1 added 22.5.2015 'btnAll' : 'Hepsi', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Türü', // from v2.1 added 22.5.2015 'btnFileName':'Dosya adı', // from v2.1 added 22.5.2015 'btnSaveClose': 'Kaydet & Kapat', // from v2.1 added 12.6.2015 'btnBackup' : 'Yedekle', // fromv2.1 added 28.11.2015 'btnRename' : 'Yeniden adlandır', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Yeniden adlandır(Tümü)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Önceki ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Sonraki ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Farklı Kaydet', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Klasör Aç', 'ntffile' : 'Dosya Aç', 'ntfreload' : 'Klasör içeriğini yeniden yükle', 'ntfmkdir' : 'Dizin oluşturuluyor', 'ntfmkfile' : 'Dosyaları oluşturma', 'ntfrm' : 'Dosyaları sil', 'ntfcopy' : 'Dosyaları kopyala', 'ntfmove' : 'Dosyaları taşı', 'ntfprepare' : 'Dosyaları kopyalamaya hazırla', 'ntfrename' : 'Dosyaları yeniden adlandır', 'ntfupload' : 'Dosyalar yükleniyor', 'ntfdownload' : 'Dosyalar indiriliyor', 'ntfsave' : 'Dosyalar kaydediliyor', 'ntfarchive' : 'Arşiv oluşturuluyor', 'ntfextract' : 'Arşivden dosyalar çıkartılıyor', 'ntfsearch' : 'Dosyalar aranıyor', 'ntfresize' : 'Resimler boyutlandırılıyor', 'ntfsmth' : 'İşlem yapılıyor', 'ntfloadimg' : 'Resim yükleniyor', 'ntfnetmount' : 'Ağ birimine bağlanılıyor', // added 18.04.2012 'ntfnetunmount': 'Ağ birimi bağlantısı kesiliyor', // from v2.1 added 30.04.2012 'ntfdim' : 'Resim boyutu alınıyor', // added 20.05.2013 'ntfreaddir' : 'Klasör bilgisi okunuyor', // from v2.1 added 01.07.2013 'ntfurl' : 'Bağlantının URL\'si alınıyor', // from v2.1 added 11.03.2014 'ntfchmod' : 'Dosya modu değiştiriliyor', // from v2.1 added 20.6.2015 'ntfpreupload': 'Yüklenen dosya ismi doğrulanıyor', // from v2.1 added 31.11.2015 'ntfzipdl' : 'İndirilecek dosya oluşturuluyor', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Dosya yolu bilgileri alınıyor', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Yüklenen dosya işleniyor', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Çöp kutusuna atma', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Çöp kutusundan geri yükle', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Hedef klasör kontrol ediliyor', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Önceki işlemi geri alma', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Önceki geri almayı tekrarlama', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'İçeriği kontrol ediniz', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Çöp', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Bilinmiyor', 'Today' : 'Bugün', 'Yesterday' : 'Dün', 'msJan' : 'Oca', 'msFeb' : 'Şub', 'msMar' : 'Mart', 'msApr' : 'Nis', 'msMay' : 'Mayıs', 'msJun' : 'Haz', 'msJul' : 'Tem', 'msAug' : 'Ağu', 'msSep' : 'Eyl', 'msOct' : 'Ekm', 'msNov' : 'Kas', 'msDec' : 'Ara', 'January' : 'Ocak', 'February' : 'Şubat', 'March' : 'Mart', 'April' : 'Nisan', 'May' : 'Mayıs', 'June' : 'Haziran', 'July' : 'Temmuz', 'August' : 'Ağustos', 'September' : 'Eylül', 'October' : 'Ekim', 'November' : 'Kasım', 'December' : 'Aralık', 'Sunday' : 'Pazar', 'Monday' : 'Pazartesi', 'Tuesday' : 'Salı', 'Wednesday' : 'Çarşamba', 'Thursday' : 'Perşembe', 'Friday' : 'Cuma', 'Saturday' : 'Cumartesi', 'Sun' : 'Paz', 'Mon' : 'Pzt', 'Tue' : 'Sal', 'Wed' : 'Çar', 'Thu' : 'Per', 'Fri' : 'Cum', 'Sat' : 'Cmt', /******************************** sort variants ********************************/ 'sortname' : 'Ada göre', 'sortkind' : 'Türe göre', 'sortsize' : 'Boyuta göre', 'sortdate' : 'Tarihe göre', 'sortFoldersFirst' : 'Önce klasörler', 'sortperm' : 'izinlere göre', // from v2.1.13 added 13.06.2016 'sortmode' : 'moduna göre', // from v2.1.13 added 13.06.2016 'sortowner' : 'sahibine göre', // from v2.1.13 added 13.06.2016 'sortgroup' : 'grubuna göre', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Ayrıca ağaç görünümü', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'YeniDosya.txt', // added 10.11.2015 'untitled folder' : 'YeniKlasor', // added 10.11.2015 'Archive' : 'YeniArsiv', // from v2.1 added 10.11.2015 'untitled file' : 'YeniDosya.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Dosya', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Onay gerekli', 'confirmRm' : 'Dosyaları kaldırmak istediğinden emin misin?
Bu işlem geri alınamaz!', 'confirmRepl' : 'Eski dosya yenisi ile değiştirilsin mi?', 'confirmRest' : 'Mevcut öge çöp kutusundaki ögeyle değiştirilsin mi?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 değil
UTF-8\'e dönüştürülsün mü?
Dönüştürme sonrası kaydedebilmek için içeriğin UTF-8 olması gerekir.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Bu dosyanın karakter kodlaması tespit edilemedi. Düzenleme için geçici olarak UTF-8\'e dönüştürülmesi gerekir.
Lütfen bu dosyanın karakter kodlamasını seçin.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Düzenlenmiş içerik.
Değişiklikleri kaydetmek istemiyorsanız son yapılanlar kaybolacak.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Öğeleri çöp kutusuna taşımak istediğinizden emin misiniz?', //from v2.1.24 added 29.4.2017 'confirmMove' : '"$1" değiştirmek istediğinizden emin misiniz?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Tümüne uygula', 'name' : 'İsim', 'size' : 'Boyut', 'perms' : 'Yetkiler', 'modify' : 'Değiştirildi', 'kind' : 'Tür', 'read' : 'oku', 'write' : 'yaz', 'noaccess' : 'erişim yok', 'and' : 've', 'unknown' : 'bilinimiyor', 'selectall' : 'Tüm dosyaları seç', 'selectfiles' : 'Dosya(lar)ı seç', 'selectffile' : 'İlk dosyayı seç', 'selectlfile' : 'Son dosyayı seç', 'viewlist' : 'Liste görünümü', 'viewicons' : 'Simge görünümü', 'viewSmall' : 'Small iconlar', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium iconlar', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large iconlar', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large iconlar', // from v2.1.39 added 22.5.2018 'places' : 'Yerler', 'calc' : 'Hesapla', 'path' : 'Yol', 'aliasfor' : 'Takma adı:', 'locked' : 'Kilitli', 'dim' : 'Ölçüler', 'files' : 'Dosyalar', 'folders' : 'Klasörler', 'items' : 'Nesneler', 'yes' : 'evet', 'no' : 'hayır', 'link' : 'Bağlantı', 'searcresult' : 'Arama sonuçları', 'selected' : 'Seçili öğeler', 'about' : 'Hakkında', 'shortcuts' : 'Kısayollar', 'help' : 'Yardım', 'webfm' : 'Web dosyası yöneticisi', 'ver' : 'Sürüm', 'protocolver' : 'protokol sürümü', 'homepage' : 'Proje Anasayfası', 'docs' : 'Belgeler', 'github' : 'Github\'ta bizi takip edin', 'twitter' : 'Twitter\'da bizi takip edin', 'facebook' : 'Facebook\'ta bize katılın', 'team' : 'Takım', 'chiefdev' : 'geliştirici şefi', 'developer' : 'geliştirici', 'contributor' : 'iştirakçi', 'maintainer' : 'bakıcı', 'translator' : 'çeviri', 'icons' : 'Simgeler', 'dontforget' : 've havlunuzu almayı unutmayın', 'shortcutsof' : 'Kısayollar devre dışı', 'dropFiles' : 'Dosyaları buraya taşı', 'or' : 'veya', 'selectForUpload' : 'Yüklemek için dosyaları seçin', 'moveFiles' : 'Dosyaları taşı', 'copyFiles' : 'Dosyaları kopyala', 'restoreFiles' : 'Öğeleri geri yükle', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Yerlerinden sil', 'aspectRatio' : 'Görünüm oranı', 'scale' : 'Ölçeklendir', 'width' : 'Genişlik', 'height' : 'Yükseklik', 'resize' : 'Boyutlandır', 'crop' : 'Kırp', 'rotate' : 'Döndür', 'rotate-cw' : '90 derece sağa döndür', 'rotate-ccw' : '90 derece sola döndür', 'degree' : 'Derece', 'netMountDialogTitle' : 'Bağlı (Mount) ağ birimi', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Sunucu', // added 18.04.2012 'port' : 'Kapı(Port)', // added 18.04.2012 'user' : 'Kullanıcı', // added 18.04.2012 'pass' : 'Şifre', // added 18.04.2012 'confirmUnmount' : 'Bağlantı kesilsin mi $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Dosyaları tarayıcıdan yapıştır veya bırak', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dosyaları buraya yapıştır veya bırak', // from v2.1 added 07.04.2014 'encoding' : 'Kodlama', // from v2.1 added 19.12.2014 'locale' : 'Yerel', // from v2.1 added 19.12.2014 'searchTarget' : 'Hedef: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Giriş MIME Türüne Göre Arama', // from v2.1 added 22.5.2015 'owner' : 'Sahibi', // from v2.1 added 20.6.2015 'group' : 'Grup', // from v2.1 added 20.6.2015 'other' : 'Diğer', // from v2.1 added 20.6.2015 'execute' : 'Çalıştır', // from v2.1 added 20.6.2015 'perm' : 'Yetki', // from v2.1 added 20.6.2015 'mode' : 'Mod', // from v2.1 added 20.6.2015 'emptyFolder' : 'Klasör boş', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Klasör boş\\A Eklemek için sürükleyin', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Klasör boş\\A Eklemek için basılı tutun', // from v2.1.6 added 30.12.2015 'quality' : 'Kalite', // from v2.1.6 added 5.1.2016 'autoSync' : 'Otomatik senkronizasyon', // from v2.1.6 added 10.1.2016 'moveUp' : 'Yukarı taşı', // from v2.1.6 added 18.1.2016 'getLink' : 'URL bağlantısı alın', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Seçili öğeler ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Klasör kimliği', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Çevrimdışı erişime izin ver', // from v2.1.10 added 3.25.2016 'reAuth' : 'Yeniden kimlik doğrulaması için', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Şimdi yükleniyor...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Çoklu dosya aç', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 dosyalarını açmaya çalışıyorsunuz. Tarayıcıda açmak istediğinizden emin misiniz?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Arama hedefinde eşleşen sonuç bulunamadı.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Dosya düzenleniyor.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 öğe seçtiniz.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Panonuzda $1 öğeniz var.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Artan arama yalnızca geçerli görünümden yapılır.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Eski durumuna getir', // from v2.1.15 added 3.8.2016 'complete' : '$1 tamamlandı', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Durum menüsü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sayfa çevir', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Disk kök dizini', // from v2.1.16 added 16.9.2016 'reset' : 'Sıfırla', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Arkaplan rengi', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Renk seçici', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Izgara', // from v2.1.16 added 4.10.2016 'enabled' : 'Etkin', // from v2.1.16 added 4.10.2016 'disabled' : 'Engelli', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Geçerli görünümde arama sonucu bulunamadı. Arama sonucunu genişletmek için \\APress [Enter] yapın', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Geçerli görünümde ilk harf arama sonuçları boş.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Metin etiketi', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 dakika kaldı', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Seçilen kodlamayla yeniden aç', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Seçilen kodlamayla kaydet', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Klasör seç', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'İlk arama sayfası', // from v2.1.23 added 24.3.2017 'presets' : 'Hazır ayarlar', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'çok fazla öge var çöp kutusuna atılamaz.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Metin alanı(TextArea)', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '"$1" klasörünü boşalt.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" klasöründe öge yok.', // from v2.1.25 added 22.6.2017 'preference' : 'Tercih', // from v2.1.26 added 28.6.2017 'language' : 'Dil ayarları', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Bu tarayıcıda kayıtlı ayarları başlat', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Araç çubuğu ayarları', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 karakter kaldı', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 satır kaldı.', // from v2.1.52 added 16.1.2020 'sum' : 'Toplam', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Kaba dosya boyutu', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fare ile üzerine gelince diyalog öğesi odaklansın', // from v2.1.30 added 2.11.2017 'select' : 'Seç', // from v2.1.30 added 23.11.2017 'selectAction' : 'Dosya seçildiğinde işleme al', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Geçen sefer kullanılan editörle aç', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Zıt seçim', // from v2.1.30 added 25.11.2017 'renameMultiple' : '$1 seçilen öğeleri $2 gibi yeniden adlandırmak istediğinizden emin misiniz?
Bu geri alınamaz!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Yığın adını değiştir', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Sayı', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ön ek kele', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Son ek ekle', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Uzantıyı değiştir', // from v2.1.31 added 8.12.2017 'columnPref' : 'Sütun ayarları (Liste görünümü)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tüm değişiklikler hemen arşive yansıtılacaktır.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Herhangi bir değişiklik, bu birimi kaldırılıncaya kadar yansıtılmayacaktır.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Bu cihaza monte edilen aşağıdaki birim (ler) de bağlanmamıştır. Çıkardığınızdan emin misiniz?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Seçim Bilgisi', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Dosya imza(hash) algoritmaları', // from v2.1.33 added 10.3.2018 'infoItems' : 'öğelerin bilgisi (Seçim Bilgi Paneli)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Çıkmak için tekrar basın.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Araç Çubuğu', // from v2.1.38 added 4.4.2018 'workspace' : 'Çalışma alanı', // from v2.1.38 added 4.4.2018 'dialog' : 'Diyalog', // from v2.1.38 added 4.4.2018 'all' : 'Tümü', // from v2.1.38 added 4.4.2018 'iconSize' : 'İcon Boyutu (İcon Görünümü İçin)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Maksimum düzenleyici penceresini aç', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'API ile dönüşüm şu anda mevcut olmadığından, lütfen web sitesinde dönüştürün.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Dönüştürmeden sonra, dönüştürülen dosyayı kaydetmek için öğe URL\'si veya indirilen bir dosya ile karşıya yüklemeniz gerekir.', //from v2.1.40 added 8.7.2018 'convertOn' : ' $1 site çevrildi', // from v2.1.40 added 10.7.2018 'integrations' : 'Entegrasyonlar', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Bu elFinder aşağıdaki harici hizmetlere entegre edilmiştir. Lütfen kullanmadan önce kullanım koşullarını, gizlilik politikasını vb. Kontrol edin.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Gizli ögeleri aç.', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Gizli ögeleri kapat.', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Gizli ögeleri aç/kapat', // from v2.1.41 added 24.7.2018 'makefileTypes' : '"Yeni dosya" ile etkinleştirilecek dosya türleri', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Text dosyası tipi.', // from v2.1.41 added 7.8.2018 'add' : 'Ekle', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Varsayılan', // from v2.1.43 added 19.10.2018 'description' : 'Açıklama', // from v2.1.43 added 19.10.2018 'website' : 'Websayfası', // from v2.1.43 added 19.10.2018 'author' : 'Yazar', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Lisans', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Bu öğe kaydedilemez. Düzenlemeleri kaybetmemek için PC\'nize aktarmanız gerekir.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dosyayı seçmek için çift tıklayın.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Tam ekran modunu kullan', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Bilinmiyor', 'kindRoot' : 'Sürücü Kök dizini', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Klasör', 'kindSelects' : 'Seçim', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias (Takma ad)', 'kindAliasBroken' : 'Bozuk alias', // applications 'kindApp' : 'Uygulama', 'kindPostscript' : 'Postscript dosyası', 'kindMsOffice' : 'Microsoft Office dosyası', 'kindMsWord' : 'Microsoft Word dosyası', 'kindMsExcel' : 'Microsoft Excel dosyası', 'kindMsPP' : 'Microsoft Powerpoint sunumu', 'kindOO' : 'Open Office dosyası', 'kindAppFlash' : 'Flash uygulaması', 'kindPDF' : 'PDF', 'kindTorrent' : 'Bittorrent dosyası', 'kind7z' : '7z arşivi', 'kindTAR' : 'TAR arşivi', 'kindGZIP' : 'GZIP arşivi', 'kindBZIP' : 'BZIP arşivi', 'kindXZ' : 'XZ arşivi', 'kindZIP' : 'ZIP arşivi', 'kindRAR' : 'RAR arşivi', 'kindJAR' : 'Java JAR dosyası', 'kindTTF' : 'True Type fontu', 'kindOTF' : 'Open Type fontu', 'kindRPM' : 'RPM paketi', // texts 'kindText' : 'Metin dosyası', 'kindTextPlain' : 'Düz metin', 'kindPHP' : 'PHP kodu', 'kindCSS' : 'CSS dosyası', 'kindHTML' : 'HTML dosyası', 'kindJS' : 'Javascript kodu', 'kindRTF' : 'Zengin Metin Belgesi', 'kindC' : 'C kodu', 'kindCHeader' : 'C başlık kodu', 'kindCPP' : 'C++ kodu', 'kindCPPHeader' : 'C++ başlık kodu', 'kindShell' : 'Unix shell scripti', 'kindPython' : 'Python kodu', 'kindJava' : 'Java kodu', 'kindRuby' : 'Ruby kodu', 'kindPerl' : 'Perl scripti', 'kindSQL' : 'SQL kodu', 'kindXML' : 'XML dosyası', 'kindAWK' : 'AWK kodu', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML dosyası', 'kindMarkdown' : 'Markdown dosyası', // added 20.7.2015 // images 'kindImage' : 'Resim', 'kindBMP' : 'BMP dosyası', 'kindJPEG' : 'JPEG dosyası', 'kindGIF' : 'GIF dosyası', 'kindPNG' : 'PNG dosyası', 'kindTIFF' : 'TIFF dosyası', 'kindTGA' : 'TGA dosyası', 'kindPSD' : 'Adobe Photoshop dosyası', 'kindXBITMAP' : 'X bitmap dosyası', 'kindPXM' : 'Pixelmator dosyası', // media 'kindAudio' : 'Ses ortamı', 'kindAudioMPEG' : 'MPEG ses', 'kindAudioMPEG4' : 'MPEG-4 ses', 'kindAudioMIDI' : 'MIDI ses', 'kindAudioOGG' : 'Ogg Vorbis ses', 'kindAudioWAV' : 'WAV ses', 'AudioPlaylist' : 'MP3 listesi', 'kindVideo' : 'Video ortamı', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK ZỦ̉js/i18n/elfinder.es.jsnuW+A/** * Español internacional translation * @author Julián Torres * @author Luis Faura * @author Adrià Vilanova * @author Wilman Marín Duran * @version 2022-02-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.es = { translator : 'Julián Torres <julian.torres@pabernosmatao.com>, Luis Faura <luis@luisfaura.es>, Adrià Vilanova <me@avm99963.tk>, Wilman Marín Duran <fuclo05@hotmail.com>', language : 'Español internacional', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: Feb 28, 2022 03:38 PM fancyDateFormat : '$1 h:i A', // will show like: Hoy 03:38 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 220228-153813 messages : { 'getShareText' : 'Cuota', 'Editor ': 'Editora de código', /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Error desconocido.', 'errUnknownCmd' : 'Comando desconocido.', 'errJqui' : 'Configuración no válida de jQuery UI. Deben estar incluidos los componentes selectable, draggable y droppable.', 'errNode' : 'elFinder necesita crear elementos DOM.', 'errURL' : '¡Configuración no válida de elFinder! La opción URL no está configurada.', 'errAccess' : 'Acceso denegado.', 'errConnect' : 'No se ha podido conectar con el backend.', 'errAbort' : 'Conexión cancelada.', 'errTimeout' : 'Conexión cancelada por timeout.', 'errNotFound' : 'Backend no encontrado.', 'errResponse' : 'Respuesta no válida del backend.', 'errConf' : 'Configuración no válida del backend .', 'errJSON' : 'El módulo PHP JSON no está instalado.', 'errNoVolumes' : 'No hay disponibles volúmenes legibles.', 'errCmdParams' : 'Parámetros no válidos para el comando "$1".', 'errDataNotJSON' : 'los datos no están en formato JSON.', 'errDataEmpty' : 'No hay datos.', 'errCmdReq' : 'La petición del backend necesita un nombre de comando.', 'errOpen' : 'No se puede abrir "$1".', 'errNotFolder' : 'El objeto no es una carpeta.', 'errNotFile' : 'El objeto no es un archivo.', 'errRead' : 'No se puede leer "$1".', 'errWrite' : 'No se puede escribir en "$1".', 'errPerm' : 'Permiso denegado.', 'errLocked' : '"$1" está bloqueado y no puede ser renombrado, movido o borrado.', 'errExists' : 'Ya existe un archivo llamado "$1".', 'errInvName' : 'Nombre de archivo no válido.', 'errInvDirname' : 'Nombre de carpeta inválido.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Carpeta no encontrada.', 'errFileNotFound' : 'Archivo no encontrado.', 'errTrgFolderNotFound' : 'Carpeta de destino "$1" no encontrada.', 'errPopup' : 'El navegador impide abrir nuevas ventanas. Puede activarlo en las opciones del navegador.', 'errMkdir' : 'No se puede crear la carpeta "$1".', 'errMkfile' : 'No se puede crear el archivo "$1".', 'errRename' : 'No se puede renombrar "$1".', 'errCopyFrom' : 'No se permite copiar archivos desde el volumen "$1".', 'errCopyTo' : 'No se permite copiar archivos al volumen "$1".', 'errMkOutLink' : 'No se ha podido crear el enlace fuera del volumen raíz.', // from v2.1 added 03.10.2015 'errUpload' : 'Error en el envío.', // old name - errUploadCommon 'errUploadFile' : 'No se ha podido cargar "$1".', // old name - errUpload 'errUploadNoFiles' : 'No hay archivos para subir.', 'errUploadTotalSize' : 'El tamaño de los datos excede el máximo permitido.', // old name - errMaxSize 'errUploadFileSize' : 'El tamaño del archivo excede el máximo permitido.', // old name - errFileMaxSize 'errUploadMime' : 'Tipo de archivo no permitido.', 'errUploadTransfer' : 'Error al transferir "$1".', 'errUploadTemp' : 'No se ha podido crear el archivo temporal para la subida.', // from v2.1 added 26.09.2015 'errNotReplace' : 'El objeto "$1" ya existe y no puede ser reemplazado por otro con otro tipo.', // new 'errReplace' : 'No se puede reemplazar "$1".', 'errSave' : 'No se puede guardar "$1".', 'errCopy' : 'No se puede copiar "$1".', 'errMove' : 'No se puede mover "$1".', 'errCopyInItself' : 'No se puede copiar "$1" en si mismo.', 'errRm' : 'No se puede borrar "$1".', 'errTrash' : 'No se puede enviar a la papelera.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'No se puede(n) borrar los archivo(s).', 'errExtract' : 'No se puede extraer archivos desde "$1".', 'errArchive' : 'No se puede crear el archivo.', 'errArcType' : 'Tipo de archivo no soportado.', 'errNoArchive' : 'El archivo no es de tipo archivo o es de un tipo no soportado.', 'errCmdNoSupport' : 'El backend no soporta este comando.', 'errReplByChild' : 'La carpeta “$1” no puede ser reemplazada por un elemento contenido en ella.', 'errArcSymlinks' : 'Por razones de seguridad no se pueden descomprimir archivos que contengan enlaces simbólicos.', // edited 24.06.2012 'errArcMaxSize' : 'El tamaño del archivo excede el máximo permitido.', 'errResize' : 'Error al redimensionar "$1".', 'errResizeDegree' : 'Grado de rotación inválido.', // added 7.3.2013 'errResizeRotate' : 'Error al rotar la imagen.', // added 7.3.2013 'errResizeSize' : 'Tamaño de imagen inválido.', // added 7.3.2013 'errResizeNoChange' : 'No se puede cambiar el tamaño de la imagen.', // added 7.3.2013 'errUsupportType' : 'Tipo de archivo no soportado.', 'errNotUTF8Content' : 'El archivo "$1" no está en formato UTF-8 y no puede ser editado.', // added 9.11.2011 'errNetMount' : 'Fallo al montar "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocolo no soportado.', // added 17.04.2012 'errNetMountFailed' : 'Fallo al montar.', // added 17.04.2012 'errNetMountHostReq' : 'Dominio requerido.', // added 18.04.2012 'errSessionExpires' : 'La sesión ha expirado por inactividad', 'errCreatingTempDir' : 'No se ha podido crear al directorio temporal: "$1"', 'errFtpDownloadFile' : 'No se ha podido descargar el archivo desde FTP: "$1"', 'errFtpUploadFile' : 'No se ha podido cargar el archivo a FTP: "$1"', 'errFtpMkdir' : 'No se ha podido crear el directorio remoto en FTP: "$1"', 'errArchiveExec' : 'Se ha producido un error durante el archivo: "$1"', 'errExtractExec' : 'Se ha producido un error durante la extracción de archivos: "$1"', 'errNetUnMount' : 'Imposible montar', // from v2.1 added 30.04.2012 'errConvUTF8' : 'No es convertible a UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prueba con un navegador moderno, si quieres subir la carpeta completa.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Se agotó el tiempo de espera buscando "$1". Los resultados de búsqueda son parciales.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Se requiere autorizar de nuevo.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Número máximo de elementos seleccionables es $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'No se puede restaurar desde la papelera. No se puede identificar el destino de restauración.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor no encontrado para este tipo de archivo.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error ocurrido en el lado del servidor.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'No es posible vaciar la carpeta "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Hay $1 más errores.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Puede crear carpetas de hasta $1 a la vez.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Crear archivo', 'cmdback' : 'Atrás', 'cmdcopy' : 'Copiar', 'cmdcut' : 'Cortar', 'cmddownload' : 'Descargar', 'cmdduplicate' : 'Duplicar', 'cmdedit' : 'Editar archivo', 'cmdextract' : 'Extraer elementos del archivo', 'cmdforward' : 'Adelante', 'cmdgetfile' : 'Seleccionar archivos', 'cmdhelp' : 'Acerca de este software', 'cmdhome' : 'Inicio', 'cmdinfo' : 'Obtener información', 'cmdmkdir' : 'Nueva carpeta', 'cmdmkdirin' : 'En una nueva carpeta', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nueva archivo', 'cmdopen' : 'Abrir', 'cmdpaste' : 'Pegar', 'cmdquicklook' : 'Previsualizar', 'cmdreload' : 'Recargar', 'cmdrename' : 'Cambiar nombre', 'cmdrm' : 'Eliminar', 'cmdtrash' : 'Enviar a la papelera', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurar', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Buscar archivos', 'cmdup' : 'Ir a la carpeta raíz', 'cmdupload' : 'Subir archivos', 'cmdview' : 'Ver', 'cmdresize' : 'Redimensionar y rotar', 'cmdsort' : 'Ordenar', 'cmdnetmount' : 'Montar volumen en red', // added 18.04.2012 'cmdnetunmount': 'Desmontar', // from v2.1 added 30.04.2012 'cmdplaces' : 'A Lugares', // added 28.12.2014 'cmdchmod' : 'Cambiar modo', // from v2.1 added 20.6.2015 'cmdopendir' : 'Abrir una carpeta', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Restablecer ancho de columna', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Pantalla completa', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mover', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vaciar la carpeta', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Deshacer', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Rehacer', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencias', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Seleccionar todo', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Seleccionar ninguno', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertir selección', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Abrir en nueva ventana', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ocultar (Preferencia)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Cerrar', 'btnSave' : 'Guardar', 'btnRm' : 'Eliminar', 'btnApply' : 'Aplicar', 'btnCancel' : 'Cancelar', 'btnNo' : 'No', 'btnYes' : 'Sí', 'btnMount' : 'Montar', // added 18.04.2012 'btnApprove': 'Ir a $1 y aprobar', // from v2.1 added 26.04.2012 'btnUnmount': 'Desmontar', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Aquí', // from v2.1 added 22.5.2015 'btnVolume' : 'Volumen', // from v2.1 added 22.5.2015 'btnAll' : 'Todos', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nombre de archivo', // from v2.1 added 22.5.2015 'btnSaveClose': 'Guardar y cerrar', // from v2.1 added 12.6.2015 'btnBackup' : 'Copia de seguridad', // fromv2.1 added 28.11.2015 'btnRename' : 'Renombrar', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renombrar(Todo)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Ant ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Sig ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Guardar como', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Abrir carpeta', 'ntffile' : 'Abrir archivo', 'ntfreload' : 'Actualizar contenido de la carpeta', 'ntfmkdir' : 'Creando directorio', 'ntfmkfile' : 'Creando archivos', 'ntfrm' : 'Eliminando archivos', 'ntfcopy' : 'Copiar archivos', 'ntfmove' : 'Mover archivos', 'ntfprepare' : 'Preparar copia de archivos', 'ntfrename' : 'Renombrar archivos', 'ntfupload' : 'Subiendo archivos', 'ntfdownload' : 'Descargando archivos', 'ntfsave' : 'Guardar archivos', 'ntfarchive' : 'Creando archivo', 'ntfextract' : 'Extrayendo elementos del archivo', 'ntfsearch' : 'Buscando archivos', 'ntfresize' : 'Redimensionando imágenes', 'ntfsmth' : 'Haciendo algo', 'ntfloadimg' : 'Cargando imagen', 'ntfnetmount' : 'Montando volumen en red', // added 18.04.2012 'ntfnetunmount': 'Desmontando volumen en red', // from v2.1 added 30.04.2012 'ntfdim' : 'Adquiriendo tamaño de imagen', // added 20.05.2013 'ntfreaddir' : 'Leyendo información de la carpeta', // from v2.1 added 01.07.2013 'ntfurl' : 'Obteniendo URL del enlace', // from v2.1 added 11.03.2014 'ntfchmod' : 'Cambiando el modo de archivo', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verificando nombre del archivo subido', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creando un archivo para descargar', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obteniendo información de la ruta', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Procesando el archivo cargado', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Enviando a la papelera', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurando desde la papelera', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Comprobando carpeta de destino', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Deshaciendo operación previa', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Rehaciendo previo deshacer', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Comprobación de contenidos', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Papelera', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'desconocida', 'Today' : 'Hoy', 'Yesterday' : 'Ayer', 'msJan' : 'Ene', 'msFeb' : 'Feb', 'msMar' : 'mar', 'msApr' : 'Abr', 'msMay' : 'May', 'msJun' : 'jun', 'msJul' : 'Jul', 'msAug' : 'Ago', 'msSep' : 'sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dic', 'January' : 'Enero', 'February' : 'Febrero', 'March' : 'Marzo', 'April' : 'Abril', 'May' : 'Mayo', 'June' : 'Junio', 'July' : 'Julio', 'August' : 'Agosto', 'September' : 'Septiembre', 'October' : 'Octubre', 'November' : 'Noviembre', 'December' : 'Diciembre', 'Sunday' : 'Domingo', 'Monday' : 'Lunes', 'Tuesday' : 'Martes', 'Wednesday' : 'Miércoles', 'Thursday' : 'Jueves', 'Friday' : 'Viernes', 'Saturday' : 'Sábado', 'Sun' : 'Dom', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mie', 'Thu' : 'Jue', 'Fri' : 'Vie', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'por nombre', 'sortkind' : 'por tipo', 'sortsize' : 'por tamaño', 'sortdate' : 'por fecha', 'sortFoldersFirst' : 'Las carpetas primero', 'sortperm' : 'por permiso', // from v2.1.13 added 13.06.2016 'sortmode' : 'por modo', // from v2.1.13 added 13.06.2016 'sortowner' : 'por propietario', // from v2.1.13 added 13.06.2016 'sortgroup' : 'por grupo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'También árbol de directorios', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NuevoArchivo.txt', // added 10.11.2015 'untitled folder' : 'NuevaCarpeta', // added 10.11.2015 'Archive' : 'NuevoArchivo', // from v2.1 added 10.11.2015 'untitled file' : 'Archivo nuevo.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Archivar', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Se necesita confirmación', 'confirmRm' : '¿Está seguro de querer eliminar archivos?
¡Esto no se puede deshacer!', 'confirmRepl' : '¿Reemplazar el antiguo archivo con el nuevo?', 'confirmRest' : '¿Reemplazar elemento existente con el elemento en la papelera?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'No está en UTF-8
Convertir a UTF-8?
Los contenidos se guardarán en UTF-8 tras la conversión.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Codificación de caracteres de este archivo no pudo ser detectada. Es necesario convertir temporalmente a UTF-8 para editarlo.
Por favor, seleccione la codificación de caracteres de este archivo.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ha sido modificado.
Perderás los cambios si no los guardas.', // from v2.1 added 15.7.2015 'confirmTrash' : '¿Estás seguro que quieres mover los elementos a la papelera?', //from v2.1.24 added 29.4.2017 'confirmMove' : '¿Estás segura de que quieres mover elementos a "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Aplicar a todo', 'name' : 'Nombre', 'size' : 'Tamaño', 'perms' : 'Permisos', 'modify' : 'Modificado', 'kind' : 'Tipo', 'read' : 'lectura', 'write' : 'escritura', 'noaccess' : 'sin acceso', 'and' : 'y', 'unknown' : 'desconocido', 'selectall' : 'Seleccionar todos los archivos', 'selectfiles' : 'Seleccionar archivo(s)', 'selectffile' : 'Seleccionar primer archivo', 'selectlfile' : 'Seleccionar último archivo', 'viewlist' : 'ver como lista', 'viewicons' : 'Ver como iconos', 'viewSmall' : 'Iconos pequeños', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Iconos medianos', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Iconos grandes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Iconos extra grandes', // from v2.1.39 added 22.5.2018 'places' : 'Lugares', 'calc' : 'Calcular', 'path' : 'Ruta', 'aliasfor' : 'Alias para', 'locked' : 'Bloqueado', 'dim' : 'Dimensiones', 'files' : 'Archivos', 'folders' : 'Carpetas', 'items' : 'Elementos', 'yes' : 'sí', 'no' : 'no', 'link' : 'Enlace', 'searcresult' : 'Resultados de la búsqueda', 'selected' : 'elementos seleccionados', 'about' : 'Acerca', 'shortcuts' : 'Accesos directos', 'help' : 'Ayuda', 'webfm' : 'Administrador de archivos web', 'ver' : 'Versión', 'protocolver' : 'versión del protocolo', 'homepage' : 'Inicio', 'docs' : 'Documentación', 'github' : 'Bifúrcanos en Github', 'twitter' : 'Síguenos en Twitter', 'facebook' : 'Únete a nosotros en Facebook', 'team' : 'Equipo', 'chiefdev' : 'desarrollador jefe', 'developer' : 'desarrollador', 'contributor' : 'contribuyente', 'maintainer' : 'mantenedor', 'translator' : 'traductor', 'icons' : 'Iconos', 'dontforget' : 'y no olvide traer su toalla', 'shortcutsof' : 'Accesos directos desactivados', 'dropFiles' : 'Arrastre archivos aquí', 'or' : 'o', 'selectForUpload' : 'Seleccione archivos para subir', 'moveFiles' : 'Mover archivos', 'copyFiles' : 'Copiar archivos', 'restoreFiles' : 'Restaurar elementos', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Eliminar en sus ubicaciones', 'aspectRatio' : 'Relación de aspecto', 'scale' : 'Escala', 'width' : 'Ancho', 'height' : 'Alto', 'resize' : 'Redimensionar', 'crop' : 'Recortar', 'rotate' : 'Rotar', 'rotate-cw' : 'Rotar 90 grados en sentido horario', 'rotate-ccw' : 'Rotar 90 grados en sentido anti-horario', 'degree' : '°', 'netMountDialogTitle' : 'Montar volumen en red', // added 18.04.2012 'protocol' : 'Protocolo', // added 18.04.2012 'host' : 'Dominio', // added 18.04.2012 'port' : 'Puerto', // added 18.04.2012 'user' : 'Usuario', // added 18.04.2012 'pass' : 'Contraseña', // added 18.04.2012 'confirmUnmount' : '¿Desmontar $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Arrastra o pega archivos del navegador', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Arrastra o pega enlaces URL aquí', // from v2.1 added 07.04.2014 'encoding' : 'Codificando', // from v2.1 added 19.12.2014 'locale' : 'Local', // from v2.1 added 19.12.2014 'searchTarget' : 'Destino: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Buscar entrada por tipo MIME', // from v2.1 added 22.5.2015 'owner' : 'Propietario', // from v2.1 added 20.6.2015 'group' : 'Grupo', // from v2.1 added 20.6.2015 'other' : 'Otro', // from v2.1 added 20.6.2015 'execute' : 'Ejecutar', // from v2.1 added 20.6.2015 'perm' : 'Permiso', // from v2.1 added 20.6.2015 'mode' : 'Modo', // from v2.1 added 20.6.2015 'emptyFolder' : 'La carpeta está vacía', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'La carpeta está vacía\\A Arrastrar para añadir elementos', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'La carpeta está vacía\\A Presiona durante un rato para añadir elementos', // from v2.1.6 added 30.12.2015 'quality' : 'Calidad', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sincronización automática', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mover arriba', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtener enlace', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Elementos seleccionados ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID carpeta', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permitir acceso sin conexión', // from v2.1.10 added 3.25.2016 'reAuth' : 'Para volver a autenticarse', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Cargando ahora...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Abrir múltiples archivos', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Estás tratando de abrir los $1 archivos. ¿Estás seguro que quieres abrir en el navegador?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'No se encontraron resultados en el objetivo de búsqueda.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Está editando un archivo.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Has seleccionado $1 elementos.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Posees $1 elementos en el portapapeles.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'La búsqueda incremental solo se realiza desde la vista actual.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstanciar', // from v2.1.15 added 3.8.2016 'complete' : '$1 completo', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menú contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Cambio de página', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Raíces del volumen', // from v2.1.16 added 16.9.2016 'reset' : 'Reiniciar', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Color de fondo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selector de color', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Cuadricula', // from v2.1.16 added 4.10.2016 'enabled' : 'Habilitado', // from v2.1.16 added 4.10.2016 'disabled' : 'Deshabilitado', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Los resultados de la búsqueda están vacíos en la vista actual. \\ APulse [Intro] para expandir el objetivo de búsqueda.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'La primera letra de los resultados de búsqueda está vacía en la vista actual.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etiqueta de texto', // from v2.1.17 added 13.10.2016 'minsLeft' : 'Falta $1 minuto(s)', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Abrir nuevamente con la codificación seleccionada', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Guardar con la codificación seleccionada', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Seleccionar carpeta', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Primera letra de búsqueda', // from v2.1.23 added 24.3.2017 'presets' : 'Preestablecidos', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Son demasiados elementos, por lo que no puede enviarse a la papelera.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Área de texto', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vaciar la carpeta "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'No hay elementos en la carpeta "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencia', // from v2.1.26 added 28.6.2017 'language' : 'Lenguaje', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializa la configuración guardada en este navegador', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Configuración de la barra de herramientas', // from v2.1.27 added 2.8.2017 'charsLeft' : '...falta $1 caracteres.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... Quedan $1 líneas.', // from v2.1.52 added 16.1.2020 'sum' : 'Suma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Tamaño de archivo aproximado', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Centrado en el elemento de diálogo con \'mouseover\'', // from v2.1.30 added 2.11.2017 'select' : 'Seleccionar', // from v2.1.30 added 23.11.2017 'selectAction' : 'Acción cuando selecciona un archivo', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Abrir con el editor utilizado la última vez', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invertir selección', // from v2.1.30 added 25.11.2017 'renameMultiple' : '¿Estás seguro que quieres renombrar $1 elementos seleccionados como $2?
¡Esto no puede ser deshecho!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Cambiar el nombre del lote', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Número', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Añadir prefijo', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Añadir sufijo', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Cambiar extensión', // from v2.1.31 added 8.12.2017 'columnPref' : 'Configuración de columnas (Vista de lista)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Todos los cambios se reflejarán inmediatamente en el archivo.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Cualquier cambio no se reflejará hasta que no se desmonte este volumen.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Los siguientes volúmenes montados en este volumen también se desmontaron. ¿Estás seguro de desmontarlo?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Información de la selección', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmos para mostrar el hash de archivos', // from v2.1.33 added 10.3.2018 'infoItems' : 'Elementos de información (Panel de información de selección)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Presiona de nuevo para salir.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra de herramienta', // from v2.1.38 added 4.4.2018 'workspace' : 'Espacio de trabajo', // from v2.1.38 added 4.4.2018 'dialog' : 'Diálogo', // from v2.1.38 added 4.4.2018 'all' : 'Todo', // from v2.1.38 added 4.4.2018 'iconSize' : 'Tamaño de icono (vista de iconos)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Abra la ventana del editor maximizado', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Debido a que la conversión por API no está disponible actualmente, realice la conversión en el sitio web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Después de la conversión, debe cargar la URL del elemento o un archivo descargado para guardar el archivo convertido.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convertir en el sitio de $1', // from v2.1.40 added 10.7.2018 'integrations' : 'integraciones', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Este elFinder tiene integrados los siguientes servicios externos. Consulte los términos de uso, la política de privacidad, etc. antes de usarlo.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostrar elementos ocultos', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ocultar elementos ocultos', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Mostrar/Ocultar elementos ocultos', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipos de archivos para habilitar con "Nuevo archivo"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipo de archivo de texto', // from v2.1.41 added 7.8.2018 'add' : 'Agregar', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Por defecto', // from v2.1.43 added 19.10.2018 'description' : 'Descripción', // from v2.1.43 added 19.10.2018 'website' : 'Sitio web', // from v2.1.43 added 19.10.2018 'author' : 'Autora', // from v2.1.43 added 19.10.2018 'email' : 'Correo electrónico', // from v2.1.43 added 19.10.2018 'license' : 'Licencia', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Este elemento no se puede guardar. Para evitar perder las ediciones, debe exportarlas a su PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Haga doble clic en el archivo para seleccionarlo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Usar el modo de pantalla completa', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconocido', 'kindRoot' : 'Raíces del volumen', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Carpeta', 'kindSelects' : 'Selecciones', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias roto', // applications 'kindApp' : 'Aplicación', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Presentación Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Aplicación Flash', 'kindPDF' : 'Documento PDF', 'kindTorrent' : 'Archivo Bittorrent', 'kind7z' : 'Archivo 7z', 'kindTAR' : 'Archivo TAR', 'kindGZIP' : 'Archivo GZIP', 'kindBZIP' : 'Archivo BZIP', 'kindXZ' : 'Archivo XZ', 'kindZIP' : 'Archivo ZIP', 'kindRAR' : 'Archivo RAR', 'kindJAR' : 'Archivo Java JAR', 'kindTTF' : 'Fuente True Type', 'kindOTF' : 'Fuente Open Type', 'kindRPM' : 'Paquete RPM', // texts 'kindText' : 'Documento de texto', 'kindTextPlain' : 'Texto plano', 'kindPHP' : 'Código PHP', 'kindCSS' : 'Hoja de estilos CSS', 'kindHTML' : 'Documento HTML', 'kindJS' : 'Código Javascript', 'kindRTF' : 'Documento RTF', 'kindC' : 'Código C', 'kindCHeader' : 'Código C cabeceras', 'kindCPP' : 'Código C++', 'kindCPPHeader' : 'Código C++ cabeceras', 'kindShell' : 'Script de terminal de Unix', 'kindPython' : 'Código Python', 'kindJava' : 'Código Java', 'kindRuby' : 'Código Ruby', 'kindPerl' : 'Código Perl', 'kindSQL' : 'Código QL', 'kindXML' : 'Documento XML', 'kindAWK' : 'Código AWK', 'kindCSV' : 'Documento CSV (valores separados por comas)', 'kindDOCBOOK' : 'Documento Docbook XML', 'kindMarkdown' : 'Texto Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagen', 'kindBMP' : 'Imagen BMP', 'kindJPEG' : 'Imagen JPEG', 'kindGIF' : 'Imagen GIF', 'kindPNG' : 'Imagen PNG', 'kindTIFF' : 'Imagen TIFF', 'kindTGA' : 'Imagen TGA', 'kindPSD' : 'Imagen Adobe Photoshop', 'kindXBITMAP' : 'Imagen X bitmap', 'kindPXM' : 'Imagen Pixelmator', // media 'kindAudio' : 'Archivo de audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Lista de reproducción MP3', 'kindVideo' : 'Archivo de vídeo', 'kindVideoDV' : 'Película DV', 'kindVideoMPEG' : 'Película MPEG', 'kindVideoMPEG4' : 'Película MPEG-4', 'kindVideoAVI' : 'Película AVI', 'kindVideoMOV' : 'Película Quick Time', 'kindVideoWM' : 'Película Windows Media', 'kindVideoFlash' : 'Película Flash', 'kindVideoMKV' : 'Película Matroska MKV', 'kindVideoOGG' : 'Película Ogg' } }; }));PK Zrrjs/i18n/elfinder.zh_TW.jsnuW+A/** * Traditional Chinese translation * @author Yuwei Chuang * @author Danny Lin * @author TCC * @author Rick Jiang * @version 2021-02-23 */ (function (root, factory) { if (typeof define === "function" && define.amd) { define(["elfinder"], factory); } else if (typeof exports !== "undefined") { module.exports = factory(require("elfinder")); } else { factory(root.elFinder); } })(this, function (elFinder) { elFinder.prototype.i18.zh_TW = { translator: "Yuwei Chuang <ywchuang.tw@gmail.com>, Danny Lin <danny0838@gmail.com>, TCC <john987john987@gmail.com>, Rick Jiang <rick.jiang@aol.com>", language: "正體中文", direction: "ltr", dateFormat: "Y/m/d H:i", // Mar 13, 2012 05:27 PM fancyDateFormat: "$1 H:i", // will produce smth like: Today 12:25 PM nonameDateFormat: "ymd-His", // to apply if upload file is noname: 120513172700 messages: { 'getShareText' : '分享', 'Editor ': '代碼編輯器', /********************************** errors **********************************/ error: "錯誤", errUnknown: "未知的錯誤.", errUnknownCmd: "未知的指令.", errJqui: "無效的 jQuery UI 設定. 必須包含 Selectable, draggable 以及 droppable 元件.", errNode: "elFinder 需要能建立 DOM 元素.", errURL: "無效的 elFinder 設定! 尚未設定 URL 選項.", errAccess: "拒絕存取.", errConnect: "無法連線至後端.", errAbort: "連線中斷.", errTimeout: "連線逾時.", errNotFound: "後端不存在.", errResponse: "無效的後端回復.", errConf: "無效的後端設定.", errJSON: "未安裝 PHP JSON 模組.", errNoVolumes: "無可讀取的 volumes.", errCmdParams: '無效的參數, 指令: "$1".', errDataNotJSON: "資料不是 JSON 格式.", errDataEmpty: "沒有資料.", errCmdReq: "後端請求需要命令名稱.", errOpen: '無法開啟 "$1".', errNotFolder: "非資料夾.", errNotFile: "非檔案.", errRead: '無法讀取 "$1".', errWrite: '無法寫入 "$1".', errPerm: "無權限.", errLocked: '"$1" 被鎖定,不能重新命名, 移動或删除.', errExists: '檔案 "$1" 已經存在了.', errInvName: "無效的檔案名稱.", errInvDirname: "無效的資料夾名稱", // from v2.1.24 added 12.4.2017 errFolderNotFound: "未找到資料夾.", errFileNotFound: "未找到檔案.", errTrgFolderNotFound: '未找到目標資料夾 "$1".', errPopup: "連覽器攔截了彈跳視窗. 請在瀏覽器選項允許彈跳視窗.", errMkdir: '不能建立資料夾 "$1".', errMkfile: '不能建立檔案 "$1".', errRename: '不能重新命名 "$1".', errCopyFrom: '不允許從磁碟 "$1" 複製.', errCopyTo: '不允複製到磁碟 "$1".', errMkOutLink: "無法建立連結到磁碟根目錄外面.", // from v2.1 added 03.10.2015 errUpload: "上傳錯誤.", // old name - errUploadCommon errUploadFile: '無法上傳 "$1".', // old name - errUpload errUploadNoFiles: "未找到要上傳的檔案.", errUploadTotalSize: "資料超過了最大允許大小.", // old name - errMaxSize errUploadFileSize: "檔案超過了最大允許大小.", // old name - errFileMaxSize errUploadMime: "不允許的檔案類型.", errUploadTransfer: '"$1" 傳輸錯誤.', errUploadTemp: "無法建立暫存檔以供上傳.", // from v2.1 added 26.09.2015 errNotReplace: '"$1" 已經存在此位置, 不能被其他的替换.', // new errReplace: '無法替换 "$1".', errSave: '無法保存 "$1".', errCopy: '無法複製 "$1".', errMove: '無法移動 "$1".', errCopyInItself: '無法移動 "$1" 到原有位置.', errRm: '無法删除 "$1".', errTrash: "無法丟入垃圾桶", // from v2.1.24 added 30.4.2017 errRmSrc: "無法删除來源檔案.", errExtract: '無法從 "$1" 解壓縮檔案.', errArchive: "無法建立壓縮膽.", errArcType: "不支援的壓縮格式.", errNoArchive: "檔案不是壓縮檔, 或者不支援該壓缩格式.", errCmdNoSupport: "後端不支援該指令.", errReplByChild: "資料夾 “$1” 不能被它所包含的檔案(資料夾)替换.", errArcSymlinks: "由於安全考量,拒絕解壓縮符號連結或含有不允許檔名的檔案.", // edited 24.06.2012 errArcMaxSize: "待壓縮檔案的大小超出上限.", errResize: '無法重新調整大小 "$1".', errResizeDegree: "無效的旋轉角度.", // added 7.3.2013 errResizeRotate: "無法旋轉圖片.", // added 7.3.2013 errResizeSize: "無效的圖片大小.", // added 7.3.2013 errResizeNoChange: "圖片大小未更改.", // added 7.3.2013 errUsupportType: "不支援的檔案格式.", errNotUTF8Content: '檔案 "$1" 不是 UTF-8 格式, 不能編輯.', // added 9.11.2011 errNetMount: '無法掛載 "$1".', // added 17.04.2012 errNetMountNoDriver: "不支援該通訊協議.", // added 17.04.2012 errNetMountFailed: "掛載失敗.", // added 17.04.2012 errNetMountHostReq: "需要指定主機位置.", // added 18.04.2012 errSessionExpires: "由於過久無活動, session 已過期.", errCreatingTempDir: '無法建立暫時目錄: "$1"', errFtpDownloadFile: '無法從 FTP 下載檔案: "$1"', errFtpUploadFile: '無法上傳檔案到 FTP: "$1"', errFtpMkdir: '無法在 FTP 建立遠端目錄: "$1"', errArchiveExec: '壓縮檔案時發生錯誤: "$1"', errExtractExec: '解壓縮檔案時發生錯誤: "$1"', errNetUnMount: "無法卸載", // from v2.1 added 30.04.2012 errConvUTF8: "無法轉換為 UTF-8", // from v2.1 added 08.04.2014 errFolderUpload: "如要上傳這個資料夾, 請嘗試 Google Chrome.", // from v2.1 added 26.6.2015 errSearchTimeout: '搜尋 "$1" 逾時. 只列出部分搜尋結果.', // from v2.1 added 12.1.2016 errReauthRequire: "需要重新驗證權限.", // from v2.1.10 added 24.3.2016 errMaxTargets: "最多可選擇 $1 個物件.", // from v2.1.17 added 17.10.2016 errRestore: "無法從垃圾桶恢復。 無法識別恢復目的地。", // from v2.1.24 added 3.5.2017 errEditorNotFound: "編輯器找不到此文件類型。", // from v2.1.25 added 23.5.2017 errServerError: "服務器發生錯誤。", // from v2.1.25 added 16.6.2017 errEmpty: '無法清空"$1"文件夾', // from v2.1.25 added 22.6.2017 moreErrors: "發生 $1 個錯誤.", // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ cmdarchive: "建立壓縮檔", cmdback: "後退", cmdcopy: "複製", cmdcut: "剪下", cmddownload: "下載", cmdduplicate: "建立副本", cmdedit: "編輯檔案", cmdextract: "從壓縮檔解壓縮", cmdforward: "前進", cmdgetfile: "選擇檔案", cmdhelp: "關於本軟體", cmdhome: "首頁", cmdinfo: "查看關於", cmdmkdir: "建立資料夾", cmdmkdirin: "移入新資料夾", // from v2.1.7 added 19.2.2016 cmdmkfile: "建立文檔", cmdopen: "開啟", cmdpaste: "貼上", cmdquicklook: "預覽", cmdreload: "更新", cmdrename: "重新命名", cmdrm: "删除", cmdtrash: "丟到垃圾桶", //from v2.1.24 added 29.4.2017 cmdrestore: "恢復", //from v2.1.24 added 3.5.2017 cmdsearch: "搜尋檔案", cmdup: "移到上一層資料夾", cmdupload: "上傳檔案", cmdview: "檢視", cmdresize: "調整大小及旋轉", cmdsort: "排序", cmdnetmount: "掛載網路磁碟", // added 18.04.2012 cmdnetunmount: "卸載", // from v2.1 added 30.04.2012 cmdplaces: '加到"位置"', // added 28.12.2014 cmdchmod: "更改權限", // from v2.1 added 20.6.2015 cmdopendir: "開啟資料夾", // from v2.1 added 13.1.2016 cmdcolwidth: "重設欄寬", // from v2.1.13 added 12.06.2016 cmdfullscreen: "全螢幕", // from v2.1.15 added 03.08.2016 cmdmove: "移動", // from v2.1.15 added 21.08.2016 cmdempty: "清空資料夾", // from v2.1.25 added 22.06.2017 cmdundo: "上一步", // from v2.1.27 added 31.07.2017 cmdredo: "下一步", // from v2.1.27 added 31.07.2017 cmdpreference: "優先權", // from v2.1.27 added 03.08.2017 cmdselectall: "全選", // from v2.1.28 added 15.08.2017 cmdselectnone: "取消選取", // from v2.1.28 added 15.08.2017 cmdselectinvert: "反向選取", // from v2.1.28 added 15.08.2017 cmdopennew: "在新視窗開啟", // from v2.1.38 added 3.4.2018 cmdhide: "隱藏(偏好)", // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ btnClose: "關閉", btnSave: "儲存", btnRm: "删除", btnApply: "使用", btnCancel: "取消", btnNo: "否", btnYes: "是", btnMount: "掛載", // added 18.04.2012 btnApprove: "移到 $1 並批准", // from v2.1 added 26.04.2012 btnUnmount: "卸載", // from v2.1 added 30.04.2012 btnConv: "轉換", // from v2.1 added 08.04.2014 btnCwd: "這裡", // from v2.1 added 22.5.2015 btnVolume: "磁碟", // from v2.1 added 22.5.2015 btnAll: "全部", // from v2.1 added 22.5.2015 btnMime: "MIME 類型", // from v2.1 added 22.5.2015 btnFileName: "檔名", // from v2.1 added 22.5.2015 btnSaveClose: "儲存並關閉", // from v2.1 added 12.6.2015 btnBackup: "備份", // fromv2.1 added 28.11.2015 btnRename: "重新命名", // from v2.1.24 added 6.4.2017 btnRenameAll: "重新命名全部", // from v2.1.24 added 6.4.2017 btnPrevious: "上一頁 ($1/$2)", // from v2.1.24 added 11.5.2017 btnNext: "下一頁 ($1/$2)", // from v2.1.24 added 11.5.2017 btnSaveAs: "另存新檔", // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ ntfopen: "開啟資料夾", ntffile: "開啟檔案", ntfreload: "更新資料夾内容", ntfmkdir: "建立資料夾", ntfmkfile: "建立檔案", ntfrm: "删除檔案", ntfcopy: "複製檔案", ntfmove: "移動檔案", ntfprepare: "準備複製檔案", ntfrename: "重新命名檔案", ntfupload: "上傳檔案", ntfdownload: "下載檔案", ntfsave: "儲存檔案", ntfarchive: "建立壓縮檔", ntfextract: "從壓縮檔解壓縮", ntfsearch: "搜尋檔案", ntfresize: "正在更改圖片大小", ntfsmth: "正在忙 >_<", ntfloadimg: "正在讀取圖片", ntfnetmount: "正在掛載網路磁碟", // added 18.04.2012 ntfnetunmount: "正在卸載網路磁碟", // from v2.1 added 30.04.2012 ntfdim: "取得圖片大小", // added 20.05.2013 ntfreaddir: "正在讀取資料夾資訊", // from v2.1 added 01.07.2013 ntfurl: "正在取得連結 URL", // from v2.1 added 11.03.2014 ntfchmod: "更改檔案模式", // from v2.1 added 20.6.2015 ntfpreupload: "正在驗證上傳檔案名稱", // from v2.1 added 31.11.2015 ntfzipdl: "正在建立縮檔以供下載", // from v2.1.7 added 23.1.2016 ntfparents: "正在取得路徑資訊", // from v2.1.17 added 2.11.2016 ntfchunkmerge: "正在處理上傳的檔案", // from v2.1.17 added 2.11.2016 ntftrash: "正在丟到垃圾桶", // from v2.1.24 added 2.5.2017 ntfrestore: "正從垃圾桶恢復", // from v2.1.24 added 3.5.2017 ntfchkdir: "正在檢查目標資料夾", // from v2.1.24 added 3.5.2017 ntfundo: "正在撤銷上一步動作", // from v2.1.27 added 31.07.2017 ntfredo: "正在重做上一步動作", // from v2.1.27 added 31.07.2017 ntfchkcontent: "正在確認內容", // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ volume_Trash: "垃圾桶", //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ dateUnknown: "未知", Today: "今天", Yesterday: "昨天", msJan: "一月", msFeb: "二月", msMar: "三月", msApr: "四月", msMay: "五月", msJun: "六月", msJul: "七月", msAug: "八月", msSep: "九月", msOct: "十月", msNov: "十一月", msDec: "十二月", January: "一月", February: "二月", March: "三月", April: "四月", May: "五月", June: "六月", July: "七月", August: "八月", September: "九月", October: "十月", November: "十一月", December: "十二月", Sunday: "星期日", Monday: "星期一", Tuesday: "星期二", Wednesday: "星期三", Thursday: "星期四", Friday: "星期五", Saturday: "星期六", Sun: "周日", Mon: "周一", Tue: "周二", Wed: "周三", Thu: "周四", Fri: "周五", Sat: "周六", /******************************** sort variants ********************************/ sortname: "按名稱", sortkind: "按類型", sortsize: "按大小", sortdate: "按日期", sortFoldersFirst: "資料夾置前", sortperm: "按權限", // from v2.1.13 added 13.06.2016 sortmode: "按模式", // from v2.1.13 added 13.06.2016 sortowner: "按擁有者", // from v2.1.13 added 13.06.2016 sortgroup: "按群組", // from v2.1.13 added 13.06.2016 sortAlsoTreeview: "也套用於樹狀圖", // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ "untitled file.txt": "新檔案.txt", // added 10.11.2015 "untitled folder": "新資料夾", // added 10.11.2015 Archive: "新壓縮檔", // from v2.1 added 10.11.2015 'untitled file' : '新檔案.$1', extentionfile: "$1: 文件", // from v2.1.41 added 6.8.2018 extentiontype: "$1: $2", // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ confirmReq: "請確認", confirmRm: "確定要删除檔案嗎?
此操作無法回復!", confirmRepl: "用新檔案取代原檔案?", confirmRest: "用垃圾桶中的項目替換現有項目?", // fromv2.1.24 added 5.5.2017 confirmConvUTF8: "不是 UTF-8 檔案
轉換為 UTF-8 嗎?
轉換後儲存會把內容變成 UTF-8.", // from v2.1 added 08.04.2014 confirmNonUTF8: "無法偵測此檔案的字元編碼, 須暫時轉換為 UTF-8 以供編輯.
請選擇此檔案的字元編碼.", // from v2.1.19 added 28.11.2016 confirmNotSave: "此檔案已修改.
若未儲存將遺失目前的工作.", // from v2.1 added 15.7.2015 confirmTrash: "確定要將項目丟到垃圾桶嗎?", //from v2.1.24 added 29.4.2017 apllyAll: "全部套用", name: "名稱", size: "大小", perms: "權限", modify: "修改於", kind: "類別", read: "讀取", write: "寫入", noaccess: "無權限", and: "和", unknown: "未知", selectall: "選擇所有檔案", selectfiles: "選擇檔案", selectffile: "選擇第一個檔案", selectlfile: "選擇最後一個檔案", viewlist: "列表檢視", viewicons: "圖示檢視", viewSmall: "小圖示", // from v2.1.39 added 22.5.2018 viewMedium: "中圖示", // from v2.1.39 added 22.5.2018 viewLarge: "大圖示", // from v2.1.39 added 22.5.2018 viewExtraLarge: "超大圖示", // from v2.1.39 added 22.5.2018 places: "位置", calc: "計算", path: "路徑", aliasfor: "别名", locked: "鎖定", dim: "圖片大小", files: "檔案", folders: "資料夾", items: "項目", yes: "是", no: "否", link: "連結", searcresult: "搜尋结果", selected: "選取的項目", about: "關於", shortcuts: "快捷鍵", help: "協助", webfm: "網路檔案總管", ver: "版本", protocolver: "協定版本", homepage: "首頁", docs: "文件", github: "在 Github 建立我們的分支", twitter: "在 Twitter 追蹤我們", facebook: "在 Facebook 加入我們", team: "團隊", chiefdev: "主要開發者", developer: "開發者", contributor: "貢獻者", maintainer: "維護者", translator: "翻譯者", icons: "圖示", dontforget: "别忘了帶上你擦汗的毛巾", shortcutsof: "快捷鍵已停用", dropFiles: "把檔案拖到此處", or: "或", selectForUpload: "選擇要上傳的檔案", moveFiles: "移動檔案", copyFiles: "複製檔案", restoreFiles: "恢復項目", // from v2.1.24 added 5.5.2017 rmFromPlaces: '從"位置"中删除', aspectRatio: "保持比例", scale: "寬高比", width: "寬", height: "高", resize: "重新調整大小", crop: "裁切", rotate: "旋轉", "rotate-cw": "順時針旋轉90度", "rotate-ccw": "逆時針旋轉90度", degree: "度", netMountDialogTitle: "掛載網路磁碟", // added 18.04.2012 protocol: "通訊協定", // added 18.04.2012 host: "主機", // added 18.04.2012 port: "連接埠", // added 18.04.2012 user: "使用者", // added 18.04.2012 pass: "密碼", // added 18.04.2012 confirmUnmount: "確定要卸載 $1?", // from v2.1 added 30.04.2012 dropFilesBrowser: "從瀏覽器拖放或貼上檔案", // from v2.1 added 30.05.2012 dropPasteFiles: "拖放檔案或從剪貼簿貼上 URL 或圖片至此", // from v2.1 added 07.04.2014 encoding: "編碼", // from v2.1 added 19.12.2014 locale: "語系", // from v2.1 added 19.12.2014 searchTarget: "目標: $1", // from v2.1 added 22.5.2015 searchMime: "根據輸入的 MIME 類型搜尋", // from v2.1 added 22.5.2015 owner: "擁有者", // from v2.1 added 20.6.2015 group: "群組", // from v2.1 added 20.6.2015 other: "其他", // from v2.1 added 20.6.2015 execute: "執行", // from v2.1 added 20.6.2015 perm: "權限", // from v2.1 added 20.6.2015 mode: "模式", // from v2.1 added 20.6.2015 emptyFolder: "資料夾是空的", // from v2.1.6 added 30.12.2015 emptyFolderDrop: "資料夾是空的\\A 拖曳以增加項目", // from v2.1.6 added 30.12.2015 emptyFolderLTap: "資料夾是空的\\A 長按以增加項目", // from v2.1.6 added 30.12.2015 quality: "品質", // from v2.1.6 added 5.1.2016 autoSync: "自動同步", // from v2.1.6 added 10.1.2016 moveUp: "上移", // from v2.1.6 added 18.1.2016 getLink: "取得 URL 連結", // from v2.1.7 added 9.2.2016 selectedItems: "選取的項目 ($1)", // from v2.1.7 added 2.19.2016 folderId: "資料夾 ID", // from v2.1.10 added 3.25.2016 offlineAccess: "允許離線存取", // from v2.1.10 added 3.25.2016 reAuth: "重新驗證權限", // from v2.1.10 added 3.25.2016 nowLoading: "正在載入...", // from v2.1.12 added 4.26.2016 openMulti: "開啟多個檔案", // from v2.1.12 added 5.14.2016 openMultiConfirm: "確定要在瀏覽器開啟 $1 個檔案嗎?", // from v2.1.12 added 5.14.2016 emptySearch: "在搜尋目標中的搜尋結果是空的.", // from v2.1.12 added 5.16.2016 editingFile: "正在編輯檔案.", // from v2.1.13 added 6.3.2016 hasSelected: "己選取 $1 個項目.", // from v2.1.13 added 6.3.2016 hasClipboard: "剪貼簿裡有 $1 個項目.", // from v2.1.13 added 6.3.2016 incSearchOnly: "增量搜尋只來自目前視圖.", // from v2.1.13 added 6.30.2016 reinstate: "恢復原狀", // from v2.1.15 added 3.8.2016 complete: "$1完成", // from v2.1.15 added 21.8.2016 contextmenu: "情境選單", // from v2.1.15 added 9.9.2016 pageTurning: "正在換頁", // from v2.1.15 added 10.9.2016 volumeRoots: "磁碟根目錄", // from v2.1.16 added 16.9.2016 reset: "重設", // from v2.1.16 added 1.10.2016 bgcolor: "背景頻色", // from v2.1.16 added 1.10.2016 colorPicker: "顏色選擇器", // from v2.1.16 added 1.10.2016 "8pxgrid": "8px 網格", // from v2.1.16 added 4.10.2016 enabled: "啟用", // from v2.1.16 added 4.10.2016 disabled: "停用", // from v2.1.16 added 4.10.2016 emptyIncSearch: "目前視圖的搜尋結果是空的.\\A按 [Enter] 擴大搜尋目標.", // from v2.1.16 added 5.10.2016 emptyLetSearch: "目前視圖中的第一個字母的搜索結果是空的。", // from v2.1.23 added 24.3.2017 textLabel: "文字標示", // from v2.1.17 added 13.10.2016 minsLeft: "剩下 $1 分鐘", // from v2.1.17 added 13.11.2016 openAsEncoding: "以選擇的編碼重新開啟", // from v2.1.19 added 2.12.2016 saveAsEncoding: "以選擇的編碼儲存", // from v2.1.19 added 2.12.2016 selectFolder: "選擇資料夾", // from v2.1.20 added 13.12.2016 firstLetterSearch: "首字母搜索", // from v2.1.23 added 24.3.2017 presets: "預置", // from v2.1.25 added 26.5.2017 tooManyToTrash: "有太多項目,所以不能丟入垃圾桶。", // from v2.1.25 added 9.6.2017 TextArea: "文字區域", // from v2.1.25 added 14.6.2017 folderToEmpty: '$1" 資料夾是空的', // from v2.1.25 added 22.6.2017 filderIsEmpty: '"$1" 資料夾中沒有任何項目', // from v2.1.25 added 22.6.2017 preference: "偏好", // from v2.1.26 added 28.6.2017 language: "語言設置", // from v2.1.26 added 28.6.2017 clearBrowserData: "初始化保存在此瀏覽器中的設置", // from v2.1.26 added 28.6.2017 toolbarPref: "工具欄設置", // from v2.1.27 added 2.8.2017 charsLeft: "... 剩下 $1 個字元", // from v2.1.29 added 30.8.2017 linesLeft: "... 剩下 $1 行", // from v2.1.52 added 16.1.2020 sum: "總計", // from v2.1.29 added 28.9.2017 roughFileSize: "粗略的檔案大小", // from v2.1.30 added 2.11.2017 autoFocusDialog: "滑鼠懸停在對話框內", // from v2.1.30 added 2.11.2017 select: "選擇", // from v2.1.30 added 23.11.2017 selectAction: "選擇檔案時的動作", // from v2.1.30 added 23.11.2017 useStoredEditor: "使用上次的編輯器開啟", // from v2.1.30 added 23.11.2017 selectinvert: "反向選擇", // from v2.1.30 added 25.11.2017 renameMultiple: "確定要重新命名 $1 為 $2 嗎?
此動作無法恢復!", // from v2.1.31 added 4.12.2017 batchRename: "批次重新命名", // from v2.1.31 added 8.12.2017 plusNumber: "增加數量", // from v2.1.31 added 8.12.2017 asPrefix: "新增前輟", // from v2.1.31 added 8.12.2017 asSuffix: "新增後輟", // from v2.1.31 added 8.12.2017 changeExtention: "變更範圍", // from v2.1.31 added 8.12.2017 columnPref: " 列設置(列表檢視)", // from v2.1.32 added 6.2.2018 reflectOnImmediate: "所有修改將立即套用到檔案.", // from v2.1.33 added 2.3.2018 reflectOnUnmount: "所有修改在卸載之前不會有變化.", // from v2.1.33 added 2.3.2018 unmountChildren: "安裝在該磁碟以下的磁碟也會卸載,你確定要卸載嗎?", // from v2.1.33 added 5.3.2018 selectionInfo: "選擇資訊", // from v2.1.33 added 7.3.2018 hashChecker: "顯示檔案雜湊算法", // from v2.1.33 added 10.3.2018 infoItems: "檔案資訊(選擇資訊面板)", // from v2.1.38 added 28.3.2018 pressAgainToExit: "再次點擊後退出", // from v2.1.38 added 1.4.2018 toolbar: "工具列", // from v2.1.38 added 4.4.2018 workspace: "工作區", // from v2.1.38 added 4.4.2018 dialog: "對話框", // from v2.1.38 added 4.4.2018 all: "全部", // from v2.1.38 added 4.4.2018 iconSize: "圖示尺寸 (圖示顯示)", // from v2.1.39 added 7.5.2018 editorMaximized: "開啟最大化編輯視窗", // from v2.1.40 added 30.6.2018 editorConvNoApi: "由於使用 API 轉換功能目前無法使用,請到網站上轉換.", //from v2.1.40 added 8.7.2018 editorConvNeedUpload: "轉換後,必須上傳檔案網址或一個下載的檔案,以保存轉換後的檔案.", //from v2.1.40 added 8.7.2018 convertOn: "在 $1 網站上轉換", // from v2.1.40 added 10.7.2018 integrations: "整合", // from v2.1.40 added 11.7.2018 integrationWith: "elFinder 整合以下外部服務,使用前請先檢查使用條款、隱私權政策等.", // from v2.1.40 added 11.7.2018 showHidden: "顯示已隱藏的項目", // from v2.1.41 added 24.7.2018 hideHidden: "隱藏已隱藏的項目", // from v2.1.41 added 24.7.2018 toggleHidden: "顯示/隱藏已隱藏的項目", // from v2.1.41 added 24.7.2018 makefileTypes: '允許"新檔案"使用的檔案類型', // from v2.1.41 added 7.8.2018 typeOfTextfile: "文字檔案類型", // from v2.1.41 added 7.8.2018 add: "新增", // from v2.1.41 added 7.8.2018 theme: "主題", // from v2.1.43 added 19.10.2018 default: "預設", // from v2.1.43 added 19.10.2018 description: "描述", // from v2.1.43 added 19.10.2018 website: "網站", // from v2.1.43 added 19.10.2018 author: "作者", // from v2.1.43 added 19.10.2018 email: "信箱", // from v2.1.43 added 19.10.2018 license: "許可證", // from v2.1.43 added 19.10.2018 exportToSave: "檔案無法存檔,為避免遺失編輯資料,需要導出到你的電腦.", // from v2.1.44 added 1.12.2018 dblclickToSelect: "連續點擊以選擇", // from v2.1.47 added 22.1.2019 useFullscreen: "使用全螢幕模式", // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ kindUnknown: "未知", kindRoot: "磁碟根目錄", // from v2.1.16 added 16.10.2016 kindFolder: "資料夾", kindSelects: "選擇", // from v2.1.29 added 29.8.2017 kindAlias: "别名", kindAliasBroken: "毀損的别名", // applications kindApp: "應用程式", kindPostscript: "Postscript 文件", kindMsOffice: "Microsoft Office 文件", kindMsWord: "Microsoft Word 文件", kindMsExcel: "Microsoft Excel 文件", kindMsPP: "Microsoft Powerpoint 簡報", kindOO: "Open Office 文件", kindAppFlash: "Flash 應用程式", kindPDF: "可攜式文件格式(PDF)", kindTorrent: "Bittorrent 檔案", kind7z: "7z 壓縮檔", kindTAR: "TAR 壓縮檔", kindGZIP: "GZIP 壓縮檔", kindBZIP: "BZIP 壓縮檔", kindXZ: "XZ 壓縮檔", kindZIP: "ZIP 壓縮檔", kindRAR: "RAR 壓縮檔", kindJAR: "Java JAR 檔案", kindTTF: "True Type 字體", kindOTF: "Open Type 字體", kindRPM: "RPM 封裝檔", // texts kindText: "文字檔案", kindTextPlain: "純文字", kindPHP: "PHP 原始碼", kindCSS: "階層樣式表(CSS)", kindHTML: "HTML 文件", kindJS: "Javascript 原始碼", kindRTF: "富文本(RTF)", kindC: "C 原始碼", kindCHeader: "C 標頭原始碼", kindCPP: "C++ 原始碼", kindCPPHeader: "C++ 標頭原始碼", kindShell: "Unix Shell 脚本", kindPython: "Python 原始碼", kindJava: "Java 原始碼", kindRuby: "Ruby 原始碼", kindPerl: "Perl 原始碼", kindSQL: "SQL 原始碼", kindXML: "XML 文件", kindAWK: "AWK 原始碼", kindCSV: "逗號分隔值(CSV)", kindDOCBOOK: "Docbook XML 文件", kindMarkdown: "Markdown 文本", // added 20.7.2015 // images kindImage: "圖片", kindBMP: "BMP 圖片", kindJPEG: "JPEG 圖片", kindGIF: "GIF 圖片", kindPNG: "PNG 圖片", kindTIFF: "TIFF 圖片", kindTGA: "TGA 圖片", kindPSD: "Adobe Photoshop 圖片", kindXBITMAP: "X bitmap 圖片", kindPXM: "Pixelmator 圖片", // media kindAudio: "音訊", kindAudioMPEG: "MPEG 音訊", kindAudioMPEG4: "MPEG-4 音訊", kindAudioMIDI: "MIDI 音訊", kindAudioOGG: "Ogg Vorbis 音訊", kindAudioWAV: "WAV 音訊", AudioPlaylist: "MP3 播放清單", kindVideo: "影片", kindVideoDV: "DV 影片", kindVideoMPEG: "MPEG 影片", kindVideoMPEG4: "MPEG-4 影片", kindVideoAVI: "AVI 影片", kindVideoMOV: "Quick Time 影片", kindVideoWM: "Windows Media 影片", kindVideoFlash: "Flash 影片", kindVideoMKV: "Matroska 影片", kindVideoOGG: "Ogg 影片" } }; }); PK Z5js/i18n/elfinder.zh_CN.jsnuW+A/** * 简体中文 translation * @author 翻译者 deerchao * @author Andy Hu * @author Max Wen * @author Kejun Chang * @author LDMING * @author Andy Lee * @author Cololi * @version 2022-03-04 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.zh_CN = { translator : '翻译者 deerchao <deerchao@gmail.com>, Andy Hu <andyhu7@yahoo.com.hk>, Max Wen<max.wen@qq.com>, Kejun Chang <changkejun@hotmail.com>, LDMING <china-live@live.cn>, Andy Lee <oraclei@126.com>, Cololi <i@cololi.moe>', language : '简体中文', direction : 'ltr', dateFormat : 'Y-m-d H:i', // will show like: 2022-03-04 11:47 fancyDateFormat : '$1 H:i', // will show like: 今天 11:47 nonameDateFormat : 'ymd-His', // noname upload will show like: 220304-114755 messages : { 'getShareText' : '分享', 'Editor ': '代码编辑器', /********************************** errors **********************************/ 'error' : '错误', 'errUnknown' : '未知的错误.', 'errUnknownCmd' : '未知的命令.', 'errJqui' : '无效的 jQuery UI 配置,必须包含 Selectable、draggable 以及 droppable 组件.', 'errNode' : 'elFinder 需要能创建 DOM 元素.', 'errURL' : '无效的 elFinder 配置! URL 选项未配置.', 'errAccess' : '访问被拒绝.', 'errConnect' : '不能连接到服务器端.', 'errAbort' : '连接中止.', 'errTimeout' : '连接超时.', 'errNotFound' : '未找到服务器端.', 'errResponse' : '无效的服务器端响应.', 'errConf' : '无效的服务器端配置.', 'errJSON' : 'PHP JSON 模块未安装.', 'errNoVolumes' : '无可读的卷.', 'errCmdParams' : '无效的命令 "$1".', 'errDataNotJSON' : '服务器返回的数据不符合 JSON 格式.', 'errDataEmpty' : '服务器返回的数据为空.', 'errCmdReq' : '服务器端请求需要命令名称.', 'errOpen' : '无法打开 "$1".', 'errNotFolder' : '对象不是文件夹.', 'errNotFile' : '对象不是文件.', 'errRead' : '无法读取 "$1".', 'errWrite' : '无法写入 "$1".', 'errPerm' : '没有权限.', 'errLocked' : '"$1" 已被锁定,不能重命名, 移动或删除.', 'errExists' : '文件 "$1" 已经存在.', 'errInvName' : '无效的文件名.', 'errInvDirname' : '无效的文件夹名.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : '文件夹不存在.', 'errFileNotFound' : '文件不存在.', 'errTrgFolderNotFound' : '未找到目标文件夹 "$1".', 'errPopup' : '浏览器拦截了弹出窗口. 请在选项中允许弹出窗口.', 'errMkdir' : '不能创建文件夹 "$1".', 'errMkfile' : '不能创建文件 "$1".', 'errRename' : '不能重命名 "$1".', 'errCopyFrom' : '不允许从卷 "$1" 复制.', 'errCopyTo' : '不允许向卷 "$1" 复制.', 'errMkOutLink' : '无法创建链接到卷根以外的链接.', // from v2.1 added 03.10.2015 'errUpload' : '上传出错.', // old name - errUploadCommon 'errUploadFile' : '无法上传 "$1".', // old name - errUpload 'errUploadNoFiles' : '未找到要上传的文件.', 'errUploadTotalSize' : '数据超过了允许的最大大小.', // old name - errMaxSize 'errUploadFileSize' : '文件超过了允许的最大大小.', // old name - errFileMaxSize 'errUploadMime' : '不允许的文件类型.', 'errUploadTransfer' : '"$1" 传输错误.', 'errUploadTemp' : '无法为上传文件创建临时文件.', // from v2.1 added 26.09.2015 'errNotReplace' : ' "$1" 已存在, 不能被替换.', // new 'errReplace' : '无法替换 "$1".', 'errSave' : '无法保存 "$1".', 'errCopy' : '无法复制 "$1".', 'errMove' : '无法移动 "$1".', 'errCopyInItself' : '不能移动 "$1" 到原有位置.', 'errRm' : '无法删除 "$1".', 'errTrash' : '无法移到回收站.', // from v2.1.24 added 30.4.2017 'errRmSrc' : '不能删除源文件.', 'errExtract' : '无法从 "$1" 提取文件.', 'errArchive' : '无法创建压缩包.', 'errArcType' : '不支持的压缩格式.', 'errNoArchive' : '文件不是压缩包, 或者不支持该压缩格式.', 'errCmdNoSupport' : '服务器端不支持该命令.', 'errReplByChild' : '不能用文件夹 “$1” 下的项替换文件夹 “$1” 自身.', 'errArcSymlinks' : '出于安全上的考虑,不允许解压包含符号链接的压缩包.', // edited 24.06.2012 'errArcMaxSize' : '压缩包文件超过最大允许文件大小范围.', 'errResize' : '无法将调整大小到 "$1".', 'errResizeDegree' : '无效的旋转角度.', // added 7.3.2013 'errResizeRotate' : '无法旋转图片.', // added 7.3.2013 'errResizeSize' : '无效的图片尺寸.', // added 7.3.2013 'errResizeNoChange' : '图片尺寸未改变.', // added 7.3.2013 'errUsupportType' : '不被支持的文件格式.', 'errNotUTF8Content' : '文件 "$1" 不是 UTF-8 格式, 不能编辑.', // added 9.11.2011 'errNetMount' : '无法装载 "$1".', // added 17.04.2012 'errNetMountNoDriver' : '不支持该协议.', // added 17.04.2012 'errNetMountFailed' : '装载失败.', // added 17.04.2012 'errNetMountHostReq' : '需要指定主机.', // added 18.04.2012 'errSessionExpires' : '您的会话由于长时间未活动已过期.', 'errCreatingTempDir' : '无法创建临时目录 "$1"', 'errFtpDownloadFile' : '无法从FTP下载文件 "$1" ', 'errFtpUploadFile' : '无法将文件 "$1" 上传至FTP', 'errFtpMkdir' : '无法在FTP上创建远程目录 "$1"', 'errArchiveExec' : '归档文件"$1"时出错.', 'errExtractExec' : '解压文件"$1"时出错.', 'errNetUnMount' : '无法卸载.', // from v2.1 added 30.04.2012 'errConvUTF8' : '未转换至UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : '如果您需要上传目录, 请尝试使用Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '搜索 "$1" 超时,仅显示部分搜索结果.', // from v2.1 added 12.1.2016 'errReauthRequire' : '必需重新授权.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '最大可选择项目数为 $1.', // from v2.1.17 added 17.10.2016 'errRestore' : '无法从回收站中恢复,无法识别还原目的地.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : '找不到这个文件的编辑器.', // from v2.1.25 added 23.5.2017 'errServerError' : '服务端发生错误.', // from v2.1.25 added 16.6.2017 'errEmpty' : '无法清空文件夹 "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : '存在 $1 多个错误.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : '您一次最多可以创建 $1 个文件夹。', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : '创建压缩包', 'cmdback' : '后退', 'cmdcopy' : '复制', 'cmdcut' : '剪切', 'cmddownload' : '下载', 'cmdduplicate' : '创建副本', 'cmdedit' : '编辑文件', 'cmdextract' : '从压缩包提取文件', 'cmdforward' : '前进', 'cmdgetfile' : '选择文件', 'cmdhelp' : '关于', 'cmdhome' : '首页', 'cmdinfo' : '查看详情', 'cmdmkdir' : '新建文件夹', 'cmdmkdirin' : '至新文件夹', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '新建文件', 'cmdopen' : '打开', 'cmdpaste' : '粘贴', 'cmdquicklook' : '预览', 'cmdreload' : '刷新', 'cmdrename' : '重命名', 'cmdrm' : '删除', 'cmdtrash' : '至回收站', //from v2.1.24 added 29.4.2017 'cmdrestore' : '恢复', //from v2.1.24 added 3.5.2017 'cmdsearch' : '查找文件', 'cmdup' : '转到上一级文件夹', 'cmdupload' : '上传文件', 'cmdview' : '查看', 'cmdresize' : '调整大小&旋转', 'cmdsort' : '排序', 'cmdnetmount' : '装载网络卷', // added 18.04.2012 'cmdnetunmount': '卸载', // from v2.1 added 30.04.2012 'cmdplaces' : '添加到收藏夹', // added 28.12.2014 'cmdchmod' : '改变模式', // from v2.1 added 20.6.2015 'cmdopendir' : '打开文件夹', // from v2.1 added 13.1.2016 'cmdcolwidth' : '设置列宽', // from v2.1.13 added 12.06.2016 'cmdfullscreen': '全屏显示', // from v2.1.15 added 03.08.2016 'cmdmove' : '移动', // from v2.1.15 added 21.08.2016 'cmdempty' : '清空文件夹', // from v2.1.25 added 22.06.2017 'cmdundo' : '撤消', // from v2.1.27 added 31.07.2017 'cmdredo' : '重做', // from v2.1.27 added 31.07.2017 'cmdpreference': '偏好', // from v2.1.27 added 03.08.2017 'cmdselectall' : '全选', // from v2.1.28 added 15.08.2017 'cmdselectnone': '全不选', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '反向选择', // from v2.1.28 added 15.08.2017 'cmdopennew' : '在新窗口打开', // from v2.1.38 added 3.4.2018 'cmdhide' : '隐藏 (偏好)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '关闭', 'btnSave' : '保存', 'btnRm' : '删除', 'btnApply' : '应用', 'btnCancel' : '取消', 'btnNo' : '否', 'btnYes' : '是', 'btnMount' : '装载', // added 18.04.2012 'btnApprove': '至 $1 并确认', // from v2.1 added 26.04.2012 'btnUnmount': '卸载', // from v2.1 added 30.04.2012 'btnConv' : '转换', // from v2.1 added 08.04.2014 'btnCwd' : '这里', // from v2.1 added 22.5.2015 'btnVolume' : '卷', // from v2.1 added 22.5.2015 'btnAll' : '全部', // from v2.1 added 22.5.2015 'btnMime' : 'MIME类型', // from v2.1 added 22.5.2015 'btnFileName':'文件名', // from v2.1 added 22.5.2015 'btnSaveClose': '保存并关闭', // from v2.1 added 12.6.2015 'btnBackup' : '备份', // fromv2.1 added 28.11.2015 'btnRename' : '重命名', // from v2.1.24 added 6.4.2017 'btnRenameAll' : '重命名(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : '向前 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '向后 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '另存为', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : '打开文件夹', 'ntffile' : '打开文件', 'ntfreload' : '刷新文件夹内容', 'ntfmkdir' : '创建文件夹', 'ntfmkfile' : '创建文件', 'ntfrm' : '删除文件', 'ntfcopy' : '复制文件', 'ntfmove' : '移动文件', 'ntfprepare' : '准备复制文件', 'ntfrename' : '重命名文件', 'ntfupload' : '上传文件', 'ntfdownload' : '下载文件', 'ntfsave' : '保存文件', 'ntfarchive' : '创建压缩包', 'ntfextract' : '从压缩包提取文件', 'ntfsearch' : '搜索文件', 'ntfresize' : '正在更改尺寸', 'ntfsmth' : '正在忙 >_<', 'ntfloadimg' : '正在加载图片', 'ntfnetmount' : '正在装载网络卷', // added 18.04.2012 'ntfnetunmount': '卸载网络卷', // from v2.1 added 30.04.2012 'ntfdim' : '获取图像尺寸', // added 20.05.2013 'ntfreaddir' : '正在读取文件夹信息', // from v2.1 added 01.07.2013 'ntfurl' : '正在获取链接地址', // from v2.1 added 11.03.2014 'ntfchmod' : '正在改变文件模式', // from v2.1 added 20.6.2015 'ntfpreupload': '正在验证上传文件名', // from v2.1 added 31.11.2015 'ntfzipdl' : '正在创建一个下载文件', // from v2.1.7 added 23.1.2016 'ntfparents' : '正在取得路径信息', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '正在处理上传文件', // from v2.1.17 added 2.11.2016 'ntftrash' : '移动到回收站', // from v2.1.24 added 2.5.2017 'ntfrestore' : '从回收站恢复', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '检查目标文件夹', // from v2.1.24 added 3.5.2017 'ntfundo' : '撤消上一个全局操作', // from v2.1.27 added 31.07.2017 'ntfredo' : '重做上一全局操作', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : '检查内容', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '回收站', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '未知', 'Today' : '今天', 'Yesterday' : '昨天', 'msJan' : '一月', 'msFeb' : '二月', 'msMar' : '三月', 'msApr' : '四月', 'msMay' : '五月', 'msJun' : '六月', 'msJul' : '七月', 'msAug' : '八月', 'msSep' : '九月', 'msOct' : '十月', 'msNov' : '十一月', 'msDec' : '十二月', 'January' : '一月', 'February' : '二月', 'March' : '三月', 'April' : '四月', 'May' : '五月', 'June' : '六月', 'July' : '七月', 'August' : '八月', 'September' : '九月', 'October' : '十月', 'November' : '十一月', 'December' : '十二月', 'Sunday' : '星期日', 'Monday' : '星期一', 'Tuesday' : '星期二', 'Wednesday' : '星期三', 'Thursday' : '星期四', 'Friday' : '星期五', 'Saturday' : '星期六', 'Sun' : '周日', 'Mon' : '周一', 'Tue' : '周二', 'Wed' : '周三', 'Thu' : '周四', 'Fri' : '周五', 'Sat' : '周六', /******************************** sort variants ********************************/ 'sortname' : '按名称', 'sortkind' : '按类型', 'sortsize' : '按大小', 'sortdate' : '按日期', 'sortFoldersFirst' : '文件夹优先', 'sortperm' : '按权限排序', // from v2.1.13 added 13.06.2016 'sortmode' : '按属性排序', // from v2.1.13 added 13.06.2016 'sortowner' : '按所有者排序', // from v2.1.13 added 13.06.2016 'sortgroup' : '按组排序', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : '同时刷新树状目录', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '新文件.txt', // added 10.11.2015 'untitled folder' : '新文件夹', // added 10.11.2015 'Archive' : '新压缩包', // from v2.1 added 10.11.2015 'untitled file' : '新文件.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 文件', // from v2.1.41 added 6.8.2018 'extentiontype' : '1 美元:2 美元', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '请确认', 'confirmRm' : '确定要删除文件吗?
该操作不可撤销!', 'confirmRepl' : '用新的文件替换原有文件?', 'confirmRest' : '从回收站替换当前项?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '文件不是UTF-8格式.
转换为UTF-8吗?
通过在转换后保存,内容变为UTF-8.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '无法检测到此文件的字符编码.需要暂时转换此文件为UTF-8编码以进行编辑.
请选择此文件的字符编码.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '文件已被编辑.
如果不保存直接关闭,将丢失编辑内容.', // from v2.1 added 15.7.2015 'confirmTrash' : '确定要将该项移动到回收站么?', //from v2.1.24 added 29.4.2017 'confirmMove' : '确定要移动该项到 "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全部应用', 'name' : '名称', 'size' : '大小', 'perms' : '权限', 'modify' : '修改于', 'kind' : '类别', 'read' : '读取', 'write' : '写入', 'noaccess' : '无权限', 'and' : '和', 'unknown' : '未知', 'selectall' : '选择所有文件', 'selectfiles' : '选择文件', 'selectffile' : '选择第一个文件', 'selectlfile' : '选择最后一个文件', 'viewlist' : '列表视图', 'viewicons' : '图标视图', 'viewSmall' : '小图标', // from v2.1.39 added 22.5.2018 'viewMedium' : '中图标', // from v2.1.39 added 22.5.2018 'viewLarge' : '大图标', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '超大图标', // from v2.1.39 added 22.5.2018 'places' : '位置', 'calc' : '计算', 'path' : '路径', 'aliasfor' : '别名', 'locked' : '锁定', 'dim' : '尺寸', 'files' : '文件', 'folders' : '文件夹', 'items' : '项目', 'yes' : '是', 'no' : '否', 'link' : '链接', 'searcresult' : '搜索结果', 'selected' : '选中的项目', 'about' : '关于', 'shortcuts' : '快捷键', 'help' : '帮助', 'webfm' : '网络文件管理器', 'ver' : '版本', 'protocolver' : '协议版本', 'homepage' : '项目主页', 'docs' : '文档', 'github' : '复刻我们的github', 'twitter' : '关注我们的twitter', 'facebook' : '加入我们的facebook', 'team' : '团队', 'chiefdev' : '首席开发', 'developer' : '开发', 'contributor' : '贡献', 'maintainer' : '维护', 'translator' : '翻译', 'icons' : '图标', 'dontforget' : '别忘了带上你擦汗的毛巾', 'shortcutsof' : '快捷键已禁用', 'dropFiles' : '把文件拖到这里', 'or' : '或者', 'selectForUpload' : '选择要上传的文件', 'moveFiles' : '移动文件', 'copyFiles' : '复制文件', 'restoreFiles' : '恢复文件', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '从这里中删除', 'aspectRatio' : '保持比例', 'scale' : '缩放比例', 'width' : '宽', 'height' : '高', 'resize' : '调整大小', 'crop' : '裁切', 'rotate' : '旋转', 'rotate-cw' : '顺时针旋转90°', 'rotate-ccw' : '逆时针旋转90°', 'degree' : '°', 'netMountDialogTitle' : '装载网络目录', // added 18.04.2012 'protocol' : '协议', // added 18.04.2012 'host' : '主机', // added 18.04.2012 'port' : '端口', // added 18.04.2012 'user' : '用户', // added 18.04.2012 'pass' : '密码', // added 18.04.2012 'confirmUnmount' : '确实要卸载 $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '从浏览器中拖放或粘贴文件', // from v2.1 added 30.05.2012 'dropPasteFiles' : '拖放文件,粘贴网址或剪贴板图像', // from v2.1 added 07.04.2014 'encoding' : '编码', // from v2.1 added 19.12.2014 'locale' : '语言环境', // from v2.1 added 19.12.2014 'searchTarget' : '目标: $1', // from v2.1 added 22.5.2015 'searchMime' : '按输入MIME类型搜索', // from v2.1 added 22.5.2015 'owner' : '所有者', // from v2.1 added 20.6.2015 'group' : '组', // from v2.1 added 20.6.2015 'other' : '其他', // from v2.1 added 20.6.2015 'execute' : '执行', // from v2.1 added 20.6.2015 'perm' : '许可', // from v2.1 added 20.6.2015 'mode' : '属性', // from v2.1 added 20.6.2015 'emptyFolder' : '文件夹是空的', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '文件夹是空的\\A 拖放可追加项目', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '文件夹是空的\\A 长按可添加项目', // from v2.1.6 added 30.12.2015 'quality' : '品质', // from v2.1.6 added 5.1.2016 'autoSync' : '自动同步', // from v2.1.6 added 10.1.2016 'moveUp' : '向上移动', // from v2.1.6 added 18.1.2016 'getLink' : '获取URL链接', // from v2.1.7 added 9.2.2016 'selectedItems' : '已选择项目 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '目录ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '允许离线操作', // from v2.1.10 added 3.25.2016 'reAuth' : '重新验证', // from v2.1.10 added 3.25.2016 'nowLoading' : '正在加载...', // from v2.1.12 added 4.26.2016 'openMulti' : '打开多个文件', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '您正在尝试打开$1文件.您确定要在浏览器中打开吗?', // from v2.1.12 added 5.14.2016 'emptySearch' : '搜索目标中没有匹配结果', // from v2.1.12 added 5.16.2016 'editingFile' : '正在编辑文件.', // from v2.1.13 added 6.3.2016 'hasSelected' : '已选择 $1 个项目.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '剪贴板里有 $1 个项目.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '增量搜索仅来自当前视图.', // from v2.1.13 added 6.30.2016 'reinstate' : '恢复', // from v2.1.15 added 3.8.2016 'complete' : '$1 完成', // from v2.1.15 added 21.8.2016 'contextmenu' : '上下文菜单', // from v2.1.15 added 9.9.2016 'pageTurning' : '翻页', // from v2.1.15 added 10.9.2016 'volumeRoots' : '根目录', // from v2.1.16 added 16.9.2016 'reset' : '重置', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景色', // from v2.1.16 added 1.10.2016 'colorPicker' : '颜色选择器', // from v2.1.16 added 1.10.2016 '8pxgrid' : '步长(8px)', // from v2.1.16 added 4.10.2016 'enabled' : '启用', // from v2.1.16 added 4.10.2016 'disabled' : '关闭', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '当前视图下没有匹配结果', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '当前视图中的第一个字母搜索结果为空', // from v2.1.23 added 24.3.2017 'textLabel' : '文本标签', // from v2.1.17 added 13.10.2016 'minsLeft' : '剩余 $1 分钟', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '使用所选编码重新打开', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '使用所选编码保存', // from v2.1.19 added 2.12.2016 'selectFolder' : '选择目录', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '首字母搜索', // from v2.1.23 added 24.3.2017 'presets' : '预置', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '项目太多,不能移动到回收站.', // from v2.1.25 added 9.6.2017 'TextArea' : '文本区域', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '清空文件夹 "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '文件夹 "$1" 为空.', // from v2.1.25 added 22.6.2017 'preference' : '偏好', // from v2.1.26 added 28.6.2017 'language' : '语言设置', // from v2.1.26 added 28.6.2017 'clearBrowserData': '清除保存在此浏览器中的偏好设置', // from v2.1.26 added 28.6.2017 'toolbarPref' : '工具栏设置', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 剩余$1字符', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 剩余$1行', // from v2.1.52 added 16.1.2020 'sum' : '总数', // from v2.1.29 added 28.9.2017 'roughFileSize' : '粗略的文件大小', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '鼠标悬停在对话框内可编辑区域时自动获得焦点', // from v2.1.30 added 2.11.2017 'select' : '选择', // from v2.1.30 added 23.11.2017 'selectAction' : '双击选择的文件时', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '用上次使用的编辑器打开', // from v2.1.30 added 23.11.2017 'selectinvert' : '反向选择', // from v2.1.30 added 25.11.2017 'renameMultiple' : '确定要重命名选定项 $1 为 $2 吗?
该操作不能撤消!', // from v2.1.31 added 4.12.2017 'batchRename' : '批量重命名', // from v2.1.31 added 8.12.2017 'plusNumber' : '增加数量', // from v2.1.31 added 8.12.2017 'asPrefix' : '添加前缀', // from v2.1.31 added 8.12.2017 'asSuffix' : '添加后缀', // from v2.1.31 added 8.12.2017 'changeExtention' : '变化范围', // from v2.1.31 added 8.12.2017 'columnPref' : '列设置 (列表视图)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '所有修改将立即反馈到文档.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : '所有修改在卸载本卷之前不会反馈', // from v2.1.33 added 2.3.2018 'unmountChildren' : '安装在本卷上的以下卷也会卸载.你确定要卸载吗?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '选择信息', // from v2.1.33 added 7.3.2018 'hashChecker' : '显示文件散列值的算法', // from v2.1.33 added 10.3.2018 'infoItems' : '信息条目 (选择信息面板)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': '再按退出', // from v2.1.38 added 1.4.2018 'toolbar' : '工具条', // from v2.1.38 added 4.4.2018 'workspace' : '工作空间', // from v2.1.38 added 4.4.2018 'dialog' : '对话框', // from v2.1.38 added 4.4.2018 'all' : '全部', // from v2.1.38 added 4.4.2018 'iconSize' : '图标尺寸 (图标视图)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '打开最大化编辑器窗口', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '由于通过 API 转换功能当前不可用,请到网站上转换.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '转换后,必须上传条目URL或一个下载的文件,以保存转换后的文件.', //from v2.1.40 added 8.7.2018 'convertOn' : '在 $1 站点上转换', // from v2.1.40 added 10.7.2018 'integrations' : '集成', // from v2.1.40 added 11.7.2018 'integrationWith' : '本 elFinder 集成以下外部服务.使用前请检查使用条款、隐私政策等.', // from v2.1.40 added 11.7.2018 'showHidden' : '显示已隐藏的条目', // from v2.1.41 added 24.7.2018 'hideHidden' : '隐藏已隐藏的条目', // from v2.1.41 added 24.7.2018 'toggleHidden' : '显示/隐藏已隐藏的条目', // from v2.1.41 added 24.7.2018 'makefileTypes' : '允许"新文件"使用的文件类型', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : '文本文件类型', // from v2.1.41 added 7.8.2018 'add' : '添加', // from v2.1.41 added 7.8.2018 'theme' : '主题', // from v2.1.43 added 19.10.2018 'default' : '缺省', // from v2.1.43 added 19.10.2018 'description' : '描述', // from v2.1.43 added 19.10.2018 'website' : '网站', // from v2.1.43 added 19.10.2018 'author' : '作者', // from v2.1.43 added 19.10.2018 'email' : '邮箱', // from v2.1.43 added 19.10.2018 'license' : '许可证', // from v2.1.43 added 19.10.2018 'exportToSave' : '本条目不能保存. 为避免丢失编辑数据,须要导出到你的电脑.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '在文件上双击以选中它.', // from v2.1.47 added 22.1.2019 'useFullscreen' : '使用全屏模式', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '未知', 'kindRoot' : '根目录', // from v2.1.16 added 16.10.2016 'kindFolder' : '文件夹', 'kindSelects' : '选择', // from v2.1.29 added 29.8.2017 'kindAlias' : '别名', 'kindAliasBroken' : '错误的别名', // applications 'kindApp' : '程序', 'kindPostscript' : 'Postscript 文档', 'kindMsOffice' : 'Microsoft Office 文档', 'kindMsWord' : 'Microsoft Word 文档', 'kindMsExcel' : 'Microsoft Excel 文档', 'kindMsPP' : 'Microsoft Powerpoint 演示', 'kindOO' : 'Open Office 文档', 'kindAppFlash' : 'Flash 程序', 'kindPDF' : 'PDF 文档', 'kindTorrent' : 'Bittorrent 文件', 'kind7z' : '7z 压缩包', 'kindTAR' : 'TAR 压缩包', 'kindGZIP' : 'GZIP 压缩包', 'kindBZIP' : 'BZIP 压缩包', 'kindXZ' : 'XZ 压缩包', 'kindZIP' : 'ZIP 压缩包', 'kindRAR' : 'RAR 压缩包', 'kindJAR' : 'Java JAR 文件', 'kindTTF' : 'True Type 字体', 'kindOTF' : 'Open Type 字体', 'kindRPM' : 'RPM 包', // texts 'kindText' : '文本文件', 'kindTextPlain' : '纯文本', 'kindPHP' : 'PHP 源代码', 'kindCSS' : '层叠样式表(CSS)', 'kindHTML' : 'HTML 文档', 'kindJS' : 'Javascript 源代码', 'kindRTF' : '富文本格式(RTF)', 'kindC' : 'C 源代码', 'kindCHeader' : 'C 头文件', 'kindCPP' : 'C++ 源代码', 'kindCPPHeader' : 'C++ 头文件', 'kindShell' : 'Unix 外壳脚本', 'kindPython' : 'Python 源代码', 'kindJava' : 'Java 源代码', 'kindRuby' : 'Ruby 源代码', 'kindPerl' : 'Perl 源代码', 'kindSQL' : 'SQL 脚本', 'kindXML' : 'XML 文档', 'kindAWK' : 'AWK 源代码', 'kindCSV' : '逗号分隔值文件(CSV)', 'kindDOCBOOK' : 'Docbook XML 文档', 'kindMarkdown' : 'Markdown 文本', // added 20.7.2015 // images 'kindImage' : '图片', 'kindBMP' : 'BMP 图片', 'kindJPEG' : 'JPEG 图片', 'kindGIF' : 'GIF 图片', 'kindPNG' : 'PNG 图片', 'kindTIFF' : 'TIFF 图片', 'kindTGA' : 'TGA 图片', 'kindPSD' : 'Adobe Photoshop 图片', 'kindXBITMAP' : 'X bitmap 图片', 'kindPXM' : 'Pixelmator 图片', // media 'kindAudio' : '音频', 'kindAudioMPEG' : 'MPEG 音频', 'kindAudioMPEG4' : 'MPEG-4 音频', 'kindAudioMIDI' : 'MIDI 音频', 'kindAudioOGG' : 'Ogg Vorbis 音频', 'kindAudioWAV' : 'WAV 音频', 'AudioPlaylist' : 'MP3 播放列表', 'kindVideo' : '视频', 'kindVideoDV' : 'DV 视频', 'kindVideoMPEG' : 'MPEG 视频', 'kindVideoMPEG4' : 'MPEG-4 视频', 'kindVideoAVI' : 'AVI 视频', 'kindVideoMOV' : 'Quick Time 视频', 'kindVideoWM' : 'Windows Media 视频', 'kindVideoFlash' : 'Flash 视频', 'kindVideoMKV' : 'Matroska 视频', 'kindVideoOGG' : 'Ogg 视频' } }; })); PK ZFOjs/i18n/elfinder.id.jsnuW+A/** * Bahasa Indonesia translation * @author Suyadi <1441177004009@student.unsika.ac.id> * @author Ammar Faizi * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.id = { translator : 'Suyadi <1441177004009@student.unsika.ac.id>, Ammar Faizi <ammarfaizi2@gmail.com>', language : 'Bahasa Indonesia', direction : 'ltr', dateFormat : 'j F, Y H:i', // will show like: 2 Maret, 2022 12:14 fancyDateFormat : '$1 H:i', // will show like: Hari ini 12:14 nonameDateFormat : 'd m Y - H : i : s', // noname upload will show like: 02 03 2022 - 12 : 14 : 15 messages : { 'getShareText' : 'Membagikan', 'Editor ': 'Editor Kode', /********************************** errors **********************************/ 'error' : 'Kesalahan', 'errUnknown' : 'Kesalahan tak dikenal.', 'errUnknownCmd' : 'Perintah tak dikenal.', 'errJqui' : 'Konfigurasi jQuery UI tidak valid. Komponen pemilih, penyeret dan penaruh harus disertakan.', 'errNode' : 'elFinder membutuhkan pembuatan elemen DOM.', 'errURL' : 'Konfigurasi elFinder tidak valid! opsi URL belum diatur.', 'errAccess' : 'Akses ditolak.', 'errConnect' : 'Tidak dapat tersambung ke backend.', 'errAbort' : 'Koneksi dibatalkan.', 'errTimeout' : 'Waktu koneksi habis.', 'errNotFound' : 'Backend tidak ditemukan.', 'errResponse' : 'Respon backend tidak valid.', 'errConf' : 'Konfigurasi elFinder tidak valid.', 'errJSON' : 'Modul PHP JSON belum terpasang.', 'errNoVolumes' : 'Tidak tersedia ruang kosong.', 'errCmdParams' : 'Parameter perintah "$1" tidak valid.', 'errDataNotJSON' : 'Data bukan merupakan JSON.', 'errDataEmpty' : 'Data masih kosong.', 'errCmdReq' : 'Permintaan ke backend membutuhkan nama perintah.', 'errOpen' : 'Tidak dapat membuka "$1".', 'errNotFolder' : 'Obyek ini bukan folder.', 'errNotFile' : 'Obyek ini bukan berkas.', 'errRead' : 'Tidak dapat membaca "$1".', 'errWrite' : 'Tidak dapat menulis ke "$1".', 'errPerm' : 'Ijin ditolak.', 'errLocked' : '"$1" ini terkunci dan tak dapat dipidahkan, diubah atau dihapus.', 'errExists' : 'Berkas bernama "$1" sudah ada.', 'errInvName' : 'Nama berkas tidak valid.', 'errInvDirname' : 'Nama folder salah.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder tidak ditemukan.', 'errFileNotFound' : 'Berkas tidak ditemukan.', 'errTrgFolderNotFound' : 'Folder tujuan "$1" tidak ditemukan.', 'errPopup' : 'Peramban anda mencegah untuk membuka jendela munculan. Untuk dapat membuka berkas ini ubah pengaturan pada peramban anda.', 'errMkdir' : 'Tidak dapat membuat folder "$1".', 'errMkfile' : 'Tidak dapat membuat berkas "$1".', 'errRename' : 'Tidak dapat mengubah nama "$1".', 'errCopyFrom' : 'Tidak diizinkan menyalin berkas dari volume "$1".', 'errCopyTo' : 'tidak diizinkan menyalin berkas ke volume "$1".', 'errMkOutLink' : 'Tidak dapat membuat tautan diluar volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Kesalahan saat mengunggah.', // old name - errUploadCommon 'errUploadFile' : 'Tidak dapat mengunggah "$1".', // old name - errUpload 'errUploadNoFiles' : 'Tak ada berkas untuk diunggah.', 'errUploadTotalSize' : 'Data melampaui ukuran yang diperbolehkan.', // old name - errMaxSize 'errUploadFileSize' : 'Berkas melampaui ukuran yang diperbolehkan.', // old name - errFileMaxSize 'errUploadMime' : 'Jenis berkas ini tidak diijinkan.', 'errUploadTransfer' : 'Kesalahan transfer "$1".', 'errUploadTemp' : 'Tidak dapat membuat file sementara untuk diupload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obyek "$1" sudah ada di lokasi ini dan tidak dapat ditimpa oleh obyek jenis lain.', // new 'errReplace' : 'Tidak dapat menimpa "$1".', 'errSave' : 'Tidak dapat menyimpan "$1".', 'errCopy' : 'Tidak dapat menyalin "$1".', 'errMove' : 'Tidak dapat memindahkan "$1".', 'errCopyInItself' : 'Tidak dapat menyalin "$1" ke dirinya sendiri.', 'errRm' : 'Tidak dapat menghapus "$1".', 'errTrash' : 'Tidak dapat masuk ke tempat sampah.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Tidak dapat menghapus sumber berkas.', 'errExtract' : 'Tidak dapat mengekstrak berkas dari "$1".', 'errArchive' : 'Tidak dapat membuat arsip.', 'errArcType' : 'Jenis arsip tidak didukung.', 'errNoArchive' : 'Berkas ini bukan arsip atau arsip jenis ini tidak didukung.', 'errCmdNoSupport' : 'Backend tidak mendukung perintah ini.', 'errReplByChild' : 'Folder “$1” tidak dapat ditimpa dengan berkas didalamnya.', 'errArcSymlinks' : 'Untuk keamanan tak diijinkan mengekstrak arsip berisi symlink atau jenis berkas yang tak diijinkan.', // edited 24.06.2012 'errArcMaxSize' : 'Arsip ini melampaui ukuran yang diijinkan.', 'errResize' : 'Tidak dapat mengubah ukuran "$1".', 'errResizeDegree' : 'Derajat putaran tidak valid.', // added 7.3.2013 'errResizeRotate' : 'Citra tidak diputar.', // added 7.3.2013 'errResizeSize' : 'Ukuran citra tidak valid.', // added 7.3.2013 'errResizeNoChange' : 'Ukuran citra tidak diubah.', // added 7.3.2013 'errUsupportType' : 'Jenis berkas tidak didukung.', 'errNotUTF8Content' : 'Berkas "$1" tidak dalam format UTF-8 dan tidak dapat disunting.', // added 9.11.2011 'errNetMount' : 'Tidak dapat membaca susunan "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protokol tidak didukung.', // added 17.04.2012 'errNetMountFailed' : 'Tidak dapat membaca susunannya.', // added 17.04.2012 'errNetMountHostReq' : 'Host harus ada.', // added 18.04.2012 'errSessionExpires' : 'Sesi anda telah kadaluwarsa karena lama tidak aktif.', 'errCreatingTempDir' : 'Tidak dapat membuat direktori sementara: "$1"', 'errFtpDownloadFile' : 'Tidak dapat mengunduh berkas dari FTP: "$1"', 'errFtpUploadFile' : 'Tidak dapat mengunggah berkas dari FTP: "$1"', 'errFtpMkdir' : 'Tidak dapat membuat remot direktori dari FTP: "$1"', 'errArchiveExec' : 'Kesalahan saat mengarsipkan berkas: "$1"', 'errExtractExec' : 'Kesalahan saat mengekstrak berkas: "$1"', 'errNetUnMount' : 'Tidak dapat melakukan mount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Tidak cocok untuk konversi ke UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Coba dengan browser yang modern, Jika akan mengupload folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Waktu habis selama melakukan pencarian "$1". Hasil sementara.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization dibutuhkan.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Berkas maksimal yang dipilih adalah $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Tidak dapat mengembalikan berkas dari tempat sampah. Tujuan tidak ditemukan.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Tidak ditemukan editor untuk file tipe ini.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Terjadi kesalahan di sisi server.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Tidak dapat mengosongkan folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Ada $1 kesalahan lagi.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Anda dapat membuat hingga $1 folder sekaligus.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Buat arsip', 'cmdback' : 'Kembali', 'cmdcopy' : 'Salin', 'cmdcut' : 'Potong', 'cmddownload' : 'Unduh', 'cmdduplicate' : 'Gandakan', 'cmdedit' : 'Sunting berkas', 'cmdextract' : 'Ekstrak berkas dari arsip', 'cmdforward' : 'Maju', 'cmdgetfile' : 'Pilih berkas', 'cmdhelp' : 'Tentang software ini', 'cmdhome' : 'Rumah', 'cmdinfo' : 'Dapatkan info', 'cmdmkdir' : 'Buat folder', 'cmdmkdirin' : 'Masuk ke folder baru', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Buat fail', 'cmdopen' : 'Buka', 'cmdpaste' : 'Tempel', 'cmdquicklook' : 'Pratinjau', 'cmdreload' : 'Muat-ulang', 'cmdrename' : 'Ganti nama', 'cmdrm' : 'Hapus', 'cmdtrash' : 'Sampahkan', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Kembalikan', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Cari berkas', 'cmdup' : 'Ke direktori utama', 'cmdupload' : 'Unggah berkas', 'cmdview' : 'Lihat', 'cmdresize' : 'Ubah ukuran & Putar', 'cmdsort' : 'Urutkan', 'cmdnetmount' : 'Baca-susun volume jaringan', // added 18.04.2012 'cmdnetunmount': 'Lepas', // from v2.1 added 30.04.2012 'cmdplaces' : 'Ke Tempat', // added 28.12.2014 'cmdchmod' : 'Mode mengubah', // from v2.1 added 20.6.2015 'cmdopendir' : 'Membuka folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Setel ulang lebar kolom', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Layar Penuh', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Pindah', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Kosongkan foldernya', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Membuka', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Mengulangi', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferensi', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Pilih Semua', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Pilih tidak ada', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Pilihan sebaliknya', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Buka di jendela baru', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Sembunyikan (Preferensi)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Tutup', 'btnSave' : 'Simpan', 'btnRm' : 'Buang', 'btnApply' : 'Terapkan', 'btnCancel' : 'Batal', 'btnNo' : 'Tidak', 'btnYes' : 'Ya', 'btnMount' : 'Baca susunan', // added 18.04.2012 'btnApprove': 'Menuju ke $1 & setujui', // from v2.1 added 26.04.2012 'btnUnmount': 'Lepas', // from v2.1 added 30.04.2012 'btnConv' : 'Konversi', // from v2.1 added 08.04.2014 'btnCwd' : 'Disini', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Semua', // from v2.1 added 22.5.2015 'btnMime' : 'Jenis MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nama file', // from v2.1 added 22.5.2015 'btnSaveClose': 'Simpan & Tutup', // from v2.1 added 12.6.2015 'btnBackup' : 'Cadangan', // fromv2.1 added 28.11.2015 'btnRename' : 'Ubah nama', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Ubah nama(Semua)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Sebelumnya ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Selanjutnya ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Simpan sebagai', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Buka folder', 'ntffile' : 'Buka berkas', 'ntfreload' : 'Muat-ulang isi folder', 'ntfmkdir' : 'Membuat direktori', 'ntfmkfile' : 'Membuat berkas', 'ntfrm' : 'Menghapus berkas', 'ntfcopy' : 'Salin berkas', 'ntfmove' : 'Pindahkan berkas', 'ntfprepare' : 'Persiapan menyalin berkas', 'ntfrename' : 'Ubah nama berkas', 'ntfupload' : 'Unggah berkas', 'ntfdownload' : 'Mengunduh berkas', 'ntfsave' : 'Simpan berkas', 'ntfarchive' : 'Membuat arsip', 'ntfextract' : 'Mengekstrak berkas dari arsip', 'ntfsearch' : 'Mencari berkas', 'ntfresize' : 'Mengubah ukuran citra', 'ntfsmth' : 'Melakukan sesuatu', 'ntfloadimg' : 'Memuat citra', 'ntfnetmount' : 'Membaca susunan volume jaringan', // added 18.04.2012 'ntfnetunmount': 'Melepas volume jaringan', // from v2.1 added 30.04.2012 'ntfdim' : 'Mendapatkan dimensi citra', // added 20.05.2013 'ntfreaddir' : 'Membaca informasi folder', // from v2.1 added 01.07.2013 'ntfurl' : 'Mendapatkan URL dari link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Dalam mode mengubah', // from v2.1 added 20.6.2015 'ntfpreupload': 'Sedang memverifikasi nama file yang diupload', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Membuat file untuk didownload', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Mengambil informasi path', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Sedang mengupload file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Sedang melempar ke tempat sampah', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Sedang mengembalikan dari tempat sampah', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Mengecek folder tujuan', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Mengurungkan operasi sebelumnya', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Mengulangi yang dibatalkan sebelumnya', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Memeriksa konten', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Sampah', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'tak diketahui', 'Today' : 'Hari ini', 'Yesterday' : 'Kemarin', 'msJan' : 'Jan', 'msFeb' : 'Februari', 'msMar' : 'Merusak', 'msApr' : 'April', 'msMay' : 'Mei', 'msJun' : 'Jun', 'msJul' : 'Juli', 'msAug' : 'Agt', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nop', 'msDec' : 'Des', 'January' : 'Januari', 'February' : 'Pebruari', 'March' : 'Maret', 'April' : 'April', 'May' : 'Mei', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Agustus', 'September' : 'September', 'October' : 'Oktober', 'November' : 'Nopember', 'December' : 'Desember', 'Sunday' : 'Minggu', 'Monday' : 'Senin', 'Tuesday' : 'Selasa', 'Wednesday' : 'Rabu', 'Thursday' : 'Kamis', 'Friday' : 'Jum \'at', 'Saturday' : 'Sabtu', 'Sun' : 'Min', 'Mon' : 'Sen', 'Tue' : 'Sel', 'Wed' : 'Rab', 'Thu' : 'Kam', 'Fri' : 'Jum', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'menurut nama', 'sortkind' : 'menurut jenis', 'sortsize' : 'menurut ukuran', 'sortdate' : 'menurut tanggal', 'sortFoldersFirst' : 'Utamakan folder', 'sortperm' : 'menurut perizinan', // from v2.1.13 added 13.06.2016 'sortmode' : 'menurut mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'menurut pemilik', // from v2.1.13 added 13.06.2016 'sortgroup' : 'menurut grup', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Juga Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'FileBaru.txt', // added 10.11.2015 'untitled folder' : 'FolderBaru', // added 10.11.2015 'Archive' : 'ArsipBaru', // from v2.1 added 10.11.2015 'untitled file' : 'File Baru.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Berkas', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Diperlukan konfirmasi', 'confirmRm' : 'Anda yakin akan menghapus berkas?
Ini tidak dapat kembalikan!', 'confirmRepl' : 'Timpa berkas lama dengan yang baru?', 'confirmRest' : 'Timpa berkas yang ada dengan berkas dari sampah?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Bukan UTF-8
Konversi ke UTF-8?
Konten akan berubah menjadi UTF-8 ketika disimpan dengan konversi.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Encoding karakter file ini tidak dapat dideteksi. Itu perlu dikonversi sementara ke UTF-8 untuk diedit.
Silakan pilih pengkodean karakter dari file ini.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Telah terjadi perubahan.
Kehilangan perkerjaan jika kamu tidak menyimpan.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Anda yakin untuk membuang berkas ke tempat sampah?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Anda yakin ingin memindahkan item ke "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Terapkan ke semua', 'name' : 'Nama', 'size' : 'Ukuran', 'perms' : 'Perijinan', 'modify' : 'Diubah', 'kind' : 'Jenis', 'read' : 'baca', 'write' : 'tulis', 'noaccess' : 'tidak ada akses', 'and' : 'dan', 'unknown' : 'tak diketahui', 'selectall' : 'Pilih semua berkas', 'selectfiles' : 'Pilih berkas', 'selectffile' : 'Pilih berkas pertama', 'selectlfile' : 'Pilih berkas terakhir', 'viewlist' : 'Tampilan daftar', 'viewicons' : 'Tampilan ikon', 'viewSmall' : 'Ikon kecil', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Ikon sedang', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Ikon besar', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ikon ekstra besar', // from v2.1.39 added 22.5.2018 'places' : 'Lokasi', 'calc' : 'Hitung', 'path' : 'Alamat', 'aliasfor' : 'Nama lain untuk', 'locked' : 'Dikunci', 'dim' : 'Dimensi', 'files' : 'Berkas', 'folders' : 'Folder', 'items' : 'Pokok', 'yes' : 'ya', 'no' : 'tidak', 'link' : 'Tautan', 'searcresult' : 'Hasil pencarian', 'selected' : 'Pokok terpilih', 'about' : 'Tentang', 'shortcuts' : 'Pintasan', 'help' : 'Bantuan', 'webfm' : 'Pengelola berkas web', 'ver' : 'Versi', 'protocolver' : 'versi protokol', 'homepage' : 'Rumah proyek', 'docs' : 'Dokumentasi', 'github' : 'Ambil kami di Github', 'twitter' : 'Ikuti kami di twitter', 'facebook' : 'Gabung dengan kami di facebook', 'team' : 'Tim', 'chiefdev' : 'kepala pengembang', 'developer' : 'pengembang', 'contributor' : 'kontributor', 'maintainer' : 'pengurus', 'translator' : 'penerjemah', 'icons' : 'Ikon', 'dontforget' : 'dan jangan lupa pakai handukmu', 'shortcutsof' : 'Pintasan dimatikan', 'dropFiles' : 'Seret berkas anda kesini', 'or' : 'atau', 'selectForUpload' : 'Pilih berkas untuk diunggah', 'moveFiles' : 'Pindahkan berkas', 'copyFiles' : 'Salin berkas', 'restoreFiles' : 'Kembalikan berkas', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Hapus dari lokasi', 'aspectRatio' : 'Aspek rasio', 'scale' : 'Skala', 'width' : 'Lebar', 'height' : 'Tinggi', 'resize' : 'Ubah ukuran', 'crop' : 'Potong', 'rotate' : 'Putar', 'rotate-cw' : 'Putar 90 derajat ke kanan', 'rotate-ccw' : 'Putar 90 derajat ke kiri', 'degree' : '°', 'netMountDialogTitle' : 'Baca susunan volume jaringan', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Tuan rumah', // added 18.04.2012 'port' : 'Pelabuhan', // added 18.04.2012 'user' : 'Pengguna', // added 18.04.2012 'pass' : 'Sandi', // added 18.04.2012 'confirmUnmount' : 'Apakah anda unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Seret atau Tempel file dari browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Seret file, Tempel URL atau gambar dari clipboard', // from v2.1 added 07.04.2014 'encoding' : 'pengkodean', // from v2.1 added 19.12.2014 'locale' : 'Lokasi', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Mencari berdasarkan inpu MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Pemilik', // from v2.1 added 20.6.2015 'group' : 'Grup', // from v2.1 added 20.6.2015 'other' : 'Lainnya', // from v2.1 added 20.6.2015 'execute' : 'Eksekusi', // from v2.1 added 20.6.2015 'perm' : 'Izin', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder kosong', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder kosong\\A Seret untuk tambahkan berkas', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder kosong\\A Tekan yang lama untuk tambahkan berkas', // from v2.1.6 added 30.12.2015 'quality' : 'Kualitas', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sinkronasi Otomatis', // from v2.1.6 added 10.1.2016 'moveUp' : 'Pindah ke atas', // from v2.1.6 added 18.1.2016 'getLink' : 'Mendepatkan URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : '($1) berkas dipilih', // from v2.1.7 added 2.19.2016 'folderId' : 'ID Folder', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Izin akses offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Untuk mengautentikasi ulang', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Sedang memuat...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Membuka file bersamaan', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Anda mencoba membuka file $1. Apakah anda ingin membuka di browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Hasil pencarian kosong dalam target', // from v2.1.12 added 5.16.2016 'editingFile' : 'Sedang mengedit file', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Anda memilih $1 berkas', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Kamu mempunyai $i berkas di clipboard', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Hanya pencarian bertamah untuk menampilkan tampilan sekarang', // from v2.1.13 added 6.30.2016 'reinstate' : 'Mengembalikan lagi', // from v2.1.15 added 3.8.2016 'complete' : '$1 selesai', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu konteks', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Pembalikan halaman', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'akar volume', // from v2.1.16 added 16.9.2016 'reset' : 'Mengatur ulang', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Warna background', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Mengambil warna', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Kotak 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Diaktifkan', // from v2.1.16 added 4.10.2016 'disabled' : 'Nonaktifkan', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Hasil pencarian kosong dalam tampilan saat ini.\\ATekan [Enter] untuk memperluas target pencarian.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Hasil pencarian huruf pertama kosong dalam tampilan saat ini.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Label teks', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 menit lagi', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Buka kembali dengan penyandian yang dipilih', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Simpan dengan pengkodean yang dipilih', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Pilih folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Pencarian huruf pertama', // from v2.1.23 added 24.3.2017 'presets' : 'Preset', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Itu terlalu banyak item sehingga tidak bisa menjadi sampah.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Area Teks', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Kosongkan folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Tidak ada item dalam folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferensi', // from v2.1.26 added 28.6.2017 'language' : 'Bahasa', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inisialisasi pengaturan yang disimpan di browser ini', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Pengaturan bilah alat', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 karakter tersisa.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 baris tersisa.', // from v2.1.52 added 16.1.2020 'sum' : 'Jumlah', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Ukuran file kasar', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokus pada elemen dialog dengan mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Pilih', // from v2.1.30 added 23.11.2017 'selectAction' : 'Tindakan saat memilih file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Buka dengan editor yang digunakan terakhir kali', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Pilihan sebaliknya', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Anda yakin ingin mengganti nama $1 item terpilih seperti $2?
Ini tidak dapat diurungkan!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Ganti nama batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nomor', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Tambahkan awalan', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Tambahkan akhiran', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Ubah ekstensi', // from v2.1.31 added 8.12.2017 'columnPref' : 'Pengaturan kolom (Tampilan daftar)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Semua perubahan akan langsung direfleksikan ke arsip.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Perubahan apa pun tidak akan terlihat sampai volume ini dilepas.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Volume berikut yang dipasang pada volume ini juga dilepas. Apakah Anda yakin untuk melepasnya?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Info Seleksi', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritma untuk menampilkan hash file', // from v2.1.33 added 10.3.2018 'infoItems' : 'Item Info (Panel Info Pilihan)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Tekan lagi untuk keluar.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Bilah Alat', // from v2.1.38 added 4.4.2018 'workspace' : 'Ruang Kerja', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Semua', // from v2.1.38 added 4.4.2018 'iconSize' : 'Ukuran Ikon (Tampilan ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Buka jendela editor yang dimaksimalkan', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Karena konversi oleh API saat ini tidak tersedia, harap konversi di situs web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Setelah konversi, Anda harus mengunggah dengan URL item atau file yang diunduh untuk menyimpan file yang dikonversi.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konversi di situs $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrasi', // from v2.1.40 added 11.7.2018 'integrationWith' : 'ElFinder ini memiliki layanan eksternal berikut yang terintegrasi. Silakan periksa syarat penggunaan, kebijakan privasi, dll. sebelum menggunakannya.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Tampilkan item tersembunyi', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Sembunyikan item tersembunyi', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Tampilkan/Sembunyikan item tersembunyi', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Jenis file untuk diaktifkan dengan "File baru"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Jenis file teks', // from v2.1.41 added 7.8.2018 'add' : 'Menambahkan', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Bawaan', // from v2.1.43 added 19.10.2018 'description' : 'Keterangan', // from v2.1.43 added 19.10.2018 'website' : 'Situs web', // from v2.1.43 added 19.10.2018 'author' : 'Pengarang', // from v2.1.43 added 19.10.2018 'email' : 'Surel', // from v2.1.43 added 19.10.2018 'license' : 'Lisensi', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Item ini tidak dapat disimpan. Untuk menghindari kehilangan hasil edit, Anda perlu mengekspor ke PC Anda.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Klik dua kali pada file untuk memilihnya.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Gunakan mode layar penuh', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Tak diketahui', 'kindRoot' : 'Volume Akar', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Map', 'kindSelects' : 'Pilihan', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Nama lain', 'kindAliasBroken' : 'Nama lain rusak', // applications 'kindApp' : 'Aplikasi', 'kindPostscript' : 'Dokumen postscript', 'kindMsOffice' : 'Dokumen Ms. Office', 'kindMsWord' : 'Dokumen Ms. Word', 'kindMsExcel' : 'Dokumen Ms. Excel', 'kindMsPP' : 'Dokumen Ms. Powerpoint', 'kindOO' : 'Dokumen Open Office', 'kindAppFlash' : 'Aplikasi Flash', 'kindPDF' : 'Portable Dokumen Format (PDF)', 'kindTorrent' : 'Berkas Bittorrent', 'kind7z' : 'Arsip 7z', 'kindTAR' : 'Arsip TAR', 'kindGZIP' : 'Arsip GZIP', 'kindBZIP' : 'Arsip BZIP', 'kindXZ' : 'Arsip XZ', 'kindZIP' : 'Arsip ZIP', 'kindRAR' : 'Arsip RAR', 'kindJAR' : 'Berkas Java JAR', 'kindTTF' : 'Huruf True Type', 'kindOTF' : 'Huruf Open Type', 'kindRPM' : 'Paket RPM', // texts 'kindText' : 'Dokumen teks', 'kindTextPlain' : 'Berkas teks biasa', 'kindPHP' : 'Kode-sumber PHP', 'kindCSS' : 'Lembar bergaya susun', 'kindHTML' : 'Dokumen HTML', 'kindJS' : 'Kode-sumber Javascript', 'kindRTF' : 'Berkas Rich Text', 'kindC' : 'Kode-sumber C', 'kindCHeader' : 'Kode-sumber header C', 'kindCPP' : 'Kode-sumber C++', 'kindCPPHeader' : 'Kode-sumber header C++', 'kindShell' : 'Berkas shell Unix', 'kindPython' : 'Kode-sumber Python', 'kindJava' : 'Kode-sumber Java', 'kindRuby' : 'Kode-sumber Ruby', 'kindPerl' : 'Kode-sumber Perl', 'kindSQL' : 'Kode-sumber SQL', 'kindXML' : 'Dokumen XML', 'kindAWK' : 'Kode-sumber AWK', 'kindCSV' : 'Dokumen CSV', 'kindDOCBOOK' : 'Dokumen Docbook XML', 'kindMarkdown' : 'teks penurunan harga', // added 20.7.2015 // images 'kindImage' : 'Citra', 'kindBMP' : 'Citra BMP', 'kindJPEG' : 'Citra JPEG', 'kindGIF' : 'Citra GIF', 'kindPNG' : 'Citra PNG', 'kindTIFF' : 'Citra TIFF', 'kindTGA' : 'Citra TGA', 'kindPSD' : 'Citra Adobe Photoshop', 'kindXBITMAP' : 'Citra X bitmap', 'kindPXM' : 'Citra Pixelmator', // media 'kindAudio' : 'Berkas audio', 'kindAudioMPEG' : 'Berkas audio MPEG', 'kindAudioMPEG4' : 'Berkas audio MPEG-4', 'kindAudioMIDI' : 'Berkas audio MIDI', 'kindAudioOGG' : 'Berkas audio Ogg Vorbis', 'kindAudioWAV' : 'Berkas audio WAV', 'AudioPlaylist' : 'Berkas daftar putar MP3', 'kindVideo' : 'Berkas video', 'kindVideoDV' : 'Berkas video DV', 'kindVideoMPEG' : 'Berkas video MPEG', 'kindVideoMPEG4' : 'Berkas video MPEG-4', 'kindVideoAVI' : 'Berkas video AVI', 'kindVideoMOV' : 'Berkas video Quick Time', 'kindVideoWM' : 'Berkas video Windows Media', 'kindVideoFlash' : 'Berkas video Flash', 'kindVideoMKV' : 'Berkas video Matroska', 'kindVideoOGG' : 'Berkas video Ogg' } }; })); PK Zssjs/i18n/elfinder.en.jsnuW+A/** * English translation * @author Troex Nevelin * @author Naoki Sawada * @version 2020-01-16 */ // elfinder.en.js is integrated into elfinder.(full|min).js by jake build if (typeof elFinder === "function" && elFinder.prototype.i18) { elFinder.prototype.i18.en = { translator: "Troex Nevelin <troex@fury.scancode.ru>, Naoki Sawada <hypweb+elfinder@gmail.com>", language: "English", direction: "ltr", dateFormat: "M d, Y h:i A", // will show like: Aug 24, 2018 04:39 PM fancyDateFormat: "$1 h:i A", // will show like: Today 04:39 PM nonameDateFormat: "ymd-His", // noname upload will show like: 180824-163916 messages: { getShareText : 'Share', "Editor ": "Code Editor", /********************************** errors **********************************/ error: "Error", errUnknown: "Unknown error.", errUnknownCmd: "Unknown command.", errJqui: "Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.", errNode: "elFinder requires DOM Element to be created.", errURL: "Invalid elFinder configuration! URL option is not set.", errAccess: "Access denied.", errConnect: "Unable to connect to backend.", errAbort: "Connection aborted.", errTimeout: "Connection timeout.", errNotFound: "Backend not found.", errResponse: "Invalid backend response.", errConf: "Invalid backend configuration.", errJSON: "PHP JSON module not installed.", errNoVolumes: "Readable volumes not available.", errCmdParams: 'Invalid parameters for command "$1".', errDataNotJSON: "Data is not JSON.", errDataEmpty: "Data is empty.", errCmdReq: "Backend request requires command name.", errOpen: 'Unable to open "$1".', errNotFolder: "Object is not a folder.", errNotFile: "Object is not a file.", errRead: 'Unable to read "$1".', errWrite: 'Unable to write into "$1".', errPerm: "Permission denied.", errLocked: '"$1" is locked and can not be renamed, moved or removed.', errExists: 'Item named "$1" already exists.', errInvName: "Invalid file name.", errInvDirname: "Invalid folder name.", // from v2.1.24 added 12.4.2017 errFolderNotFound: "Folder not found.", errFileNotFound: "File not found.", errTrgFolderNotFound: 'Target folder "$1" not found.', errPopup: "Browser prevented opening popup window. To open file enable it in browser options.", errMkdir: 'Unable to create folder "$1".', errMkfile: 'Unable to create file "$1".', errRename: 'Unable to rename "$1".', errCopyFrom: 'Copying files from volume "$1" not allowed.', errCopyTo: 'Copying files to volume "$1" not allowed.', errMkOutLink: "Unable to create a link to outside the volume root.", // from v2.1 added 03.10.2015 errUpload: "Upload error.", // old name - errUploadCommon errUploadFile: 'Unable to upload "$1".', // old name - errUpload errUploadNoFiles: "No files found for upload.", errUploadTotalSize: "Data exceeds the maximum allowed size.", // old name - errMaxSize errUploadFileSize: "File exceeds maximum allowed size.", // old name - errFileMaxSize errUploadMime: "File type not allowed.", errUploadTransfer: '"$1" transfer error.', errUploadTemp: "Unable to make temporary file for upload.", // from v2.1 added 26.09.2015 errNotReplace: 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new errReplace: 'Unable to replace "$1".', errSave: 'Unable to save "$1".', errCopy: 'Unable to copy "$1".', errMove: 'Unable to move "$1".', errCopyInItself: 'Unable to copy "$1" into itself.', errRm: 'Unable to remove "$1".', errTrash: "Unable into trash.", // from v2.1.24 added 30.4.2017 errRmSrc: "Unable remove source file(s).", errExtract: 'Unable to extract files from "$1".', errArchive: "Unable to create archive.", errArcType: "Unsupported archive type.", errNoArchive: "File is not archive or has unsupported archive type.", errCmdNoSupport: "Backend does not support this command.", errReplByChild: 'The folder "$1" can\'t be replaced by an item it contains.', errArcSymlinks: "For security reason denied to unpack archives contains symlinks or files with not allowed names.", // edited 24.06.2012 errArcMaxSize: "Archive files exceeds maximum allowed size.", errResize: 'Unable to resize "$1".', errResizeDegree: "Invalid rotate degree.", // added 7.3.2013 errResizeRotate: "Unable to rotate image.", // added 7.3.2013 errResizeSize: "Invalid image size.", // added 7.3.2013 errResizeNoChange: "Image size not changed.", // added 7.3.2013 errUsupportType: "Unsupported file type.", errNotUTF8Content: 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 errNetMount: 'Unable to mount "$1".', // added 17.04.2012 errNetMountNoDriver: "Unsupported protocol.", // added 17.04.2012 errNetMountFailed: "Mount failed.", // added 17.04.2012 errNetMountHostReq: "Host required.", // added 18.04.2012 errSessionExpires: "Your session has expired due to inactivity.", errCreatingTempDir: 'Unable to create temporary directory: "$1"', errFtpDownloadFile: 'Unable to download file from FTP: "$1"', errFtpUploadFile: 'Unable to upload file to FTP: "$1"', errFtpMkdir: 'Unable to create remote directory on FTP: "$1"', errArchiveExec: 'Error while archiving files: "$1"', errExtractExec: 'Error while extracting files: "$1"', errNetUnMount: "Unable to unmount.", // from v2.1 added 30.04.2012 errConvUTF8: "Not convertible to UTF-8", // from v2.1 added 08.04.2014 errFolderUpload: "Try the modern browser, If you'd like to upload the folder.", // from v2.1 added 26.6.2015 errSearchTimeout: 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 errReauthRequire: "Re-authorization is required.", // from v2.1.10 added 24.3.2016 errMaxTargets: "Max number of selectable items is $1.", // from v2.1.17 added 17.10.2016 errRestore: "Unable to restore from the trash. Can't identify the restore destination.", // from v2.1.24 added 3.5.2017 errEditorNotFound: "Editor not found to this file type.", // from v2.1.25 added 23.5.2017 errServerError: "Error occurred on the server side.", // from v2.1.25 added 16.6.2017 errEmpty: 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 moreErrors: "There are $1 more errors.", // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ cmdarchive: "Create archive", cmdback: "Back", cmdcopy: "Copy", cmdcut: "Cut", cmddownload: "Download", cmdduplicate: "Duplicate", cmdedit: "Edit file", cmdextract: "Extract files from archive", cmdforward: "Forward", cmdgetfile: "Select files", cmdhelp: "About this software", cmdhome: "Root", cmdinfo: "Get Info & Share", cmdmkdir: "New folder", cmdmkdirin: "Into New Folder", // from v2.1.7 added 19.2.2016 cmdmkfile: "New file", cmdopen: "Open", cmdpaste: "Paste", cmdquicklook: "Preview", cmdreload: "Reload", cmdrename: "Rename", cmdrm: "Delete", cmdtrash: "Into trash", //from v2.1.24 added 29.4.2017 cmdrestore: "Restore", //from v2.1.24 added 3.5.2017 cmdsearch: "Find files", cmdup: "Go to parent folder", cmdupload: "Upload files", cmdview: "View", cmdresize: "Resize & Rotate", cmdsort: "Sort", cmdnetmount: "Mount network volume", // added 18.04.2012 cmdnetunmount: "Unmount", // from v2.1 added 30.04.2012 cmdplaces: "To Places", // added 28.12.2014 cmdchmod: "Change mode", // from v2.1 added 20.6.2015 cmdopendir: "Open a folder", // from v2.1 added 13.1.2016 cmdcolwidth: "Reset column width", // from v2.1.13 added 12.06.2016 cmdfullscreen: "Full Screen", // from v2.1.15 added 03.08.2016 cmdmove: "Move", // from v2.1.15 added 21.08.2016 cmdempty: "Empty the folder", // from v2.1.25 added 22.06.2017 cmdundo: "Undo", // from v2.1.27 added 31.07.2017 cmdredo: "Redo", // from v2.1.27 added 31.07.2017 cmdpreference: "Preferences", // from v2.1.27 added 03.08.2017 cmdselectall: "Select all", // from v2.1.28 added 15.08.2017 cmdselectnone: "Select none", // from v2.1.28 added 15.08.2017 cmdselectinvert: "Invert selection", // from v2.1.28 added 15.08.2017 cmdopennew: "Open in new window", // from v2.1.38 added 3.4.2018 cmdhide: "Hide (Preference)", // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ btnClose: "Close", btnSave: "Save", btnRm: "Remove", btnApply: "Apply", btnCancel: "Cancel", btnNo: "No", btnYes: "Yes", btnMount: "Mount", // added 18.04.2012 btnApprove: "Goto $1 & approve", // from v2.1 added 26.04.2012 btnUnmount: "Unmount", // from v2.1 added 30.04.2012 btnConv: "Convert", // from v2.1 added 08.04.2014 btnCwd: "Here", // from v2.1 added 22.5.2015 btnVolume: "Volume", // from v2.1 added 22.5.2015 btnAll: "All", // from v2.1 added 22.5.2015 btnMime: "MIME Type", // from v2.1 added 22.5.2015 btnFileName: "Filename", // from v2.1 added 22.5.2015 btnSaveClose: "Save & Close", // from v2.1 added 12.6.2015 btnBackup: "Backup", // fromv2.1 added 28.11.2015 btnRename: "Rename", // from v2.1.24 added 6.4.2017 btnRenameAll: "Rename(All)", // from v2.1.24 added 6.4.2017 btnPrevious: "Prev ($1/$2)", // from v2.1.24 added 11.5.2017 btnNext: "Next ($1/$2)", // from v2.1.24 added 11.5.2017 btnSaveAs: "Save As", // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ ntfopen: "Open folder", ntffile: "Open file", ntfreload: "Reload folder content", ntfmkdir: "Creating folder", ntfmkfile: "Creating files", ntfrm: "Delete items", ntfcopy: "Copy items", ntfmove: "Move items", ntfprepare: "Checking existing items", ntfrename: "Rename files", ntfupload: "Uploading files", ntfdownload: "Downloading files", ntfsave: "Save files", ntfarchive: "Creating archive", ntfextract: "Extracting files from archive", ntfsearch: "Searching files", ntfresize: "Resizing images", ntfsmth: "Doing something", ntfloadimg: "Loading image", ntfnetmount: "Mounting network volume", // added 18.04.2012 ntfnetunmount: "Unmounting network volume", // from v2.1 added 30.04.2012 ntfdim: "Acquiring image dimension", // added 20.05.2013 ntfreaddir: "Reading folder infomation", // from v2.1 added 01.07.2013 ntfurl: "Getting URL of link", // from v2.1 added 11.03.2014 ntfchmod: "Changing file mode", // from v2.1 added 20.6.2015 ntfpreupload: "Verifying upload file name", // from v2.1 added 31.11.2015 ntfzipdl: "Creating a file for download", // from v2.1.7 added 23.1.2016 ntfparents: "Getting path infomation", // from v2.1.17 added 2.11.2016 ntfchunkmerge: "Processing the uploaded file", // from v2.1.17 added 2.11.2016 ntftrash: "Doing throw in the trash", // from v2.1.24 added 2.5.2017 ntfrestore: "Doing restore from the trash", // from v2.1.24 added 3.5.2017 ntfchkdir: "Checking destination folder", // from v2.1.24 added 3.5.2017 ntfundo: "Undoing previous operation", // from v2.1.27 added 31.07.2017 ntfredo: "Redoing previous undone", // from v2.1.27 added 31.07.2017 ntfchkcontent: "Checking contents", // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ volume_Trash: "Trash", //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ dateUnknown: "unknown", Today: "Today", Yesterday: "Yesterday", msJan: "Jan", msFeb: "Feb", msMar: "Mar", msApr: "Apr", msMay: "May", msJun: "Jun", msJul: "Jul", msAug: "Aug", msSep: "Sep", msOct: "Oct", msNov: "Nov", msDec: "Dec", January: "January", February: "February", March: "March", April: "April", May: "May", June: "June", July: "July", August: "August", September: "September", October: "October", November: "November", December: "December", Sunday: "Sunday", Monday: "Monday", Tuesday: "Tuesday", Wednesday: "Wednesday", Thursday: "Thursday", Friday: "Friday", Saturday: "Saturday", Sun: "Sun", Mon: "Mon", Tue: "Tue", Wed: "Wed", Thu: "Thu", Fri: "Fri", Sat: "Sat", /******************************** sort variants ********************************/ sortname: "by name", sortkind: "by kind", sortsize: "by size", sortdate: "by date", sortFoldersFirst: "Folders first", sortperm: "by permission", // from v2.1.13 added 13.06.2016 sortmode: "by mode", // from v2.1.13 added 13.06.2016 sortowner: "by owner", // from v2.1.13 added 13.06.2016 sortgroup: "by group", // from v2.1.13 added 13.06.2016 sortAlsoTreeview: "Also Treeview", // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ "untitled file.txt": "NewFile.txt", // added 10.11.2015 "untitled folder": "NewFolder", // added 10.11.2015 Archive: "NewArchive", // from v2.1 added 10.11.2015 "untitled file": "NewFile.$1", // from v2.1.41 added 6.8.2018 extentionfile: "$1: File", // from v2.1.41 added 6.8.2018 extentiontype: "$1: $2", // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ confirmReq: "Confirmation required", confirmRm: "Are you sure you want to permanently remove items?
This cannot be undone!", confirmRepl: "Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)", confirmRest: "Replace existing item with the item in trash?", // fromv2.1.24 added 5.5.2017 confirmConvUTF8: "Not in UTF-8
Convert to UTF-8?
Contents become UTF-8 by saving after conversion.", // from v2.1 added 08.04.2014 confirmNonUTF8: "Character encoding of this file couldn't be detected. It need to temporarily convert to UTF-8 for editting.
Please select character encoding of this file.", // from v2.1.19 added 28.11.2016 confirmNotSave: "It has been modified.
Losing work if you do not save changes.", // from v2.1 added 15.7.2015 confirmTrash: "Are you sure you want to move items to trash bin?", //from v2.1.24 added 29.4.2017 confirmMove: 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 apllyAll: "Apply to all", name: "Name", size: "Size", perms: "Permissions", modify: "Modified", kind: "Kind", read: "read", write: "write", noaccess: "no access", and: "and", unknown: "unknown", selectall: "Select all items", selectfiles: "Select item(s)", selectffile: "Select first item", selectlfile: "Select last item", viewlist: "List view", viewicons: "Icons view", viewSmall: "Small icons", // from v2.1.39 added 22.5.2018 viewMedium: "Medium icons", // from v2.1.39 added 22.5.2018 viewLarge: "Large icons", // from v2.1.39 added 22.5.2018 viewExtraLarge: "Extra large icons", // from v2.1.39 added 22.5.2018 places: "Places", calc: "Calculating", path: "Path", aliasfor: "Alias for", locked: "Locked", dim: "Dimensions", files: "Files", folders: "Folders", items: "Items", yes: "yes", no: "no", link: "Link", searcresult: "Search results", selected: "selected items", about: "About", shortcuts: "Shortcuts", help: "Help", webfm: "Web file manager", ver: "Version", protocolver: "protocol version", homepage: "Project home", docs: "Documentation", github: "Fork us on GitHub", twitter: "Follow us on Twitter", facebook: "Join us on Facebook", team: "Team", chiefdev: "chief developer", developer: "developer", contributor: "contributor", maintainer: "maintainer", translator: "translator", icons: "Icons", dontforget: "and don't forget to take your towel", shortcutsof: "Shortcuts disabled", dropFiles: "Drop files here", or: "or", selectForUpload: "Select files", moveFiles: "Move items", copyFiles: "Copy items", restoreFiles: "Restore items", // from v2.1.24 added 5.5.2017 rmFromPlaces: "Remove from places", aspectRatio: "Aspect ratio", scale: "Scale", width: "Width", height: "Height", resize: "Resize", crop: "Crop", rotate: "Rotate", "rotate-cw": "Rotate 90 degrees CW", "rotate-ccw": "Rotate 90 degrees CCW", degree: "°", netMountDialogTitle: "Mount network volume", // added 18.04.2012 protocol: "Protocol", // added 18.04.2012 host: "Host", // added 18.04.2012 port: "Port", // added 18.04.2012 user: "User", // added 18.04.2012 pass: "Password", // added 18.04.2012 confirmUnmount: "Are you sure to unmount $1?", // from v2.1 added 30.04.2012 dropFilesBrowser: "Drop or Paste files from browser", // from v2.1 added 30.05.2012 dropPasteFiles: "Drop files, Paste URLs or images(clipboard) here", // from v2.1 added 07.04.2014 encoding: "Encoding", // from v2.1 added 19.12.2014 locale: "Locale", // from v2.1 added 19.12.2014 searchTarget: "Target: $1", // from v2.1 added 22.5.2015 searchMime: "Search by input MIME Type", // from v2.1 added 22.5.2015 owner: "Owner", // from v2.1 added 20.6.2015 group: "Group", // from v2.1 added 20.6.2015 other: "Other", // from v2.1 added 20.6.2015 execute: "Execute", // from v2.1 added 20.6.2015 perm: "Permission", // from v2.1 added 20.6.2015 mode: "Mode", // from v2.1 added 20.6.2015 emptyFolder: "Folder is empty", // from v2.1.6 added 30.12.2015 emptyFolderDrop: "Folder is empty\\A Drop to add items", // from v2.1.6 added 30.12.2015 emptyFolderLTap: "Folder is empty\\A Long tap to add items", // from v2.1.6 added 30.12.2015 quality: "Quality", // from v2.1.6 added 5.1.2016 autoSync: "Auto sync", // from v2.1.6 added 10.1.2016 moveUp: "Move up", // from v2.1.6 added 18.1.2016 getLink: "Get URL link", // from v2.1.7 added 9.2.2016 share: 'Share', selectedItems: "Selected items ($1)", // from v2.1.7 added 2.19.2016 folderId: "Folder ID", // from v2.1.10 added 3.25.2016 offlineAccess: "Allow offline access", // from v2.1.10 added 3.25.2016 reAuth: "To re-authenticate", // from v2.1.10 added 3.25.2016 nowLoading: "Now loading...", // from v2.1.12 added 4.26.2016 openMulti: "Open multiple files", // from v2.1.12 added 5.14.2016 openMultiConfirm: "You are trying to open the $1 files. Are you sure you want to open in browser?", // from v2.1.12 added 5.14.2016 emptySearch: "Search results is empty in search target.", // from v2.1.12 added 5.16.2016 editingFile: "It is editing a file.", // from v2.1.13 added 6.3.2016 hasSelected: "You have selected $1 items.", // from v2.1.13 added 6.3.2016 hasClipboard: "You have $1 items in the clipboard.", // from v2.1.13 added 6.3.2016 incSearchOnly: "Incremental search is only from the current view.", // from v2.1.13 added 6.30.2016 reinstate: "Reinstate", // from v2.1.15 added 3.8.2016 complete: "$1 complete", // from v2.1.15 added 21.8.2016 contextmenu: "Context menu", // from v2.1.15 added 9.9.2016 pageTurning: "Page turning", // from v2.1.15 added 10.9.2016 volumeRoots: "Volume roots", // from v2.1.16 added 16.9.2016 reset: "Reset", // from v2.1.16 added 1.10.2016 bgcolor: "Background color", // from v2.1.16 added 1.10.2016 colorPicker: "Color picker", // from v2.1.16 added 1.10.2016 "8pxgrid": "8px Grid", // from v2.1.16 added 4.10.2016 enabled: "Enabled", // from v2.1.16 added 4.10.2016 disabled: "Disabled", // from v2.1.16 added 4.10.2016 emptyIncSearch: "Search results is empty in current view.\\A Press [Enter] to expand search target.", // from v2.1.16 added 5.10.2016 emptyLetSearch: "First letter search results is empty in current view.", // from v2.1.23 added 24.3.2017 textLabel: "Text label", // from v2.1.17 added 13.10.2016 minsLeft: "$1 mins left", // from v2.1.17 added 13.11.2016 openAsEncoding: "Reopen with selected encoding", // from v2.1.19 added 2.12.2016 saveAsEncoding: "Save with the selected encoding", // from v2.1.19 added 2.12.2016 selectFolder: "Select folder", // from v2.1.20 added 13.12.2016 firstLetterSearch: "First letter search", // from v2.1.23 added 24.3.2017 presets: "Presets", // from v2.1.25 added 26.5.2017 tooManyToTrash: "It's too many items so it can't into trash.", // from v2.1.25 added 9.6.2017 TextArea: "TextArea", // from v2.1.25 added 14.6.2017 folderToEmpty: 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 filderIsEmpty: 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 preference: "Preference", // from v2.1.26 added 28.6.2017 language: "Language", // from v2.1.26 added 28.6.2017 clearBrowserData: "Initialize the settings saved in this browser", // from v2.1.26 added 28.6.2017 toolbarPref: "Toolbar settings", // from v2.1.27 added 2.8.2017 charsLeft: "... $1 chars left.", // from v2.1.29 added 30.8.2017 linesLeft: "... $1 lines left.", // from v2.1.52 added 16.1.2020 sum: "Sum", // from v2.1.29 added 28.9.2017 roughFileSize: "Rough file size", // from v2.1.30 added 2.11.2017 autoFocusDialog: "Focus on the element of dialog with mouseover", // from v2.1.30 added 2.11.2017 select: "Select", // from v2.1.30 added 23.11.2017 selectAction: "Action when select file", // from v2.1.30 added 23.11.2017 useStoredEditor: "Open with the editor used last time", // from v2.1.30 added 23.11.2017 selectinvert: "Invert selection", // from v2.1.30 added 25.11.2017 renameMultiple: "Are you sure you want to rename $1 selected items like $2?
This cannot be undone!", // from v2.1.31 added 4.12.2017 batchRename: "Batch rename", // from v2.1.31 added 8.12.2017 plusNumber: "+ Number", // from v2.1.31 added 8.12.2017 asPrefix: "Add prefix", // from v2.1.31 added 8.12.2017 asSuffix: "Add suffix", // from v2.1.31 added 8.12.2017 changeExtention: "Change extention", // from v2.1.31 added 8.12.2017 columnPref: "Columns settings (List view)", // from v2.1.32 added 6.2.2018 reflectOnImmediate: "All changes will reflect immediately to the archive.", // from v2.1.33 added 2.3.2018 reflectOnUnmount: "Any changes will not reflect until un-mount this volume.", // from v2.1.33 added 2.3.2018 unmountChildren: "The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?", // from v2.1.33 added 5.3.2018 selectionInfo: "Selection Info", // from v2.1.33 added 7.3.2018 hashChecker: "Algorithms to show the file hash", // from v2.1.33 added 10.3.2018 infoItems: "Info Items (Selection Info Panel)", // from v2.1.38 added 28.3.2018 pressAgainToExit: "Press again to exit.", // from v2.1.38 added 1.4.2018 toolbar: "Toolbar", // from v2.1.38 added 4.4.2018 workspace: "Work Space", // from v2.1.38 added 4.4.2018 dialog: "Dialog", // from v2.1.38 added 4.4.2018 all: "All", // from v2.1.38 added 4.4.2018 iconSize: "Icon Size (Icons view)", // from v2.1.39 added 7.5.2018 editorMaximized: "Open the maximized editor window", // from v2.1.40 added 30.6.2018 editorConvNoApi: "Because conversion by API is not currently available, please convert on the website.", //from v2.1.40 added 8.7.2018 editorConvNeedUpload: "After conversion, you must be upload with the item URL or a downloaded file to save the converted file.", //from v2.1.40 added 8.7.2018 convertOn: "Convert on the site of $1", // from v2.1.40 added 10.7.2018 integrations: "Integrations", // from v2.1.40 added 11.7.2018 integrationWith: "This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.", // from v2.1.40 added 11.7.2018 showHidden: "Show hidden items", // from v2.1.41 added 24.7.2018 hideHidden: "Hide hidden items", // from v2.1.41 added 24.7.2018 toggleHidden: "Show/Hide hidden items", // from v2.1.41 added 24.7.2018 makefileTypes: 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 typeOfTextfile: "Type of the Text file", // from v2.1.41 added 7.8.2018 add: "Add", // from v2.1.41 added 7.8.2018 theme: "Theme", // from v2.1.43 added 19.10.2018 default: "Default", // from v2.1.43 added 19.10.2018 description: "Description", // from v2.1.43 added 19.10.2018 website: "Website", // from v2.1.43 added 19.10.2018 author: "Author", // from v2.1.43 added 19.10.2018 email: "Email", // from v2.1.43 added 19.10.2018 license: "License", // from v2.1.43 added 19.10.2018 exportToSave: "This item can't be saved. To avoid losing the edits you need to export to your PC.", // from v2.1.44 added 1.12.2018 dblclickToSelect: "Double click on the file to select it.", // from v2.1.47 added 22.1.2019 useFullscreen: "Use fullscreen mode", // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ kindUnknown: "Unknown", kindRoot: "Volume Root", // from v2.1.16 added 16.10.2016 kindFolder: "Folder", kindSelects: "Selections", // from v2.1.29 added 29.8.2017 kindAlias: "Alias", kindAliasBroken: "Broken alias", // applications kindApp: "Application", kindPostscript: "Postscript document", kindMsOffice: "Microsoft Office document", kindMsWord: "Microsoft Word document", kindMsExcel: "Microsoft Excel document", kindMsPP: "Microsoft Powerpoint presentation", kindOO: "Open Office document", kindAppFlash: "Flash application", kindPDF: "Portable Document Format (PDF)", kindTorrent: "Bittorrent file", kind7z: "7z archive", kindTAR: "TAR archive", kindGZIP: "GZIP archive", kindBZIP: "BZIP archive", kindXZ: "XZ archive", kindZIP: "ZIP archive", kindRAR: "RAR archive", kindJAR: "Java JAR file", kindTTF: "True Type font", kindOTF: "Open Type font", kindRPM: "RPM package", // texts kindText: "Text document", kindTextPlain: "Plain text", kindPHP: "PHP source", kindCSS: "Cascading style sheet", kindHTML: "HTML document", kindJS: "Javascript source", kindRTF: "Rich Text Format", kindC: "C source", kindCHeader: "C header source", kindCPP: "C++ source", kindCPPHeader: "C++ header source", kindShell: "Unix shell script", kindPython: "Python source", kindJava: "Java source", kindRuby: "Ruby source", kindPerl: "Perl script", kindSQL: "SQL source", kindXML: "XML document", kindAWK: "AWK source", kindCSV: "Comma separated values", kindDOCBOOK: "Docbook XML document", kindMarkdown: "Markdown text", // added 20.7.2015 // images kindImage: "Image", kindBMP: "BMP image", kindJPEG: "JPEG image", kindGIF: "GIF Image", kindPNG: "PNG Image", kindTIFF: "TIFF image", kindTGA: "TGA image", kindPSD: "Adobe Photoshop image", kindXBITMAP: "X bitmap image", kindPXM: "Pixelmator image", // media kindAudio: "Audio media", kindAudioMPEG: "MPEG audio", kindAudioMPEG4: "MPEG-4 audio", kindAudioMIDI: "MIDI audio", kindAudioOGG: "Ogg Vorbis audio", kindAudioWAV: "WAV audio", AudioPlaylist: "MP3 playlist", kindVideo: "Video media", kindVideoDV: "DV movie", kindVideoMPEG: "MPEG movie", kindVideoMPEG4: "MPEG-4 movie", kindVideoAVI: "AVI movie", kindVideoMOV: "Quick Time movie", kindVideoWM: "Windows Media movie", kindVideoFlash: "Flash movie", kindVideoMKV: "Matroska movie", kindVideoOGG: "Ogg movie", }, }; } PK Z1ɥjs/i18n/elfinder.de.jsnuW+A/** * Deutsch translation * @author JPG & Mace * @author tora60 from pragmaMx.org * @author Timo-Linde * @author OSWorX * @author Maximilian Schwarz * @author SF Webdesign * @version 2022-02-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.de = { translator : 'JPG & Mace <dev@flying-datacenter.de>, tora60 from pragmaMx.org, Timo-Linde <info@timo-linde.de>, OSWorX <info@osworx.net>, Maximilian Schwarz <info@deefuse.de>, SF Webdesign <webdesign@stephan-frank.de>', language : 'Deutsch', direction : 'ltr', dateFormat : 'j. F Y H:i', // will show like: 28. Februar 2022 13:17 fancyDateFormat : '$1 H:i', // will show like: Heute 13:17 nonameDateFormat : 'ymd-His', // noname upload will show like: 220228-131758 messages : { 'getShareText' : 'Aktie', 'Editor ': 'Kodex-Editor', /********************************** errors **********************************/ 'error' : 'Fehler', 'errUnknown' : 'Unbekannter Fehler.', 'errUnknownCmd' : 'Unbekannter Befehl.', 'errJqui' : 'Ungültige jQuery UI-Konfiguration. Die Komponenten Selectable, Draggable und Droppable müssen inkludiert sein.', 'errNode' : 'Für elFinder muss das DOM-Element erstellt werden.', 'errURL' : 'Ungültige elFinder-Konfiguration! Die URL-Option ist nicht gesetzt.', 'errAccess' : 'Zugriff verweigert.', 'errConnect' : 'Verbindung zum Backend fehlgeschlagen.', 'errAbort' : 'Verbindung abgebrochen.', 'errTimeout' : 'Zeitüberschreitung der Verbindung.', 'errNotFound' : 'Backend nicht gefunden.', 'errResponse' : 'Ungültige Backend-Antwort.', 'errConf' : 'Ungültige Backend-Konfiguration.', 'errJSON' : 'PHP JSON-Modul nicht vorhanden.', 'errNoVolumes' : 'Keine lesbaren Laufwerke vorhanden.', 'errCmdParams' : 'Ungültige Parameter für Befehl: "$1".', 'errDataNotJSON' : 'Daten nicht im JSON-Format.', 'errDataEmpty' : 'Daten sind leer.', 'errCmdReq' : 'Backend-Anfrage benötigt Befehl.', 'errOpen' : 'Kann "$1" nicht öffnen.', 'errNotFolder' : 'Objekt ist kein Ordner.', 'errNotFile' : 'Objekt ist keine Datei.', 'errRead' : 'Kann "$1" nicht öffnen.', 'errWrite' : 'Kann nicht in "$1" schreiben.', 'errPerm' : 'Zugriff verweigert.', 'errLocked' : '"$1" ist gesperrt und kann nicht umbenannt, verschoben oder gelöscht werden.', 'errExists' : 'Die Datei "$1" existiert bereits.', 'errInvName' : 'Ungültiger Dateiname.', 'errInvDirname' : 'Ungültiger Ordnername.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Ordner nicht gefunden.', 'errFileNotFound' : 'Datei nicht gefunden.', 'errTrgFolderNotFound' : 'Zielordner "$1" nicht gefunden.', 'errPopup' : 'Der Browser hat das Pop-Up-Fenster unterbunden. Um die Datei zu öffnen, Pop-Ups in den Browsereinstellungen aktivieren.', 'errMkdir' : 'Kann Ordner "$1" nicht erstellen.', 'errMkfile' : 'Kann Datei "$1" nicht erstellen.', 'errRename' : 'Kann "$1" nicht umbenennen.', 'errCopyFrom' : 'Kopieren von Dateien von "$1" nicht erlaubt.', 'errCopyTo' : 'Kopieren von Dateien nach "$1" nicht erlaubt.', 'errMkOutLink' : 'Der Link kann nicht außerhalb der Partition führen.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload-Fehler.', // old name - errUploadCommon 'errUploadFile' : 'Kann "$1" nicht hochladen.', // old name - errUpload 'errUploadNoFiles' : 'Keine Dateien zum Hochladen gefunden.', 'errUploadTotalSize' : 'Gesamtgröße überschreitet die Maximalgröße.', // old name - errMaxSize 'errUploadFileSize' : 'Die Datei überschreitet die Maximalgröße.', // old name - errFileMaxSize 'errUploadMime' : 'Dateiart (mime) nicht zulässig.', 'errUploadTransfer' : '"$1" Übertragungsfehler.', 'errUploadTemp' : 'Kann temporäre Datei nicht erstellen.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Das Objekt "$1" existiert bereits an dieser Stelle und kann nicht durch ein Objekt eines anderen Typs ersetzt werden.', // new 'errReplace' : 'Kann "$1" nicht ersetzen.', 'errSave' : 'Kann "$1" nicht speichern.', 'errCopy' : 'Kann "$1" nicht kopieren.', 'errMove' : 'Kann "$1" nicht verschieben.', 'errCopyInItself' : '"$1" kann sich nicht in sich selbst kopieren.', 'errRm' : 'Kann "$1" nicht entfernen.', 'errTrash' : 'Kann Objekt nicht in Mülleimer legen.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kann Quelldatei(en) nicht entfernen.', 'errExtract' : 'Kann "$1" nicht entpacken.', 'errArchive' : 'Archiv konnte nicht erstellt werden.', 'errArcType' : 'Archivtyp nicht untersützt.', 'errNoArchive' : 'Bei der Datei handelt es sich nicht um ein Archiv, oder die Archivart wird nicht unterstützt.', 'errCmdNoSupport' : 'Das Backend unterstützt diesen Befehl nicht.', 'errReplByChild' : 'Der Ordner "$1" kann nicht durch etwas ersetzt werden, das ihn selbst enthält.', 'errArcSymlinks' : 'Aus Sicherheitsgründen ist es verboten, ein Archiv mit symbolischen Links zu extrahieren.', // edited 24.06.2012 'errArcMaxSize' : 'Die Archivdateien übersteigen die maximal erlaubte Größe.', 'errResize' : 'Größe von "$1" kann nicht geändert werden.', 'errResizeDegree' : 'Ungültiger Rotationswert.', // added 7.3.2013 'errResizeRotate' : 'Bild konnte nicht gedreht werden.', // added 7.3.2013 'errResizeSize' : 'Ungültige Bildgröße.', // added 7.3.2013 'errResizeNoChange' : 'Bildmaße nicht geändert.', // added 7.3.2013 'errUsupportType' : 'Nicht unterstützte Dateiart.', 'errNotUTF8Content' : 'Die Datei "$1" ist nicht im UTF-8-Format und kann nicht bearbeitet werden.', // added 9.11.2011 'errNetMount' : 'Verbindung mit "$1" nicht möglich.', // added 17.04.2012 'errNetMountNoDriver' : 'Nicht unterstütztes Protokoll.', // added 17.04.2012 'errNetMountFailed' : 'Verbindung fehlgeschlagen.', // added 17.04.2012 'errNetMountHostReq' : 'Host benötigt.', // added 18.04.2012 'errSessionExpires' : 'Diese Sitzung ist aufgrund von Inaktivität abgelaufen.', 'errCreatingTempDir' : 'Erstellung des temporären Ordners nicht möglich: "$1"', 'errFtpDownloadFile' : 'Download der Datei über FTP nicht möglich: "$1"', 'errFtpUploadFile' : 'Upload der Datei zu FTP nicht möglich: "$1"', 'errFtpMkdir' : 'Erstellung des Remote-Ordners mit FTP nicht möglich: "$1"', 'errArchiveExec' : 'Fehler beim Archivieren der Dateien: "$1"', 'errExtractExec' : 'Fehler beim Extrahieren der Dateien: "$1"', 'errNetUnMount' : 'Kann nicht ausgehängt werden.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kann nicht zu UTF-8 konvertiert werden.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Ordner kann nich hochladen werden, eventuell mit Google Chrome versuchen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Zeitüberschreitung während der Suche nach "$1". Suchergebnis ist unvollständig.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Erneutes Anmelden ist erforderlich.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Die maximale Anzahl auswählbarer Elemente ist $1', // from v2.1.17 added 17.10.2016 'errRestore' : 'Datei konnte nicht aus Mülleimer wieder hergestellt werden bzw. Ziel für Wiederherstellung nicht gefunden.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Kein Editor für diesen Dateityp gefunden.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Ein serverseitiger Fehler trat auf.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Konnte Ordner "$1" nicht Leeren.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Es sind noch $1 weitere Fehler.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Sie können bis zu $1 Ordner gleichzeitig erstellen.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Archiv erstellen', 'cmdback' : 'Zurück', 'cmdcopy' : 'Kopieren', 'cmdcut' : 'Ausschneiden', 'cmddownload' : 'Herunterladen', 'cmdduplicate' : 'Duplizieren', 'cmdedit' : 'Datei bearbeiten', 'cmdextract' : 'Archiv entpacken', 'cmdforward' : 'Vorwärts', 'cmdgetfile' : 'Datei auswählen', 'cmdhelp' : 'Über diese Software', 'cmdhome' : 'Startordner', 'cmdinfo' : 'Informationen', 'cmdmkdir' : 'Neuer Ordner', 'cmdmkdirin' : 'In neuen Ordner', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Neuer Datei', 'cmdopen' : 'Öffnen', 'cmdpaste' : 'Einfügen', 'cmdquicklook' : 'Vorschau', 'cmdreload' : 'Aktualisieren', 'cmdrename' : 'Umbenennen', 'cmdrm' : 'Löschen', 'cmdtrash' : 'In den Mülleimer legen', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Wiederherstellen', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Suchen', 'cmdup' : 'In übergeordneten Ordner wechseln', 'cmdupload' : 'Datei hochladen', 'cmdview' : 'Ansehen', 'cmdresize' : 'Größe ändern & drehen', 'cmdsort' : 'Sortieren', 'cmdnetmount' : 'Verbinde mit Netzwerkspeicher', // added 18.04.2012 'cmdnetunmount': 'Abhängen', // from v2.1 added 30.04.2012 'cmdplaces' : 'Favoriten', // added 28.12.2014 'cmdchmod' : 'Berechtigung ändern', // from v2.1 added 20.6.2015 'cmdopendir' : 'Einen Ordner öffnen', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Spaltenbreite zurücksetzen', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Vollbild', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Verschieben', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Ordner Leeren', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Rückgängig', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Wiederholen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Einstellungen', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Alle auswählen', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Keine auswählen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Auswahl rückgängig machen', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'In neuem Fenster öffnen', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Verstecken', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Schließen', 'btnSave' : 'Speichern', 'btnRm' : 'Entfernen', 'btnApply' : 'Anwenden', 'btnCancel' : 'Abbrechen', 'btnNo' : 'Nein', 'btnYes' : 'Ja', 'btnMount' : 'Verbinden', // added 18.04.2012 'btnApprove': 'Gehe zu $1 und genehmige', // from v2.1 added 26.04.2012 'btnUnmount': 'Auswerfen', // from v2.1 added 30.04.2012 'btnConv' : 'Konvertieren', // from v2.1 added 08.04.2014 'btnCwd' : 'Arbeitspfad', // from v2.1 added 22.5.2015 'btnVolume' : 'Partition', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-Typ', // from v2.1 added 22.5.2015 'btnFileName':'Dateiname', // from v2.1 added 22.5.2015 'btnSaveClose': 'Speichern & Schließen', // from v2.1 added 12.6.2015 'btnBackup' : 'Sicherung', // fromv2.1 added 28.11.2015 'btnRename' : 'Umbenennen', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Alle Umbenennen', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Zurück ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Weiter ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Speichern als', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Öffne Ordner', 'ntffile' : 'Öffne Datei', 'ntfreload' : 'Ordnerinhalt neu', 'ntfmkdir' : 'Erstelle Ordner', 'ntfmkfile' : 'Erstelle Dateien', 'ntfrm' : 'Lösche Dateien', 'ntfcopy' : 'Kopiere Dateien', 'ntfmove' : 'Verschiebe Dateien', 'ntfprepare' : 'Kopiervorgang initialisieren', 'ntfrename' : 'Benenne Dateien um', 'ntfupload' : 'Dateien hochladen', 'ntfdownload' : 'Dateien herunterladen', 'ntfsave' : 'Speichere Datei', 'ntfarchive' : 'Erstelle Archiv', 'ntfextract' : 'Entpacke Dateien', 'ntfsearch' : 'Suche', 'ntfresize' : 'Bildgrößen ändern', 'ntfsmth' : 'Bin beschäftigt ..', 'ntfloadimg' : 'Lade Bild ..', 'ntfnetmount' : 'Mit Netzwerkspeicher verbinden', // added 18.04.2012 'ntfnetunmount': 'Netzwerkspeicher auswerfen', // from v2.1 added 30.04.2012 'ntfdim' : 'Bildgröße erfassen', // added 20.05.2013 'ntfreaddir' : 'Lese Ordnerinformationen', // from v2.1 added 01.07.2013 'ntfurl' : 'Hole URL von Link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ändere Dateiberechtigungen', // from v2.1 added 20.6.2015 'ntfpreupload': 'Upload-Dateinamen überprüfen', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Erstelle Datei zum Download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Beziehe Pfad Informationen', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Upload läuft', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Bewege in den Mülleimer', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Wiederherstellung aus Mülleimer', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Prüfe Zielordner', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Vorherige Operation rückgängig machen', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Wiederherstellen', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Überprüfe Inhalte', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Mülleimer', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unbekannt', 'Today' : 'Heute', 'Yesterday' : 'Gestern', 'msJan' : 'Januar', 'msFeb' : 'Februar', 'msMar' : 'Mär', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Juni', 'msJul' : 'Juli', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dez', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'März', 'April' : 'April', 'May' : 'Mai', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'Dezember', 'Sunday' : 'Sonntag', 'Monday' : 'Montag', 'Tuesday' : 'Dienstag', 'Wednesday' : 'Mittwoch', 'Thursday' : 'Donnerstag', 'Friday' : 'Freitag', 'Saturday' : 'Samstag', 'Sun' : 'So', 'Mon' : 'Mo', 'Tue' : 'Di', 'Wed' : 'Mi', 'Thu' : 'Do', 'Fri' : 'Fr', 'Sat' : 'Sa', /******************************** sort variants ********************************/ 'sortname' : 'nach Name', 'sortkind' : 'nach Art', 'sortsize' : 'nach Größe', 'sortdate' : 'nach Datum', 'sortFoldersFirst' : 'Ordner zuerst', 'sortperm' : 'nach Berechtigung', // from v2.1.13 added 13.06.2016 'sortmode' : 'nach Modus', // from v2.1.13 added 13.06.2016 'sortowner' : 'nach Besitzer', // from v2.1.13 added 13.06.2016 'sortgroup' : 'nach Gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'auch Baumansicht', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Neues Textdokument.txt', // added 10.11.2015 'untitled folder' : 'Neuer Ordner', // added 10.11.2015 'Archive' : 'Neues Archiv', // from v2.1 added 10.11.2015 'untitled file' : 'Neue Datei.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Datei', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bestätigung benötigt', 'confirmRm' : 'Sollen die Dateien gelöscht werden?
Vorgang ist endgültig!', 'confirmRepl' : 'Datei ersetzen?', 'confirmRest' : 'Vorhandenes Element durch das Element aus Mülleimer ersetzen?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nicht UTF-8 kodiert
Zu UTF-8 konvertieren?
Inhalte werden zu UTF-8 konvertiert bei Speicherung.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Die Zeichencodierung dieser Datei konnte nicht erkannt werden. Es muss vorübergehend in UTF-8 zur Bearbeitung konvertiert werden.
Bitte eine Zeichenkodierung dieser Datei auswählen.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Die Datei wurde geändert.
Änderungen gehen verloren wenn nicht gespeichert wird.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sicher diese Elemente in den Mülleimer verschieben?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Sicher alle Elemente nach "$1" verschieben?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Alles bestätigen', 'name' : 'Name', 'size' : 'Größe', 'perms' : 'Berechtigungen', 'modify' : 'Geändert', 'kind' : 'Typ', 'read' : 'Lesen', 'write' : 'Schreiben', 'noaccess' : 'Kein Zugriff', 'and' : 'und', 'unknown' : 'unbekannt', 'selectall' : 'Alle Dateien auswählen', 'selectfiles' : 'Dateien auswählen', 'selectffile' : 'Erste Datei auswählen', 'selectlfile' : 'Letzte Datei auswählen', 'viewlist' : 'Spaltenansicht', 'viewicons' : 'Symbolansicht', 'viewSmall' : 'Kleine Icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium Icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Große Icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extragroße Icons', // from v2.1.39 added 22.5.2018 'places' : 'Favoriten', 'calc' : 'Berechne', 'path' : 'Pfad', 'aliasfor' : 'Verknüpfung zu', 'locked' : 'Gesperrt', 'dim' : 'Bildgröße', 'files' : 'Dateien', 'folders' : 'Ordner', 'items' : 'Objekte', 'yes' : 'ja', 'no' : 'nein', 'link' : 'Link', 'searcresult' : 'Suchergebnisse', 'selected' : 'Objekte ausgewählt', 'about' : 'Über', 'shortcuts' : 'Tastenkombinationen', 'help' : 'Hilfe', 'webfm' : 'Web-Dateiverwaltung', 'ver' : 'Fassung', 'protocolver' : 'Protokoll-Version', 'homepage' : 'Projekt-Webseite', 'docs' : 'Dokumentation', 'github' : 'Forke uns auf Github', 'twitter' : 'Folge uns auf twitter', 'facebook' : 'Begleite uns auf facebook', 'team' : 'Mannschaft', 'chiefdev' : 'Chefentwickler', 'developer' : 'Entwickler', 'contributor' : 'Unterstützer', 'maintainer' : 'Maintainer', 'translator' : 'Übersetzer', 'icons' : 'Symbole', 'dontforget' : 'und vergiss nicht .. morgen ist auch noch ein Tag ..', 'shortcutsof' : 'Tastenkombinationen deaktiviert', 'dropFiles' : 'Dateien hier ablegen', 'or' : 'oder', 'selectForUpload' : 'Dateien zum Upload auswählen', 'moveFiles' : 'Dateien verschieben', 'copyFiles' : 'Dateien kopieren', 'restoreFiles' : 'Elemente wiederherstellen', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Lösche von Favoriten', 'aspectRatio' : 'Seitenverhältnis', 'scale' : 'Maßstab', 'width' : 'Breite', 'height' : 'Höhe', 'resize' : 'Größe ändern', 'crop' : 'Zuschneiden', 'rotate' : 'Drehen', 'rotate-cw' : 'Drehe 90° im Uhrzeigersinn', 'rotate-ccw' : 'Drehe 90° gegen Uhrzeigersinn', 'degree' : '°', 'netMountDialogTitle' : 'verbinde Netzwerkspeicher', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Gastgeber', // added 18.04.2012 'port' : 'Hafen', // added 18.04.2012 'user' : 'Benutzer', // added 18.04.2012 'pass' : 'Passwort', // added 18.04.2012 'confirmUnmount' : 'Soll "$1" ausgehängt werden', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Dateien in den Browser ziehen', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dateien hier loslassen', // from v2.1 added 07.04.2014 'encoding' : 'Kodierung', // from v2.1 added 19.12.2014 'locale' : 'Lokal', // from v2.1 added 19.12.2014 'searchTarget' : 'Ziel: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Suche nach MIME-Typ', // from v2.1 added 22.5.2015 'owner' : 'Besitzer', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Andere', // from v2.1 added 20.6.2015 'execute' : 'Ausführen', // from v2.1 added 20.6.2015 'perm' : 'Berechtigung', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Der Ordner ist leer', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Der Ordner ist leer\\A Elemente durch Ziehen hinzufügen', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Der Ordner ist leer\\A Elemente durch langes Tippen hinzufügen', // from v2.1.6 added 30.12.2015 'quality' : 'Qualität', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatische Synchronisation', // from v2.1.6 added 10.1.2016 'moveUp' : 'Nach oben bewegen', // from v2.1.6 added 18.1.2016 'getLink' : 'URL-Link holen', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Ausgewählte Objekte ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Ordner-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Offline-Zugriff erlauben', // from v2.1.10 added 3.25.2016 'reAuth' : 'Erneut anmelden', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Wird geladen...', // from v2.1.12 added 4.26.2016 'openMulti' : 'mehrere Dateien öffnen', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Es wird versucht die $1 Dateien zu öffnen .. sicher im Browser öffnen?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Kein Suchergebnis', // from v2.1.12 added 5.16.2016 'editingFile' : 'Datei wird bearbeitet.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 Objekt(e) ausgewählt.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 Objekte im Clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementelle Suche bezieht sich nur auf die aktuelle Ansicht.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Wiederherstellen', // from v2.1.15 added 3.8.2016 'complete' : '$1 abgeschlossen', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextmenü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Seite umblättern', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume-Rootverzeichnisse', // from v2.1.16 added 16.9.2016 'reset' : 'Neustart', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Hintergrund Farbe', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Farbauswahl', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Raster', // from v2.1.16 added 4.10.2016 'enabled' : 'Ein', // from v2.1.16 added 4.10.2016 'disabled' : 'Aus', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Keine Ergebnisse in der aktuellen Anzeige', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Die Ergebnisse der ersten Buchstabensuche sind in der aktuellen Ansicht leer.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text Bezeichnung', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 Minuten übrig', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Wiedereröffnen mit ausgewählter Codierung', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Speichern mit der gewählten Kodierung', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Verzeichnis auswählen', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Erster Buchstabe suche', // from v2.1.23 added 24.3.2017 'presets' : 'Voreinstellungen', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Zu viele Elemente auf einmal für den Mülleimer.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textbereich', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Leere Ordner "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Es befinden sich keine Elemente im Ordner "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Einstellungen', // from v2.1.26 added 28.6.2017 'language' : 'Spracheinstellungen', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisiere die Einstellungen, welche in diesem Browser gespeichert sind', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbareinstellung', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 Zeichen übrig', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 Zeilen übrig.', // from v2.1.52 added 16.1.2020 'sum' : 'Summe', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Ungefähre Dateigröße', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokussierung auf das Element Dialog mit Mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Auswählen', // from v2.1.30 added 23.11.2017 'selectAction' : 'Aktion bei der Auswahl der Datei', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Öffnen mit dem zuletzt verwendeten Editor', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Auswahl umkehren', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sicher $1 ausgewählte Elemente in $2 umbenennen?
Rückgängig nicht möglich!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Stapelumbenennung', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Vorzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Nachzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Erweiterung ändern', // from v2.1.31 added 8.12.2017 'columnPref' : 'Spalteneinstellungen (Listenansicht)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle Änderungen werden sofort im Archiv angewendet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Alle Änderungen werden nicht angewendet bis dieses Volume entfernt wird.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Die folgenden Datenträger, die auf diesem Datenträger eingehängt sind, werden ebenfalls ausgehängt. Sicher dass alle aushängt werden sollen?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Auswahl Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Datei-Hash-Algorithmen', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info-Elemente (Auswahl-Info-Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Drücken Sie erneut, um zu beenden.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Symbolleiste', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbeitsplatz', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icongröße (Symbolansicht)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Öffne Editorfenster in voller Größe', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Aktuell keine API zur Bearbeitung verfügbar, bitte auf Webseite bearbeiten', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Um zu speichern nach der Bearbeitung Element entweder mit URL hochladen oder mit herunter geladener Datei', //from v2.1.40 added 8.7.2018 'convertOn' : 'Bearbeiten auf Seite $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrationen', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Diese Software hat folgende externe Dienste integriert. Vor Anwendung bitte die jeweiligen Nutzungsbedingungen usw. beachten', // from v2.1.40 added 11.7.2018 'showHidden' : 'Zeige versteckte Elemente', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Verberge versteckte Elemente', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Zeige/Verberge versteckte Elemente', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Dateiarten bei "Neue Datei" aktivieren', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Art der Textdatei', // from v2.1.41 added 7.8.2018 'add' : 'Neu', // from v2.1.41 added 7.8.2018 'theme' : 'Thema', // from v2.1.43 added 19.10.2018 'default' : 'Standard', // from v2.1.43 added 19.10.2018 'description' : 'Beschreibung', // from v2.1.43 added 19.10.2018 'website' : 'Webseite', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Lizenz', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dieses Element kann nicht gespeichert werden. Um Änderungen nicht zu verlieren, muss es auf den lokalen PC exportiert werden', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Doppelt auf Datei klicken um auszuwählen', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Gesamter Bildschirm', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unbekannt', 'kindRoot' : 'Stammverzeichnis', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Ordner', 'kindSelects' : 'Auswahlkriterien', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Verknüpfung', 'kindAliasBroken' : 'Defekte Verknüpfung', // applications 'kindApp' : 'Programm', 'kindPostscript' : 'Postscript-Dokument', 'kindMsOffice' : 'MS Office-Dokument', 'kindMsWord' : 'MS Word-Dokument', 'kindMsExcel' : 'MS Excel-Dokument', 'kindMsPP' : 'MS Powerpoint-Präsentation', 'kindOO' : 'Open Office-Dokument', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portables Dokumentenformat (PDF)', 'kindTorrent' : 'Bittorrent-Datei', 'kind7z' : '7z-Archiv', 'kindTAR' : 'TAR-Archiv', 'kindGZIP' : 'GZIP-Archiv', 'kindBZIP' : 'BZIP-Archiv', 'kindXZ' : 'XZ-Archiv', 'kindZIP' : 'ZIP-Archiv', 'kindRAR' : 'RAR-Archiv', 'kindJAR' : 'Java JAR-Datei', 'kindTTF' : 'True Type-Schrift', 'kindOTF' : 'Open Type-Schrift', 'kindRPM' : 'RPM-Paket', // texts 'kindText' : 'Text-Dokument', 'kindTextPlain' : 'Text-Dokument', 'kindPHP' : 'PHP-Quelltext', 'kindCSS' : 'CSS Stilvorlage', 'kindHTML' : 'HTML-Dokument', 'kindJS' : 'Javascript-Quelltext', 'kindRTF' : 'Formatierte Textdatei', 'kindC' : 'C-Quelltext', 'kindCHeader' : 'C Header-Quelltext', 'kindCPP' : 'C++ Quelltext', 'kindCPPHeader' : 'C++ Header-Quelltext', 'kindShell' : 'Unix-Shell-Skript', 'kindPython' : 'Python-Quelltext', 'kindJava' : 'Java-Quelltext', 'kindRuby' : 'Ruby-Quelltext', 'kindPerl' : 'Perl Script', 'kindSQL' : 'SQL-Quelltext', 'kindXML' : 'XML-Dokument', 'kindAWK' : 'AWK-Quelltext', 'kindCSV' : 'Kommagetrennte Daten', 'kindDOCBOOK' : 'Docbook XML-Dokument', 'kindMarkdown' : 'Markdown-Text', // added 20.7.2015 // images 'kindImage' : 'Bild', 'kindBMP' : 'Bitmap-Bild', 'kindJPEG' : 'JPEG-Bild', 'kindGIF' : 'GIF-Bild', 'kindPNG' : 'PNG-Bild', 'kindTIFF' : 'TIFF-Bild', 'kindTGA' : 'TGA-Bild', 'kindPSD' : 'Adobe Photoshop-Dokument', 'kindXBITMAP' : 'X Bitmap-Bild', 'kindPXM' : 'Pixelmator-Bild', // media 'kindAudio' : 'Audiodatei', 'kindAudioMPEG' : 'MPEG Audio', 'kindAudioMPEG4' : 'MPEG-4 Audio', 'kindAudioMIDI' : 'MIDI Audio', 'kindAudioOGG' : 'Ogg Vorbis Audio', 'kindAudioWAV' : 'WAV Audio', 'AudioPlaylist' : 'MP3-Playlist', 'kindVideo' : 'Videodatei', 'kindVideoDV' : 'DV Film', 'kindVideoMPEG' : 'MPEG Film', 'kindVideoMPEG4' : 'MPEG4 Film', 'kindVideoAVI' : 'AVI Film', 'kindVideoMOV' : 'QuickTime Film', 'kindVideoWM' : 'Windows Media Film', 'kindVideoFlash' : 'Flash Film', 'kindVideoMKV' : 'Matroska Film', 'kindVideoOGG' : 'Ogg Film' } }; }));PK Z lҁҁjs/i18n/elfinder.no.jsnuW+A/** * Norwegian Bokmål translation * @author Stian Jacobsen * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.no = { translator : 'Stian Jacobsen <stian@promonorge.no>', language : 'Norwegian Bokmål', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: mars 02, 2022 04:32 PM fancyDateFormat : '$1 h:i A', // will show like: I dag 04:32 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 220302-163250 messages : { 'getShareText' : 'Dele', 'Editor ': 'Koderedigerer', /********************************** errors **********************************/ 'error' : 'Feil', 'errUnknown' : 'Ukjent feil.', 'errUnknownCmd' : 'Ukjent kommando.', 'errJqui' : 'Ugyldig jQuery UI konfigurasjon. Selectable, draggable og droppable komponentene må være inkludert.', 'errNode' : 'elFinder påkrever at DOM Elementer kan opprettes.', 'errURL' : 'Ugyldig elFinder konfigurasjon! URL-valget er ikke satt.', 'errAccess' : 'Ingen adgang.', 'errConnect' : 'Kunne ikke koble til.', 'errAbort' : 'Tilkoblingen avbrutt.', 'errTimeout' : 'Tilkoblingen tidsavbrudd.', 'errNotFound' : 'Backend ble ikke funnet', 'errResponse' : 'Ugyldig backend respons.', 'errConf' : 'Ugyldig backend konfigurasjon.', 'errJSON' : 'PHP JSON modul er ikke installert.', 'errNoVolumes' : 'Lesbar volum er ikke tilgjennelig.', 'errCmdParams' : 'Ugyldig parameter for kommando "$1".', 'errDataNotJSON' : 'Innhold er ikke JSON.', 'errDataEmpty' : 'Innholdet er tomt.', 'errCmdReq' : 'Backend spørringen påkrever kommando.', 'errOpen' : 'Kunne ikke åpne "$1".', 'errNotFolder' : 'Objektet er ikke en mappe.', 'errNotFile' : 'Objektet er ikke en fil.', 'errRead' : 'Kunne ikke lese "$1".', 'errWrite' : 'Kunne ikke skrive til "$1".', 'errPerm' : 'Du har ikke rettigheter.', 'errLocked' : '"$1" er låst og kan ikke flyttes, slettes eller endres', 'errExists' : 'Filen "$1" finnes allerede.', 'errInvName' : 'Ugyldig filnavn.', 'errInvDirname' : 'Ugyldig mappenavn.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappen finnes ikke.', 'errFileNotFound' : 'Filen finnes ikke.', 'errTrgFolderNotFound' : 'Målmappen "$1" ble ikke funnet.', 'errPopup' : 'Nettleseren din blokkerte et pop-up vindu. For å åpne filen må du aktivere pop-up i din nettlesers innstillinger.', 'errMkdir' : 'Kunne ikke opprette mappen "$1".', 'errMkfile' : 'Kunne ikke opprette filen "$1".', 'errRename' : 'Kunne ikke gi nytt navn til "$1".', 'errCopyFrom' : 'Kopiere filer fra "$1" er ikke tillatt.', 'errCopyTo' : 'Kopiere filer til "$1" er ikke tillatt.', 'errMkOutLink' : 'Kan ikke opprette en kobling til utenfor volumroten.', // from v2.1 added 03.10.2015 'errUpload' : 'Feil under opplasting.', // old name - errUploadCommon 'errUploadFile' : 'Kunne ikke laste opp "$1".', // old name - errUpload 'errUploadNoFiles' : 'Ingen filer funnet til opplasting.', 'errUploadTotalSize' : 'Innholdet overgår maksimum tillatt størrelse.', // old name - errMaxSize 'errUploadFileSize' : 'Filen vergår maksimum tillatt størrelse.', // old name - errFileMaxSize 'errUploadMime' : 'Filtypen ikke tillatt.', 'errUploadTransfer' : '"$1" overførings feil.', 'errUploadTemp' : 'Kan ikke lage en midlertidig fil for opplasting.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objektet "$1" eksisterer allerede på denne plasseringen og kan ikke erstattes av objektet med en annen type.', // new 'errReplace' : 'Kan ikke erstatte "$1".', 'errSave' : 'Kunne ikke lagre "$1".', 'errCopy' : 'Kunne ikke kopiere "$1".', 'errMove' : 'Kunne ikke flytte "$1".', 'errCopyInItself' : 'Kunne ikke kopiere "$1" til seg selv.', 'errRm' : 'Kunne ikke slette "$1".', 'errTrash' : 'Kan ikke legges i papirkurven.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kan ikke fjerne kildefil(er).', 'errExtract' : 'Kunne ikke pakke ut filer fra "$1".', 'errArchive' : 'Kunne ikke opprette arkiv.', 'errArcType' : 'akriv-typen er ikke støttet.', 'errNoArchive' : 'Filen er ikke et arkiv eller et arkiv som ikke er støttet.', 'errCmdNoSupport' : 'Backend støtter ikke denne kommandoen.', 'errReplByChild' : 'The folder “$1” can’t be replaced by an item it contains.', 'errArcSymlinks' : 'Av sikkerhetsgrunner nektet å pakke ut inneholder arkiver symbolkoblinger eller filer med ikke tillatte navn.', // edited 24.06.2012 'errArcMaxSize' : 'Arkivfiler overskrider maksimal tillatt størrelse.', 'errResize' : 'Kan ikke endre størrelsen på "$1".', 'errResizeDegree' : 'Ugyldig rotasjonsgrad.', // added 7.3.2013 'errResizeRotate' : 'Kan ikke rotere bildet.', // added 7.3.2013 'errResizeSize' : 'Ugyldig bildestørrelse.', // added 7.3.2013 'errResizeNoChange' : 'Bildestørrelsen er ikke endret.', // added 7.3.2013 'errUsupportType' : 'Ustøttet filtype.', 'errNotUTF8Content' : 'Filen "$1" er ikke i UTF-8 og kan ikke redigeres.', // added 9.11.2011 'errNetMount' : 'Kan ikke montere "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ustøttet protokoll.', // added 17.04.2012 'errNetMountFailed' : 'Montering mislyktes.', // added 17.04.2012 'errNetMountHostReq' : 'Vert kreves.', // added 18.04.2012 'errSessionExpires' : 'Økten din har utløpt på grunn av inaktivitet.', 'errCreatingTempDir' : 'Kan ikke opprette midlertidig katalog: "$1"', 'errFtpDownloadFile' : 'Kan ikke laste ned fil fra FTP: "$1"', 'errFtpUploadFile' : 'Kan ikke laste opp filen til FTP: "$1"', 'errFtpMkdir' : 'Kan ikke opprette ekstern katalog på FTP: "$1"', 'errArchiveExec' : 'Feil under arkivering av filer: "$1"', 'errExtractExec' : 'Feil under utpakking av filer: "$1"', 'errNetUnMount' : 'Kan ikke demontere.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kan ikke konverteres til UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prøv den moderne nettleseren, hvis du vil laste opp mappen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Tidsavbrudd under søking av «$1». Søkeresultatet er delvis.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Det kreves ny autorisasjon.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maks antall valgbare varer er $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Kan ikke gjenopprette fra papirkurven. Kan ikke identifisere gjenopprettingsdestinasjonen.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Finner ikke redigeringsprogrammet for denne filtypen.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Det oppstod en feil på serversiden.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Kan ikke tømme mappen "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Det er $1 flere feil.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Du kan opprette opptil $1 mapper om gangen.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Opprett arkiv', 'cmdback' : 'Tilbake', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klipp ut', 'cmddownload' : 'Last ned', 'cmdduplicate' : 'Dupliser', 'cmdedit' : 'Rediger fil', 'cmdextract' : 'Pakk ut filer fra arkiv', 'cmdforward' : 'Frem', 'cmdgetfile' : 'Velg filer', 'cmdhelp' : 'Om', 'cmdhome' : 'Hjem', 'cmdinfo' : 'Vis info', 'cmdmkdir' : 'Ny mappe', 'cmdmkdirin' : 'Inn i ny mappe', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Åpne', 'cmdpaste' : 'Lim inn', 'cmdquicklook' : 'Forhåndsvis', 'cmdreload' : 'Last inn på nytt', 'cmdrename' : 'Gi nytt navn', 'cmdrm' : 'Slett', 'cmdtrash' : 'Til søppel', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurere', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find filer', 'cmdup' : 'Opp et nivå', 'cmdupload' : 'Last opp filer', 'cmdview' : 'Vis', 'cmdresize' : 'Endre størrelse og roter', 'cmdsort' : 'Sortere', 'cmdnetmount' : 'Monter nettverksvolum', // added 18.04.2012 'cmdnetunmount': 'Demonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Til steder', // added 28.12.2014 'cmdchmod' : 'Endre modus', // from v2.1 added 20.6.2015 'cmdopendir' : 'Åpne en mappe', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Tilbakestill kolonnebredden', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full skjerm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Bevege seg', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Tøm mappen', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Angre', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Gjøre om', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferanser', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Velg alle', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Velg ingen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverter utvalg', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Åpne i nytt vindu', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skjul (preferanse)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Lukk', 'btnSave' : 'Lagre', 'btnRm' : 'Slett', 'btnApply' : 'Søke om', 'btnCancel' : 'Avbryt', 'btnNo' : 'Nei', 'btnYes' : 'Ja', 'btnMount' : 'Monter', // added 18.04.2012 'btnApprove': 'Gå til $1 og godkjenn', // from v2.1 added 26.04.2012 'btnUnmount': 'Demonter', // from v2.1 added 30.04.2012 'btnConv' : 'Konvertere', // from v2.1 added 08.04.2014 'btnCwd' : 'Her', // from v2.1 added 22.5.2015 'btnVolume' : 'Volum', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-type', // from v2.1 added 22.5.2015 'btnFileName':'Filnavn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Lagre og lukk', // from v2.1 added 12.6.2015 'btnBackup' : 'Sikkerhetskopiering', // fromv2.1 added 28.11.2015 'btnRename' : 'Gi nytt navn', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Gi nytt navn (alle)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Forrige ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Neste ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Lagre som', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Åpne mappe', 'ntffile' : 'Åpne fil', 'ntfreload' : 'Last inn mappen på nytt', 'ntfmkdir' : 'Oppretter mappe', 'ntfmkfile' : 'Oppretter filer', 'ntfrm' : 'Sletter filer', 'ntfcopy' : 'Kopierer filer', 'ntfmove' : 'Flytter filer', 'ntfprepare' : 'Gjør klar til kopiering av filer', 'ntfrename' : 'Gir nytt navn til filer', 'ntfupload' : 'Laster opp filer', 'ntfdownload' : 'Laster ned filer', 'ntfsave' : 'Lagrer filer', 'ntfarchive' : 'Oppretter arkiv', 'ntfextract' : 'Pakker ut filer fra arkiv', 'ntfsearch' : 'Søker i filer', 'ntfresize' : 'Endre størrelse på bilder', 'ntfsmth' : 'Gjør noe... >_<', 'ntfloadimg' : 'Laster inn bilde', 'ntfnetmount' : 'Montering av nettverksvolum', // added 18.04.2012 'ntfnetunmount': 'Demonterer nettverksvolum', // from v2.1 added 30.04.2012 'ntfdim' : 'Få bildedimensjon', // added 20.05.2013 'ntfreaddir' : 'Leser mappeinformasjon', // from v2.1 added 01.07.2013 'ntfurl' : 'Henter URL til lenke', // from v2.1 added 11.03.2014 'ntfchmod' : 'Endre filmodus', // from v2.1 added 20.6.2015 'ntfpreupload': 'Bekrefter navnet på opplastingsfilen', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Opprette en fil for nedlasting', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Henter baneinformasjon', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Behandler den opplastede filen', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Kaster i søpla', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Gjenoppretter fra søpla', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Sjekker målmappen', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Angre tidligere operasjon', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Gjør om forrige angret', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrollerer innholdet', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Søppel', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Ukjent', 'Today' : 'I dag', 'Yesterday' : 'I går', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'mars', 'msApr' : 'apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'jul', 'msAug' : 'august', 'msSep' : 'sep', 'msOct' : 'Okt', 'msNov' : 'nov', 'msDec' : 'Des', 'January' : 'januar', 'February' : 'februar', 'March' : 'mars', 'April' : 'april', 'May' : 'Kan', 'June' : 'juni', 'July' : 'juli', 'August' : 'august', 'September' : 'september', 'October' : 'oktober', 'November' : 'november', 'December' : 'desember', 'Sunday' : 'søndag', 'Monday' : 'mandag', 'Tuesday' : 'tirsdag', 'Wednesday' : 'onsdag', 'Thursday' : 'Torsdag', 'Friday' : 'fredag', 'Saturday' : 'lørdag', 'Sun' : 'Sol', 'Mon' : 'man', 'Tue' : 'tirs', 'Wed' : 'ons', 'Thu' : 'tor', 'Fri' : 'fre', 'Sat' : 'Lør', /******************************** sort variants ********************************/ 'sortname' : 'ved navn', 'sortkind' : 'etter slag', 'sortsize' : 'etter størrelse', 'sortdate' : 'etter dato', 'sortFoldersFirst' : 'Mapper først', 'sortperm' : 'med tillatelse', // from v2.1.13 added 13.06.2016 'sortmode' : 'etter modus', // from v2.1.13 added 13.06.2016 'sortowner' : 'av eier', // from v2.1.13 added 13.06.2016 'sortgroup' : 'etter gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Også Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'Ny mappe', // added 10.11.2015 'Archive' : 'Nytt arkiv', // from v2.1 added 10.11.2015 'untitled file' : 'Ny fil.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fil', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bekreftelse nødvendig', 'confirmRm' : 'Er du sikker på at du ønsker å slette filene?', 'confirmRepl' : 'Erstatt fil?', 'confirmRest' : 'Vil du erstatte eksisterende element med elementet i papirkurven?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Ikke i UTF-8
Konverter til UTF-8?
Innhold blir UTF-8 ved å lagre etter konvertering.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Tegnkoding av denne filen kunne ikke oppdages. Den må midlertidig konvertere til UTF-8 for redigering.
Velg tegnkoding for denne filen.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Den har blitt endret.
Mister arbeid hvis du ikke lagrer endringer.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Er du sikker på at du vil flytte elementer til søppelbøtta?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Er du sikker på at du vil flytte elementer til "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Gjelder for alle', 'name' : 'Navn', 'size' : 'Størrelse', 'perms' : 'Rettigheter', 'modify' : 'Endret', 'kind' : 'Type', 'read' : 'les', 'write' : 'skriv', 'noaccess' : 'ingen adgang', 'and' : 'og', 'unknown' : 'ukjent', 'selectall' : 'Velg alle filene', 'selectfiles' : 'Velg fil(er)', 'selectffile' : 'Velg første fil', 'selectlfile' : 'Velg siste fil', 'viewlist' : 'Listevisning', 'viewicons' : 'Ikoner', 'viewSmall' : 'Små ikoner', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Middels ikoner', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Store ikoner', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ekstra store ikoner', // from v2.1.39 added 22.5.2018 'places' : 'Områder', 'calc' : 'Beregn', 'path' : 'Bane', 'aliasfor' : 'Alias for', 'locked' : 'Låst', 'dim' : 'Størrelser', 'files' : 'Filer', 'folders' : 'Mapper', 'items' : 'objekter', 'yes' : 'ja', 'no' : 'nei', 'link' : 'Link', 'searcresult' : 'Søkeresultater', 'selected' : 'valgte filer', 'about' : 'Om', 'shortcuts' : 'Snarveier', 'help' : 'Hjelp', 'webfm' : 'Web-filbehandler', 'ver' : 'Versjon', 'protocolver' : 'protokol versjon', 'homepage' : 'Prosjekt hjem', 'docs' : 'dokumentasjon', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'Team', 'chiefdev' : 'sjefutvikler', 'developer' : 'utvikler', 'contributor' : 'bidragsyter', 'maintainer' : 'vedlikeholder', 'translator' : 'oversetter', 'icons' : 'Ikoner', 'dontforget' : 'and don\'t forget to bring a towel', 'shortcutsof' : 'Snarveier avslått', 'dropFiles' : 'Slipp filer her', 'or' : 'eller', 'selectForUpload' : 'Velg filer til opplasting', 'moveFiles' : 'Flytt filer', 'copyFiles' : 'Kopier filer', 'restoreFiles' : 'Gjenopprett elementer', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Fjern fra steder', 'aspectRatio' : 'Størrelsesforholdet', 'scale' : 'Skala', 'width' : 'Bredde', 'height' : 'Høyde', 'resize' : 'Endre størrelse', 'crop' : 'Avling', 'rotate' : 'Rotere', 'rotate-cw' : 'Roter 90 grader CW', 'rotate-ccw' : 'Roter 90 grader moturs', 'degree' : '°', 'netMountDialogTitle' : 'Monter nettverksvolum', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Vert', // added 18.04.2012 'port' : 'Havn', // added 18.04.2012 'user' : 'Bruker', // added 18.04.2012 'pass' : 'Passord', // added 18.04.2012 'confirmUnmount' : 'Avmonterer du $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Slipp eller lim inn filer fra nettleseren', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Slipp filer, lim inn URL-er eller bilder (utklippstavle) her', // from v2.1 added 07.04.2014 'encoding' : 'Koding', // from v2.1 added 19.12.2014 'locale' : 'Språk', // from v2.1 added 19.12.2014 'searchTarget' : 'Mål: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Søk etter inndata MIME-type', // from v2.1 added 22.5.2015 'owner' : 'Eieren', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Annen', // from v2.1 added 20.6.2015 'execute' : 'Henrette', // from v2.1 added 20.6.2015 'perm' : 'Tillatelse', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mappen er tom', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mappen er tom\\A Slipp for å legge til elementer', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mappen er tom\\Et langt trykk for å legge til elementer', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalitet', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatisk synkronisering', // from v2.1.6 added 10.1.2016 'moveUp' : 'Flytte opp', // from v2.1.6 added 18.1.2016 'getLink' : 'Få URL-lenke', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Valgte varer ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Mappe-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Tillat tilgang uten nett', // from v2.1.10 added 3.25.2016 'reAuth' : 'For å autentisere på nytt', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Laster...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Åpne flere filer', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Du prøver å åpne $1-filene. Er du sikker på at du vil åpne i nettleseren?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Søkeresultatene er tomme i søkemålet.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Det er å redigere en fil.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Du har valgt $1 varer.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Du har $1 elementer på utklippstavlen.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementelt søk er bare fra gjeldende visning.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Gjenopprett', // from v2.1.15 added 3.8.2016 'complete' : '$1 fullført', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontekstmenyen', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sidevending', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volum røtter', // from v2.1.16 added 16.9.2016 'reset' : 'Nullstille', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Bakgrunnsfarge', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Fargevelger', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px rutenett', // from v2.1.16 added 4.10.2016 'enabled' : 'Aktivert', // from v2.1.16 added 4.10.2016 'disabled' : 'Funksjonshemmet', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Søkeresultatene er tomme i gjeldende visning.\\ATrykk på [Enter] for å utvide søkemålet.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Søkeresultater for første bokstav er tomme i gjeldende visning.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Tekstetikett', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 min igjen', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Åpne på nytt med valgt koding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Lagre med valgt koding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Velg mappe', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Første bokstavsøk', // from v2.1.23 added 24.3.2017 'presets' : 'Forhåndsinnstillinger', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Det er for mange gjenstander, så det kan ikke gå i søppel.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Tøm mappen "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Det er ingen elementer i mappen "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferanse', // from v2.1.26 added 28.6.2017 'language' : 'Språk', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialiser innstillingene som er lagret i denne nettleseren', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Verktøylinjeinnstillinger', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tegn igjen.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 linjer igjen.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Grov filstørrelse', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokuser på elementet av dialog med museover', // from v2.1.30 added 2.11.2017 'select' : 'Plukke ut', // from v2.1.30 added 23.11.2017 'selectAction' : 'Handling når du velger fil', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Åpne med redigeringsprogrammet som ble brukt sist', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverter utvalg', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Er du sikker på at du vil gi nytt navn til $1 valgte elementer som $2?
Dette kan ikke angres!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Gi nytt navn til batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Legg til prefiks', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Legg til suffiks', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Endre utvidelse', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolonneinnstillinger (listevisning)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle endringer vil umiddelbart gjenspeiles i arkivet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Eventuelle endringer gjenspeiles ikke før demontering av dette volumet.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Følgende volum(er) montert på dette volumet er også avmontert. Er du sikker på å demontere den?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Utvalg info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmer for å vise filhash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Infoelementer (utvalgsinfopanel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Trykk igjen for å avslutte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Verktøylinje', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbeidsplass', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Ikonstørrelse (ikonvisning)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Åpne vinduet for maksimert redigering', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Fordi konvertering via API for øyeblikket ikke er tilgjengelig, vennligst konverter på nettstedet.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Fordi konvertering via API for øyeblikket ikke er tilgjengelig, vennligst konverter på nettstedet.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konverter på nettstedet til $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrasjoner', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Denne elFinder har følgende eksterne tjenester integrert. Vennligst sjekk vilkårene for bruk, personvernerklæringen osv. før du bruker den.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Vis skjulte elementer', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skjul skjulte elementer', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Vis/skjul skjulte elementer', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Filtyper for å aktivere med "Ny fil"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type tekstfil', // from v2.1.41 added 7.8.2018 'add' : 'Legge til', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Misligholde', // from v2.1.43 added 19.10.2018 'description' : 'Beskrivelse', // from v2.1.43 added 19.10.2018 'website' : 'Nettsted', // from v2.1.43 added 19.10.2018 'author' : 'Forfatter', // from v2.1.43 added 19.10.2018 'email' : 'E-post', // from v2.1.43 added 19.10.2018 'license' : 'Tillatelse', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dette elementet kan ikke lagres. For å unngå å miste redigeringene må du eksportere til PC-en.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dobbeltklikk på filen for å velge den.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Bruk fullskjermmodus', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ukjent', 'kindRoot' : 'Volumrot', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappe', 'kindSelects' : 'Utvalg', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Snarvei', 'kindAliasBroken' : 'Ugyldig snarvei', // applications 'kindApp' : 'Programfil', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint-presentasjon', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portabelt dokument (PDF)', 'kindTorrent' : 'Bittorrent-fil', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR ar', 'kindJAR' : 'Java JAR-fil', 'kindTTF' : 'True Type-skrift', 'kindOTF' : 'Åpne Type font', 'kindRPM' : 'RPM-pakke', // texts 'kindText' : 'Tekst dokument', 'kindTextPlain' : 'Ren tekst', 'kindPHP' : 'PHP kilde', 'kindCSS' : 'Cascading stilark', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript', 'kindRTF' : 'Rikt Tekst Format', 'kindC' : 'C kilde', 'kindCHeader' : 'C header kilde', 'kindCPP' : 'C++ kilde', 'kindCPPHeader' : 'C++ header kilde', 'kindShell' : 'Unix-skallskript', 'kindPython' : 'Python kilde', 'kindJava' : 'Java kilde', 'kindRuby' : 'Ruby kilde', 'kindPerl' : 'Perl-manus', 'kindSQL' : 'SQL skilde', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK kilde', 'kindCSV' : 'Kommaseparerte verdier', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown-tekst', // added 20.7.2015 // images 'kindImage' : 'Bilde', 'kindBMP' : 'BMP bilde', 'kindJPEG' : 'JPEG bilde', 'kindGIF' : 'GIF bilde', 'kindPNG' : 'PNG bilde', 'kindTIFF' : 'TIFF bilde', 'kindTGA' : 'TGA bilde', 'kindPSD' : 'Adobe Photoshop bilde', 'kindXBITMAP' : 'X bitmap bilde', 'kindPXM' : 'Pixelmator bilde', // media 'kindAudio' : 'Lydmedier', 'kindAudioMPEG' : 'MPEG-lyd', 'kindAudioMPEG4' : 'MPEG-4 lyd', 'kindAudioMIDI' : 'MIDI-lyd', 'kindAudioOGG' : 'Ogg Vorbis lyd', 'kindAudioWAV' : 'WAV-lyd', 'AudioPlaylist' : 'MP3 spilleliste', 'kindVideo' : 'Videomedier', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); PK Z^-^^js/i18n/elfinder.pl.jsnuW+A/** * Polski translation * @author Marcin Mikołajczyk * @author Bogusław Zięba * @author Bogusław Zięba * @version 2022-03-08 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.pl = { translator : 'Marcin Mikołajczyk <marcin@pjwstk.edu.pl>, Bogusław Zięba <bobi@poczta.fm>, Bogusław Zięba <bobi@poczta.fm>', language : 'Język Polski', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 08.03.2022 11:30 fancyDateFormat : '$1 H:i', // will show like: Dzisiaj 11:30 nonameDateFormat : 'ymd-His', // noname upload will show like: 220308-113034 messages : { 'getShareText' : 'Dzielić', 'Editor ': 'Edytor kodu', /********************************** errors **********************************/ 'error' : 'Błąd', 'errUnknown' : 'Nieznany błąd.', 'errUnknownCmd' : 'Nieznane polecenie.', 'errJqui' : 'Niepoprawna konfiguracja jQuery UI. Muszą być zawarte komponenty selectable, draggable i droppable.', 'errNode' : 'elFinder wymaga utworzenia obiektu DOM.', 'errURL' : 'Niepoprawna konfiguracja elFinder! Pole URL nie jest ustawione.', 'errAccess' : 'Dostęp zabroniony.', 'errConnect' : 'Błąd połączenia z zapleczem.', 'errAbort' : 'Połączenie zostało przerwane.', 'errTimeout' : 'Upłynął czas oczekiwania na połączenie.', 'errNotFound' : 'Zaplecze nie zostało znalezione.', 'errResponse' : 'Nieprawidłowa odpowiedź zaplecza.', 'errConf' : 'Niepoprawna konfiguracja zaplecza.', 'errJSON' : 'Moduł PHP JSON nie jest zainstalowany.', 'errNoVolumes' : 'Brak możliwości odczytu katalogów.', 'errCmdParams' : 'Nieprawidłowe parametry dla polecenia "$1".', 'errDataNotJSON' : 'Dane nie są JSON.', 'errDataEmpty' : 'Dane są puste.', 'errCmdReq' : 'Zaplecze wymaga podania nazwy polecenia.', 'errOpen' : 'Nie można otworzyć "$1".', 'errNotFolder' : 'Obiekt nie jest katalogiem.', 'errNotFile' : 'Obiekt nie jest plikiem.', 'errRead' : 'Nie można odczytać "$1".', 'errWrite' : 'Nie można zapisać do "$1".', 'errPerm' : 'Brak uprawnień.', 'errLocked' : '"$1" jest zablokowany i nie może zostać zmieniony, przeniesiony lub usunięty.', 'errExists' : 'Plik "$1" już istnieje.', 'errInvName' : 'Nieprawidłowa nazwa pliku.', 'errInvDirname' : 'Nieprawidłowa nazwa folderu.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Nie znaleziono folderu.', 'errFileNotFound' : 'Plik nie został znaleziony.', 'errTrgFolderNotFound' : 'Katalog docelowy "$1" nie został znaleziony.', 'errPopup' : 'Przeglądarka zablokowała otwarcie nowego okna. Aby otworzyć plik, zmień ustawienia przeglądarki.', 'errMkdir' : 'Nie można utworzyć katalogu "$1".', 'errMkfile' : 'Nie można utworzyć pliku "$1".', 'errRename' : 'Nie można zmienić nazwy "$1".', 'errCopyFrom' : 'Kopiowanie z katalogu "$1" nie jest możliwe.', 'errCopyTo' : 'Kopiowanie do katalogu "$1" nie jest możliwe.', 'errMkOutLink' : 'Nie można utworzyć link do zewnętrznego katalogu głównego.', // from v2.1 added 03.10.2015 'errUpload' : 'Błąd wysyłania.', // old name - errUploadCommon 'errUploadFile' : 'Nie można wysłać "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nie znaleziono plików do wysłania.', 'errUploadTotalSize' : 'Przekroczono dopuszczalny rozmiar wysyłanych plików.', // old name - errMaxSize 'errUploadFileSize' : 'Plik przekracza dopuszczalny rozmiar.', // old name - errFileMaxSize 'errUploadMime' : 'Niedozwolony typ pliku.', 'errUploadTransfer' : 'Błąd przesyłania "$1".', 'errUploadTemp' : 'Nie można wykonać tymczasowego pliku do przesłania.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obiekt "$1" istnieje już w tej lokalizacji i nie może być zastąpiony przez inny typ obiektu.', // new 'errReplace' : 'Nie można zastąpić "$1".', 'errSave' : 'Nie można zapisać "$1".', 'errCopy' : 'Nie można skopiować "$1".', 'errMove' : 'Nie można przenieść "$1".', 'errCopyInItself' : 'Nie można skopiować "$1" w miejsce jego samego.', 'errRm' : 'Nie można usunąć "$1".', 'errTrash' : 'Nie można do kosza.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nie należy usunąć pliku(s) źródłowy.', 'errExtract' : 'Nie można wypakować plików z "$1".', 'errArchive' : 'Nie można utworzyć archiwum.', 'errArcType' : 'Nieobsługiwany typ archiwum.', 'errNoArchive' : 'Plik nie jest prawidłowym typem archiwum.', 'errCmdNoSupport' : 'Zaplecze nie obsługuje tego polecenia.', 'errReplByChild' : 'Nie można zastąpić katalogu "$1" elementem w nim zawartym', 'errArcSymlinks' : 'Ze względów bezpieczeństwa rozpakowywanie archiwów zawierających dowiązania symboliczne (symlinks) jest niedozwolone.', // edited 24.06.2012 'errArcMaxSize' : 'Archiwum przekracza maksymalny dopuszczalny rozmiar.', 'errResize' : 'Nie można zmienić rozmiaru "$1".', 'errResizeDegree' : 'Nieprawidłowy stopień obracania.', // added 7.3.2013 'errResizeRotate' : 'Nie można obrócić obrazu.', // added 7.3.2013 'errResizeSize' : 'Nieprawidłowy rozmiar obrazu.', // added 7.3.2013 'errResizeNoChange' : 'Nie zmieniono rozmiaru obrazu.', // added 7.3.2013 'errUsupportType' : 'Nieobsługiwany typ pliku.', 'errNotUTF8Content' : 'Plik "$1" nie jest UTF-8 i nie może być edytowany.', // added 9.11.2011 'errNetMount' : 'Nie można zamontować "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nieobsługiwany protokół.', // added 17.04.2012 'errNetMountFailed' : 'Montowanie nie powiodło się.', // added 17.04.2012 'errNetMountHostReq' : 'Host wymagany.', // added 18.04.2012 'errSessionExpires' : 'Twoja sesja wygasła z powodu nieaktywności.', 'errCreatingTempDir' : 'Nie można utworzyć katalogu tymczasowego: "$1"', 'errFtpDownloadFile' : 'Nie można pobrać pliku z FTP: "$1"', 'errFtpUploadFile' : 'Nie można przesłać pliku na serwer FTP: "$1"', 'errFtpMkdir' : 'Nie można utworzyć zdalnego katalogu FTP: "$1"', 'errArchiveExec' : 'Błąd podczas archiwizacji plików: "$1"', 'errExtractExec' : 'Błąd podczas wyodrębniania plików: "$1"', 'errNetUnMount' : 'Nie można odmontować', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nie wymienialne na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Wypróbuj Google Chrome, jeśli chcesz przesłać katalog.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Upłynął limit czasu podczas wyszukiwania "$1". Wynik wyszukiwania jest częściowy.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Wymagana jest ponowna autoryzacja.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maks. liczba elementów do wyboru to $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nie można przywrócić z kosza. Nie można zidentyfikować przywrócić docelowego.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Nie znaleziono edytora tego typu pliku.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Wystąpił błąd po stronie serwera .', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nie można do pustego folderu "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Jest jeszcze $1 błąd/błędy.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'You can create up to $1 folders at one time.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Utwórz archiwum', 'cmdback' : 'Wstecz', 'cmdcopy' : 'Kopiuj', 'cmdcut' : 'Wytnij', 'cmddownload' : 'Pobierz', 'cmdduplicate' : 'Duplikuj', 'cmdedit' : 'Edytuj plik', 'cmdextract' : 'Wypakuj pliki z archiwum', 'cmdforward' : 'Dalej', 'cmdgetfile' : 'Wybierz pliki', 'cmdhelp' : 'Informacje o programie', 'cmdhome' : 'Główny', 'cmdinfo' : 'Właściwości', 'cmdmkdir' : 'Nowy katalog', 'cmdmkdirin' : 'Do nowego katalogu', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nowy plik', 'cmdopen' : 'Otwórz', 'cmdpaste' : 'Wklej', 'cmdquicklook' : 'Podgląd', 'cmdreload' : 'Odśwież', 'cmdrename' : 'Zmień nazwę', 'cmdrm' : 'Usuń', 'cmdtrash' : 'Do kosza', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Przywróć', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Wyszukaj pliki', 'cmdup' : 'Przejdź do katalogu nadrzędnego', 'cmdupload' : 'Wyślij pliki', 'cmdview' : 'Widok', 'cmdresize' : 'Zmień rozmiar i Obróć', 'cmdsort' : 'Sortuj', 'cmdnetmount' : 'Zamontuj wolumin sieciowy', // added 18.04.2012 'cmdnetunmount': 'Odmontuj', // from v2.1 added 30.04.2012 'cmdplaces' : 'Do Miejsc', // added 28.12.2014 'cmdchmod' : 'Zmiana trybu', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otwórz katalog', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Resetuj szerokość kolumny', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Pełny ekran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Przenieś', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Opróżnij folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Cofnij', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Ponów', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencje', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Zaznacz wszystko', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Odznacz wszystko', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Odwróć wybór', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otwórz w nowym oknie', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ukryj (osobiste)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zamknij', 'btnSave' : 'Zapisz', 'btnRm' : 'Usuń', 'btnApply' : 'Zastosuj', 'btnCancel' : 'Anuluj', 'btnNo' : 'Nie', 'btnYes' : 'Tak', 'btnMount' : 'Montuj', // added 18.04.2012 'btnApprove': 'Idź do $1 & zatwierdź', // from v2.1 added 26.04.2012 'btnUnmount': 'Odmontuj', // from v2.1 added 30.04.2012 'btnConv' : 'Konwertuj', // from v2.1 added 08.04.2014 'btnCwd' : 'Tutaj', // from v2.1 added 22.5.2015 'btnVolume' : 'Wolumin', // from v2.1 added 22.5.2015 'btnAll' : 'Wszystko', // from v2.1 added 22.5.2015 'btnMime' : 'Typ MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nazwa pliku', // from v2.1 added 22.5.2015 'btnSaveClose': 'Zapisz & Zamknij', // from v2.1 added 12.6.2015 'btnBackup' : 'Kopia zapasowa', // fromv2.1 added 28.11.2015 'btnRename' : 'Zmień nazwę', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Zmień nazwę(Wszystkie)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Poprz ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Nast ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Zapisz Jako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otwieranie katalogu', 'ntffile' : 'Otwórz plik', 'ntfreload' : 'Odśwież zawartość katalogu', 'ntfmkdir' : 'Tworzenie katalogu', 'ntfmkfile' : 'Tworzenie plików', 'ntfrm' : 'Usuwanie plików', 'ntfcopy' : 'Kopiowanie plików', 'ntfmove' : 'Przenoszenie plików', 'ntfprepare' : 'Przygotowanie do kopiowania plików', 'ntfrename' : 'Zmiana nazw plików', 'ntfupload' : 'Wysyłanie plików', 'ntfdownload' : 'Pobieranie plików', 'ntfsave' : 'Zapisywanie plików', 'ntfarchive' : 'Tworzenie archiwum', 'ntfextract' : 'Wypakowywanie plików z archiwum', 'ntfsearch' : 'Wyszukiwanie plików', 'ntfresize' : 'Zmiana rozmiaru obrazów', 'ntfsmth' : 'Robienie czegoś >_<', 'ntfloadimg' : 'Ładowanie obrazu', 'ntfnetmount' : 'Montaż woluminu sieciowego', // added 18.04.2012 'ntfnetunmount': 'Odłączanie woluminu sieciowego', // from v2.1 added 30.04.2012 'ntfdim' : 'Pozyskiwanie wymiaru obrazu', // added 20.05.2013 'ntfreaddir' : 'Odczytywanie informacji katalogu', // from v2.1 added 01.07.2013 'ntfurl' : 'Pobieranie URL linku', // from v2.1 added 11.03.2014 'ntfchmod' : 'Zmiana trybu pliku', // from v2.1 added 20.6.2015 'ntfpreupload': 'Weryfikacja nazwy przesłanego pliku', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Tworzenie pliku do pobrania', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Uzyskiwanie informacji o ścieżce', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Przetwarzanie przesłanego pliku', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Wykonuje wrzucanie do kosza', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Wykonuje przywracanie z kosza', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Sprawdzanie folderu docelowego', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Cofanie poprzedniej operacji', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Ponownie poprzednio cofnięte', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Sprawdzanie zawartości', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Śmieci', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'nieznana', 'Today' : 'Dzisiaj', 'Yesterday' : 'Wczoraj', 'msJan' : 'Sty', 'msFeb' : 'Lut', 'msMar' : 'Mar', 'msApr' : 'Kwi', 'msMay' : 'Maj', 'msJun' : 'Cze', 'msJul' : 'Lip', 'msAug' : 'Sie', 'msSep' : 'Wrz', 'msOct' : 'Paź', 'msNov' : 'Lis', 'msDec' : 'Gru', 'January' : 'Styczeń', 'February' : 'Luty', 'March' : 'Marzec', 'April' : 'Kwiecień', 'May' : 'Maj', 'June' : 'Czerwiec', 'July' : 'Lipiec', 'August' : 'Sierpień', 'September' : 'Wrzesień', 'October' : 'Październik', 'November' : 'Listopad', 'December' : 'Grudzień', 'Sunday' : 'Niedziela', 'Monday' : 'Poniedziałek', 'Tuesday' : 'Wtorek', 'Wednesday' : 'Środa', 'Thursday' : 'Czwartek', 'Friday' : 'Piątek', 'Saturday' : 'Sobota', 'Sun' : 'Nie', 'Mon' : 'Pon', 'Tue' : 'Wto', 'Wed' : 'Śro', 'Thu' : 'Czw', 'Fri' : 'Pią', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'w/g nazwy', 'sortkind' : 'w/g typu', 'sortsize' : 'w/g rozmiaru', 'sortdate' : 'w/g daty', 'sortFoldersFirst' : 'katalogi pierwsze', 'sortperm' : 'wg/nazwy', // from v2.1.13 added 13.06.2016 'sortmode' : 'wg/trybu', // from v2.1.13 added 13.06.2016 'sortowner' : 'wg/właściciela', // from v2.1.13 added 13.06.2016 'sortgroup' : 'wg/grup', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Również drzewa katalogów', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NowyPlik.txt', // added 10.11.2015 'untitled folder' : 'NowyFolder', // added 10.11.2015 'Archive' : 'NoweArchiwum', // from v2.1 added 10.11.2015 'untitled file' : 'NowyPlik.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 Plik', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Wymagane potwierdzenie', 'confirmRm' : 'Czy na pewno chcesz usunąć pliki?
Tej operacji nie można cofnąć!', 'confirmRepl' : 'Zastąpić stary plik nowym?', 'confirmRest' : 'Zamienić istniejący element na pozycję w koszu?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nie w UTF-8
Konwertować na UTF-8?
Zawartość stanie się UTF-8 poprzez zapisanie po konwersji.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Nie można wykryć kodowania tego pliku. Musi być tymczasowo przekształcony do UTF-8.
Proszę wybrać kodowanie znaków tego pliku.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Został zmodyfikowany.
Utracisz pracę, jeśli nie zapiszesz zmian.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Czy na pewno chcesz przenieść elementy do kosza?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Czy na pewno chcesz przenieść elementy do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Zastosuj do wszystkich', 'name' : 'Nazwa', 'size' : 'Rozmiar', 'perms' : 'Uprawnienia', 'modify' : 'Zmodyfikowany', 'kind' : 'Typ', 'read' : 'odczyt', 'write' : 'zapis', 'noaccess' : 'brak dostępu', 'and' : 'i', 'unknown' : 'nieznany', 'selectall' : 'Zaznacz wszystkie pliki', 'selectfiles' : 'Zaznacz plik(i)', 'selectffile' : 'Zaznacz pierwszy plik', 'selectlfile' : 'Zaznacz ostatni plik', 'viewlist' : 'Widok listy', 'viewicons' : 'Widok ikon', 'viewSmall' : 'Małe ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Średnie ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Duże ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Bardzo duże ikony', // from v2.1.39 added 22.5.2018 'places' : 'Ulubione', 'calc' : 'Obliczanie', 'path' : 'Ścieżka', 'aliasfor' : 'Alias do', 'locked' : 'Zablokowany', 'dim' : 'Wymiary', 'files' : 'Plik(ów)', 'folders' : 'Katalogi', 'items' : 'Element(ów)', 'yes' : 'tak', 'no' : 'nie', 'link' : 'Odnośnik', 'searcresult' : 'Wyniki wyszukiwania', 'selected' : 'zaznaczonych obiektów', 'about' : 'O programie', 'shortcuts' : 'Skróty klawiaturowe', 'help' : 'Pomoc', 'webfm' : 'Menedżer plików sieciowych', 'ver' : 'Wersja', 'protocolver' : 'wersja protokołu', 'homepage' : 'Strona projektu', 'docs' : 'Dokumentacja', 'github' : 'Obserwuj rozwój projektu na Github', 'twitter' : 'Śledź nas na Twitterze', 'facebook' : 'Dołącz do nas na Facebooku', 'team' : 'Zespół', 'chiefdev' : 'główny programista', 'developer' : 'programista', 'contributor' : 'współautor', 'maintainer' : 'koordynator', 'translator' : 'tłumacz', 'icons' : 'Ikony', 'dontforget' : 'i nie zapomnij zabrać ręcznika', 'shortcutsof' : 'Skróty klawiaturowe są wyłączone', 'dropFiles' : 'Upuść pliki tutaj', 'or' : 'lub', 'selectForUpload' : 'Wybierz pliki', 'moveFiles' : 'Przenieś pliki', 'copyFiles' : 'Kopiuj pliki', 'restoreFiles' : 'Przywróć elementy', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Usuń z miejsc', 'aspectRatio' : 'Zachowaj proporcje', 'scale' : 'Skala', 'width' : 'Szerokość', 'height' : 'Wysokość', 'resize' : 'Zmień rozmiar', 'crop' : 'Przytnij', 'rotate' : 'Obróć', 'rotate-cw' : 'Obróć 90° w lewo', 'rotate-ccw' : 'Obróć 90° w prawo', 'degree' : '°', 'netMountDialogTitle' : 'Montaż woluminu sieciowego', // added 18.04.2012 'protocol' : 'Protokół', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Użytkownik', // added 18.04.2012 'pass' : 'Hasło', // added 18.04.2012 'confirmUnmount' : 'Czy chcesz odmontować $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Upuść lub Wklej pliki z przeglądarki', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Upuść lub Wklej tutaj pliki i adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kodowanie', // from v2.1 added 19.12.2014 'locale' : 'Lokalne', // from v2.1 added 19.12.2014 'searchTarget' : 'Docelowo: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Wyszukiwanie poprzez wpisanie typu MIME', // from v2.1 added 22.5.2015 'owner' : 'Właściciel', // from v2.1 added 20.6.2015 'group' : 'Grupa', // from v2.1 added 20.6.2015 'other' : 'Inne', // from v2.1 added 20.6.2015 'execute' : 'Wykonaj', // from v2.1 added 20.6.2015 'perm' : 'Uprawnienia', // from v2.1 added 20.6.2015 'mode' : 'Tryb', // from v2.1 added 20.6.2015 'emptyFolder' : 'Katalog jest pusty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Katalog jest pusty\\AUpuść aby dodać pozycje', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Katalog jest pusty\\ADotknij dłużej aby dodać pozycje', // from v2.1.6 added 30.12.2015 'quality' : 'Jakość', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto synchronizacja', // from v2.1.6 added 10.1.2016 'moveUp' : 'Przenieś w górę', // from v2.1.6 added 18.1.2016 'getLink' : 'Pobierz URL linku', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Wybrane pozycje ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID Katalogu', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Zezwól na dostęp offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Aby ponownie uwierzytelnić', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Teraz ładuję...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otwieranie wielu plików', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Próbujesz otworzyć $1 plików. Czy na pewno chcesz, aby otworzyć w przeglądarce?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Wynik wyszukiwania jest pusty', // from v2.1.12 added 5.16.2016 'editingFile' : 'Edytujesz plik.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Masz wybranych $1 pozycji.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Masz $1 pozycji w schowku.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Wyszukiwanie przyrostowe jest wyłącznie z bieżącego widoku.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Przywracanie', // from v2.1.15 added 3.8.2016 'complete' : '$1 zakończone', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu kontekstowe', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Obracanie strony', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Wolumin główny', // from v2.1.16 added 16.9.2016 'reset' : 'Resetuj', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Kolor tła', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Wybierania kolorów', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Kratka', // from v2.1.16 added 4.10.2016 'enabled' : 'Włączone', // from v2.1.16 added 4.10.2016 'disabled' : 'Wyłączone', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Wyniki wyszukiwania są puste w bieżącym widoku.\\AWciśnij [Enter] aby poszerzyć zakres wyszukiwania.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Wyszukiwanie pierwszej litery brak wyników w bieżącym widoku.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etykieta tekstowa', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 min pozostało', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otwórz ponownie z wybranym kodowaniem', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Zapisz z wybranym kodowaniem', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Wybierz katalog', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Wyszukiwanie pierwszej litery', // from v2.1.23 added 24.3.2017 'presets' : 'Wstępnie ustalone', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'To zbyt wiele rzeczy, więc nie mogą być w koszu.', // from v2.1.25 added 9.6.2017 'TextArea' : 'PoleTekstowe', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Opróżnij folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Brak elementów w folderze "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencje', // from v2.1.26 added 28.6.2017 'language' : 'Ustawienie języka', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Zainicjuj ustawienia zapisane w tej przeglądarce', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Ustawienia paska narzędzi', // from v2.1.27 added 2.8.2017 'charsLeft' : '... pozostało $1 znak(ów).', // from v2.1.29 added 30.8.2017 'linesLeft' : '... pozostało $1 lini.', // from v2.1.52 added 16.1.2020 'sum' : 'Suma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Przybliżony rozmiar pliku', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Skoncentruj się na elemencie dialogowym po najechaniu myszą', // from v2.1.30 added 2.11.2017 'select' : 'Wybierz', // from v2.1.30 added 23.11.2017 'selectAction' : 'Działanie po wybraniu pliku', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otwórz za pomocą ostatnio używanego edytora', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Odwróć zaznaczenie', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Czy na pewno chcesz zmienić nazwę $1 wybranych elementów takich jak $2?
Tego nie da się cofnąć!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Zmień partiami', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Liczba', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Dodaj prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Dodaj suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Zmień rozszerzenie', // from v2.1.31 added 8.12.2017 'columnPref' : 'Ustawienia kolumn (Widok listy)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Wszystkie zmiany widoczne natychmiast w archiwum.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Wszelkie zmiany nie będą widoczne, dopóki nie odłączysz tego woluminu.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Następujący wolumin (y), zamontowany na tym urządzeniu również niezamontowany. Czy na pewno chcesz go odmontować?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informacje Wyboru', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorytmy do pokazywania hash pliku', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Elementów (Wybór Panelu Informacyjnego)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Naciśnij ponownie, aby wyjść.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Pasek narzędziowy', // from v2.1.38 added 4.4.2018 'workspace' : 'Obszar Pracy', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Wszystko', // from v2.1.38 added 4.4.2018 'iconSize' : 'Rozmiar Ikony (Podgląd ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otwórz zmaksymalizowane okno edytora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Ponieważ konwersja przez API nie jest obecnie dostępna, należy dokonać konwersji w witrynie.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konwersji musisz przesłać z adresem URL pozycji lub pobranym plikiem, aby zapisać przekonwertowany plik.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konwertuj na stronie $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integracje', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Ten elFinder ma zintegrowane następujące usługi zewnętrzne. Przed użyciem ich sprawdź warunki użytkowania, politykę prywatności itp.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Pokaż ukryte pozycje', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Pokaż/Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy plików, które można włączyć za pomocą "Nowy plik"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ pliku tekstowego', // from v2.1.41 added 7.8.2018 'add' : 'Dodaj', // from v2.1.41 added 7.8.2018 'theme' : 'Motyw', // from v2.1.43 added 19.10.2018 'default' : 'Domyślnie', // from v2.1.43 added 19.10.2018 'description' : 'Opis', // from v2.1.43 added 19.10.2018 'website' : 'Witryna', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licencja', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Tego elementu nie można zapisać. Aby uniknąć utraty zmian, musisz wyeksportować go na swój komputer.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Kliknij dwukrotnie plik, aby go wybrać.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Użyj trybu pełnoekranowego', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Nieznany', 'kindRoot' : 'Główny Wolumin', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Katalog', 'kindSelects' : 'Zaznaczenie', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Utracony alias', // applications 'kindApp' : 'Aplikacja', 'kindPostscript' : 'Dokument Postscript', 'kindMsOffice' : 'Dokument Office', 'kindMsWord' : 'Dokument Word', 'kindMsExcel' : 'Dokument Excel', 'kindMsPP' : 'Prezentacja PowerPoint', 'kindOO' : 'Dokument OpenOffice', 'kindAppFlash' : 'Aplikacja Flash', 'kindPDF' : 'Dokument przenośny PDF', 'kindTorrent' : 'Plik BitTorrent', 'kind7z' : 'Archiwum 7z', 'kindTAR' : 'Archiwum TAR', 'kindGZIP' : 'Archiwum GZIP', 'kindBZIP' : 'Archiwum BZIP', 'kindXZ' : 'Archiwum XZ', 'kindZIP' : 'Archiwum ZIP', 'kindRAR' : 'Archiwum RAR', 'kindJAR' : 'Plik Java JAR', 'kindTTF' : 'Czcionka TrueType', 'kindOTF' : 'Czcionka OpenType', 'kindRPM' : 'Pakiet RPM', // texts 'kindText' : 'Dokument tekstowy', 'kindTextPlain' : 'Zwykły tekst', 'kindPHP' : 'Kod źródłowy PHP', 'kindCSS' : 'Kaskadowe arkusze stylów', 'kindHTML' : 'Dokument HTML', 'kindJS' : 'Kod źródłowy Javascript', 'kindRTF' : 'Tekst sformatowany RTF', 'kindC' : 'Kod źródłowy C', 'kindCHeader' : 'Plik nagłówka C', 'kindCPP' : 'Kod źródłowy C++', 'kindCPPHeader' : 'Plik nagłówka C++', 'kindShell' : 'Skrypt powłoki Unix', 'kindPython' : 'Kod źródłowy Python', 'kindJava' : 'Kod źródłowy Java', 'kindRuby' : 'Kod źródłowy Ruby', 'kindPerl' : 'Skrypt Perl', 'kindSQL' : 'Kod źródłowy SQL', 'kindXML' : 'Dokument XML', 'kindAWK' : 'Kod źródłowy AWK', 'kindCSV' : 'Tekst rozdzielany przecinkami CSV', 'kindDOCBOOK' : 'Dokument Docbook XML', 'kindMarkdown' : 'Tekst promocyjny', // added 20.7.2015 // images 'kindImage' : 'Obraz', 'kindBMP' : 'Obraz BMP', 'kindJPEG' : 'Obraz JPEG', 'kindGIF' : 'Obraz GIF', 'kindPNG' : 'Obraz PNG', 'kindTIFF' : 'Obraz TIFF', 'kindTGA' : 'Obraz TGA', 'kindPSD' : 'Obraz Adobe Photoshop', 'kindXBITMAP' : 'Obraz X BitMap', 'kindPXM' : 'Obraz Pixelmator', // media 'kindAudio' : 'Plik dźwiękowy', 'kindAudioMPEG' : 'Plik dźwiękowy MPEG', 'kindAudioMPEG4' : 'Plik dźwiękowy MPEG-4', 'kindAudioMIDI' : 'Plik dźwiękowy MIDI', 'kindAudioOGG' : 'Plik dźwiękowy Ogg Vorbis', 'kindAudioWAV' : 'Plik dźwiękowy WAV', 'AudioPlaylist' : 'Lista odtwarzania MP3', 'kindVideo' : 'Plik wideo', 'kindVideoDV' : 'Plik wideo DV', 'kindVideoMPEG' : 'Plik wideo MPEG', 'kindVideoMPEG4' : 'Plik wideo MPEG-4', 'kindVideoAVI' : 'Plik wideo AVI', 'kindVideoMOV' : 'Plik wideo Quick Time', 'kindVideoWM' : 'Plik wideo Windows Media', 'kindVideoFlash' : 'Plik wideo Flash', 'kindVideoMKV' : 'Plik wideo Matroska', 'kindVideoOGG' : 'Plik wideo Ogg' } }; })); PK Zwjs/i18n/elfinder.fallback.jsnuW+A(function(factory) { if (typeof define === 'function' && define.amd) { define(factory); } else if (typeof exports !== 'undefined') { module.exports = factory(); } else { factory(); } }(this, function() { return void 0; })); PK Z3d js/i18n/elfinder.hr.jsnuW+A/** * Croatian translation * @version 2022-03-01 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.hr = { translator : '', language : 'Croatian', direction : 'ltr', dateFormat : 'd.m.Y. H:i', // will show like: 01.03.2022. 18:44 fancyDateFormat : '$1 H:i', // will show like: Danas 18:44 nonameDateFormat : 'ymd-His', // noname upload will show like: 220301-184452 messages : { 'getShareText' : 'Udio', 'Editor ': 'Urednik koda', /********************************** errors **********************************/ 'error' : 'Greška', 'errUnknown' : 'Nepoznata greška.', 'errUnknownCmd' : 'Nepoznata naredba.', 'errJqui' : 'Kriva jQuery UI konfiguracija. Selectable, draggable, i droppable komponente moraju biti uključene.', 'errNode' : 'elFinder zahtjeva DOM element da bi bio stvoren.', 'errURL' : 'Krivo konfiguriran elFinder. Opcija URL nije postavljena.', 'errAccess' : 'Zabranjen pristup.', 'errConnect' : 'Nije moguće spajanje na server.', 'errAbort' : 'Prekinuta veza.', 'errTimeout' : 'Veza je istekla.', 'errNotFound' : 'Server nije pronađen.', 'errResponse' : 'Krivi odgovor servera.', 'errConf' : 'Krivo konfiguriran server', 'errJSON' : 'Nije instaliran PHP JSON modul.', 'errNoVolumes' : 'Disk nije dostupan.', 'errCmdParams' : 'Krivi parametri za naredbu "$1".', 'errDataNotJSON' : 'Podaci nisu tipa JSON.', 'errDataEmpty' : 'Nema podataka.', 'errCmdReq' : 'Pozadinski zahtjev zahtijeva naziv naredbe.', 'errOpen' : 'Ne mogu otvoriti "$1".', 'errNotFolder' : 'Objekt nije mapa.', 'errNotFile' : 'Objekt nije dokument.', 'errRead' : 'Ne mogu pročitati "$1".', 'errWrite' : 'Ne mogu pisati u "$1".', 'errPerm' : 'Pristup zabranjen', 'errLocked' : '"$1" je zaključan i ne može biti preimenovan, premješten ili obrisan.', 'errExists' : 'Dokument s imenom "$1" već postoji.', 'errInvName' : 'Krivo ime dokumenta', 'errInvDirname' : 'Nevažeći naziv mape.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mapa nije pronađena', 'errFileNotFound' : 'Dokument nije pronađen', 'errTrgFolderNotFound' : 'Mapa "$1" nije pronađena', 'errPopup' : 'Preglednik je spriječio otvaranje skočnog prozora. Da biste otvorili datoteku, omogućite je u opcijama preglednika.', 'errMkdir' : 'Ne mogu napraviti mapu "$1".', 'errMkfile' : 'Ne mogu napraviti dokument "$1".', 'errRename' : 'Ne mogu preimenovati "$1".', 'errCopyFrom' : 'Kopiranje s diska "$1" nije dozvoljeno.', 'errCopyTo' : 'Kopiranje na disk "$1" nije dozvoljeno.', 'errMkOutLink' : 'Nije moguće stvoriti vezu na izvan korijena volumena.', // from v2.1 added 03.10.2015 'errUpload' : 'Greška pri prebacivanju dokumenta na server.', // old name - errUploadCommon 'errUploadFile' : 'Ne mogu prebaciti "$1" na server', // old name - errUpload 'errUploadNoFiles' : 'Nema dokumenata za prebacivanje na server', 'errUploadTotalSize' : 'Dokumenti prelaze maksimalnu dopuštenu veličinu.', // old name - errMaxSize 'errUploadFileSize' : 'Dokument je prevelik.', // old name - errFileMaxSize 'errUploadMime' : 'Ovaj tip dokumenta nije dopušten.', 'errUploadTransfer' : '"$1" greška pri prebacivanju', 'errUploadTemp' : 'Ne mogu napraviti privremeni dokument za prijenos na server', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" već postoji na ovoj lokaciji i ne može se zamijeniti objektom druge vrste.', // new 'errReplace' : 'Ne mogu zamijeniti "$1".', 'errSave' : 'Ne mogu spremiti "$1".', 'errCopy' : 'Ne mogu kopirati "$1".', 'errMove' : 'Ne mogu premjestiti "$1".', 'errCopyInItself' : 'Ne mogu kopirati "$1" na isto mjesto.', 'errRm' : 'Ne mogu ukloniti "$1".', 'errTrash' : 'Nije moguće u smeće.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Ne mogu ukloniti izvorni kod.', 'errExtract' : 'Nije moguće izdvojiti datoteke iz "$1".', 'errArchive' : 'Nije moguće stvoriti arhivu.', 'errArcType' : 'Nepodržana vrsta arhive.', 'errNoArchive' : 'Datoteka nije arhivska ili ima nepodržanu vrstu arhive.', 'errCmdNoSupport' : 'Backend ne podržava ovu naredbu.', 'errReplByChild' : 'Mapa "$1" ne može se zamijeniti stavkom koju sadrži.', 'errArcSymlinks' : 'Iz sigurnosnih razloga odbijeno raspakiranje arhive sadrži simbolične veze ili datoteke s nedopuštenim nazivima.', // edited 24.06.2012 'errArcMaxSize' : 'Arhivske datoteke premašuju maksimalnu dopuštenu veličinu.', 'errResize' : 'Nije moguće promijeniti veličinu "$1".', 'errResizeDegree' : 'Neispravan stupanj rotacije.', // added 7.3.2013 'errResizeRotate' : 'Nije moguće rotirati sliku.', // added 7.3.2013 'errResizeSize' : 'Nevažeća veličina slike.', // added 7.3.2013 'errResizeNoChange' : 'Veličina slike nije promijenjena.', // added 7.3.2013 'errUsupportType' : 'Nepodržana vrsta datoteke.', 'errNotUTF8Content' : 'Datoteka "$1" nije u UTF-8 i ne može se uređivati.', // added 9.11.2011 'errNetMount' : 'Nije moguće montirati "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodržani protokol.', // added 17.04.2012 'errNetMountFailed' : 'Montiranje nije uspjelo.', // added 17.04.2012 'errNetMountHostReq' : 'Potreban host.', // added 18.04.2012 'errSessionExpires' : 'Vaša sesija je istekla zbog neaktivnosti.', 'errCreatingTempDir' : 'Nije moguće stvoriti privremeni direktorij: "$1"', 'errFtpDownloadFile' : 'Nije moguće preuzeti datoteku s FTP-a: "$1"', 'errFtpUploadFile' : 'Nije moguće prenijeti datoteku na FTP: "$1"', 'errFtpMkdir' : 'Nije moguće stvoriti udaljeni direktorij na FTP-u: "$1"', 'errArchiveExec' : 'Pogreška pri arhiviranju datoteka: "$1"', 'errExtractExec' : 'Pogreška prilikom izdvajanja datoteka: "$1"', 'errNetUnMount' : 'Unable to unmount', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nije konvertibilno u UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Isprobajte Google Chrome, ako želite prenijeti mapu.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Isteklo je vrijeme tijekom pretraživanja "$1". Rezultat pretraživanja je djelomičan.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Potrebna je ponovna autorizacija.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maksimalni broj stavki koje se mogu odabrati je $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nije moguće vratiti iz smeća. Nije moguće identificirati odredište vraćanja.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Urednik nije pronađen za ovu vrstu datoteke.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Pogreška se dogodila na strani poslužitelja.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nije moguće isprazniti mapu "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Postoji još $1 pogreške.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Možete stvoriti do $1 mape odjednom.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Arhiviraj', 'cmdback' : 'Nazad', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Izreži', 'cmddownload' : 'Preuzmi', 'cmdduplicate' : 'Dupliciraj', 'cmdedit' : 'Uredi dokument', 'cmdextract' : 'Raspakiraj arhivu', 'cmdforward' : 'Naprijed', 'cmdgetfile' : 'Odaberi dokumente', 'cmdhelp' : 'O programu', 'cmdhome' : 'Početak', 'cmdinfo' : 'Info', 'cmdmkdir' : 'Nova mapa', 'cmdmkdirin' : 'U novu mapu', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nova файл', 'cmdopen' : 'Otvori', 'cmdpaste' : 'Zalijepi', 'cmdquicklook' : 'Pregled', 'cmdreload' : 'Ponovo učitaj', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'Obriši', 'cmdtrash' : 'U smeće', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Obnovi', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Pronađi', 'cmdup' : 'Roditeljska mapa', 'cmdupload' : 'Prebaci dokumente na server', 'cmdview' : 'Pregledaj', 'cmdresize' : 'Promjeni veličinu i rotiraj', 'cmdsort' : 'Sortiraj', 'cmdnetmount' : 'Spoji se na mrežni disk', // added 18.04.2012 'cmdnetunmount': 'Odspoji disk', // from v2.1 added 30.04.2012 'cmdplaces' : 'Na Mjesta', // added 28.12.2014 'cmdchmod' : 'Promijenite način rada', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otvori mapu', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Ponovno postavite širinu stupca', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Puni zaslon', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Potez', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Ispraznite mapu', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Poništi', // from v2.1.27 added 31.07.2017 'cmdredo' : 'ponovo uraditi', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Odaberi sve', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Odaberi nijednu', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Obrni odabir', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otvori u novom prozoru', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Sakrij (preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zatvori', 'btnSave' : 'Spremi', 'btnRm' : 'Ukloni', 'btnApply' : 'Primjeni', 'btnCancel' : 'Odustani', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnMount' : 'Montirajte', // added 18.04.2012 'btnApprove': 'Idi na $1 i odobri', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Pretvoriti', // from v2.1 added 08.04.2014 'btnCwd' : 'Ovdje', // from v2.1 added 22.5.2015 'btnVolume' : 'Volumen', // from v2.1 added 22.5.2015 'btnAll' : 'svi', // from v2.1 added 22.5.2015 'btnMime' : 'MIME vrsta', // from v2.1 added 22.5.2015 'btnFileName':'Naziv datoteke', // from v2.1 added 22.5.2015 'btnSaveClose': 'Spremi i zatvori', // from v2.1 added 12.6.2015 'btnBackup' : 'Sigurnosna kopija', // fromv2.1 added 28.11.2015 'btnRename' : 'Preimenovati', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Preimenuj (sve)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prethodno ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Sljedeće ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Spremi kao', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otvori mapu', 'ntffile' : 'Otvori dokument', 'ntfreload' : 'Ponovo učitaj sadržaj mape', 'ntfmkdir' : 'Radim mapu', 'ntfmkfile' : 'Radim dokumente', 'ntfrm' : 'Brišem dokumente', 'ntfcopy' : 'Kopiram dokumente', 'ntfmove' : 'Mičem dokumente', 'ntfprepare' : 'Priprema za kopiranje dokumenata', 'ntfrename' : 'Preimenuj dokumente', 'ntfupload' : 'Pohranjujem dokumente na server', 'ntfdownload' : 'Preuzimam dokumente', 'ntfsave' : 'Spremi dokumente', 'ntfarchive' : 'Radim arhivu', 'ntfextract' : 'Ekstrahiranje datoteka iz arhive', 'ntfsearch' : 'Tražim dokumente', 'ntfresize' : 'Promjena veličine slika', 'ntfsmth' : 'Nešto radeći', 'ntfloadimg' : 'Učitavam sliku', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Stjecanje dimenzije slike', // added 20.05.2013 'ntfreaddir' : 'Čitanje podataka mape', // from v2.1 added 01.07.2013 'ntfurl' : 'Dobivanje URL-a linka', // from v2.1 added 11.03.2014 'ntfchmod' : 'Promjena načina rada datoteke', // from v2.1 added 20.6.2015 'ntfpreupload': 'Provjera naziva datoteke za prijenos', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Izrada datoteke za preuzimanje', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Dobivanje informacija o putu', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Obrada učitane datoteke', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Bacam u smeće', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Vršim obnavljanje iz smeća', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Provjera odredišne mape', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Poništavanje prethodne operacije', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Provjera sadržaja', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Otpad', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'nepoznato', 'Today' : 'Danas', 'Yesterday' : 'Jučer', 'msJan' : 'Sij', 'msFeb' : 'Vel', 'msMar' : 'Ožu', 'msApr' : 'Tra', 'msMay' : 'Svi', 'msJun' : 'Lip', 'msJul' : 'Srp', 'msAug' : 'Kol', 'msSep' : 'Ruj', 'msOct' : 'Lis', 'msNov' : 'Stu', 'msDec' : 'Pro', 'January' : 'Siječanj', 'February' : 'Veljača', 'March' : 'Ožujak', 'April' : 'Travanj', 'May' : 'Svibanj', 'June' : 'Lipanj', 'July' : 'Srpanj', 'August' : 'Kolovoz', 'September' : 'Rujan', 'October' : 'Listopad', 'November' : 'Studeni', 'December' : 'Prosinac', 'Sunday' : 'Nedjelja', 'Monday' : 'Ponedjeljak', 'Tuesday' : 'Utorak', 'Wednesday' : 'Srijeda', 'Thursday' : 'Četvrtak', 'Friday' : 'Petak', 'Saturday' : 'Subota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Uto', 'Wed' : 'Sri', 'Thu' : 'Čet', 'Fri' : 'Pet', 'Sat' : 'Sub', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po tipu', 'sortsize' : 'po veličini', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Prvo mape', 'sortperm' : 'po dopuštenju', // from v2.1.13 added 13.06.2016 'sortmode' : 'po načinu rada', // from v2.1.13 added 13.06.2016 'sortowner' : 'od strane vlasnika', // from v2.1.13 added 13.06.2016 'sortgroup' : 'po grupi', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Također Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NoviDokument.txt', // added 10.11.2015 'untitled folder' : 'NovaMapa', // added 10.11.2015 'Archive' : 'NovaArhiva', // from v2.1 added 10.11.2015 'untitled file' : 'Nova datoteka.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Datoteka', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Potvrda', 'confirmRm' : 'Jeste li sigurni?', 'confirmRepl' : 'Zamijeni stare dokumente novima?', 'confirmRest' : 'Zamijeniti postojeću stavku stavkom u smeću?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nije u UTF-8
Pretvoriti u UTF-8?
Sadržaj postaje UTF-8 spremanjem nakon pretvorbe.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Nije bilo moguće otkriti kodiranje znakova ove datoteke. Mora se privremeno pretvoriti u UTF-8 radi uređivanja.
Odaberite kodiranje znakova ove datoteke.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Promijenjen je.
Gubi se posao ako ne spremite promjene.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Jeste li sigurni da želite premjestiti stavke u koš za smeće?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Jeste li sigurni da želite premjestiti stavke u "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Primjeni na sve ', 'name' : 'Ime', 'size' : 'Veličina', 'perms' : 'Dozvole', 'modify' : 'Modificiran', 'kind' : 'Tip', 'read' : 'čitanje', 'write' : 'pisanje', 'noaccess' : 'bez pristupa', 'and' : 'i', 'unknown' : 'nepoznato', 'selectall' : 'Odaberi sve', 'selectfiles' : 'Odaberi dokument(e)', 'selectffile' : 'Odaberi prvi dokument', 'selectlfile' : 'Odaberi zadnji dokument', 'viewlist' : 'Lista', 'viewicons' : 'Ikone', 'viewSmall' : 'Male ikone', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Srednje ikone', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Velike ikone', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ekstra velike ikone', // from v2.1.39 added 22.5.2018 'places' : 'Mjesta', 'calc' : 'Računaj', 'path' : 'Put', 'aliasfor' : 'Drugo ime za', 'locked' : 'Zaključano', 'dim' : 'Dimenzije', 'files' : 'Dokumenti', 'folders' : 'Mape', 'items' : 'Stavke', 'yes' : 'da', 'no' : 'ne', 'link' : 'poveznica', 'searcresult' : 'Rezultati pretrage', 'selected' : 'odabrane stavke', 'about' : 'Info', 'shortcuts' : 'Prečaci', 'help' : 'Pomoć', 'webfm' : 'Web upravitelj datoteka', 'ver' : 'Verzija', 'protocolver' : 'verzija protokola', 'homepage' : 'Projektni dom', 'docs' : 'Dokumentacija', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'Tim', 'chiefdev' : 'glavni developer', 'developer' : 'razvojni programer', 'contributor' : 'doprinositelj', 'maintainer' : 'održavatelj', 'translator' : 'prevoditelj', 'icons' : 'Ikone', 'dontforget' : 'i ne zaboravi uzeti svoj ručnik', 'shortcutsof' : 'Prečaci isključeni', 'dropFiles' : 'Ovdje ispusti dokumente', 'or' : 'ili', 'selectForUpload' : 'Odaberi dokumente koje prebacuješ na server', 'moveFiles' : 'Premjesti dokumente', 'copyFiles' : 'Kopiraj dokumente', 'restoreFiles' : 'Vrati stavke', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Uklonite s mjesta', 'aspectRatio' : 'Omjer stranica', 'scale' : 'Skaliraj', 'width' : 'Širina', 'height' : 'Visina', 'resize' : 'Promjena veličine', 'crop' : 'Usjev', 'rotate' : 'Rotirati', 'rotate-cw' : 'Rotirajte za 90 stupnjeva CW', 'rotate-ccw' : 'Rotirajte za 90 stupnjeva u smjeru suprotnom od smjera desno', 'degree' : '°', 'netMountDialogTitle' : 'Montirajte mrežni volumen', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Domaćin', // added 18.04.2012 'port' : 'Luka', // added 18.04.2012 'user' : 'Korisnik', // added 18.04.2012 'pass' : 'Zaporka', // added 18.04.2012 'confirmUnmount' : 'Jeste li isključili $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Ispustite ili zalijepite datoteke iz preglednika', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Ovdje ispustite ili zalijepite datoteke i URL-ove', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Jezik', // from v2.1 added 19.12.2014 'searchTarget' : 'Cilj: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Pretraživanje po MIME vrsti unosa', // from v2.1 added 22.5.2015 'owner' : 'Vlasnik', // from v2.1 added 20.6.2015 'group' : 'Grupa', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Izvrši', // from v2.1 added 20.6.2015 'perm' : 'Dozvole', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mapa je prazna', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mapa je prazna\\A Dovuci dokumente koje želiš dodati', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mapa je prazna\\A Pritisni dugo za dodavanje dokumenata', // from v2.1.6 added 30.12.2015 'quality' : 'Kvaliteta', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatska sinkronizacija', // from v2.1.6 added 10.1.2016 'moveUp' : 'Gore', // from v2.1.6 added 18.1.2016 'getLink' : 'Nabavite URL vezu', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Odabrane stavke ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID foldera', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Dopustite izvanmrežni pristup', // from v2.1.10 added 3.25.2016 'reAuth' : 'Za ponovnu provjeru autentičnosti', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Učitava se...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otvorite više datoteka', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Pokušavate otvoriti $1 datoteke. Jeste li sigurni da želite otvoriti u pregledniku?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Rezultati pretraživanja su prazni u cilju pretraživanja.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Uređuje datoteku.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Odabrali ste $1 stavke.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Imate $1 stavke u međuspremniku.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementalno pretraživanje je samo iz trenutnog prikaza.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Vratite u funkciju', // from v2.1.15 added 3.8.2016 'complete' : '$1 završeno', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontekstni izbornik', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Okretanje stranice', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Korijeni volumena', // from v2.1.16 added 16.9.2016 'reset' : 'Resetiraj', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Boja pozadine', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Birač boja', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Mreža od 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Omogućeno', // from v2.1.16 added 4.10.2016 'disabled' : 'Onemogućeno', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Rezultati pretraživanja su prazni u trenutnom prikazu.\\APritisnite [Enter] za proširenje cilja pretraživanja.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Rezultati pretraživanja prvog slova su prazni u trenutnom prikazu.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Oznaka teksta', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 preostalo min', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Ponovno otvori s odabranim kodiranjem', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Spremite s odabranim kodiranjem', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Odaberite mapu', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Pretraživanje prvog slova', // from v2.1.23 added 24.3.2017 'presets' : 'Unaprijed postavljene postavke', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Previše je predmeta pa ne može u smeće.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Ispraznite mapu "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Nema stavki u mapi "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'preferencija', // from v2.1.26 added 28.6.2017 'language' : 'Jezik', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicijalizirajte postavke spremljene u ovom pregledniku', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Postavke alatne trake', // from v2.1.27 added 2.8.2017 'charsLeft' : '... preostalih $1 znakova.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... preostalih $1 redaka.', // from v2.1.52 added 16.1.2020 'sum' : 'zbroj', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Gruba veličina datoteke', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Usredotočite se na element dijaloga s prelaskom miša', // from v2.1.30 added 2.11.2017 'select' : 'Odaberi', // from v2.1.30 added 23.11.2017 'selectAction' : 'Radnja pri odabiru datoteke', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otvorite zadnji put korištenim uređivačom', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Obrni odabir', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Jeste li sigurni da želite preimenovati $1 odabrane stavke poput $2?
Ovo se ne može poništiti!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Preimenovanje grupe', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Broj', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Dodajte prefiks', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Dodajte sufiks', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Promjena ekstenzije', // from v2.1.31 added 8.12.2017 'columnPref' : 'Postavke stupaca (prikaz popisa)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Sve promjene će se odmah odraziti na arhivu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Sve promjene neće se odraziti sve dok ne isključite ovaj volumen.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Sljedeći volumen(i) montirani na ovaj volumen također su se demontirali. Jeste li sigurni da ćete ga isključiti?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informacije o odabiru', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmi za prikaz hash datoteke', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info stavke (Informacija o izboru)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Pritisnite ponovno za izlaz.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Alatna traka', // from v2.1.38 added 4.4.2018 'workspace' : 'Radni prostor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'svi', // from v2.1.38 added 4.4.2018 'iconSize' : 'Veličina ikone (prikaz ikona)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otvorite uvećani prozor uređivača', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Budući da konverzija putem API-ja trenutno nije dostupna, molimo vas da izvršite konverziju na web stranici.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Nakon pretvorbe morate prenijeti s URL-om stavke ili preuzetu datoteku da biste spremili pretvorenu datoteku.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Pretvorite na web-mjestu od $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integracije', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Ovaj elFinder ima integrirane sljedeće vanjske usluge. Prije korištenja provjerite uvjete korištenja, politiku privatnosti itd.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Prikaži skrivene stavke', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Sakrij skrivene stavke', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Prikaži/sakrij skrivene stavke', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Vrste datoteka za omogućavanje s "Nova datoteka"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Vrsta tekstualne datoteke', // from v2.1.41 added 7.8.2018 'add' : 'Dodajte', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Zadano', // from v2.1.43 added 19.10.2018 'description' : 'Opis', // from v2.1.43 added 19.10.2018 'website' : 'web-mjesto', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licenca', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Ova se stavka ne može spremiti. Kako biste izbjegli gubitak uređivanja, morate ih izvesti na svoje računalo.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dvaput kliknite na datoteku da biste je odabrali.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Koristite način cijelog zaslona', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'nepoznato', 'kindRoot' : 'Korijen volumena', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mapa', 'kindSelects' : 'Selekcije', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Drugo ime', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Aplikacija', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentacija', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash aplikacija', 'kindPDF' : 'Prijenosni format dokumenta (PDF)', 'kindTorrent' : 'Bittorrent dokument', 'kind7z' : '7z arhiva', 'kindTAR' : 'TAR arhiva', 'kindGZIP' : 'GZIP arhiva', 'kindBZIP' : 'BZIP arhiva', 'kindXZ' : 'XZ arhiva', 'kindZIP' : 'ZIP arhiva', 'kindRAR' : 'RAR arhiva', 'kindJAR' : 'Java JAR dokument', 'kindTTF' : 'True Type font', 'kindOTF' : 'Otvorite Vrsta fonta', 'kindRPM' : 'RPM paket', // texts 'kindText' : 'Tekst arhiva', 'kindTextPlain' : 'Obični tekst', 'kindPHP' : 'PHP izvor', 'kindCSS' : 'Kaskadni stilski list', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript izvor', 'kindRTF' : 'Format obogaćenog teksta', 'kindC' : 'C izvor', 'kindCHeader' : 'C izvor zaglavlja', 'kindCPP' : 'C++ izvor', 'kindCPPHeader' : 'C++ izvor zaglavlja', 'kindShell' : 'Unix shell skripta', 'kindPython' : 'Python izvor', 'kindJava' : 'Java izvor', 'kindRuby' : 'Ruby izvor', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL izvor', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK izvor', 'kindCSV' : 'vrijednosti razdvojene zarezom', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown tekst', // added 20.7.2015 // images 'kindImage' : 'slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Audio mediji', 'kindAudioMPEG' : 'MPEG zvuk', 'kindAudioMPEG4' : 'MPEG-4 zvuk', 'kindAudioMIDI' : 'MIDI zvuk', 'kindAudioOGG' : 'Ogg Vorbis zvuk', 'kindAudioWAV' : 'WAV zvuk', 'AudioPlaylist' : 'MP3 lista', 'kindVideo' : 'Video ', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; }));PK Z7HhAhAjs/i18n/elfinder.sr.jsnuW+A /** * Serbian translation * @author Momčilo m0k1 Mićanović * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sr = { translator : 'Momčilo m0k1 Mićanović <moki.forum@gmail.com>', language : 'Srpski', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { 'getShareText' : 'Објави', 'Editor ': 'Цоде Едитор', /********************************** errors **********************************/ 'error' : 'Greška', 'errUnknown' : 'Nepoznata greška.', 'errUnknownCmd' : 'Nepoznata komanda.', 'errJqui' : 'Neispravna konfiguracija jQuery UI. Komponente koje mogu da se odabiru, povlače, izbacuju moraju biti uključene.', 'errNode' : 'elFinder zahteva DOM Element da bude kreiran.', 'errURL' : 'Neispravna elFinder konfiguracija! URL opcija nije postavljena.', 'errAccess' : 'Pristup odbijen.', 'errConnect' : 'Nije moguće povezivanje s skriptom.', 'errAbort' : 'Veza prekinuta.', 'errTimeout' : 'Veza odbačena.', 'errNotFound' : 'Skripta nije pronađena.', 'errResponse' : 'Neispravan odgovor skripte.', 'errConf' : 'Neispravna konfiguracija skripte.', 'errJSON' : 'PHP JSON modul nije instaliran.', 'errNoVolumes' : 'Vidljivi volumeni nisu dostupni.', 'errCmdParams' : 'Nevažeći parametri za komandu "$1".', 'errDataNotJSON' : 'Podaci nisu JSON.', 'errDataEmpty' : 'Podaci nisu prazni.', 'errCmdReq' : 'Skripta zahteva komandu.', 'errOpen' : 'Nemoguće otvoriti "$1".', 'errNotFolder' : 'Objekat nije folder.', 'errNotFile' : 'Objekat nije datoteka.', 'errRead' : 'Nemoguće pročitati "$1".', 'errWrite' : 'Nemoguće pisati u "$1".', 'errPerm' : 'Dozvola je odbijena.', 'errLocked' : '"$1" je zaključan i nemože biti preimenovan, premešten ili obrisan.', 'errExists' : 'Datoteka zvana "$1" već postoji.', 'errInvName' : 'Neispravno ime datoteke.', 'errFolderNotFound' : 'Folder nije pronađen.', 'errFileNotFound' : 'Datoteka nije pronađena.', 'errTrgFolderNotFound' : 'Izabrani folder "$1" nije pronađen.', 'errPopup' : 'Pretraživač sprečava otvaranje iskačućih prozora. Da otvorite datoteku uključite iskačuće prozore u opcijama pretraživača.', 'errMkdir' : 'Nemoguće kreirati folder "$1".', 'errMkfile' : 'Nemoguće kreirati datoteku "$1".', 'errRename' : 'Nemoguće preimenovati datoteku "$1".', 'errCopyFrom' : 'Kopiranje datoteki sa "$1" nije dozvoljeno.', 'errCopyTo' : 'Kopiranje datoteki na "$1" nije dozvoljeno.', 'errUpload' : 'Greska pri slanju.', 'errUploadFile' : 'Nemoguće poslati "$1".', 'errUploadNoFiles' : 'Nisu pronađene datoteke za slanje.', 'errUploadTotalSize' : 'Podaci premašuju najveću dopuštenu veličinu.', 'errUploadFileSize' : 'Datoteka premašuje najveću dopuštenu veličinu.', 'errUploadMime' : 'Vrsta datoteke nije dopuštena.', 'errUploadTransfer' : '"$1" greška prilikom slanja.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Nemožeš sačuvati "$1".', 'errCopy' : 'Nemožeš kopirati "$1".', 'errMove' : 'Nemožeš premestiti "$1".', 'errCopyInItself' : 'Nemožeš kopirati "$1" na istu lokaciju.', 'errRm' : 'Nemožeš obrisati "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Nemoguće izvaditi datoteke iz "$1".', 'errArchive' : 'Nemoguće kreirati arhivu.', 'errArcType' : 'Nepodržani tip arhive.', 'errNoArchive' : 'Datoteka nije arhiva ili je nepodržani tip arhive.', 'errCmdNoSupport' : 'Skripta nepodržava ovu komandu.', 'errReplByChild' : 'Folder “$1” ne može biti zamenut stavkom koju sadrži.', 'errArcSymlinks' : 'Zbog bezbednosnih razloga ne možete raspakovati arhive koje sadrže simboličke veze ili datoteke sa nedozvoljenim imenima.', 'errArcMaxSize' : 'Arhiva je dostigla maksimalnu veličinu.', 'errResize' : 'Nemoguće promeniti veličinu "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'nepodržan tip datoteke.', 'errNotUTF8Content' : 'Datoteka "$1" nije u UTF-8 formati i ne može biti izmenjena.', 'errNetMount' : 'Nije moguće montirati "$1".', 'errNetMountNoDriver' : 'Nepodržani protokol.', 'errNetMountFailed' : 'Montiranje neuspelo.', 'errNetMountHostReq' : 'Host je potreban.', 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Kreiraj arhivu', 'cmdback' : 'Nazad', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Iseci', 'cmddownload' : 'Preuzmi', 'cmdduplicate' : 'Dupliraj', 'cmdedit' : 'Izmeni datoteku', 'cmdextract' : 'Raspakuj arhivu', 'cmdforward' : 'Napred', 'cmdgetfile' : 'Izaberi datoteke', 'cmdhelp' : 'O ovom softveru', 'cmdhome' : 'Početna', 'cmdinfo' : 'Proveri informacije', 'cmdmkdir' : 'Novi folder', 'cmdmkfile' : 'Nova datoteka', 'cmdopen' : 'Otvori', 'cmdpaste' : 'Zalepi', 'cmdquicklook' : 'Pregledaj', 'cmdreload' : 'Povno učitaj', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'Obriši', 'cmdsearch' : 'Pronađi datoteke', 'cmdup' : 'Idi na nadređeni folder', 'cmdupload' : 'Pošalji datoteke', 'cmdview' : 'Pogledaj', 'cmdresize' : 'Promeni veličinu slike', 'cmdsort' : 'Sortiraj', 'cmdnetmount' : 'Mount network volume', 'cmdselectall': 'Одабери све', 'cmdfullscreen': 'Цео екран', /*********************************** buttons ***********************************/ 'btnClose' : 'Zatvori', 'btnSave' : 'Sačuvaj', 'btnRm' : 'Obriši', 'btnApply' : 'Potvrdi', 'btnCancel' : 'Prekini', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Otvaranje foldera', 'ntffile' : 'Otvaranje datoteke', 'ntfreload' : 'Ponovo učitavanje sadržaja foldera', 'ntfmkdir' : 'Kreiranje foldera', 'ntfmkfile' : 'Kreiranje datoteke', 'ntfrm' : 'Brisanje datoteke', 'ntfcopy' : 'Kopiranje datoteke', 'ntfmove' : 'Premeštanje datoteke', 'ntfprepare' : 'Priprema za kopiranje dateoteke', 'ntfrename' : 'Primenovanje datoteke', 'ntfupload' : 'Slanje datoteke', 'ntfdownload' : 'Preuzimanje datoteke', 'ntfsave' : 'Čuvanje datoteke', 'ntfarchive' : 'Kreiranje arhive', 'ntfextract' : 'Izdvajanje datoteka iz arhive', 'ntfsearch' : 'Pretraga datoteka', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Radim nešto >_<', 'ntfloadimg' : 'Učitavanje slike', 'ntfnetmount' : 'Montiranje mrežnog volumena', 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'nepoznat', 'Today' : 'Danas', 'Yesterday' : 'Sutra', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Avg', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Mart', 'April' : 'April', 'May' : 'Maj', 'June' : 'Jun', 'July' : 'Jul', 'August' : 'Avgust', 'September' : 'Septembar', 'October' : 'Oktobar', 'November' : 'Novembar', 'December' : 'Decembar', 'Sunday' : 'Nedelja', 'Monday' : 'Ponedeljak', 'Tuesday' : 'Utorak', 'Wednesday' : 'Sreda', 'Thursday' : 'Četvrtak', 'Friday' : 'Petak', 'Saturday' : 'Subota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Uto', 'Wed' : 'Sre', 'Thu' : 'Čet', 'Fri' : 'Pet', 'Sat' : 'Sub', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po vrsti', 'sortsize' : 'po veličini', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Prvo folderi', /********************************** new items **********************************/ 'untitled file.txt' : 'Нова датотека.txt', // added 10.11.2015 'untitled folder' : 'НевФолдер', // added 10.11.2015 'Archive' : 'НоваАрхива', // from v2.1 added 10.11.2015 'untitled file' : 'Нова датотека.$1', 'extentionfile': "$1: Datoteka", // from v2.1.41 added 6.8.2018 'extentiontype': "$1: $2", // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Potrebna potvrda', 'confirmRm' : 'Da li ste sigurni da želite da obrišete datoteke?
Ovo se ne može poništiti!', 'confirmRepl' : 'Zameniti stare datoteke sa novima?', 'apllyAll' : 'Potvrdi za sve', 'name' : 'Ime', 'size' : 'Veličina', 'perms' : 'Dozvole', 'modify' : 'Izmenjeno', 'kind' : 'Vrsta', 'read' : 'čitanje', 'write' : 'pisanje', 'noaccess' : 'bez pristupa', 'and' : 'i', 'unknown' : 'nepoznato', 'selectall' : 'Izaberi sve datoteke', 'selectfiles' : 'Izaberi datoteku(e)', 'selectffile' : 'Izaberi prvu datoteku', 'selectlfile' : 'Izaberi poslednju datoteku', 'viewlist' : 'Popisni prikaz', 'viewicons' : 'Pregled ikona', 'places' : 'Mesta', 'calc' : 'Izračunaj', 'path' : 'Putanja', 'aliasfor' : 'Nadimak za', 'locked' : 'Zaključano', 'dim' : 'Dimenzije', 'files' : 'Datoteke', 'folders' : 'Folderi', 'items' : 'Stavke', 'yes' : 'da', 'no' : 'ne', 'link' : 'Veza', 'searcresult' : 'Rezultati pretrage', 'selected' : 'odabrane stavke', 'about' : 'O softveru', 'shortcuts' : 'Prečice', 'help' : 'Pomoć', 'webfm' : 'Web menađer datoteka', 'ver' : 'Verzija', 'protocolver' : 'verzija protokla', 'homepage' : 'Adresa projekta', 'docs' : 'Dokumentacija', 'github' : 'Forkuj nas na Github', 'twitter' : 'Prati nas na twitter', 'facebook' : 'Pridruži nam se na facebook', 'team' : 'Tim', 'chiefdev' : 'glavni programer', 'developer' : 'programer', 'contributor' : 'pomoćnik', 'maintainer' : 'održavatelj', 'translator' : 'prevodilac', 'icons' : 'Ikone', 'dontforget' : 'i ne zaboravite da ponesete peškir', 'shortcutsof' : 'Prečice isključene', 'dropFiles' : 'Prevucite datoteke ovde', 'or' : 'ili', 'selectForUpload' : 'Odaberite datoteke za slanje', 'moveFiles' : 'Premesti datoteke', 'copyFiles' : 'Kopiraj datoteke', 'rmFromPlaces' : 'Ukloni iz mesta', 'aspectRatio' : 'Omer širine i visine', 'scale' : 'Razmera', 'width' : 'Širina', 'height' : 'Visina', 'resize' : 'Promeni veličinu', 'crop' : 'Iseci', 'rotate' : 'Rotiraj', 'rotate-cw' : 'Rotiraj 90 stepeni CW', 'rotate-ccw' : 'Rotiraj 90 stepeni CCW', 'degree' : 'Stepeni', 'netMountDialogTitle' : 'Montiraj mrežni volumen', 'protocol' : 'Protokol', 'host' : 'Host', 'port' : 'Port', 'user' : 'Korisničko Ime', 'pass' : 'Lozinka', /********************************** mimetypes **********************************/ 'kindUnknown' : 'Nepoznat', 'kindFolder' : 'Folder', 'kindAlias' : 'Nadimak', 'kindAliasBroken' : 'Neispravan nadimak', // applications 'kindApp' : 'Aplikacija', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentacija', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash aplikacija', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent datoteka', 'kind7z' : '7z arhiva', 'kindTAR' : 'TAR arhiva', 'kindGZIP' : 'GZIP arhiva', 'kindBZIP' : 'BZIP arhiva', 'kindXZ' : 'XZ arhiva', 'kindZIP' : 'ZIP arhiva', 'kindRAR' : 'RAR arhiva', 'kindJAR' : 'Java JAR datoteka', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM paket', // texts 'kindText' : 'Teokstualni dokument', 'kindTextPlain' : 'Čist tekst', 'kindPHP' : 'PHP kod', 'kindCSS' : 'CSS kod', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript kod', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C kod', 'kindCHeader' : 'C header kod', 'kindCPP' : 'C++ kod', 'kindCPPHeader' : 'C++ header kod', 'kindShell' : 'Unix shell skripta', 'kindPython' : 'Python kod', 'kindJava' : 'Java kod', 'kindRuby' : 'Ruby kod', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL kod', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK kod', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML dokument', // images 'kindImage' : 'Slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Zvuk', 'kindAudioMPEG' : 'MPEG zvuk', 'kindAudioMPEG4' : 'MPEG-4 zvuk', 'kindAudioMIDI' : 'MIDI zvuk', 'kindAudioOGG' : 'Ogg Vorbis zvuk', 'kindAudioWAV' : 'WAV zvuk', 'AudioPlaylist' : 'MP3 lista', 'kindVideo' : 'Video', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK Z]ۂ55js/i18n/elfinder.sl.jsnuW+A/** * Slovenščina translation * @author Damjan Rems * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sl = { translator : 'Damjan Rems <d_rems at yahoo.com>', language : 'Slovenščina', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 03.03.2022 12:34 fancyDateFormat : '$1 H:i', // will show like: Danes 12:34 nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-123418 messages : { 'getShareText' : 'Deliti', 'Editor ': 'Urejevalnik kode', /********************************** errors **********************************/ 'error' : 'Napaka', 'errUnknown' : 'Neznana napaka.', 'errUnknownCmd' : 'Neznan ukaz.', 'errJqui' : 'Napačna jQuery UI nastavitev. Selectable, draggable in droppable dodatki morajo biti vključeni.', 'errNode' : 'elFinder potrebuje "DOM Element".', 'errURL' : 'Napačna nastavitev elFinder-ja! Manjka URL nastavitev.', 'errAccess' : 'Dostop zavrnjen.', 'errConnect' : 'Ne morem se priključiti na "backend".', 'errAbort' : 'Povezava prekinjena (aborted).', 'errTimeout' : 'Povezava potekla (timeout).', 'errNotFound' : 'Nisem našel "backend-a".', 'errResponse' : 'Napačni "backend" odgovor.', 'errConf' : 'Napačna "backend" nastavitev.', 'errJSON' : 'JSON modul ni instaliran.', 'errNoVolumes' : 'Bralne količine niso na voljo.', 'errCmdParams' : 'Napačni parametri za ukaz "$1".', 'errDataNotJSON' : 'Podatki niso v JSON obliki.', 'errDataEmpty' : 'Ni podatkov oz. so prazni.', 'errCmdReq' : '"Backend" zahtevek potrebuje ime ukaza.', 'errOpen' : '"$1" ni možno odpreti.', 'errNotFolder' : 'Objekt ni mapa.', 'errNotFile' : 'Objekt ni datoteka.', 'errRead' : '"$1" ni možno brati.', 'errWrite' : 'Ne morem pisati v "$1".', 'errPerm' : 'Dostop zavrnjen.', 'errLocked' : '"$1" je zaklenjen(a) in je ni možno preimenovati, premakniti ali izbrisati.', 'errExists' : 'Datoteka z imenom "$1" že obstaja.', 'errInvName' : 'Napačno ime datoteke.', 'errInvDirname' : 'Neveljavno ime mape.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mape nisem našel.', 'errFileNotFound' : 'Datoteke nisem našel.', 'errTrgFolderNotFound' : 'Ciljna mapa "$1" ne obstaja.', 'errPopup' : 'Brskalnik je preprečil prikaz (popup) okna. Za vpogled datoteke omogočite nastavitev v vašem brskalniku.', 'errMkdir' : 'Ni možno dodati mape "$1".', 'errMkfile' : 'Ni možno dodati datoteke "$1".', 'errRename' : 'Ni možno preimenovati "$1".', 'errCopyFrom' : 'Kopiranje datotek iz "$1" ni dovoljeno.', 'errCopyTo' : 'Kopiranje datotek na "$1" ni dovoljeno.', 'errMkOutLink' : 'Povezave z izven korenskega nosilca ni mogoče ustvariti.', // from v2.1 added 03.10.2015 'errUpload' : 'Napaka pri prenosu.', // old name - errUploadCommon 'errUploadFile' : '"$1" ni možno naložiti (upload).', // old name - errUpload 'errUploadNoFiles' : 'Ni datotek za nalaganje (upload).', 'errUploadTotalSize' : 'Podatki presegajo največjo dovoljeno velikost.', // old name - errMaxSize 'errUploadFileSize' : 'Datoteka presega največjo dovoljeno velikost.', // old name - errFileMaxSize 'errUploadMime' : 'Datoteke s to končnico niso dovoljene.', 'errUploadTransfer' : '"$1" napaka pri prenosu.', 'errUploadTemp' : 'Ni mogoče ustvariti začasne datoteke za nalaganje.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" že obstaja na tej lokaciji in ga ni mogoče nadomestiti s predmetom druge vrste.', // new 'errReplace' : '"$1" ni mogoče zamenjati.', 'errSave' : '"$1" ni možno shraniti.', 'errCopy' : '"$1" ni možno kopirati.', 'errMove' : '"$1" ni možno premakniti.', 'errCopyInItself' : '"$1" ni možno kopirati samo vase.', 'errRm' : '"$1" ni možno izbrisati.', 'errTrash' : 'Ni mogoče v smeti.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Izvornih datotek ni mogoče odstraniti.', 'errExtract' : 'Datotek iz "$1" ni možno odpakirati.', 'errArchive' : 'Napaka pri delanju arhiva.', 'errArcType' : 'Nepodprta vrsta arhiva.', 'errNoArchive' : 'Datoteka ni arhiv ali vrsta arhiva ni podprta.', 'errCmdNoSupport' : '"Backend" ne podpira tega ukaza.', 'errReplByChild' : 'Mape “$1” ni možno zamenjati z vsebino mape.', 'errArcSymlinks' : 'Zaradi varnostnih razlogov arhiva ki vsebuje "symlinks" ni možno odpakirati.', // edited 24.06.2012 'errArcMaxSize' : 'Datoteke v arhivu presegajo največjo dovoljeno velikost.', 'errResize' : '"$1" ni možno razširiti.', 'errResizeDegree' : 'Neveljavna stopnja vrtenja.', // added 7.3.2013 'errResizeRotate' : 'Slike ni mogoče zasukati.', // added 7.3.2013 'errResizeSize' : 'Neveljavna velikost slike.', // added 7.3.2013 'errResizeNoChange' : 'Velikost slike ni spremenjena.', // added 7.3.2013 'errUsupportType' : 'Nepodprta vrsta datoteke.', 'errNotUTF8Content' : 'Datoteka "$1" ni v UTF-8 in je ni mogoče urejati.', // added 9.11.2011 'errNetMount' : '"$1" ni mogoče priklopiti.', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodprt protokol.', // added 17.04.2012 'errNetMountFailed' : 'Montaža ni uspela.', // added 17.04.2012 'errNetMountHostReq' : 'Potreben je gostitelj.', // added 18.04.2012 'errSessionExpires' : 'Vaša seja je potekla zaradi neaktivnosti.', 'errCreatingTempDir' : 'Ni mogoče ustvariti začasnega imenika: "$1"', 'errFtpDownloadFile' : 'Ni mogoče prenesti datoteke s FTP: "$1"', 'errFtpUploadFile' : 'Datoteke ni mogoče naložiti na FTP: "$1"', 'errFtpMkdir' : 'Ni mogoče ustvariti oddaljenega imenika na FTP: "$1"', 'errArchiveExec' : 'Napaka pri arhiviranju datotek: "$1"', 'errExtractExec' : 'Napaka pri ekstrakciji datotek: "$1"', 'errNetUnMount' : 'Ni mogoče odklopiti.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Ni mogoče pretvoriti v UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Preizkusite sodobni brskalnik, če želite naložiti mapo.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Časovna omejitev je potekla med iskanjem »$1«. Rezultat iskanja je delen.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Potrebno je ponovno pooblastilo.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Največje število izbirnih elementov je 1 dolar.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Ni mogoče obnoviti iz koša. Cilja obnovitve ni mogoče določiti.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Urejevalnika za to vrsto datoteke ni bilo mogoče najti.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Na strani strežnika je prišlo do napake.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Ni mogoče izprazniti mape "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Obstaja še 1 $ napak.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Naenkrat lahko ustvarite do $1 map.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Naredi arhiv', 'cmdback' : 'Nazaj', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Izreži', 'cmddownload' : 'Poberi (download)', 'cmdduplicate' : 'Podvoji', 'cmdedit' : 'Uredi datoteko', 'cmdextract' : 'Odpakiraj datoteke iz arhiva', 'cmdforward' : 'Naprej', 'cmdgetfile' : 'Izberi datoteke', 'cmdhelp' : 'Več o', 'cmdhome' : 'Domov', 'cmdinfo' : 'Lastnosti', 'cmdmkdir' : 'Nova mapa', 'cmdmkdirin' : 'V novo mapo', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nova datoteka', 'cmdopen' : 'Odpri', 'cmdpaste' : 'Prilepi', 'cmdquicklook' : 'Hitri ogled', 'cmdreload' : 'Osveži', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'Izbriši', 'cmdtrash' : 'V smeti', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Obnovi', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Poišči datoteke', 'cmdup' : 'Mapa nazaj', 'cmdupload' : 'Naloži (upload)', 'cmdview' : 'Ogled', 'cmdresize' : 'Povečaj (pomanjšaj) sliko', 'cmdsort' : 'Razvrsti', 'cmdnetmount' : 'Namestite omrežno glasnost', // added 18.04.2012 'cmdnetunmount': 'Odklopi', // from v2.1 added 30.04.2012 'cmdplaces' : 'Na mesta', // added 28.12.2014 'cmdchmod' : 'Spremeni način', // from v2.1 added 20.6.2015 'cmdopendir' : 'Odprite mapo', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Ponastavi širino stolpca', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Celozaslonski način', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Premakni se', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Izpraznite mapo', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Razveljavi', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Ponovi', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Nastavitve', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Izberi vse', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Izberite nobenega', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Obrni izbor', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Odpri v novem oknu', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skrij (nastavitev)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zapri', 'btnSave' : 'Shrani', 'btnRm' : 'Izbriši', 'btnApply' : 'Uporabi', 'btnCancel' : 'Prekliči', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Pojdi na $1 in odobri', // from v2.1 added 26.04.2012 'btnUnmount': 'Odklopi', // from v2.1 added 30.04.2012 'btnConv' : 'Pretvorba', // from v2.1 added 08.04.2014 'btnCwd' : 'tukaj', // from v2.1 added 22.5.2015 'btnVolume' : 'Glasnost', // from v2.1 added 22.5.2015 'btnAll' : 'vse', // from v2.1 added 22.5.2015 'btnMime' : 'Vrsta MIME', // from v2.1 added 22.5.2015 'btnFileName':'Ime datoteke', // from v2.1 added 22.5.2015 'btnSaveClose': 'Shrani in zapri', // from v2.1 added 12.6.2015 'btnBackup' : 'Rezerva', // fromv2.1 added 28.11.2015 'btnRename' : 'Preimenuj', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Preimenuj (vse)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prejšnja (1 $/2 $)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Naslednji (1 $/2 $)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Shrani kot', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Odpri mapo', 'ntffile' : 'Odpri datoteko', 'ntfreload' : 'Osveži vsebino mape', 'ntfmkdir' : 'Ustvarjam mapo', 'ntfmkfile' : 'Ustvarjam datoteke', 'ntfrm' : 'Brišem datoteke', 'ntfcopy' : 'Kopiram datoteke', 'ntfmove' : 'Premikam datoteke', 'ntfprepare' : 'Pripravljam se na kopiranje datotek', 'ntfrename' : 'Preimenujem datoteke', 'ntfupload' : 'Nalagam (upload) datoteke', 'ntfdownload' : 'Pobiram (download) datoteke', 'ntfsave' : 'Shranjujem datoteke', 'ntfarchive' : 'Ustvarjam arhiv', 'ntfextract' : 'Razpakiram datoteke iz arhiva', 'ntfsearch' : 'Iščem datoteke', 'ntfresize' : 'Spreminjanje velikosti slik', 'ntfsmth' : 'Počakaj delam >_<', 'ntfloadimg' : 'Nalagam sliko', 'ntfnetmount' : 'Montaža omrežne glasnosti', // added 18.04.2012 'ntfnetunmount': 'Odstranitev omrežnega nosilca', // from v2.1 added 30.04.2012 'ntfdim' : 'Pridobivanje dimenzije slike', // added 20.05.2013 'ntfreaddir' : 'Branje informacij o mapi', // from v2.1 added 01.07.2013 'ntfurl' : 'Pridobivanje URL-ja povezave', // from v2.1 added 11.03.2014 'ntfchmod' : 'Spreminjanje načina datoteke', // from v2.1 added 20.6.2015 'ntfpreupload': 'Preverjanje imena datoteke za nalaganje', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Ustvarjanje datoteke za prenos', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Pridobivanje informacij o poti', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Obdelava naložene datoteke', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Vrzi v smeti', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Obnovitev iz koša', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Preverjanje ciljne mape', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Razveljavitev prejšnje operacije', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Ponavljanje prejšnjega razveljavljenega', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Preverjanje vsebine', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'smeti', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'neznan', 'Today' : 'Danes', 'Yesterday' : 'Včeraj', 'msJan' : 'Jan', 'msFeb' : 'februarja', 'msMar' : 'mar', 'msApr' : 'apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'jul', 'msAug' : 'Avg', 'msSep' : 'sep', 'msOct' : 'Okt', 'msNov' : 'nov', 'msDec' : 'dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Marec', 'April' : 'aprila', 'May' : 'Maj', 'June' : 'Junij', 'July' : 'Julij', 'August' : 'Avgust', 'September' : 'septembra', 'October' : 'Oktober', 'November' : 'novembra', 'December' : 'december', 'Sunday' : 'Nedelja', 'Monday' : 'Ponedeljek', 'Tuesday' : 'Torek', 'Wednesday' : 'Sreda', 'Thursday' : 'Četrtek', 'Friday' : 'Petek', 'Saturday' : 'Sobota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Tor', 'Wed' : 'Sre', 'Thu' : 'Čet', 'Fri' : 'Pet', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po vrsti', 'sortsize' : 'po velikosti', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Najprej mape', 'sortperm' : 'z dovoljenjem', // from v2.1.13 added 13.06.2016 'sortmode' : 'po načinu', // from v2.1.13 added 13.06.2016 'sortowner' : 's strani lastnika', // from v2.1.13 added 13.06.2016 'sortgroup' : 'po skupini', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Tudi Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'Nova mapa', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'Nova datoteka.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: datoteka', // from v2.1.41 added 6.8.2018 'extentiontype' : '1 $: 2 $', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Zahtevana je potrditev', 'confirmRm' : 'Ste prepričani, da želite izbrisati datoteko?
POZOR! Tega ukaza ni možno preklicati!', 'confirmRepl' : 'Zamenjam staro datoteko z novo?', 'confirmRest' : 'Ali želite obstoječi element zamenjati s predmetom v smetnjaku?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Ni v UTF-8
Pretvoriti v UTF-8?
Vsebina postane UTF-8 s shranjevanjem po pretvorbi.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Kodiranja znakov te datoteke ni bilo mogoče zaznati. Za urejanje ga je treba začasno pretvoriti v UTF-8.
Prosimo, izberite kodiranje znakov te datoteke.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Spremenjeno je bilo.
Če ne shranite sprememb, boste izgubili delo.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Ali ste prepričani, da želite premakniti predmete v koš za smeti?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Ali ste prepričani, da želite premakniti elemente v »$1«?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Uporabi pri vseh', 'name' : 'Ime', 'size' : 'Velikost', 'perms' : 'Dovoljenja', 'modify' : 'Spremenjeno', 'kind' : 'Vrsta', 'read' : 'beri', 'write' : 'piši', 'noaccess' : 'ni dostopa', 'and' : 'in', 'unknown' : 'neznan', 'selectall' : 'Izberi vse datoteke', 'selectfiles' : 'Izberi datotek(o)e', 'selectffile' : 'Izberi prvo datoteko', 'selectlfile' : 'Izberi zadnjo datoteko', 'viewlist' : 'Seznam', 'viewicons' : 'Ikone', 'viewSmall' : 'Majhne ikone', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Srednje ikone', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Velike ikone', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Izjemno velike ikone', // from v2.1.39 added 22.5.2018 'places' : 'Mesta (places)', 'calc' : 'Izračun', 'path' : 'Pot do', 'aliasfor' : 'Sopomenka (alias) za', 'locked' : 'Zaklenjeno', 'dim' : 'Dimenzije', 'files' : 'Datoteke', 'folders' : 'Mape', 'items' : 'Predmeti', 'yes' : 'da', 'no' : 'ne', 'link' : 'Povezava', 'searcresult' : 'Rezultati iskanja', 'selected' : 'izbrani predmeti', 'about' : 'Več o', 'shortcuts' : 'Bližnjice', 'help' : 'Pomoč', 'webfm' : 'Spletni upravitelj datotek', 'ver' : 'Verzija', 'protocolver' : 'verzija protokola', 'homepage' : 'Domača stran', 'docs' : 'Dokumentacija', 'github' : 'Fork us on Github', 'twitter' : 'Sledi na twitterju', 'facebook' : 'Pridruži se nam na facebook-u', 'team' : 'Tim', 'chiefdev' : 'Glavni razvijalec', 'developer' : 'razvijalec', 'contributor' : 'sodelavec', 'maintainer' : 'vzdrževalec', 'translator' : 'prevajalec', 'icons' : 'Ikone', 'dontforget' : 'In ne pozabi na brisačo', 'shortcutsof' : 'Bližnjica onemogočena', 'dropFiles' : 'Datoteke spusti tukaj', 'or' : 'ali', 'selectForUpload' : 'Izberi datoteke za nalaganje', 'moveFiles' : 'Premakni datoteke', 'copyFiles' : 'Kopiraj datoteke', 'restoreFiles' : 'Obnovite predmete', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Izbriši iz mesta (places)', 'aspectRatio' : 'Razmerje slike', 'scale' : 'Razširi', 'width' : 'Širina', 'height' : 'Višina', 'resize' : 'Povečaj', 'crop' : 'Obreži', 'rotate' : 'Zavrti', 'rotate-cw' : 'Zavrti 90 st. v smeri ure', 'rotate-ccw' : 'Zavrti 90 st. v obratni smeri ure', 'degree' : 'Stopnja', 'netMountDialogTitle' : 'Namestite omrežno glasnost', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Gostitelj', // added 18.04.2012 'port' : 'pristanišče', // added 18.04.2012 'user' : 'Uporabnik', // added 18.04.2012 'pass' : 'Geslo', // added 18.04.2012 'confirmUnmount' : 'Ali odklopite $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Spustite ali prilepite datoteke iz brskalnika', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Sem spustite datoteke, prilepite URL-je ali slike (odložišče).', // from v2.1 added 07.04.2014 'encoding' : 'Kodiranje', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Cilj: 1 dolar', // from v2.1 added 22.5.2015 'searchMime' : 'Iskanje po vhodni vrsti MIME', // from v2.1 added 22.5.2015 'owner' : 'Lastnik', // from v2.1 added 20.6.2015 'group' : 'Skupina', // from v2.1 added 20.6.2015 'other' : 'Drugo', // from v2.1 added 20.6.2015 'execute' : 'Izvedite', // from v2.1 added 20.6.2015 'perm' : 'dovoljenje', // from v2.1 added 20.6.2015 'mode' : 'način', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mapa je prazna', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mapa je prazna\\A Spustite, da dodate elemente', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mapa je prazna\\A Dolg tapnite, da dodate elemente', // from v2.1.6 added 30.12.2015 'quality' : 'Kakovost', // from v2.1.6 added 5.1.2016 'autoSync' : 'Samodejna sinhronizacija', // from v2.1.6 added 10.1.2016 'moveUp' : 'Pomakni se navzgor', // from v2.1.6 added 18.1.2016 'getLink' : 'Pridobite URL povezavo', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Izbrani predmeti (1 $)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID mape', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Dovoli dostop brez povezave', // from v2.1.10 added 3.25.2016 'reAuth' : 'Za ponovno avtentikacijo', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Zdaj se nalaga ...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Odprite več datotek', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Poskušate odpreti datoteke $1. Ali ste prepričani, da želite odpreti v brskalniku?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Rezultati iskanja so prazni v iskalnem cilju.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Ureja datoteko.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Izbrali ste $1 predmetov.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'V odložišče imate 1 $ elementov.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementalno iskanje je samo iz trenutnega pogleda.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Obnovi', // from v2.1.15 added 3.8.2016 'complete' : '1 $ dokončan', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontekstni meni', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Obračanje strani', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumenske korenine', // from v2.1.16 added 16.9.2016 'reset' : 'Ponastaviti', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Barva ozadja', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Izbirnik barv', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Mreža 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Omogočeno', // from v2.1.16 added 4.10.2016 'disabled' : 'Onemogočeno', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Rezultati iskanja so prazni v trenutnem pogledu.\\APritisnite [Enter], da razširite cilj iskanja.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Besedilna oznaka', // from v2.1.17 added 13.10.2016 'minsLeft' : 'Še 1 min', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Ponovno odprite z izbranim kodiranjem', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Shrani z izbranim kodiranjem', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Izberite mapo', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Iskanje prve črke', // from v2.1.23 added 24.3.2017 'presets' : 'Prednastavitve', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Preveč je predmetov, tako da ne gre v smeti.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Izpraznite mapo "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'V mapi "$1" ni elementov.', // from v2.1.25 added 22.6.2017 'preference' : 'Prednost', // from v2.1.26 added 28.6.2017 'language' : 'Jezik', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializirajte nastavitve, shranjene v tem brskalniku', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Nastavitve orodne vrstice', // from v2.1.27 added 2.8.2017 'charsLeft' : '... ostane 1 znak.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... še $1 vrstice.', // from v2.1.52 added 16.1.2020 'sum' : 'vsota', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Približna velikost datoteke', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Osredotočite se na element pogovornega okna s pomikom miške', // from v2.1.30 added 2.11.2017 'select' : 'Izberite', // from v2.1.30 added 23.11.2017 'selectAction' : 'Dejanje ob izbiri datoteke', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Odprite z nazadnje uporabljenim urejevalnikom', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Obrni izbor', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Ali ste prepričani, da želite preimenovati izbrane elemente $1, kot je $2?
Tega ni mogoče razveljaviti!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Paketno preimenovanje', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Številka', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Dodajte predpono', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Dodajte pripono', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Spremeni razširitev', // from v2.1.31 added 8.12.2017 'columnPref' : 'Nastavitve stolpcev (pogled seznama)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Vse spremembe se bodo takoj odrazile v arhivu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Vse spremembe se ne bodo odrazile, dokler ne odklopite tega nosilca.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Naslednji nosilci, nameščeni na ta nosilec, so se prav tako odklopili. Ali ste prepričani, da ga boste odklopili?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informacije o izbiri', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmi za prikaz hash datoteke', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informacijski elementi (informacijska plošča za izbor)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Ponovno pritisnite za izhod.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Orodna vrstica', // from v2.1.38 added 4.4.2018 'workspace' : 'Delovni prostor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'vse', // from v2.1.38 added 4.4.2018 'iconSize' : 'Velikost ikone (pogled ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Odprite okno povečanega urejevalnika', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Ker pretvorba prek API-ja trenutno ni na voljo, prosimo pretvorite na spletnem mestu.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po pretvorbi morate biti naloženi z URL-jem elementa ali preneseno datoteko, da shranite pretvorjeno datoteko.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Pretvarjanje na spletnem mestu $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integracije', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Ta elFinder ima vgrajene naslednje zunanje storitve. Pred uporabo preverite pogoje uporabe, politiko zasebnosti itd.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Pokaži skrite predmete', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skrij skrite predmete', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Pokaži/skrij skrite predmete', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Vrste datotek, ki jih želite omogočiti z "Nova datoteka"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Vrsta besedilne datoteke', // from v2.1.41 added 7.8.2018 'add' : 'Dodaj', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Privzeto', // from v2.1.43 added 19.10.2018 'description' : 'Opis', // from v2.1.43 added 19.10.2018 'website' : 'Spletna stran', // from v2.1.43 added 19.10.2018 'author' : 'Avtor', // from v2.1.43 added 19.10.2018 'email' : 'E-naslov', // from v2.1.43 added 19.10.2018 'license' : 'Licenca', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Tega predmeta ni mogoče shraniti. Da ne bi izgubili popravkov, jih morate izvoziti v računalnik.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dvokliknite datoteko, da jo izberete.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Uporabite celozaslonski način', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznan', 'kindRoot' : 'Korenski nosilec', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mapa', 'kindSelects' : 'Izbori', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Sopomenka (alias)', 'kindAliasBroken' : 'Nedelujoča sopomenka (alias)', // applications 'kindApp' : 'Program', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint predstavitev', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash program', 'kindPDF' : 'Prenosni format dokumenta (PDF)', 'kindTorrent' : 'Bittorrent datoteka', 'kind7z' : '7z arhiv', 'kindTAR' : 'TAR arhiv', 'kindGZIP' : 'GZIP arhiv', 'kindBZIP' : 'BZIP arhiv', 'kindXZ' : 'XZ arhiv', 'kindZIP' : 'ZIP arhiv', 'kindRAR' : 'RAR arhiv', 'kindJAR' : 'Java JAR datoteka', 'kindTTF' : 'Pisava True Type', 'kindOTF' : 'Odprite pisavo Type', 'kindRPM' : 'RPM paket', // texts 'kindText' : 'Tekst dokument', 'kindTextPlain' : 'Samo tekst', 'kindPHP' : 'PHP koda', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript koda', 'kindRTF' : 'Rich Text Format (RTF)', 'kindC' : 'C koda', 'kindCHeader' : 'C header koda', 'kindCPP' : 'C++ koda', 'kindCPPHeader' : 'C++ header koda', 'kindShell' : 'Unix shell skripta', 'kindPython' : 'Python kdoa', 'kindJava' : 'Java koda', 'kindRuby' : 'Ruby koda', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL koda', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK koda', 'kindCSV' : 'Besedilo ločeno z vejico (CSV)', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Besedilo za znižanje vrednosti', // added 20.7.2015 // images 'kindImage' : 'Slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Avdio medija', 'kindAudioMPEG' : 'MPEG zvok', 'kindAudioMPEG4' : 'MPEG-4 zvok', 'kindAudioMIDI' : 'MIDI zvok', 'kindAudioOGG' : 'Ogg Vorbis zvok', 'kindAudioWAV' : 'WAV zvok', 'AudioPlaylist' : 'MP3 seznam', 'kindVideo' : 'Video medija', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); PK ZGj>>js/i18n/elfinder.si.jsnuW+A/** * Sinhala translation * @author CodeLyokoXtEAM * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.si = { translator : 'CodeLyokoXtEAM <XcodeLyokoTEAM@gmail.com>', language : 'Sinhala', direction : 'ltr', dateFormat : 'Y.m.d h:i A', // will show like: 2022.03.03 01:13 PM fancyDateFormat : '$1 h:i A', // will show like: අද 01:13 PM nonameDateFormat : 'Ymd-His', // noname upload will show like: 20220303-131342 messages : { 'getShareText' : 'බෙදාගන්න', 'Editor ': 'කේත සංස්කාරකය', /********************************** errors **********************************/ 'error' : 'දෝෂයකි.', 'errUnknown' : 'නොදන්නා දෝෂයකි.', 'errUnknownCmd' : 'නොදන්නා විධානයකි.', 'errJqui' : 'වලංගු නොවන jQuery UI සැකැස්මකි. තේරිය හැකි, ඇදගෙන යාම සහ ඇද දැමිය හැකි කොටස් ඇතුළත් කළ යුතුය.', 'errNode' : 'ElFinder විසින් DOM Element නිර්මාණය කිරීමට අවශ්‍යව අැත.', 'errURL' : 'වලංගු නොවන elFinder සැකැස්මකි! URL විකල්පය සැකසා නැත.', 'errAccess' : 'භාවිතය අත්හිටුවා ඇත.', 'errConnect' : 'පසුබිම(Backend) වෙත සම්බන්ධ වීමට නොහැකිය.', 'errAbort' : 'සම්බන්ධතාවය වසාදමා ඇත.', 'errTimeout' : 'සම්බන්ධතා කල් ඉකුත්වී ඇත.', 'errNotFound' : 'පසුබිම(Backend) සොයාගත නොහැකි විය.', 'errResponse' : 'වලංගු නොවන පසුබිම(Backend) ප්‍රතිචාරය.', 'errConf' : 'වලංගු නොවන Backend සැකැස්මකි.', 'errJSON' : 'PHP JSON මොඩියුලය ස්ථාපනය කර නැත.', 'errNoVolumes' : 'කියවිය හැකි එ්කක(volumes) නොමැත.', 'errCmdParams' : '"$1" නම් විධානය වලංගු නොවන පරාමිතියකි.', 'errDataNotJSON' : 'JSON දත්ත නොවේ.', 'errDataEmpty' : 'හිස් දත්තයකි.', 'errCmdReq' : 'Backend සඳහා ඉල්ලන ලද විධානයේ නම අවශ්‍ය වේ.', 'errOpen' : '"$1" විවෘත කළ නොහැක.', 'errNotFolder' : 'අායිත්තම(object) ෆොල්ඩරයක් නොවේ.', 'errNotFile' : 'අායිත්තම(object) ගොනුවක් නොවේ.', 'errRead' : '"$1" කියවීමට නොහැක.', 'errWrite' : '"$1" තුල ලිවීමට නොහැකිය.', 'errPerm' : 'අවසරය නොමැත.', 'errLocked' : '"$1" අගුළු දමා ඇති අතර එය නැවත නම් කිරීම, සම්පූර්ණයෙන් විස්ථාපනය කිරීම හෝ ඉවත් කිරීම කළ නොහැක.', 'errExists' : '"$1" නම් ගොනුව දැනටමත් පවතී.', 'errInvName' : 'ගොනු නම වලංගු නොවේ.', 'errInvDirname' : 'ෆෝල්ඩර් නම වලංගු නොවේ.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'ෆෝල්ඩරය හමු නොවිණි.', 'errFileNotFound' : 'ගොනුව හමු නොවිණි.', 'errTrgFolderNotFound' : 'ඉලක්කගත ෆෝල්ඩරය "$1" හමු නොවිනි.', 'errPopup' : 'බ්‍රවුසරය උත්පතන කවුළුව විවෘත කිරීම වළක්වයි. ගොනු විවෘත කිරීම සඳහා බ්‍රවුසරයේ විකල්ප තුළ එය සක්රිය කරන්න.', 'errMkdir' : '"$1" ෆෝල්ඩරය සෑදීමට නොහැකිය.', 'errMkfile' : '"$1" ගොනුව සෑදිය නොහැක.', 'errRename' : '"$1" නැවත නම් කිරීමට නොහැකි විය.', 'errCopyFrom' : '"$1" volume යෙන් ගොනු පිටපත් කිරීම තහනම්ය.', 'errCopyTo' : '"$1" volume යට ගොනු පිටපත් කිරීම තහනම්ය.', 'errMkOutLink' : 'volume root යෙන් පිටතට සබැඳිය(link) නිර්මාණය කිරීමට නොහැකි විය.', // from v2.1 added 03.10.2015 'errUpload' : 'උඩුගත(upload) කිරීමේ දෝෂයකි.', // old name - errUploadCommon 'errUploadFile' : '"$1" උඩුගත(upload) කිරීමට නොහැකි විය.', // old name - errUpload 'errUploadNoFiles' : 'උඩුගත(upload) කිරීම සඳහා ගොනු කිසිවක් සොයාගත නොහැකි විය.', 'errUploadTotalSize' : 'දත්ත අවසර දී අැති උපරිම ප්‍රමාණය ඉක්මවා ඇත.', // old name - errMaxSize 'errUploadFileSize' : 'ගොනු අවසර දී අැති උපරිම ප්‍රමාණය ඉක්මවා ඇත.', // old name - errFileMaxSize 'errUploadMime' : 'ගොනු වර්ගයට අවසර නැත.', 'errUploadTransfer' : '"$1" ව මාරු කිරීමේ දෝෂයකි.', 'errUploadTemp' : 'upload කිරීම සඳහා තාවකාලික ගොනුව සෑදිය නොහැක.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" අායිත්තම(object) දැනටමත් මෙම ස්ථානයේ පවතී, වෙනත් වර්ගයකිනි ප්‍රතිස්ථාපනය කළ නොහැක.', // new 'errReplace' : '"$1" ප්‍රතිස්ථාපනය කළ නොහැක.', 'errSave' : '"$1" සුරැකීමට නොහැක.', 'errCopy' : '"$1" පිටපත් කිරීමට නොහැක.', 'errMove' : '"$1" සම්පූර්ණයෙන් විස්ථාපනය කිරීමට නොහැක.', 'errCopyInItself' : '"$1" තුලට පිටපත් කිරීමට නොහැක.', 'errRm' : '"$1" ඉවත් කිරීමට නොහැකි විය.', 'errTrash' : 'කුණු-කූඩය තුලට දැමීමට නොහැක.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'මූලාශ්‍රය ගොනු(ව) ඉවත් කළ නොහැක.', 'errExtract' : '"$1" වෙතින් ගොනු දිග හැරීමට නොහැක.', 'errArchive' : 'සංරක්ෂිතය සෑදීමට නොහැකි විය.', 'errArcType' : 'නොගැලපෙන සංරක්ෂණ වර්ගයකි.', 'errNoArchive' : 'ගොනුව නොගැලපෙන සංරක්ෂණ වර්ගයක් හෝ සංරක්ෂිතයක් නොවේ.', 'errCmdNoSupport' : 'පසුබිම(Backend) මෙම විධානය නොදනී.', 'errReplByChild' : '"$1" ෆෝල්ඩරය එහිම අඩංගු අයිතමයක් මගින් ප්‍රතිස්ථාපනය කළ නොහැක.', 'errArcSymlinks' : 'ආරක්ෂිත හේතුව නිසා අනුමත නොකෙරෙන සබැඳි සම්බන්දතා හෝ ලිපිගොනු නම් අඩංගු බැවින් සංරක්ෂිතය දිග හැරීම කිරීමට ඉඩ නොදෙන.', // edited 24.06.2012 'errArcMaxSize' : 'සංරක්ෂිතය ලිපිගොනු උපරිම ප්‍රමාණය ඉක්මවා ඇත.', 'errResize' : 'ප්‍රතිප්‍රමාණය කිරීමට නොහැකි විය.', 'errResizeDegree' : 'වලංගු නොවන භ්‍රමණ කෝණයකි.', // added 7.3.2013 'errResizeRotate' : 'රූපය භ්‍රමණය කිරීමට නොහැකි විය.', // added 7.3.2013 'errResizeSize' : 'රූපයේ ප්‍රමාණය වලංගු නොවේ.', // added 7.3.2013 'errResizeNoChange' : 'රූපයේ ප්‍රමාණය වෙනස් නොවුණි.', // added 7.3.2013 'errUsupportType' : 'නොගැලපෙන ගොනු වර්ගයකි.', 'errNotUTF8Content' : '"$1" ගොනුව UTF-8 හි නොමැති අතර සංස්කරණය කළ නොහැක.', // added 9.11.2011 'errNetMount' : '"$1" සවි(mount) කිරීමට නොහැක.', // added 17.04.2012 'errNetMountNoDriver' : 'ප්‍රොටොකෝලය(protocol) නොගැලපේ.', // added 17.04.2012 'errNetMountFailed' : 'සවි කිරීම(mount කිරීම) අසාර්ථක විය.', // added 17.04.2012 'errNetMountHostReq' : 'ධාරකය(Host) අවශ්‍ය වේ.', // added 18.04.2012 'errSessionExpires' : 'ඔබේ අක්‍රියතාව හේතුවෙන් සැසිය(session) කල් ඉකුත් වී ඇත.', 'errCreatingTempDir' : 'තාවකාලික ඩිරෙක්ටරයක්(directory) ​​සෑදිය නොහැක: "$1"', 'errFtpDownloadFile' : 'FTP වලින් ගොනුව බාගත(download) කිරීමට නොහැකි විය: "$1"', 'errFtpUploadFile' : 'ගොනුව FTP වෙත උඩුගත(upload) කිරීමට නොහැකි විය: "$1"', 'errFtpMkdir' : 'FTP මත දුරස්ථ නාමාවලියක්(remote directory) නිර්මාණය කිරීමට නොහැකි විය: "$1"', 'errArchiveExec' : 'ගොනු සංරක්ෂණය(archiving) කිරීමේදී දෝෂයක් ඇතිවිය: "$1"', 'errExtractExec' : 'ගොනු දිගහැරීමේදී(extracting) දෝෂයක් ඇතිවිය: "$1"', 'errNetUnMount' : 'විසන්ධි කිරීමට(unmount) නොහැක.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8 වෙත පරිවර්තනය කළ නොහැක.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'ඔබ ෆෝල්ඩරය උඩුගත(upload) කිරීමට කැමති නම් නවීන බ්‍රවුසරයකින් උත්සාහ කරන්න.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" සෙවීම කල් ඉකුත්වී ඇත. සෙවුම් ප්‍රතිඵල අර්ධ වශයෙන් දිස්වේ.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'නැවත බලය(Re-authorization) ලබා දීම අවශ්‍ය වේ.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'තෝරා ගත හැකි උපරිම අයිතම සංඛ්‍යාව $1 ක් වේ.', // from v2.1.17 added 17.10.2016 'errRestore' : 'කුණු කූඩයෙන් නැවත ලබා ගත නොහැක. යළි පිහිටුවීමේ ගමනාන්තය(restore destination) හඳුනාගත නොහැක.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'මෙම ගොනු වර්ගයේ සංස්කාරකය හමු නොවිණි.', // from v2.1.25 added 23.5.2017 'errServerError' : 'සේවාදායකයේ පැත්තෙන්(server side) දෝශයක් ඇතිවිය.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" ෆෝල්ඩරය හිස් කිරීමට නොහැක.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'තවත් $1 දෝෂ ඇත.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'ඔබට එක් වරකට $1 දක්වා ෆෝල්ඩර සෑදිය හැක.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'සංරක්ෂිතය(archive) නිර්මාණය කරන්න', 'cmdback' : 'ආපසු', 'cmdcopy' : 'පිටපත් කරන්න', 'cmdcut' : 'මුළුමනින්ම පිටපත් කරන්න(Cut)', 'cmddownload' : 'බාගත කරන්න(Download)', 'cmdduplicate' : 'අනුපිටපත් කරන්න(Duplicate)', 'cmdedit' : 'ගොනුව සංස්කරණය කරන්න', 'cmdextract' : 'සංරක්ෂිතයේ ගොනු දිගහරින්න(Extract)', 'cmdforward' : 'ඉදිරියට', 'cmdgetfile' : 'ගොනු තෝරන්න', 'cmdhelp' : 'මෙම මෘදුකාංගය පිළිබඳව', 'cmdhome' : 'නිවහන(Home)', 'cmdinfo' : 'තොරතුරු ලබාගන්න', 'cmdmkdir' : 'අළුත් ෆෝල්ඩරයක්', 'cmdmkdirin' : 'අළුත් ෆෝල්ඩරයක් තුළට', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'නව ගොනුවක්', 'cmdopen' : 'විවෘත කරන්න', 'cmdpaste' : 'දමන්න(Paste)', 'cmdquicklook' : 'පූර්ව දර්ශනයක්(Preview)', 'cmdreload' : 'නැවත අළුත් කරන්න(Reload)', 'cmdrename' : 'නම වෙනස් කරන්න', 'cmdrm' : 'මකන්න', 'cmdtrash' : 'කුණු කූඩයට දමන්න', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'යළි පිහිටුවන්න(Restore)', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ගොනු සොයන්න', 'cmdup' : 'ප්‍ර්‍රධාන නාමාවලිය(parent directory) වෙත යන්න', 'cmdupload' : 'ගොනු උඩුගත(Upload) කරන්න', 'cmdview' : 'දර්ශනය(View)', 'cmdresize' : 'ප්‍රථිප්‍රමාණය සහ භ්‍රමණය', 'cmdsort' : 'වර්ගීකරණය කරන්න', 'cmdnetmount' : 'ජාල එ්කකයක් සවි කරන්න(Mount network volume)', // added 18.04.2012 'cmdnetunmount': 'ගලවන්න(Unmount)', // from v2.1 added 30.04.2012 'cmdplaces' : 'පහසු ස්ථානයට(To Places)', // added 28.12.2014 'cmdchmod' : 'ක්‍රමය වෙනස් කරන්න', // from v2.1 added 20.6.2015 'cmdopendir' : 'ෆෝල්ඩරය විවෘත කරන්න', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'නැවත තීරු පළල පිහිටුවන්න', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'පුළුල් තිරය', // from v2.1.15 added 03.08.2016 'cmdmove' : 'මාරු කරන්න(Move)', // from v2.1.15 added 21.08.2016 'cmdempty' : 'ෆෝල්ඩරය හිස් කරන්න', // from v2.1.25 added 22.06.2017 'cmdundo' : 'නිෂ්ප්‍රභ කරන්න', // from v2.1.27 added 31.07.2017 'cmdredo' : 'නැවත කරන්න', // from v2.1.27 added 31.07.2017 'cmdpreference': 'අභිමතයන් (Preferences)', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'සියල්ල තෝරන්න', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'කිසිවක් තෝරන්න එපා', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'විරුද්ධ අාකාරයට තෝරන්න', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'නව කවුළුවක විවෘත කරන්න', // from v2.1.38 added 3.4.2018 'cmdhide' : 'සඟවන්න (මනාපය)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'වසන්න', 'btnSave' : 'සුරකින්න', 'btnRm' : 'ඉවත් කරන්න', 'btnApply' : 'යොදන්න(Apply)', 'btnCancel' : 'අවලංගු කරන්න', 'btnNo' : 'නැත', 'btnYes' : 'ඔව්', 'btnMount' : 'සවිකිරීම(Mount)', // added 18.04.2012 'btnApprove': 'කරුණාකර $1 අනුමත කරන්න', // from v2.1 added 26.04.2012 'btnUnmount': 'ගලවන්න(Unmount)', // from v2.1 added 30.04.2012 'btnConv' : 'පරිවර්තනය කරන්න', // from v2.1 added 08.04.2014 'btnCwd' : 'මෙතන', // from v2.1 added 22.5.2015 'btnVolume' : 'එ්කකය(Volume)', // from v2.1 added 22.5.2015 'btnAll' : 'සියල්ල', // from v2.1 added 22.5.2015 'btnMime' : 'MIME වර්ගය', // from v2.1 added 22.5.2015 'btnFileName':'ගොනුවේ නම', // from v2.1 added 22.5.2015 'btnSaveClose': 'සුරකින්න සහ වසන්න', // from v2.1 added 12.6.2015 'btnBackup' : 'උපස්ථ(Backup) කරන්න', // fromv2.1 added 28.11.2015 'btnRename' : 'නම වෙනස් කරන්න', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'නම වෙනස් කරන්න(සියල්ල)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'පෙර ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'ඊළඟ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'වෙනත් නමකින් සුරකිමින්(Save As)', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'ෆෝල්ඩරය විවෘත කරමින්', 'ntffile' : 'ගොනුව විවෘත කරමින්', 'ntfreload' : 'ෆෝල්ඩර් අන්තර්ගතය නැවත අළුත් කරමින්(Reloading)', 'ntfmkdir' : 'ෆෝල්ඩරයක් නිර්මාණය කරමින්', 'ntfmkfile' : 'ගොනුව නිර්මාණය කරමින්', 'ntfrm' : 'අයිතමයන් මකමින්', 'ntfcopy' : 'අයිතමයන් පිටපත් කරමින්', 'ntfmove' : 'අයිතමයන් සම්පූර්ණයෙන් විස්ථාපනය කරමින්', 'ntfprepare' : 'පවතින අයිතම පිරික්සමින්', 'ntfrename' : 'ගොනු නැවත නම් කරමින්', 'ntfupload' : 'ගොනු උඩුගත(uploading) කරමින්', 'ntfdownload' : 'ගොනු බාගත(downloading) කරමින්', 'ntfsave' : 'ගොනු සුරකිමින්', 'ntfarchive' : 'සංරක්ෂණය(archive) සාදමින්', 'ntfextract' : 'සංරක්ෂණයෙන්(archive) ගොනු දිගහරිමින්(Extracting)', 'ntfsearch' : 'ගොනු සොයමින්', 'ntfresize' : 'රූප ප්‍රමාණය වෙනස් කරමින්', 'ntfsmth' : 'දෙයක් කරමින්', 'ntfloadimg' : 'පින්තූරය පූරණය කරමින්(Loading)', 'ntfnetmount' : 'ජාල එ්කකයක් සවිකරමින්(Mounting network volume)', // added 18.04.2012 'ntfnetunmount': 'ජාල එ්කකයක් ගලවමින්(Unmounting network volume)', // from v2.1 added 30.04.2012 'ntfdim' : 'පිංතූරයේ මානය(dimension) ලබාගනිමින්', // added 20.05.2013 'ntfreaddir' : 'ෆෝල්ඩරයේ තොරතුරු කියවමින්', // from v2.1 added 01.07.2013 'ntfurl' : 'සබැඳියේ URL ලබා ගැනීම', // from v2.1 added 11.03.2014 'ntfchmod' : 'ගොනු ආකරය වෙනස් කරමින්', // from v2.1 added 20.6.2015 'ntfpreupload': 'උඩුගත(upload) කරන ලද ගොනු නාමය සත්‍යාපනය කරමින්(Verifying)', // from v2.1 added 31.11.2015 'ntfzipdl' : 'බාගත කරගැනීම(download) සඳහා ගොනුවක් නිර්මාණය කරමින්', // from v2.1.7 added 23.1.2016 'ntfparents' : 'මාර්ග(path) තොරතුරු ලබා ගනිමින්', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'උඩුගත කරන ලද(uploaded) ගොනුව සකසමින්', // from v2.1.17 added 2.11.2016 'ntftrash' : 'කුණු කූඩයට දමමින්', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'කුණු කූඩයට දැමීම යළි පිහිටුවමින්(Doing restore)', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'ගමනාන්ත(destination) ෆෝල්ඩරය පරීක්ෂා කරමින්', // from v2.1.24 added 3.5.2017 'ntfundo' : 'පෙර මෙහෙයුම(operation) ඉවත් කරමින්', // from v2.1.27 added 31.07.2017 'ntfredo' : 'පෙර ආපසු හැරවීම යළි සැකසමින්', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'අන්තර්ගතය පරීක්ෂා කිරීම', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'කුණු කූඩය', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'නොදනී', 'Today' : 'අද', 'Yesterday' : 'ඊයේ', 'msJan' : 'ජනවා.', 'msFeb' : 'පෙබ.', 'msMar' : 'මාර්.', 'msApr' : 'අප්‍රේ.', 'msMay' : 'මැයි', 'msJun' : 'ජූනි', 'msJul' : 'ජුලි', 'msAug' : 'අගෝ.', 'msSep' : 'සැප්.', 'msOct' : 'ඔක්තෝ.', 'msNov' : 'නොවැ.', 'msDec' : 'දෙසැ.', 'January' : 'ජනවාරි', 'February' : 'පෙබරවාරි', 'March' : 'මාර්තු', 'April' : 'අප්‍රේල්', 'May' : 'මැයි', 'June' : 'ජූනි', 'July' : 'ජුලි', 'August' : 'අගෝස්තු', 'September' : 'සැප්තැම්බර්', 'October' : 'ඔක්තෝම්බර්', 'November' : 'නොවැම්බර්', 'December' : 'දෙසැම්බර්', 'Sunday' : 'ඉරිදා', 'Monday' : 'සඳුදා', 'Tuesday' : 'අඟහරුවාදා', 'Wednesday' : 'බදාදා', 'Thursday' : 'බ්‍රහස්පතින්දා', 'Friday' : 'සිකුරාදා', 'Saturday' : 'සෙනසුරාදා', 'Sun' : 'ඉරිදා', 'Mon' : 'සඳු.', 'Tue' : 'අඟහ.', 'Wed' : 'බදාදා', 'Thu' : 'බ්‍රහස්.', 'Fri' : 'සිකු.', 'Sat' : 'සෙන.', /******************************** sort variants ********************************/ 'sortname' : 'නම අනුව', 'sortkind' : 'වර්ගය අනුව', 'sortsize' : 'ප්‍රමාණය අනුව', 'sortdate' : 'දිනය අනුව', 'sortFoldersFirst' : 'ෆෝල්ඩර වලට පළමු තැන', 'sortperm' : 'අවසරය අනුව', // from v2.1.13 added 13.06.2016 'sortmode' : 'අාකාරය අනුව', // from v2.1.13 added 13.06.2016 'sortowner' : 'හිමිකරු අනුව', // from v2.1.13 added 13.06.2016 'sortgroup' : 'කණ්ඩායම අනුව', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'එලෙසටම රුක්සටහනත්(Treeview)', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'නව ෆෝල්ඩරයක්', // added 10.11.2015 'Archive' : 'නව ලේඛනාගාරය', // from v2.1 added 10.11.2015 'untitled file' : 'නව ගොනුව.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ගොනුව', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'තහවුරු කිරීම අවශ්‍යයි', 'confirmRm' : 'අයිතමයන් සදහටම ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?
මෙය අාපසු හැරවිය නොහැකිය!', 'confirmRepl' : 'පැරණි අයිතමය නව එකක මගින් ප්‍රතිස්ථාපනය කරන්නද?', 'confirmRest' : 'දැනට පවතින අයිතමය කුණු කූඩය තුළ පවතින අයිතමය මගින් ප්‍රතිස්ථාපනය කරන්නද?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 හි නොවේ
UTF-8 වෙත පරිවර්තනය කරන්න ද?
සුරැකීමෙන් පසු අන්තර්ගතය UTF-8 බවට පරිවර්තනය වේ.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'මෙම ගොනුවෙහි කේතන කේත(Character encoding) හඳුනාගත නොහැකි විය. සංස්කරණ කිරීමට එය තාවකාලිකව UTF-8 වෙත පරිවර්තනය කිරීම අවශ්‍ය වේ.
කරුණාකර මෙම ගොනුවෙහි අක්ෂර කේතන කේත(character encoding) තෝරන්න.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'මෙය වෙනස් කර ඇත.
ඔබට වෙනස්කම් සුරැකීමට නොහැකි නම් සිදු කරනු ලැබූ වෙනස්කම් අහිමි වේ.', // from v2.1 added 15.7.2015 'confirmTrash' : 'කුණු කූඩය තුලට අයිතමය යැවීමට ඔබට අවශ්‍ය ද?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'ඔබට අයිතම "$1" වෙත ගෙන යාමට අවශ්‍ය බව විශ්වාසද?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'සියල්ලටම යොදන්න', 'name' : 'නම', 'size' : 'ප්‍රමාණය', 'perms' : 'අවසරය', 'modify' : 'නවීකරණය කෙරුණ ලද්දේ', 'kind' : 'ජාතිය', 'read' : 'කියවන්න', 'write' : 'ලියන්න', 'noaccess' : 'ප්‍රවේශයක් නොමැත', 'and' : 'සහ', 'unknown' : 'නොහඳුනයි', 'selectall' : 'සියලු ගොනු තෝරන්න', 'selectfiles' : 'ගොනු(ව) තෝරන්න', 'selectffile' : 'පළමු ගොනුව තෝරන්න', 'selectlfile' : 'අවසාන ගොනුව තෝරන්න', 'viewlist' : 'ලැයිස්තු අාකාරය', 'viewicons' : 'අයිකන අාකාරය', 'viewSmall' : 'කුඩා අයිකන', // from v2.1.39 added 22.5.2018 'viewMedium' : 'මධ්යම අයිකන', // from v2.1.39 added 22.5.2018 'viewLarge' : 'විශාල අයිකන', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'අමතර විශාල අයිකන', // from v2.1.39 added 22.5.2018 'places' : 'ස්ථාන', 'calc' : 'ගණනය කරන්න', 'path' : 'මාර්ගය', 'aliasfor' : 'සඳහා අන්වර්ථය', 'locked' : 'අගුළු දමා ඇත', 'dim' : 'මාන(Dimensions)', 'files' : 'ගොනු', 'folders' : 'ෆෝල්ඩර', 'items' : 'අයිතම(Items)', 'yes' : 'ඔව්', 'no' : 'නැත', 'link' : 'සබැඳිය(Link)', 'searcresult' : 'සෙවුම් ප්‍රතිඵල', 'selected' : 'තෝරාගත් අයිතම', 'about' : 'මේ ගැන', 'shortcuts' : 'කෙටිමං', 'help' : 'උදව්', 'webfm' : 'වෙබ් ගොනු කළමනාකරු', 'ver' : 'අනුවාදය(version)', 'protocolver' : 'ප්‍රොටොකෝලය අනුවාදය(protocol version)', 'homepage' : 'ව්‍යාපෘතිය නිවහන', 'docs' : 'ලේඛනගත කිරීම', 'github' : 'Github හරහා සංවාදයේ යෙදෙන්න', 'twitter' : 'Twitter හරහා අපව සම්බන්ධ වන්න', 'facebook' : 'Facebook හරහා අප සමඟ එකතු වන්න', 'team' : 'කණ්ඩායම', 'chiefdev' : 'ප්‍රධාන සංස්කරු(chief developer)', 'developer' : 'සංස්කරු(developer)', 'contributor' : 'දායකයා(contributor)', 'maintainer' : 'නඩත්තු කරන්නා(maintainer)', 'translator' : 'පරිවර්තකයා', 'icons' : 'අයිකන', 'dontforget' : 'සහ ඔබේ තුවාය ගැනීමට අමතක නොකරන්න', 'shortcutsof' : 'කෙටිමං අක්‍රීය කර ඇත', 'dropFiles' : 'ගොනු මෙතැනට ඇද දමන්න', 'or' : 'හෝ', 'selectForUpload' : 'ගොනු තෝරන්න', 'moveFiles' : 'අායිත්තම සම්පූර්ණයෙන් විස්ථාපනය', 'copyFiles' : 'අයිතමයන් පිටපත් කරන්න', 'restoreFiles' : 'අයිතම නැවත පිහිටුවන්න', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'ස්ථාන වලින් ඉවත් කරන්න', 'aspectRatio' : 'දර්ශන අනුපාතය(Aspect ratio)', 'scale' : 'පරිමාණය', 'width' : 'පළල', 'height' : 'උස', 'resize' : 'ප්‍රතිප්‍රමානණය', 'crop' : 'බෝග', 'rotate' : 'කැරකැවීම', 'rotate-cw' : 'අංශක 90කින් කරකවන්න CW', 'rotate-ccw' : 'අංශක 90කින් කරකවන්න CCW', 'degree' : '°', 'netMountDialogTitle' : 'ජාල පරිමාව සවි කරන්න', // added 18.04.2012 'protocol' : 'ප්රොටෝකෝලය', // added 18.04.2012 'host' : 'සත්කාරක', // added 18.04.2012 'port' : 'වරාය', // added 18.04.2012 'user' : 'පරිශීලක', // added 18.04.2012 'pass' : 'මුරපදය', // added 18.04.2012 'confirmUnmount' : 'ඔබ $1 ඉවත් කරනවාද?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'බ්‍රවුසරයෙන් ගොනු දමන්න හෝ අලවන්න', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'මෙහි ගොනු දමන්න, URL හෝ පින්තූර (ක්ලිප්බෝඩ්) අලවන්න', // from v2.1 added 07.04.2014 'encoding' : 'කේතීකරණය(Encoding)', // from v2.1 added 19.12.2014 'locale' : 'දේශීය', // from v2.1 added 19.12.2014 'searchTarget' : 'ඉලක්කය: $1', // from v2.1 added 22.5.2015 'searchMime' : 'ආදාන MIME වර්ගය අනුව සොයන්න', // from v2.1 added 22.5.2015 'owner' : 'හිමිකරු', // from v2.1 added 20.6.2015 'group' : 'සමූහය', // from v2.1 added 20.6.2015 'other' : 'වෙනත්', // from v2.1 added 20.6.2015 'execute' : 'ක්‍රයාත්මක කරන්න', // from v2.1 added 20.6.2015 'perm' : 'අවසරය', // from v2.1 added 20.6.2015 'mode' : 'මාදිලිය', // from v2.1 added 20.6.2015 'emptyFolder' : 'ෆෝල්ඩරය හිස්', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'ෆාේල්ඩරය හිස්\\A අායිත්තම අතහැරීමෙන් අැතුලු කරන්න', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'ෆාේල්ඩරය හිස්\\A දිර්ඝ එබීමෙන් අායිත්තම අැතුලු කරන්න', // from v2.1.6 added 30.12.2015 'quality' : 'ගුණාත්මකභාවය', // from v2.1.6 added 5.1.2016 'autoSync' : 'ස්වයංක්‍රීය සමමුහුර්තකරණය', // from v2.1.6 added 10.1.2016 'moveUp' : 'ඉහළට ගමන් කරන්න', // from v2.1.6 added 18.1.2016 'getLink' : 'URL සබැඳිය ලබා ගන්න', // from v2.1.7 added 9.2.2016 'selectedItems' : 'තෝරාගත් අයිතම ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ෆෝල්ඩර හැඳුනුම්පත', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'නොබැඳි ප්‍රවේශයට ඉඩ දෙන්න', // from v2.1.10 added 3.25.2016 'reAuth' : 'නැවත සත්‍යාපනය කිරීමට', // from v2.1.10 added 3.25.2016 'nowLoading' : 'දැන් පූරණය වෙමින් පවතී...', // from v2.1.12 added 4.26.2016 'openMulti' : 'බහු ගොනු විවෘත කරන්න', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'ඔබ $1 ගොනු විවෘත කිරීමට උත්සාහ කරයි. බ්‍රව්සරයෙන් ඔබට විවෘත කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'සෙවුම් ඉලක්කයේ ගවේෂණ ප්‍රතිඵල නොමැත.', // from v2.1.12 added 5.16.2016 'editingFile' : 'එය ගොනුව සංස්කරණය කිරීමකි.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'ඔබ අයිතම $1 ප්‍රමාණයක් තෝරාගෙන ඇත.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'ඔබට පසුරු පුවරුවේ අයිතම $1ක් ඇත.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'වර්ධක සෙවීම වත්මන් දර්ශනයෙන් පමණි.', // from v2.1.13 added 6.30.2016 'reinstate' : 'යථා තත්ත්වයට පත් කරන්න', // from v2.1.15 added 3.8.2016 'complete' : '$1 සම්පූර්ණයි', // from v2.1.15 added 21.8.2016 'contextmenu' : 'සන්දර්භය මෙනුව', // from v2.1.15 added 9.9.2016 'pageTurning' : 'පිටුව හැරවීම', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'පරිමාව මූලයන්', // from v2.1.16 added 16.9.2016 'reset' : 'යළි පිහිටුවන්න(Reset)', // from v2.1.16 added 1.10.2016 'bgcolor' : 'පසුබිම් වර්ණය', // from v2.1.16 added 1.10.2016 'colorPicker' : 'වර්ණ තෝරන්නා', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'පික්සල් 8ක දැල', // from v2.1.16 added 4.10.2016 'enabled' : 'සක්‍රීයයි', // from v2.1.16 added 4.10.2016 'disabled' : 'අක්‍රීයයි', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'වර්තමාන දර්ශනය තුළ සෙවුම් ප්‍රතිපල හිස්ව ඇත. \\A සෙවුම් ඉලක්කය පුළුල් කිරීම සඳහා [Enter] යතුර ඔබන්න.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'වර්තමාන දර්ශනයේ පළමු අකුර සෙවුම් ප්‍රතිපල හිස්ව පවතී.', // from v2.1.23 added 24.3.2017 'textLabel' : 'ලේබල්වල නම්', // from v2.1.17 added 13.10.2016 'minsLeft' : 'විනාඩි $1 ක් ගතවේ', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'තෝරාගත් කේතනය සමඟ නැවත විවෘත කරන්න', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'තෝරාගත් කේතනය සමඟ සුරකින්න', // from v2.1.19 added 2.12.2016 'selectFolder' : 'ෆෝල්ඩරය තෝරන්න', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'පළමු අකුරෙන් සෙවීම', // from v2.1.23 added 24.3.2017 'presets' : 'පෙරසිටුවීම්', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'එය බොහෝ අයිතම නිසා එය කුණු කූඩයට දැමිය නොහැක.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '"$1" ෆෝල්ඩරය හිස් කරන්න.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" ෆෝල්ඩරයක අයිතම නොමැත.', // from v2.1.25 added 22.6.2017 'preference' : 'මනාපය', // from v2.1.26 added 28.6.2017 'language' : 'භාෂා සැකසුම', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'මෙම බ්‍රවුසරයේ සුරකින ලද සැකසුම් ආරම්භ කරන්න', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'මෙවලම් තීරු සැකසුම', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 ක් අකුරු ඉතිරිව පවතී', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 පේළි ඉතිරියි.', // from v2.1.52 added 16.1.2020 'sum' : 'එකතුව', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'රළු ගොනු විශාලත්වය', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'මූසිකය සමඟ සංවාදයේ අංගය කෙරෙහි අවධානය යොමු කරන්න', // from v2.1.30 added 2.11.2017 'select' : 'තෝරන්න', // from v2.1.30 added 23.11.2017 'selectAction' : 'ගොනුවක් තේරූ විට සිදුකල යුතු දේ', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'අවසන් වරට භාවිතා කළ සංස්කාරකය සමඟ විවෘත කරන්න', // from v2.1.30 added 23.11.2017 'selectinvert' : 'ප්‍රතිවිරුද්ධ අාකාරයට තෝරන්න', // from v2.1.30 added 25.11.2017 'renameMultiple' : '$2 වැනි තෝරාගත් අයිතම $1 නැවත නම් කිරීමට ඔබට අවශ්‍ය බව ඔබට විශ්වාසද?
මෙය පසුගමනය කළ නොහැක!', // from v2.1.31 added 4.12.2017 'batchRename' : 'කණ්ඩායම නැවත නම් කිරීම', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ අංකය', // from v2.1.31 added 8.12.2017 'asPrefix' : 'උපසර්ගය එකතු කරන්න', // from v2.1.31 added 8.12.2017 'asSuffix' : 'උපසර්ගය එකතු කරන්න', // from v2.1.31 added 8.12.2017 'changeExtention' : 'දිගුව වෙනස් කරන්න', // from v2.1.31 added 8.12.2017 'columnPref' : 'තීරු සැකසීම් (ලැයිස්තු දසුන)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'සියලුම වෙනස්කම් සංරක්ෂිතයට වහාම පිළිබිඹු වේ.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'සියලුම වෙනස්කම් සංරක්ෂිතයට වහාම පිළිබිඹු වේ.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'මෙම වෙළුමේ සවිකර ඇති පහත වෙළුම් (ය) ද ඉවත් කරන ලදී. ඔබට එය ඉවත් කිරීමට විශ්වාසද?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'තෝරාගැනීම්වල තොරතුරු', // from v2.1.33 added 7.3.2018 'hashChecker' : 'ගොනු හැෂ් පෙන්වීමට ඇල්ගොරිතම', // from v2.1.33 added 10.3.2018 'infoItems' : 'තොරතුරු අයිතම (තේරීම් තොරතුරු පැනලය)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'පිටවීමට නැවත ඔබන්න.', // from v2.1.38 added 1.4.2018 'toolbar' : 'මෙවලම් තීරුව', // from v2.1.38 added 4.4.2018 'workspace' : 'වැඩ අවකාශය', // from v2.1.38 added 4.4.2018 'dialog' : 'ඩයලොග්', // from v2.1.38 added 4.4.2018 'all' : 'සියලුම', // from v2.1.38 added 4.4.2018 'iconSize' : 'අයිකන ප්‍රමාණය (අයිකන දසුන)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'උපරිම සංස්කාරක කවුළුව විවෘත කරන්න', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'API මගින් පරිවර්තනය දැනට නොමැති නිසා, කරුණාකර වෙබ් අඩවියට පරිවර්තනය කරන්න.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'පරිවර්තනය කිරීමෙන් පසු, ඔබ පරිවර්තනය කළ ගොනුව සුරැකීමට අයිතම URL හෝ බාගත කළ ගොනුවක් සමඟ උඩුගත කළ යුතුය.', //from v2.1.40 added 8.7.2018 'convertOn' : '$1 හි අඩවියට පරිවර්තනය කරන්න', // from v2.1.40 added 10.7.2018 'integrations' : 'ඒකාබද්ධ කිරීම්', // from v2.1.40 added 11.7.2018 'integrationWith' : 'මෙම elFinder පහත බාහිර සේවාවන් ඒකාබද්ධ කර ඇත. කරුණාකර එය භාවිතා කිරීමට පෙර භාවිත නියමයන්, රහස්‍යතා ප්‍රතිපත්තිය, ආදිය පරීක්ෂා කරන්න.', // from v2.1.40 added 11.7.2018 'showHidden' : 'සැඟවුණු අයිතම පෙන්වන්න', // from v2.1.41 added 24.7.2018 'hideHidden' : 'සැඟවුණු අයිතම සඟවන්න', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'සැඟවුණු අයිතම පෙන්වන්න/සඟවන්න', // from v2.1.41 added 24.7.2018 'makefileTypes' : '"නව ගොනුව" සමඟ සබල කිරීමට ගොනු වර්ග', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'පෙළ ගොනුවේ වර්ගය', // from v2.1.41 added 7.8.2018 'add' : 'එකතු කරන්න', // from v2.1.41 added 7.8.2018 'theme' : 'තේමාව', // from v2.1.43 added 19.10.2018 'default' : 'පෙරනිමිය', // from v2.1.43 added 19.10.2018 'description' : 'විස්තර', // from v2.1.43 added 19.10.2018 'website' : 'වෙබ් අඩවිය', // from v2.1.43 added 19.10.2018 'author' : 'කර්තෘ', // from v2.1.43 added 19.10.2018 'email' : 'විද්යුත් තැපෑල', // from v2.1.43 added 19.10.2018 'license' : 'බලපත්රය', // from v2.1.43 added 19.10.2018 'exportToSave' : 'මෙම අයිතමය සුරැකිය නොහැක. සංස්කරණ අහිමි වීම වළක්වා ගැනීම සඳහා ඔබ ඔබේ පරිගණකයට අපනයනය කළ යුතුය.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'ගොනුව තේරීමට එය මත දෙවරක් ක්ලික් කරන්න.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'සම්පූර්ණ තිර මාදිලිය භාවිතා කරන්න', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'නොදන්නා', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'ෆෝල්ඩරය', 'kindSelects' : 'තේරීම්', // from v2.1.29 added 29.8.2017 'kindAlias' : 'අන්වර්ථ නාමය', 'kindAliasBroken' : 'කැඩුණු අන්වර්ථය', // applications 'kindApp' : 'අයදුම්පත', 'kindPostscript' : 'Postscript ලේඛනය', 'kindMsOffice' : 'Microsoft Office ලේඛනය', 'kindMsWord' : 'Microsoft Word ලේඛනය', 'kindMsExcel' : 'Microsoft Excel ලේඛනය', 'kindMsPP' : 'Microsoft Powerpoint ඉදිරිපත් කිරීම', 'kindOO' : 'Open Office ලේඛනය', 'kindAppFlash' : 'ෆ්ලෑෂ් යෙදුම', 'kindPDF' : 'අතේ ගෙන යා හැකි ලේඛන ආකෘතිය (PDF)', 'kindTorrent' : 'Bittorrent ගොනුව', 'kind7z' : '7z සංරක්ෂිතය', 'kindTAR' : 'TAR ලේඛනාගාරය', 'kindGZIP' : 'GZIP ලේඛනාගාරය', 'kindBZIP' : 'BZIP ලේඛනාගාරය', 'kindXZ' : 'XZ ලේඛනාගාරය', 'kindZIP' : 'ZIP සංරක්ෂිතය', 'kindRAR' : 'RAR ලේඛනාගාරය', 'kindJAR' : 'ජාවා JAR ගොනුව', 'kindTTF' : 'සත්‍ය අකුරු වර්ගය', 'kindOTF' : 'අකුරු වර්ගය විවෘත කරන්න', 'kindRPM' : 'RPM පැකේජය', // texts 'kindText' : 'Text ලේඛනය', 'kindTextPlain' : 'සරල පෙළ', 'kindPHP' : 'PHP මූලාශ්‍රය', 'kindCSS' : 'කැස්කැඩින් ස්ටයිල් ෂීට්', 'kindHTML' : 'HTML ලේඛනය', 'kindJS' : 'Javascript මූලාශ්‍රය', 'kindRTF' : 'පොහොසත් පෙළ ආකෘතිය', 'kindC' : 'C මූලාශ්‍රය', 'kindCHeader' : 'C header මූලාශ්‍රය', 'kindCPP' : 'C++ මූලාශ්‍රය', 'kindCPPHeader' : 'C++ header මූලාශ්‍රය', 'kindShell' : 'Unix shell රචනයකි', 'kindPython' : 'Python මූලාශ්‍රය', 'kindJava' : 'Java මූලාශ්‍රය', 'kindRuby' : 'Ruby මූලාශ්‍රය', 'kindPerl' : 'Perl රචනයකි', 'kindSQL' : 'SQL මූලාශ්‍රය', 'kindXML' : 'XML ලේඛනය', 'kindAWK' : 'AWK මූලාශ්‍රය', 'kindCSV' : 'කොමාවන් වෙන් කළ අගයන්', 'kindDOCBOOK' : 'Docbook XML ලේඛනය', 'kindMarkdown' : 'සලකුණු පෙළ', // added 20.7.2015 // images 'kindImage' : 'පින්තූරය', 'kindBMP' : 'BMP පින්තූරය', 'kindJPEG' : 'JPEG පින්තූරය', 'kindGIF' : 'GIF පින්තූරය', 'kindPNG' : 'PNG පින්තූරය', 'kindTIFF' : 'TIFF පින්තූරය', 'kindTGA' : 'TGA පින්තූරය', 'kindPSD' : 'Adobe Photoshop පින්තූරය', 'kindXBITMAP' : 'X bitmap පින්තූරය', 'kindPXM' : 'Pixelmator පින්තූරය', // media 'kindAudio' : 'ශබ්ධ මාධ්‍ය', 'kindAudioMPEG' : 'MPEG ශබ්ධපටය', 'kindAudioMPEG4' : 'MPEG-4 ශබ්ධපටය', 'kindAudioMIDI' : 'MIDI ශබ්ධපටය', 'kindAudioOGG' : 'Ogg Vorbis ශබ්ධපටය', 'kindAudioWAV' : 'WAV ශබ්ධපටය', 'AudioPlaylist' : 'MP3 ධාවන ලැයිස්තුව', 'kindVideo' : 'Video මාධ්‍ය', 'kindVideoDV' : 'DV චිත්‍රපටය', 'kindVideoMPEG' : 'MPEG චිත්‍රපටය', 'kindVideoMPEG4' : 'MPEG-4 චිත්‍රපටය', 'kindVideoAVI' : 'AVI චිත්‍රපටය', 'kindVideoMOV' : 'Quick Time චිත්‍රපටය', 'kindVideoWM' : 'Windows Media චිත්‍රපටය', 'kindVideoFlash' : 'Flash චිත්‍රපටය', 'kindVideoMKV' : 'Matroska චිත්‍රපටය', 'kindVideoOGG' : 'Ogg චිත්‍රපටය' } }; }));PK Z""js/i18n/elfinder.hu.jsnuW+A/** * Hungarian translation * @author Gáspár Lajos * @author karrak1 * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.hu = { translator : 'Gáspár Lajos <info@glsys.eu>, karrak1', language : 'Hungarian', direction : 'ltr', dateFormat : 'Y.F.d H:i:s', // will show like: 2022.Március.02 11:28:34 fancyDateFormat : '$1 H:i', // will show like: Ma 11:28 nonameDateFormat : 'ymd-His', // noname upload will show like: 220302-112834 messages : { 'getShareText' : 'Részvény', 'Editor ': 'Kódszerkesztő', /********************************** errors **********************************/ 'error' : 'Hiba', 'errUnknown' : 'Ismeretlen hiba.', 'errUnknownCmd' : 'Ismeretlen parancs.', 'errJqui' : 'Hibás jQuery UI konfiguráció. A "selectable", "draggable" és a "droppable" komponensek szükségesek.', 'errNode' : 'Az elFinder "DOM" elem létrehozását igényli.', 'errURL' : 'Hibás elFinder konfiguráció! "URL" paraméter nincs megadva.', 'errAccess' : 'Hozzáférés megtagadva.', 'errConnect' : 'Nem sikerült csatlakozni a kiszolgálóhoz.', 'errAbort' : 'Kapcsolat megszakítva.', 'errTimeout' : 'Kapcsolat időtúllépés.', 'errNotFound' : 'A backend nem elérhető.', 'errResponse' : 'Hibás backend válasz.', 'errConf' : 'Hibás backend konfiguráció.', 'errJSON' : 'PHP JSON modul nincs telepítve.', 'errNoVolumes' : 'Nem állnak rendelkezésre olvasható kötetek.', 'errCmdParams' : 'érvénytelen paraméterek a parancsban. ("$1")', 'errDataNotJSON' : 'A válasz nem JSON típusú adat.', 'errDataEmpty' : 'Nem érkezett adat.', 'errCmdReq' : 'A backend kérelem parancsnevet igényel.', 'errOpen' : '"$1" megnyitása nem sikerült.', 'errNotFolder' : 'Az objektum nem egy mappa.', 'errNotFile' : 'Az objektum nem egy fájl.', 'errRead' : '"$1" olvasása nem sikerült.', 'errWrite' : '"$1" írása nem sikerült.', 'errPerm' : 'Engedély megtagadva.', 'errLocked' : '"$1" zárolás alatt van, és nem lehet átnevezni, mozgatni vagy eltávolítani.', 'errExists' : '"$1" nevű fájl már létezik.', 'errInvName' : 'Érvénytelen fáljnév.', 'errInvDirname' : 'Érvénytelen mappanév.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappa nem található.', 'errFileNotFound' : 'Fájl nem található.', 'errTrgFolderNotFound' : 'Cél mappa nem található. ("$1")', 'errPopup' : 'A böngésző megakadályozta egy felugró ablak megnyitását. A fájl megnyitását tegye lehetővé a böngésző beállitásaiban.', 'errMkdir' : '"$1" mappa létrehozása sikertelen.', 'errMkfile' : '"$1" fájl létrehozása sikertelen.', 'errRename' : '"$1" átnevezése sikertelen.', 'errCopyFrom' : 'Fájlok másolása a kötetről nem megengedett. ("$1")', 'errCopyTo' : 'Fájlok másolása a kötetre nem megengedett. ("$1")', 'errMkOutLink' : 'Hivatkozás létrehozása a root köteten kívül nem megengedett.', // from v2.1 added 03.10.2015 'errUpload' : 'Feltöltési hiba.', // old name - errUploadCommon 'errUploadFile' : 'Nem sikerült a fájlt feltölteni. ($1)', // old name - errUpload 'errUploadNoFiles' : 'Nem található fájl feltöltéshez.', 'errUploadTotalSize' : 'Az adat meghaladja a maximálisan megengedett méretet.', // old name - errMaxSize 'errUploadFileSize' : 'A fájl meghaladja a maximálisan megengedett méretet.', // old name - errFileMaxSize 'errUploadMime' : 'A fájltípus nem engedélyezett.', 'errUploadTransfer' : '"$1" transzfer hiba.', 'errUploadTemp' : 'Sikertelen az ideiglenes fájl léterhezozása feltöltéshez.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Az objektum "$1" már létezik ezen a helyen, és nem lehet cserélni másik típusra', // new 'errReplace' : '"$1" nem cserélhető.', 'errSave' : '"$1" mentése nem sikerült.', 'errCopy' : '"$1" másolása nem sikerült.', 'errMove' : '"$1" áthelyezése nem sikerült.', 'errCopyInItself' : '"$1" nem másolható saját magára.', 'errRm' : '"$1" törlése nem sikerült.', 'errTrash' : 'Nem mehet a kukába.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Forrásfájl(ok) eltávolítása sikertelen.', 'errExtract' : 'Nem sikerült kikibontani a "$1" fájlokat.', 'errArchive' : 'Nem sikerült létrehozni az archívumot.', 'errArcType' : 'Nem támogatott archívum típus.', 'errNoArchive' : 'A fájl nem archív, vagy nem támogatott archívumtípust tartalmaz.', 'errCmdNoSupport' : 'A backend nem támogatja ezt a parancsot.', 'errReplByChild' : 'Az „$1” mappát nem lehet helyettesíteni egy abban található elemmel.', 'errArcSymlinks' : 'Biztonsági okokból az archívumok kicsomagolásának megtagadása szimbolikus linkeket vagy fájlokat tartalmaz, amelyek nem engedélyezettek.', // edited 24.06.2012 'errArcMaxSize' : 'Az archív fájlok meghaladják a megengedett legnagyobb méretet.', 'errResize' : 'Nem lehet átméretezni a (z) "$1".', 'errResizeDegree' : 'Érvénytelen forgatási fok.', // added 7.3.2013 'errResizeRotate' : 'Nem lehet elforgatni a képet.', // added 7.3.2013 'errResizeSize' : 'Érvénytelen képméret.', // added 7.3.2013 'errResizeNoChange' : 'A kép mérete nem változott.', // added 7.3.2013 'errUsupportType' : 'Nem támogatott fájl típus', 'errNotUTF8Content' : 'Az "$1" fájl nincs az UTF-8-ban, és nem szerkeszthető.', // added 9.11.2011 'errNetMount' : 'Nem lehet beilleszteni a(z) "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nem támogatott protokoll.', // added 17.04.2012 'errNetMountFailed' : 'A csatlakozás nem sikerült.', // added 17.04.2012 'errNetMountHostReq' : 'Host szükséges.', // added 18.04.2012 'errSessionExpires' : 'A session inaktivitás miatt lejárt.', 'errCreatingTempDir' : 'Nem lehet ideiglenes könyvtárat létrehozni: "$1"', 'errFtpDownloadFile' : 'Nem lehet letölteni a fájlt az FTP-ről: "$1"', 'errFtpUploadFile' : 'Nem lehet feltölteni a fájlt az FTP-re: "$1"', 'errFtpMkdir' : 'Nem sikerült távoli könyvtárat létrehozni az FTP-n: "$1"', 'errArchiveExec' : 'Hiba a fájlok archiválásakor: "$1"', 'errExtractExec' : 'Hiba a fájlok kibontásakor: "$1"', 'errNetUnMount' : 'Nem lehet leválasztani', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nem konvertálható UTF-8-ra', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Próbálja ki a Google Chrome-ot, ha szeretné feltölteni a mappát.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Dőtúllépés a(z) "$1" keresése közben. A keresési eredmény részleges.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Új engedélyre van szükség.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'A választható tételek maximális száma 1 USD.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nem lehet visszaállítani a kukából. Nem lehet azonosítani a visszaállítási célt.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'A szerkesztő nem található ehhez a fájltípushoz.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Hiba történt a szerver oldalon.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nem sikerült üríteni a(z) "$1" mappát.', // from v2.1.25 added 22.6.2017 'moreErrors' : '$1 további hiba van.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Egyszerre legfeljebb $1 mappát hozhat létre.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Archívum létrehozása', 'cmdback' : 'Vissza', 'cmdcopy' : 'Másolás', 'cmdcut' : 'Kivágás', 'cmddownload' : 'Letöltés', 'cmdduplicate' : 'Másolat készítés', 'cmdedit' : 'Szerkesztés', 'cmdextract' : 'Kibontás', 'cmdforward' : 'Előre', 'cmdgetfile' : 'Fájlok kijelölése', 'cmdhelp' : 'Erről a programról...', 'cmdhome' : 'Főkönyvtár', 'cmdinfo' : 'Tulajdonságok', 'cmdmkdir' : 'Új mappa', 'cmdmkdirin' : 'Új mappába', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Új fájl', 'cmdopen' : 'Megnyitás', 'cmdpaste' : 'Beillesztés', 'cmdquicklook' : 'Előnézet', 'cmdreload' : 'Frissítés', 'cmdrename' : 'Átnevezés', 'cmdrm' : 'Törlés', 'cmdtrash' : 'A kukába', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'visszaállítás', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Keresés', 'cmdup' : 'Ugrás a szülőmappába', 'cmdupload' : 'Feltöltés', 'cmdview' : 'Nézet', 'cmdresize' : 'Átméretezés és forgatás', 'cmdsort' : 'Rendezés', 'cmdnetmount' : 'Csatlakoztassa a hálózat hangerejét', // added 18.04.2012 'cmdnetunmount': 'Leválaszt', // from v2.1 added 30.04.2012 'cmdplaces' : 'Helyekhez', // added 28.12.2014 'cmdchmod' : 'Módváltás', // from v2.1 added 20.6.2015 'cmdopendir' : 'Mappa megnyitása', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Állítsa vissza az oszlop szélességét', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Teljes képernyő', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mozog', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Ürítse ki a mappát', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Visszavonás', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Újra', // from v2.1.27 added 31.07.2017 'cmdpreference': 'preferenciák', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Mindet kiválaszt', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Válasszon egyet sem', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Fordított kijelölés', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Fordított kijelölés', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Fordított kijelölés', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Bezár', 'btnSave' : 'Ment', 'btnRm' : 'Töröl', 'btnApply' : 'Alkalmaz', 'btnCancel' : 'Mégsem', 'btnNo' : 'Nem', 'btnYes' : 'Igen', 'btnMount' : 'Csatlakoztat', // added 18.04.2012 'btnApprove': 'Tovább $1 és jóváhagyás', // from v2.1 added 26.04.2012 'btnUnmount': 'Leválaszt', // from v2.1 added 30.04.2012 'btnConv' : 'Átalakít', // from v2.1 added 08.04.2014 'btnCwd' : 'Itt', // from v2.1 added 22.5.2015 'btnVolume' : 'Hangerő', // from v2.1 added 22.5.2015 'btnAll' : 'Összes', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Tipus', // from v2.1 added 22.5.2015 'btnFileName':'Fájl név', // from v2.1 added 22.5.2015 'btnSaveClose': 'Mentés és Kilépés', // from v2.1 added 12.6.2015 'btnBackup' : 'Biztonsági mentés', // fromv2.1 added 28.11.2015 'btnRename' : 'Átnevezés', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Átnevezés (összes)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Előző ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Következő ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Mentés másként', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Mappa megnyitás', 'ntffile' : 'Fájl megnyitás', 'ntfreload' : 'A mappa tartalmának újratöltése', 'ntfmkdir' : 'Mappa létrehozása', 'ntfmkfile' : 'Fájlok létrehozása', 'ntfrm' : 'Fájlok törélse', 'ntfcopy' : 'Fájlok másolása', 'ntfmove' : 'Fájlok áthelyezése', 'ntfprepare' : 'Meglévő elemek ellenőrzése', 'ntfrename' : 'Fájlok átnevezése', 'ntfupload' : 'Fájlok feltöltése', 'ntfdownload' : 'Fájlok letöltése', 'ntfsave' : 'Fájlok mentése', 'ntfarchive' : 'Archívum létrehozása', 'ntfextract' : 'Kibontás archívumból', 'ntfsearch' : 'Fájlok keresése', 'ntfresize' : 'Képek átméretezése', 'ntfsmth' : 'Csinál valamit >_<', 'ntfloadimg' : 'Kép betöltése', 'ntfnetmount' : 'Hálózati meghajtó hozzáadása', // added 18.04.2012 'ntfnetunmount': 'Hálózati meghajtó leválasztása', // from v2.1 added 30.04.2012 'ntfdim' : 'Képméret megállapítása', // added 20.05.2013 'ntfreaddir' : 'A mappa adatainak olvasása', // from v2.1 added 01.07.2013 'ntfurl' : 'A link URL-jének lekérdezése', // from v2.1 added 11.03.2014 'ntfchmod' : 'A fájlmód megváltoztatása', // from v2.1 added 20.6.2015 'ntfpreupload': 'A feltöltött fájlnév ellenőrzése', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Fájl létrehozása letöltésre', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Útvonalinformációk lekérése', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'A feltöltött fájl feldolgozása', // from v2.1.17 added 2.11.2016 'ntftrash' : 'A szemétbe dobják', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Visszaállítás a kukából', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Célmappa ellenőrzése', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Az előző művelet visszavonása', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Az előző visszavonás újraindítása', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'A tartalom ellenőrzése', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Szemét', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Ismeretlen', 'Today' : 'Ma', 'Yesterday' : 'Tegnap', 'msJan' : 'jan', 'msFeb' : 'febr', 'msMar' : 'márc', 'msApr' : 'ápr', 'msMay' : 'máj', 'msJun' : 'jún', 'msJul' : 'júl', 'msAug' : 'aug', 'msSep' : 'szept', 'msOct' : 'okt', 'msNov' : 'nov', 'msDec' : 'dec', 'January' : 'Január', 'February' : 'Február', 'March' : 'Március', 'April' : 'Április', 'May' : 'Május', 'June' : 'Június', 'July' : 'Július', 'August' : 'Augusztus', 'September' : 'Szeptember', 'October' : 'Október', 'November' : 'november', 'December' : 'december', 'Sunday' : 'Vasárnap', 'Monday' : 'Hétfő', 'Tuesday' : 'Kedd', 'Wednesday' : 'Szerda', 'Thursday' : 'Csütörtök', 'Friday' : 'Péntek', 'Saturday' : 'Szombat', 'Sun' : 'V', 'Mon' : 'H', 'Tue' : 'K', 'Wed' : 'Sz', 'Thu' : 'Cs', 'Fri' : 'P', 'Sat' : 'Szo', /******************************** sort variants ********************************/ 'sortname' : 'név szerint', 'sortkind' : 'kedvesen', 'sortsize' : 'méret szerint', 'sortdate' : 'dátum szerint', 'sortFoldersFirst' : 'Először a mappák', 'sortperm' : 'engedély alapján', // from v2.1.13 added 13.06.2016 'sortmode' : 'mód szerint', // from v2.1.13 added 13.06.2016 'sortowner' : 'tulajdonos alapján', // from v2.1.13 added 13.06.2016 'sortgroup' : 'csoportok szerint', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Szintén Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'Új mappa', // added 10.11.2015 'Archive' : 'ÚjArchívum', // from v2.1 added 10.11.2015 'untitled file' : 'Új fájl.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : 'Új fájl.$1', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Megerősítés szükséges', 'confirmRm' : 'Valóban törölni akarja a kijelölt adatokat?
Ez később nem fordítható vissza!', 'confirmRepl' : 'Lecseréli a régi fájlt egy újra? (Ha mappákat tartalmaz, a rendszer egyesíti. A biztonsági mentéshez és a cseréhez válassza a Biztonsági mentés lehetőséget.)', 'confirmRest' : 'Lecseréli a meglévő elemet a kukában lévő elemre?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nem UTF-8.
Átalakítsam UTF-8-ra?
A tartalom mentés után UTF-8 lesz..', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Ennek a fájlnak a karakterkódolása nem észlelhető. Átmenetileg át kell konvertálni UTF-8-ra a szerkesztéshez.
Kérjük, válassza ki a fájl karakterkódolását.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Megváltozott.
Módosítások elvesznek, ha nem menti el azokat.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Biztos, hogy áthelyezi az elemeket a kukába?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Biztosan áthelyezi az elemeket ide: "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Mindenre vonatkozik', 'name' : 'Név', 'size' : 'Méret', 'perms' : 'Jogok', 'modify' : 'Módosítva', 'kind' : 'Típus', 'read' : 'olvasás', 'write' : 'írás', 'noaccess' : '-', 'and' : 'és', 'unknown' : 'ismeretlen', 'selectall' : 'Összes kijelölése', 'selectfiles' : 'Fájlok kijelölése', 'selectffile' : 'Első fájl kijelölése', 'selectlfile' : 'Utolsó fájl kijelölése', 'viewlist' : 'Lista nézet', 'viewicons' : 'Ikon nézet', 'viewSmall' : 'Kis ikonok', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Közepes ikonok', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Nagy ikonok', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra nagy ikonok', // from v2.1.39 added 22.5.2018 'places' : 'Helyek', 'calc' : 'Kiszámítja', 'path' : 'Útvonal', 'aliasfor' : 'Cél', 'locked' : 'Zárolt', 'dim' : 'Méretek', 'files' : 'Fájlok', 'folders' : 'Mappák', 'items' : 'Elemek', 'yes' : 'igen', 'no' : 'nem', 'link' : 'Parancsikon', 'searcresult' : 'Keresés eredménye', 'selected' : 'kijelölt elemek', 'about' : 'Névjegy', 'shortcuts' : 'Gyorsbillenytyűk', 'help' : 'Súgó', 'webfm' : 'Webes fájlkezelő', 'ver' : 'Verzió', 'protocolver' : 'protokol verzió', 'homepage' : 'Projekt honlap', 'docs' : 'Dokumentáció', 'github' : 'Hozz létre egy új verziót a Github-on', 'twitter' : 'Kövess minket a twitter-en', 'facebook' : 'Csatlakozz hozzánk a facebook-on', 'team' : 'Csapat', 'chiefdev' : 'vezető fejlesztő', 'developer' : 'fejlesztő', 'contributor' : 'külsős hozzájáruló', 'maintainer' : 'karbantartó', 'translator' : 'fordító', 'icons' : 'Ikonok', 'dontforget' : 'törölközőt ne felejts el hozni!', 'shortcutsof' : 'Parancsikonok letiltva', 'dropFiles' : 'Fájlok dobása ide', 'or' : 'vagy', 'selectForUpload' : 'fájlok böngészése', 'moveFiles' : 'Fájlok áthelyezése', 'copyFiles' : 'Fájlok másolása', 'restoreFiles' : 'Elemek visszaállítása', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Távolítsa el a helyekről', 'aspectRatio' : 'Oldalarány', 'scale' : 'Skála', 'width' : 'Szélesség', 'height' : 'Magasság', 'resize' : 'Átméretezés', 'crop' : 'Vág', 'rotate' : 'Forgat', 'rotate-cw' : 'Forgassa el 90 fokkal', 'rotate-ccw' : 'Forgassa el 90 fokkal CCW irányban', 'degree' : '°', 'netMountDialogTitle' : 'Csatlakoztassa a hálózati kötetet', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Házigazda', // added 18.04.2012 'port' : 'Kikötő', // added 18.04.2012 'user' : 'Felhasználó', // added 18.04.2012 'pass' : 'Jelszó', // added 18.04.2012 'confirmUnmount' : 'Leválasztod $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Fájlok dobása vagy beillesztése a böngészőből', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dobja ide a fájlokat, illesszen be URL-eket vagy képeket (vágólap).', // from v2.1 added 07.04.2014 'encoding' : 'Kódolás', // from v2.1 added 19.12.2014 'locale' : 'Nyelv', // from v2.1 added 19.12.2014 'searchTarget' : 'Cél: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Keresés a MIME típus bevitele alapján', // from v2.1 added 22.5.2015 'owner' : 'Tulajdonos', // from v2.1 added 20.6.2015 'group' : 'Csoport', // from v2.1 added 20.6.2015 'other' : 'Egyéb', // from v2.1 added 20.6.2015 'execute' : 'Végrehajt', // from v2.1 added 20.6.2015 'perm' : 'Engedély', // from v2.1 added 20.6.2015 'mode' : 'Mód', // from v2.1 added 20.6.2015 'emptyFolder' : 'A mappa üres', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'A mappa üres\\Elem eldobása', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'A mappa üres\\Hosszú koppintás elemek hozzáadásához', // from v2.1.6 added 30.12.2015 'quality' : 'Minőség', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatikus szinkronizáció', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mozgatás fel', // from v2.1.6 added 18.1.2016 'getLink' : 'URL-link letöltése', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Kiválasztott elemek ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Mappa ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Offline hozzáférés engedélyezése', // from v2.1.10 added 3.25.2016 'reAuth' : 'Újrahitelesítéshez', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Most betölt...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Több fájl megnyitása', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Megpróbálja megnyitni a $1 fájlokat. Biztosan meg akarja nyitni a böngészőben?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'A keresési eredmények üresek a keresési célban.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Ez egy fájl szerkesztése.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 elemet választott ki.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 elem van a vágólapon.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'A növekményes keresés csak az aktuális nézetből történik.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Helyezze vissza', // from v2.1.15 added 3.8.2016 'complete' : '$1 kész', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Helyi menü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Lapozás', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Kötetgyökerek', // from v2.1.16 added 16.9.2016 'reset' : 'Visszaállítás', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Háttérszín', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Színválasztó', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8 képpontos rács', // from v2.1.16 added 4.10.2016 'enabled' : 'Engedélyezve', // from v2.1.16 added 4.10.2016 'disabled' : 'Tiltva', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'A keresési eredmények üresek az aktuális nézetben.\\ANyomja meg az [Enter] billentyűt a keresési cél kibontásához.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Az első betűs keresés eredménye üres az aktuális nézetben.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Szöveges címke', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 perc van hátra', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Nyissa meg újra a kiválasztott kódolással', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Mentés a kiválasztott kódolással', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Mappa kiválasztása', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Első betű keresése', // from v2.1.23 added 24.3.2017 'presets' : 'Előbeállítások', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Túl sok az elem, így nem kerülhet a szemétbe.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Ürítse ki a „$1” mappát.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Nincsenek elemek a "$1" mappában.', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencia', // from v2.1.26 added 28.6.2017 'language' : 'Nyelv', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializálja az ebben a böngészőben mentett beállításokat', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Eszköztár beállításai', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 karakter maradt.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 sor maradt.', // from v2.1.52 added 16.1.2020 'sum' : 'Összeg', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Durva fájlméret', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fókuszáljon a párbeszédpanel elemére az egérmutatóval', // from v2.1.30 added 2.11.2017 'select' : 'Válassza ki', // from v2.1.30 added 23.11.2017 'selectAction' : 'Művelet a fájl kiválasztásakor', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Nyissa meg a legutóbb használt szerkesztővel', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Fordított kijelölés', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Biztosan át szeretné nevezni $1 kiválasztott elemet, például $2?
Ez nem vonható vissza!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Kötegelt átnevezés', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Szám', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Előtag hozzáadása', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Utótag hozzáadása', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Utótag hozzáadása', // from v2.1.31 added 8.12.2017 'columnPref' : 'Oszlopbeállítások (lista nézet)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Minden változás azonnal megjelenik az archívumban.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'A módosítások csak akkor jelennek meg, ha leválasztják a kötetet.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Az erre a kötetre szerelt következő kötet(ek) szintén le vannak szerelve. Biztosan leválasztja?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Kiválasztási információ', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmusok a fájl hash megjelenítéséhez', // from v2.1.33 added 10.3.2018 'infoItems' : 'Információs elemek (Információs panel kiválasztása)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Nyomja meg újra a kilépéshez.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Eszköztár', // from v2.1.38 added 4.4.2018 'workspace' : 'Munkaterület', // from v2.1.38 added 4.4.2018 'dialog' : 'Párbeszéd', // from v2.1.38 added 4.4.2018 'all' : 'Minden', // from v2.1.38 added 4.4.2018 'iconSize' : 'Ikonméret (Ikonok nézet)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Nyissa meg a teljes méretű szerkesztő ablakot', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Mivel az API-n keresztüli konvertálás jelenleg nem érhető el, kérjük, konvertálja a webhelyen.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'A konvertálás után fel kell töltenie az elem URL-jét vagy egy letöltött fájlt a konvertált fájl mentéséhez.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konvertálás a webhelyen: $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrációk', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Ez az elFinder a következő külső szolgáltatásokat tartalmazza. Kérjük, használat előtt ellenőrizze a használati feltételeket, az adatvédelmi szabályzatot stb.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Rejtett elemek megjelenítése', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Rejtett elemek elrejtése', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Rejtett elemek megjelenítése/elrejtése', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Az „Új fájl” funkcióval engedélyezhető fájltípusok', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'A szövegfájl típusa', // from v2.1.41 added 7.8.2018 'add' : 'Hozzáadás', // from v2.1.41 added 7.8.2018 'theme' : 'Téma', // from v2.1.43 added 19.10.2018 'default' : 'Alapértelmezett', // from v2.1.43 added 19.10.2018 'description' : 'Leírás', // from v2.1.43 added 19.10.2018 'website' : 'Weboldal', // from v2.1.43 added 19.10.2018 'author' : 'Szerző', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Engedély', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Ez az elem nem menthető. A szerkesztések elvesztésének elkerülése érdekében exportálnia kell őket a számítógépére.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Kattintson duplán a fájlra a kiválasztásához.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Teljes képernyős mód használata', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ismeretlen', 'kindRoot' : 'Kötetgyökér', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappa', 'kindSelects' : 'Válogatás', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Parancsikon', 'kindAliasBroken' : 'Hibás parancsikon', // applications 'kindApp' : 'Alkalmazás', 'kindPostscript' : 'Postscript dokumentum', 'kindMsOffice' : 'Microsoft Office dokumentum', 'kindMsWord' : 'Microsoft Word dokumentum', 'kindMsExcel' : 'Microsoft Excel dokumentum', 'kindMsPP' : 'Microsoft Powerpoint bemutató', 'kindOO' : 'Open Office dokumentum', 'kindAppFlash' : 'Flash alkalmazás', 'kindPDF' : 'Hordozható dokumentum formátum (PDF)', 'kindTorrent' : 'Bittorrent fájl', 'kind7z' : '7z archívum', 'kindTAR' : 'TAR archívum', 'kindGZIP' : 'GZIP archívum', 'kindBZIP' : 'BZIP archívum', 'kindXZ' : 'XZ archívum', 'kindZIP' : 'ZIP archívum', 'kindRAR' : 'RAR archívum', 'kindJAR' : 'Java JAR fájl', 'kindTTF' : 'True Type betűtípus', 'kindOTF' : 'Nyissa meg a Type betűtípust', 'kindRPM' : 'RPM csomag', // texts 'kindText' : 'Szöveges dokumentum', 'kindTextPlain' : 'Egyszerű szöveg', 'kindPHP' : 'PHP forráskód', 'kindCSS' : 'Lépcsőzetes stíluslap', 'kindHTML' : 'HTML dokumentum', 'kindJS' : 'Javascript forráskód', 'kindRTF' : 'Rich Text formátum', 'kindC' : 'C forráskód', 'kindCHeader' : 'C header forráskód', 'kindCPP' : 'C++ forráskód', 'kindCPPHeader' : 'C++ header forráskód', 'kindShell' : 'Unix shell szkript', 'kindPython' : 'Python forráskód', 'kindJava' : 'Java forráskód', 'kindRuby' : 'Ruby forráskód', 'kindPerl' : 'Perl szkript', 'kindSQL' : 'SQL forráskód', 'kindXML' : 'XML dokumentum', 'kindAWK' : 'AWK forráskód', 'kindCSV' : 'Vesszővel elválasztott értékek', 'kindDOCBOOK' : 'Docbook XML dokumentum', 'kindMarkdown' : 'Markdown szöveg', // added 20.7.2015 // images 'kindImage' : 'Kép', 'kindBMP' : 'BMP kép', 'kindJPEG' : 'JPEG kép', 'kindGIF' : 'GIF kép', 'kindPNG' : 'PNG kép', 'kindTIFF' : 'TIFF kép', 'kindTGA' : 'TGA kép', 'kindPSD' : 'Adobe Photoshop kép', 'kindXBITMAP' : 'X bittérképes kép', 'kindPXM' : 'Pixelmator kép', // media 'kindAudio' : 'Hangfájl', 'kindAudioMPEG' : 'MPEG hangfájl', 'kindAudioMPEG4' : 'MPEG-4 hangfájl', 'kindAudioMIDI' : 'MIDI hangfájl', 'kindAudioOGG' : 'Ogg Vorbis hangfájl', 'kindAudioWAV' : 'WAV hangfájl', 'AudioPlaylist' : 'MP3 lejátszási lista', 'kindVideo' : 'Film', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); PK Z«js/i18n/elfinder.LANG.jsnuW+A/** * elFinder translation template * use this file to create new translation * submit new translation via https://github.com/Studio-42/elFinder/issues * or make a pull request */ /** * XXXXX translation * @author Translator Name * @version 201x-xx-xx */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.REPLACE_WITH_xx_OR_xx_YY_LANG_CODE = { translator : 'Translator name <translator@email.tld>', language : 'Language of translation in your language', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will show like: Today 12:25 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 120513-172700 messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Unknown error.', 'errUnknownCmd' : 'Unknown command.', 'errJqui' : 'Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.', 'errNode' : 'elFinder requires DOM Element to be created.', 'errURL' : 'Invalid elFinder configuration! URL option is not set.', 'errAccess' : 'Access denied.', 'errConnect' : 'Unable to connect to backend.', 'errAbort' : 'Connection aborted.', 'errTimeout' : 'Connection timeout.', 'errNotFound' : 'Backend not found.', 'errResponse' : 'Invalid backend response.', 'errConf' : 'Invalid backend configuration.', 'errJSON' : 'PHP JSON module not installed.', 'errNoVolumes' : 'Readable volumes not available.', 'errCmdParams' : 'Invalid parameters for command "$1".', 'errDataNotJSON' : 'Data is not JSON.', 'errDataEmpty' : 'Data is empty.', 'errCmdReq' : 'Backend request requires command name.', 'errOpen' : 'Unable to open "$1".', 'errNotFolder' : 'Object is not a folder.', 'errNotFile' : 'Object is not a file.', 'errRead' : 'Unable to read "$1".', 'errWrite' : 'Unable to write into "$1".', 'errPerm' : 'Permission denied.', 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.', 'errExists' : 'Item named "$1" already exists.', 'errInvName' : 'Invalid file name.', 'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder not found.', 'errFileNotFound' : 'File not found.', 'errTrgFolderNotFound' : 'Target folder "$1" not found.', 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.', 'errMkdir' : 'Unable to create folder "$1".', 'errMkfile' : 'Unable to create file "$1".', 'errRename' : 'Unable to rename "$1".', 'errCopyFrom' : 'Copying files from volume "$1" not allowed.', 'errCopyTo' : 'Copying files to volume "$1" not allowed.', 'errMkOutLink' : 'Unable to create a link to outside the volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload error.', // old name - errUploadCommon 'errUploadFile' : 'Unable to upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'No files found for upload.', 'errUploadTotalSize' : 'Data exceeds the maximum allowed size.', // old name - errMaxSize 'errUploadFileSize' : 'File exceeds maximum allowed size.', // old name - errFileMaxSize 'errUploadMime' : 'File type not allowed.', 'errUploadTransfer' : '"$1" transfer error.', 'errUploadTemp' : 'Unable to make temporary file for upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Unable to save "$1".', 'errCopy' : 'Unable to copy "$1".', 'errMove' : 'Unable to move "$1".', 'errCopyInItself' : 'Unable to copy "$1" into itself.', 'errRm' : 'Unable to remove "$1".', 'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Unable to extract files from "$1".', 'errArchive' : 'Unable to create archive.', 'errArcType' : 'Unsupported archive type.', 'errNoArchive' : 'File is not archive or has unsupported archive type.', 'errCmdNoSupport' : 'Backend does not support this command.', 'errReplByChild' : 'The folder "$1" can\'t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', 'errNetUnMount' : 'Unable to unmount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Try the modern browser, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'You can create up to $1 folders at one time.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Create archive', 'cmdback' : 'Back', 'cmdcopy' : 'Copy', 'cmdcut' : 'Cut', 'cmddownload' : 'Download', 'cmdduplicate' : 'Duplicate', 'cmdedit' : 'Edit file', 'cmdextract' : 'Extract files from archive', 'cmdforward' : 'Forward', 'cmdgetfile' : 'Select files', 'cmdhelp' : 'About this software', 'cmdhome' : 'Root', 'cmdinfo' : 'Get info', 'cmdmkdir' : 'New folder', 'cmdmkdirin' : 'Into New Folder', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'New file', 'cmdopen' : 'Open', 'cmdpaste' : 'Paste', 'cmdquicklook' : 'Preview', 'cmdreload' : 'Reload', 'cmdrename' : 'Rename', 'cmdrm' : 'Delete', 'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find files', 'cmdup' : 'Go to parent folder', 'cmdupload' : 'Upload files', 'cmdview' : 'View', 'cmdresize' : 'Resize & Rotate', 'cmdsort' : 'Sort', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open a folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Select all', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Select none', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invert selection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in new window', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Close', 'btnSave' : 'Save', 'btnRm' : 'Remove', 'btnApply' : 'Apply', 'btnCancel' : 'Cancel', 'btnNo' : 'No', 'btnYes' : 'Yes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Open folder', 'ntffile' : 'Open file', 'ntfreload' : 'Reload folder content', 'ntfmkdir' : 'Creating folder', 'ntfmkfile' : 'Creating files', 'ntfrm' : 'Delete items', 'ntfcopy' : 'Copy items', 'ntfmove' : 'Move items', 'ntfprepare' : 'Checking existing items', 'ntfrename' : 'Rename files', 'ntfupload' : 'Uploading files', 'ntfdownload' : 'Downloading files', 'ntfsave' : 'Save files', 'ntfarchive' : 'Creating archive', 'ntfextract' : 'Extracting files from archive', 'ntfsearch' : 'Searching files', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something', 'ntfloadimg' : 'Loading image', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unknown', 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'May', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'by name', 'sortkind' : 'by kind', 'sortsize' : 'by size', 'sortdate' : 'by date', 'sortFoldersFirst' : 'Folders first', 'sortperm' : 'by permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'by mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'by owner', // from v2.1.13 added 13.06.2016 'sortgroup' : 'by group', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation required', 'confirmRm' : 'Are you sure you want to permanently remove items?
This cannot be undone!', 'confirmRepl' : 'Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Not in UTF-8
Convert to UTF-8?
Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'It has been modified.
Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Apply to all', 'name' : 'Name', 'size' : 'Size', 'perms' : 'Permissions', 'modify' : 'Modified', 'kind' : 'Kind', 'read' : 'read', 'write' : 'write', 'noaccess' : 'no access', 'and' : 'and', 'unknown' : 'unknown', 'selectall' : 'Select all items', 'selectfiles' : 'Select item(s)', 'selectffile' : 'Select first item', 'selectlfile' : 'Select last item', 'viewlist' : 'List view', 'viewicons' : 'Icons view', 'viewSmall' : 'Small icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large icons', // from v2.1.39 added 22.5.2018 'places' : 'Places', 'calc' : 'Calculate', 'path' : 'Path', 'aliasfor' : 'Alias for', 'locked' : 'Locked', 'dim' : 'Dimensions', 'files' : 'Files', 'folders' : 'Folders', 'items' : 'Items', 'yes' : 'yes', 'no' : 'no', 'link' : 'Link', 'searcresult' : 'Search results', 'selected' : 'selected items', 'about' : 'About', 'shortcuts' : 'Shortcuts', 'help' : 'Help', 'webfm' : 'Web file manager', 'ver' : 'Version', 'protocolver' : 'protocol version', 'homepage' : 'Project home', 'docs' : 'Documentation', 'github' : 'Fork us on GitHub', 'twitter' : 'Follow us on Twitter', 'facebook' : 'Join us on Facebook', 'team' : 'Team', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Icons', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Drop files here', 'or' : 'or', 'selectForUpload' : 'Select files', 'moveFiles' : 'Move items', 'copyFiles' : 'Copy items', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scale', 'width' : 'Width', 'height' : 'Height', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Owner', // from v2.1 added 20.6.2015 'group' : 'Group', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Execute', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder is empty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder is empty\\A Drop to add items', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder is empty\\A Long tap to add items', // from v2.1.6 added 30.12.2015 'quality' : 'Quality', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Move up', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Selected items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Now loading...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open multiple files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'You are trying to open the $1 files. Are you sure you want to open in browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Search results is empty in search target.', // from v2.1.12 added 5.16.2016 'editingFile' : 'It is editing a file.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'You have selected $1 items.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 complete', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Background color', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Enabled', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabled', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar settings', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 lines left.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Press again to exit.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // texts 'kindText' : 'Text document', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL source', 'kindXML' : 'XML document', 'kindAWK' : 'AWK source', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'BMP image', 'kindJPEG' : 'JPEG image', 'kindGIF' : 'GIF Image', 'kindPNG' : 'PNG Image', 'kindTIFF' : 'TIFF image', 'kindTGA' : 'TGA image', 'kindPSD' : 'Adobe Photoshop image', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; })); PK ZcNjs/i18n/elfinder.sk.jsnuW+A/** * Slovenčina translation * @author RobiNN * @author Jakub Ďuraš * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sk = { translator : 'RobiNN <kelcakrobo@gmail.com>, Jakub Ďuraš <jkblmr@gmail.com>', language : 'Slovenčina', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 03.03.2022 11:36 fancyDateFormat : '$1 H:i', // will show like: Dnes 11:36 nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-113626 messages : { 'getShareText' : 'zdieľam', 'Editor ': 'Editor kódu', /********************************** errors **********************************/ 'error' : 'Chyba', 'errUnknown' : 'Neznáma chyba.', 'errUnknownCmd' : 'Neznámy príkaz.', 'errJqui' : 'Nesprávna jQuery UI konfigurácia. Selectable, draggable a droppable musia byť načítané.', 'errNode' : 'elFinder vyžaduje vytvorenie DOM elementu.', 'errURL' : 'Nesprávna elFinder konfigurácia! URL nie je definovaná.', 'errAccess' : 'Prístup zamietnutý.', 'errConnect' : 'Nepodarilo sa pripojiť do backendu.', 'errAbort' : 'Spojenie bolo prerušené.', 'errTimeout' : 'Časový limit vypršal.', 'errNotFound' : 'Backend nenájdený.', 'errResponse' : 'Nesprávna backend odpoveď.', 'errConf' : 'Nesprávna backend konfigurácia.', 'errJSON' : 'PHP JSON modul nie je nainštalovaný.', 'errNoVolumes' : 'Nie sú dostupné žiadne čitateľné média.', 'errCmdParams' : 'Nesprávne parametre pre príkaz "$1".', 'errDataNotJSON' : 'Dáta nie sú formátu JSON.', 'errDataEmpty' : 'Prázdne dáta.', 'errCmdReq' : 'Backend požiadavka požaduje názov príkazu.', 'errOpen' : 'Nie je možné otvoriť "$1".', 'errNotFolder' : 'Objekt nie je priečinok.', 'errNotFile' : 'Objekt nie je súbor.', 'errRead' : 'Nie je možné prečítať "$1".', 'errWrite' : 'Nie je možné písať do "$1".', 'errPerm' : 'Prístup zamietnutý.', 'errLocked' : '"$1" je uzamknutý a nemôže byť premenovaný, presunutý alebo odstránený.', 'errExists' : 'Položka s názvom "$1" už existuje.', 'errInvName' : 'Neplatný názov súboru.', 'errInvDirname' : 'Neplatný názov priečinka.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Priečinok nebol nájdený.', 'errFileNotFound' : 'Súbor nenájdený.', 'errTrgFolderNotFound' : 'Cieľový priečinok "$1" sa nenašiel.', 'errPopup' : 'Prehliadač zabránil otvoreniu vyskakovacieho okna. Pre otvorenie súboru povoľte vyskakovacie okná.', 'errMkdir' : 'Nepodarilo sa vytvoriť priečinok "$1".', 'errMkfile' : 'Nepodarilo sa vytvoriť súbor "$1".', 'errRename' : 'Nepodarilo sa premenovať "$1".', 'errCopyFrom' : 'Kopírovanie súborov z média "$1" nie je povolené.', 'errCopyTo' : 'Kopírovanie súborov na médium "$1" nie je povolené.', 'errMkOutLink' : 'Nie je možné vytvoriť odkaz mimo koreňového zväzku.', // from v2.1 added 03.10.2015 'errUpload' : 'Chyba pri nahrávaní.', // old name - errUploadCommon 'errUploadFile' : 'Nepodarilo sa nahrať "$1".', // old name - errUpload 'errUploadNoFiles' : 'Neboli nájdené žiadne súbory na nahranie.', 'errUploadTotalSize' : 'Dáta prekračujú maximálnu povolenú veľkosť.', // old name - errMaxSize 'errUploadFileSize' : 'Súbor prekračuje maximálnu povolenú veľkosť.', // old name - errFileMaxSize 'errUploadMime' : 'Nepovolený typ súboru.', 'errUploadTransfer' : 'Problém s nahrávaním "$1".', 'errUploadTemp' : 'Nepodarilo sa vytvoriť dočasný súbor na nahranie.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" na tomto mieste už existuje a nemôže byť nahradený objektom iného typu.', // new 'errReplace' : 'Nie je možné nahradiť "$1".', 'errSave' : 'Nie je možné uložiť "$1".', 'errCopy' : 'Nie je možné kopírovať "$1".', 'errMove' : 'Nie je možné preniesť "$1".', 'errCopyInItself' : 'Nie je možné kopírovať "$1" do seba.', 'errRm' : 'Nie je možné vymazať "$1".', 'errTrash' : 'Nie je možné presunúť do koša.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nie je možné odstrániť zdrojový/é súbor/y.', 'errExtract' : 'Nie je možné extrahovať súbory z "$1".', 'errArchive' : 'Nie je možné vytvoriť archív.', 'errArcType' : 'Nepodporovaný typ archívu.', 'errNoArchive' : 'Súbor nie je archív alebo má nepodporovaný typ archívu.', 'errCmdNoSupport' : 'Backend nepodporuje tento príkaz.', 'errReplByChild' : 'Priečinok "$1" nemôže byť nahradený položkou, ktorú už obsahuje.', 'errArcSymlinks' : 'Z bezpečnostných dôvodov bolo zakázané extrahovanie archívov obsahujúcich symlinky, alebo súborov s nepovolenými názvami.', // edited 24.06.2012 'errArcMaxSize' : 'Súbory archívu prekračujú maximálnu povolenú veľkosť.', 'errResize' : 'Nie je možné zmeniť veľkosť "$1".', 'errResizeDegree' : 'Neplatný stupeň otočenia.', // added 7.3.2013 'errResizeRotate' : 'Nie je možné otočiť obrázok.', // added 7.3.2013 'errResizeSize' : 'Neplatná veľkosť obrázka.', // added 7.3.2013 'errResizeNoChange' : 'Veľkosť obrázku sa nezmenila.', // added 7.3.2013 'errUsupportType' : 'Nepodporovaný typ súboru.', 'errNotUTF8Content' : 'Súbor "$1" nie je v UTF-8 a nemôže byť upravený.', // added 9.11.2011 'errNetMount' : 'Nie je možné pripojiť "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012 'errNetMountFailed' : 'Pripájanie zlyhalo.', // added 17.04.2012 'errNetMountHostReq' : 'Hosť je požadovaný.', // added 18.04.2012 'errSessionExpires' : 'Vaša relácia vypršala kvôli nečinnosti.', 'errCreatingTempDir' : 'Nepodarilo sa vytvoriť dočasný adresár: "$1"', 'errFtpDownloadFile' : 'Nie je možné stiahnuť súbor z FTP: "$1"', 'errFtpUploadFile' : 'Nie je možné nahrať súbor na FTP: "$1"', 'errFtpMkdir' : 'Nedá sa vytvoriť vzdialený adresár na FTP: "$1"', 'errArchiveExec' : 'Chyba pri archivácii súborov: "$1"', 'errExtractExec' : 'Chyba pri extrahovaní súborov: "$1"', 'errNetUnMount' : 'Nepodarilo sa odpojiť', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nie je prevoditeľný na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Vyskúšajte moderný prehliadač, ak chcete nahrať priečinok.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Vypršal časový limit pri hľadaní "$1". Výsledok vyhľadávania je čiastočný.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Opätovné povolenie je potrebné.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maximálny počet voliteľných položiek je $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nepodarilo sa obnoviť z koša. Cieľ obnovenia nie je možné identifikovať.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor tohto typu súboru nebol nájdený.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Vyskytla sa chyba na strane servera.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nepodarilo sa vyprázdniť priečinok "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existujú ešte ďalšie $1 chyby.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Môžete vytvoriť až $1 priečinkov naraz.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Vytvoriť archív', 'cmdback' : 'Späť', 'cmdcopy' : 'Kopírovať', 'cmdcut' : 'Vystrihnúť', 'cmddownload' : 'Stiahnuť', 'cmdduplicate' : 'Duplikovať', 'cmdedit' : 'Upraviť súbor', 'cmdextract' : 'Extrahovať súbory z archívu', 'cmdforward' : 'Ďalej', 'cmdgetfile' : 'Vybrať súbory', 'cmdhelp' : 'O tomto softvéri', 'cmdhome' : 'Domov', 'cmdinfo' : 'Info', 'cmdmkdir' : 'Nový priečinok', 'cmdmkdirin' : 'Do novej zložky', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nový súbor', 'cmdopen' : 'Otvoriť', 'cmdpaste' : 'Vložiť', 'cmdquicklook' : 'Náhľad', 'cmdreload' : 'Obnoviť', 'cmdrename' : 'Premenovať', 'cmdrm' : 'Vymazať', 'cmdtrash' : 'Do koša', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Obnoviť', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Nájsť súbory', 'cmdup' : 'Prejsť do nadradeného priečinka', 'cmdupload' : 'Nahrať súbory', 'cmdview' : 'Pozrieť', 'cmdresize' : 'Zmeniť veľkosť obrázku', 'cmdsort' : 'Zoradiť', 'cmdnetmount' : 'Pripojiť sieťové médium', // added 18.04.2012 'cmdnetunmount': 'Odpojiť', // from v2.1 added 30.04.2012 'cmdplaces' : 'Do umiestnení', // added 28.12.2014 'cmdchmod' : 'Zmeniť režim', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otvoriť priečinok', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Resetovať šírku stĺpca', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Celá obrazovka', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Posúvať', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vyprázdniť priečinok', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Krok späť', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Vykonať znova', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencie', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vybrať všetko', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Nič nevyberať', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertovať výber', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otvoriť v novom okne', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skryť (Predvoľba)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zavrieť', 'btnSave' : 'Uložiť', 'btnRm' : 'Vymazať', 'btnApply' : 'Použiť', 'btnCancel' : 'Zrušiť', 'btnNo' : 'Nie', 'btnYes' : 'Áno', 'btnMount' : 'Pripojiť', // added 18.04.2012 'btnApprove': 'Ísť na $1 & schváliť', // from v2.1 added 26.04.2012 'btnUnmount': 'Odpojiť', // from v2.1 added 30.04.2012 'btnConv' : 'Previesť', // from v2.1 added 08.04.2014 'btnCwd' : 'Tu', // from v2.1 added 22.5.2015 'btnVolume' : 'Médium', // from v2.1 added 22.5.2015 'btnAll' : 'Všetko', // from v2.1 added 22.5.2015 'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015 'btnFileName':'Názov súboru', // from v2.1 added 22.5.2015 'btnSaveClose': 'Uložiť & zavrieť', // from v2.1 added 12.6.2015 'btnBackup' : 'Zálohovať', // fromv2.1 added 28.11.2015 'btnRename' : 'Premenovať', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Premenovať všetko', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Predchádzajúce ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Ďalšie ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Uložiť ako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otváranie priečinka', 'ntffile' : 'Otváranie súboru', 'ntfreload' : 'Znovu-načítanie obsahu priečinka', 'ntfmkdir' : 'Vytváranie priečinka', 'ntfmkfile' : 'Vytváranie súborov', 'ntfrm' : 'Vymazanie položiek', 'ntfcopy' : 'Kopírovanie položiek', 'ntfmove' : 'Premiestnenie položiek', 'ntfprepare' : 'Kontrola existujúcich položiek', 'ntfrename' : 'Premenovanie súborov', 'ntfupload' : 'Nahrávanie súborov', 'ntfdownload' : 'Sťahovanie súborov', 'ntfsave' : 'Uloženie súborov', 'ntfarchive' : 'Vytváranie archívu', 'ntfextract' : 'Extrahovanie súborov z archívu', 'ntfsearch' : 'Vyhľadávanie súborov', 'ntfresize' : 'Zmena veľkosti obrázkov', 'ntfsmth' : 'Počkajte prosím...', 'ntfloadimg' : 'Načítavanie obrázka', 'ntfnetmount' : 'Pripájanie sieťového média', // added 18.04.2012 'ntfnetunmount': 'Odpájanie sieťového média', // from v2.1 added 30.04.2012 'ntfdim' : 'Získanie rozmeru obrázka', // added 20.05.2013 'ntfreaddir' : 'Čítajú sa informácie o priečinku', // from v2.1 added 01.07.2013 'ntfurl' : 'Získanie adresy URL odkazu', // from v2.1 added 11.03.2014 'ntfchmod' : 'Zmena súboru', // from v2.1 added 20.6.2015 'ntfpreupload': 'Overenie názvu nahravaného súboru', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Vytvorenie súboru na stiahnutie', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Získanie informácií o ceste', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Spracovanie nahraného súboru', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Vhadzovanie do koša', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Vykonávanie obnovy z koša', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrola cieľového priečinka', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Zrušiť predchádzajúcu operáciu', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Obnovenie predchádzajúceho zrušenia', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrola obsahu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Kôš', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'neznámy', 'Today' : 'Dnes', 'Yesterday' : 'Včera', 'msJan' : 'jan', 'msFeb' : 'feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Júl', 'msAug' : 'Aug', 'msSep' : 'sept', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'dec', 'January' : 'Január', 'February' : 'Február', 'March' : 'Marec', 'April' : 'Apríl', 'May' : 'Máj', 'June' : 'Jún', 'July' : 'Júl', 'August' : 'augusta', 'September' : 'septembra', 'October' : 'Október', 'November' : 'novembra', 'December' : 'December', 'Sunday' : 'Nedeľa', 'Monday' : 'Pondelok', 'Tuesday' : 'Utorok', 'Wednesday' : 'Streda', 'Thursday' : 'Štvrtok', 'Friday' : 'Piatok', 'Saturday' : 'Sobota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Ut', 'Wed' : 'Str', 'Thu' : 'Štv', 'Fri' : 'Pia', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'podľa názvu', 'sortkind' : 'podľa druhu', 'sortsize' : 'podľa veľkosti', 'sortdate' : 'podľa dátumu', 'sortFoldersFirst' : 'Najskôr priečinky', 'sortperm' : 'podľa povolenia', // from v2.1.13 added 13.06.2016 'sortmode' : 'podľa módu', // from v2.1.13 added 13.06.2016 'sortowner' : 'podľa majiteľa', // from v2.1.13 added 13.06.2016 'sortgroup' : 'podľa skupiny', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Tiež stromové zobrazenie', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Nový súbor.txt', // added 10.11.2015 'untitled folder' : 'Nový priečinok', // added 10.11.2015 'Archive' : 'Nový archív', // from v2.1 added 10.11.2015 'untitled file' : 'Nový súbor.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 súbor', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Potrebné potvrdenie', 'confirmRm' : 'Určite chcete vymazať súbory?
Nie je to možné vrátiť späť!', 'confirmRepl' : 'Nahradiť starý súbor za nový? (Ak obsahuje priečinky, bude zlúčené. Ak chcete zálohovať a nahradiť, vyberte možnosť Zálohovať.)', 'confirmRest' : 'Nahradiť existujúcu položku s položkou v koši?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nie je v UTF-8
Previesť na UTF-8?
Obsah bude v UTF-8 po uložení konverzie.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Kódovanie tohto súboru nemohlo byť detekované. Pre úpravu dočasne potrebujete previesť na UTF-8 .
Prosím, vyberte kódovanie znakov tohto súboru.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Bol upravený.
Ak zmeny neuložíte, stratíte vykonanú prácu.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Naozaj chcete presunúť položky do koša?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Naozaj chcete presunúť položky do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Použiť na všetky', 'name' : 'Názov', 'size' : 'Veľkosť', 'perms' : 'Povolenia', 'modify' : 'Zmenené', 'kind' : 'Druh', 'read' : 'čítať', 'write' : 'zapisovať', 'noaccess' : 'bez prístupu', 'and' : 'a', 'unknown' : 'neznámy', 'selectall' : 'Vybrať všetky položky', 'selectfiles' : 'Vybrať položku(y)', 'selectffile' : 'Vybrať prvú položku', 'selectlfile' : 'Vybrať poslednú položku', 'viewlist' : 'Zoznam', 'viewicons' : 'Ikony', 'viewSmall' : 'Malé ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Stredné ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Veľké ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra veľké ikony', // from v2.1.39 added 22.5.2018 'places' : 'Miesta', 'calc' : 'Prepočítavanie', 'path' : 'Cesta', 'aliasfor' : 'Alias pre', 'locked' : 'Uzamknuté', 'dim' : 'Rozmery', 'files' : 'Súbory', 'folders' : 'Priečinky', 'items' : 'Položky', 'yes' : 'áno', 'no' : 'nie', 'link' : 'Odkaz', 'searcresult' : 'Výsledky hľadania', 'selected' : 'zvolené položky', 'about' : 'O aplikácii', 'shortcuts' : 'Skratky', 'help' : 'Pomoc', 'webfm' : 'Webový správca súborov', 'ver' : 'Verzia', 'protocolver' : 'verzia protokolu', 'homepage' : 'Domovská stránka', 'docs' : 'Dokumentácia', 'github' : 'Pozri nás na Githube', 'twitter' : 'Nasleduj nás na Twitteri', 'facebook' : 'Pripoj sa k nám na Facebooku', 'team' : 'Tím', 'chiefdev' : 'Hlavný vývojár', 'developer' : 'Vývojár', 'contributor' : 'Prispievateľ', 'maintainer' : 'Správca', 'translator' : 'Prekladateľ', 'icons' : 'Ikony', 'dontforget' : 'a nezabudnite si plavky', 'shortcutsof' : 'Skratky nie sú povolené', 'dropFiles' : 'Sem pretiahnite súbory', 'or' : 'alebo', 'selectForUpload' : 'Vyberte súbory', 'moveFiles' : 'Premiestniť súbory', 'copyFiles' : 'Kopírovať súbory', 'restoreFiles' : 'Obnoviť položky', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Odstrániť z umiestnení', 'aspectRatio' : 'Pomer zobrazenia', 'scale' : 'Mierka', 'width' : 'Šírka', 'height' : 'Výška', 'resize' : 'Zmeniť veľkosť', 'crop' : 'Orezať', 'rotate' : 'Otočiť', 'rotate-cw' : 'Otočiť o 90 stupňov (v smere h.r.)', 'rotate-ccw' : 'Otočiť o 90 stupňov (proti smeru)', 'degree' : '°', 'netMountDialogTitle' : 'Pripojiť sieťové médium', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Hosť', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Užívateľ', // added 18.04.2012 'pass' : 'Heslo', // added 18.04.2012 'confirmUnmount' : 'Naozaj chcete odpojiť $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Premiestnite alebo presuňte súbory z prehliadača', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Tu premiestnite alebo presuňte súbory a adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kódovanie', // from v2.1 added 19.12.2014 'locale' : 'Lokalizácia', // from v2.1 added 19.12.2014 'searchTarget' : 'Cieľ: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Vyhľadávanie podľa vstupného MIME typu', // from v2.1 added 22.5.2015 'owner' : 'Majiteľ', // from v2.1 added 20.6.2015 'group' : 'Skupina', // from v2.1 added 20.6.2015 'other' : 'Ostatné', // from v2.1 added 20.6.2015 'execute' : 'Spustiť', // from v2.1 added 20.6.2015 'perm' : 'Povolenie', // from v2.1 added 20.6.2015 'mode' : 'Režim', // from v2.1 added 20.6.2015 'emptyFolder' : 'Priečinok je prázdny', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Priečinok je prázdny\\A Premiestnite alebo presuňte položky', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Priečinok je prázdny\\A Dlhým kliknutím pridáte položky', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatická synchronizácia', // from v2.1.6 added 10.1.2016 'moveUp' : 'Posunúť nahor', // from v2.1.6 added 18.1.2016 'getLink' : 'Získať URL odkaz', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Vybraté položky ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID priečinka', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Povoliť prístup v offline režime', // from v2.1.10 added 3.25.2016 'reAuth' : 'Znova overiť', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Práve načítava...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otvorenie viacerých súborov', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Pokúšate sa otvoriť súbor $1. Naozaj ho chcete otvoriť v prehliadači?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Výsledky vyhľadávania sú prázdne v hľadanom cieli.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Je to úprava súboru.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vybrali ste $1 položky.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Máte $1 položky v schránke.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Prírastkové hľadanie je iba z aktuálneho zobrazenia.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Obnovovanie', // from v2.1.15 added 3.8.2016 'complete' : '$1: kompletné', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Otáčanie stránky', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Korene média', // from v2.1.16 added 16.9.2016 'reset' : 'Resetovať', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Farba pozadia', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Výber farby', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px mriežka', // from v2.1.16 added 4.10.2016 'enabled' : 'Povolené', // from v2.1.16 added 4.10.2016 'disabled' : 'Zakázané', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Výsledky vyhľadávania sú prázdne v aktuálnom zobrazení. Stlačením tlačidla [Enter] rozšírite vyhľadávanie cieľa.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Výsledky vyhľadávania prvého listu sú v aktuálnom zobrazení prázdne.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minút ostáva', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otvoriť s vybratým kódovaním', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Uložiť s vybratým kódovaním', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vyberte priečinok', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Hľadanie prvého listu', // from v2.1.23 added 24.3.2017 'presets' : 'Presety', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Je to príliš veľa položiek, takže sa nemôže dostať do koša.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textarea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vyprázdniť priečinok "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'V priečinku "$1" nie sú žiadne položky.', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencie', // from v2.1.26 added 28.6.2017 'language' : 'Nastavenie jazyka', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializujte nastavenia uložené v tomto prehliadači', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Nastavenie panela s nástrojmi', // from v2.1.27 added 2.8.2017 'charsLeft' : '...$1 znakov ostáva.', // from v2.1.29 added 30.8.2017 'linesLeft' : '...$1 riadkov ostáva.', // from v2.1.52 added 16.1.2020 'sum' : 'Súčet', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Hrubá veľkosť súboru', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Zameranie na prvok dialógu s mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Vybrať', // from v2.1.30 added 23.11.2017 'selectAction' : 'Akcia pri vybranom súbore', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otvoriť pomocou naposledy použitého editora', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invertovať výber položiek', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Naozaj chcete premenovať $1 vybraných položiek, ako napríklad $2
Nie je to možné vrátiť späť!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch premenovanie', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Číslo', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Pridať predponu', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Pridať príponu', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Zmeniť príponu', // from v2.1.31 added 8.12.2017 'columnPref' : 'Nastavenia stĺpcov (zoznamové zobrazenie)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Všetky zmeny sa okamžite premietnu do archívu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Akékoľvek zmeny sa neodzrkadľujú, kým sa toto médium neodinštaluje.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Nasledujúce médium(a) pripojené v tomto médiu je tiež odpojené. Určite ho odpojiť?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informácie o výbere', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmy na zobrazenie hashu súborov', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informačné položky (panel s informáciami o výbere)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Opätovným stlačením opustíte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Panel nástrojov', // from v2.1.38 added 4.4.2018 'workspace' : 'Pracovný priestor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialóg', // from v2.1.38 added 4.4.2018 'all' : 'Všetko', // from v2.1.38 added 4.4.2018 'iconSize' : 'Veľkosť ikony (zobrazenie ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otvorte maximalizované okno editora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Pretože konverzia podľa rozhrania API momentálne nie je k dispozícii, skonvertujte na webovej stránke.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konverzii musíte nahrať skonvertovaný súbor pomocou URL položky alebo stiahnutý súbor na uloženie skonvertovaného súboru.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konvertovať na stránke $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrácie', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Tento elFinder má integrované nasledujúce externé služby. Pred použitím skontrolujte podmienky používania, zásady ochrany osobných údajov atď.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Zobraziť skryté položky', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skryť skryté položky', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Zobraziť/skryť skryté položky', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy súborov, ktoré sa majú povoliť pomocou "Nový súbor"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ textového súboru', // from v2.1.41 added 7.8.2018 'add' : 'Pridať', // from v2.1.41 added 7.8.2018 'theme' : 'Téma', // from v2.1.43 added 19.10.2018 'default' : 'Predvolená', // from v2.1.43 added 19.10.2018 'description' : 'Popis', // from v2.1.43 added 19.10.2018 'website' : 'Stránka', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licencia', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Túto položku nemožno uložiť. Ak chcete zabrániť strate úprav, musíte ju exportovať do počítača.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dvakrát kliknite na súbor a vyberte ho.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Použiť režim celej obrazovky', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznámy', 'kindRoot' : 'Koreň média', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Priečinok', 'kindSelects' : 'Výbery', // from v2.1.29 added 29.8.2017 'kindAlias' : 'alias', 'kindAliasBroken' : 'Porušený alias', // applications 'kindApp' : 'Aplikácia', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentácia', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flashová aplikácia', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent súbor', 'kind7z' : '7z archív', 'kindTAR' : 'TAR archív', 'kindGZIP' : 'GZIP archív', 'kindBZIP' : 'BZIP archív', 'kindXZ' : 'XZ archív', 'kindZIP' : 'ZIP archív', 'kindRAR' : 'RAR archív', 'kindJAR' : 'Java JAR súbor', 'kindTTF' : 'True Type písmo', 'kindOTF' : 'Otvorte písmo Type', 'kindRPM' : 'RPM balík', // texts 'kindText' : 'Textový document', 'kindTextPlain' : 'Obyčajný text', 'kindPHP' : 'PHP zdrojový kód', 'kindCSS' : 'Kaskádové štýly (CSS)', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript zdrojový kód', 'kindRTF' : 'Formát RTF', 'kindC' : 'C zdrojový kód', 'kindCHeader' : 'C header zdrojový kód', 'kindCPP' : 'C++ zdrojový kód', 'kindCPPHeader' : 'C++ header zdrojový kód', 'kindShell' : 'Unix shell skript', 'kindPython' : 'Python zdrojový kód', 'kindJava' : 'Java zdrojový kód', 'kindRuby' : 'Ruby zdrojový kód', 'kindPerl' : 'Perl zdrojový kód', 'kindSQL' : 'SQL zdrojový kód', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK zdrojový kód', 'kindCSV' : 'Čiarkou oddeľované hodnoty', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Text označenia', // added 20.7.2015 // images 'kindImage' : 'Obrázok', 'kindBMP' : 'BMP obrázok', 'kindJPEG' : 'JPEG obrázok', 'kindGIF' : 'GIF obrázok', 'kindPNG' : 'PNG obrázok', 'kindTIFF' : 'TIFF obrázok', 'kindTGA' : 'TGA obrázok', 'kindPSD' : 'Adobe Photoshop obrázok', 'kindXBITMAP' : 'X bitmap obrázok', 'kindPXM' : 'Pixelmator obrázok', // media 'kindAudio' : 'Zvukový súbor', 'kindAudioMPEG' : 'MPEG zvuk', 'kindAudioMPEG4' : 'MPEG-4 zvuk', 'kindAudioMIDI' : 'MIDI zvuk', 'kindAudioOGG' : 'Ogg Vorbis zvuk', 'kindAudioWAV' : 'WAV zvuk', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video súbor', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK Zi]??js/i18n/elfinder.pt_BR.jsnuW+A/** * Português translation * @author Leandro Carvalho * @author Wesley Osorio * @author Fernando H. Bandeira * @author Gustavo Brito * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.pt_BR = { translator : 'Leandro Carvalho <contato@leandrowebdev.net>, Wesley Osorio<wesleyfosorio@hotmail.com>, Fernando H. Bandeira <fernando.bandeira94@gmail.com>, Gustavo Brito <britopereiragustavo@gmail.com>', language : 'Português', direction : 'ltr', dateFormat : 'd M Y H:i', // will show like: 02 março 2022 16:59 fancyDateFormat : '$1 H:i', // will show like: Hoje 16:59 nonameDateFormat : 'ymd-His', // noname upload will show like: 220302-165954 messages : { 'getShareText' : 'Participação', 'Editor ': 'Editor de código', /********************************** errors **********************************/ 'error' : 'Erro', 'errUnknown' : 'Erro desconhecido.', 'errUnknownCmd' : 'Comando desconhecido.', 'errJqui' : 'Configuração inválida do JQuery UI. Verifique se os componentes selectable, draggable e droppable estão incluídos.', 'errNode' : 'elFinder requer um elemento DOM para ser criado.', 'errURL' : 'Configuração inválida do elFinder! Você deve setar a opção da URL.', 'errAccess' : 'Acesso negado.', 'errConnect' : 'Incapaz de conectar ao backend.', 'errAbort' : 'Conexão abortada.', 'errTimeout' : 'Tempo de conexão excedido', 'errNotFound' : 'Backend não encontrado.', 'errResponse' : 'Resposta inválida do backend.', 'errConf' : 'Configuração inválida do backend.', 'errJSON' : 'Módulo PHP JSON não está instalado.', 'errNoVolumes' : 'Não existe nenhum volume legível disponivel.', 'errCmdParams' : 'Parâmetro inválido para o comando "$1".', 'errDataNotJSON' : 'Dados não estão no formato JSON.', 'errDataEmpty' : 'Dados vazios.', 'errCmdReq' : 'Requisição do Backend requer nome de comando.', 'errOpen' : 'Incapaz de abrir "$1".', 'errNotFolder' : 'Objeto não é uma pasta.', 'errNotFile' : 'Objeto não é um arquivo.', 'errRead' : 'Incapaz de ler "$1".', 'errWrite' : 'Incapaz de escrever em "$1".', 'errPerm' : 'Permissão negada.', 'errLocked' : '"$1" está bloqueado e não pode ser renomeado, movido ou removido.', 'errExists' : 'O nome do arquivo "$1" já existe neste local.', 'errInvName' : 'Nome do arquivo inválido.', 'errInvDirname' : 'Nome da pasta inválida.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Pasta não encontrada.', 'errFileNotFound' : 'Arquivo não encontrado.', 'errTrgFolderNotFound' : 'Pasta de destino "$1" não encontrada.', 'errPopup' : 'O seu navegador está bloqueando popup\'s. Para abrir o arquivo, altere esta opção no seu Navegador.', 'errMkdir' : 'Incapaz de criar a pasta "$1".', 'errMkfile' : 'Incapaz de criar o arquivo "$1".', 'errRename' : 'Incapaz de renomear "$1".', 'errCopyFrom' : 'Copia dos arquivos do volume "$1" não permitida.', 'errCopyTo' : 'Copia dos arquivos para o volume "$1" não permitida.', 'errMkOutLink' : 'Incapaz de criar um link fora da unidade raiz.', // from v2.1 added 03.10.2015 'errUpload' : 'Erro no upload.', // old name - errUploadCommon 'errUploadFile' : 'Não foi possível fazer o upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'Não foi encontrado nenhum arquivo para upload.', 'errUploadTotalSize' : 'Os dados excedem o tamanho máximo permitido.', // old name - errMaxSize 'errUploadFileSize' : 'Arquivo excede o tamanho máximo permitido.', // old name - errFileMaxSize 'errUploadMime' : 'Tipo de arquivo não permitido.', 'errUploadTransfer' : '"$1" erro na transferência.', 'errUploadTemp' : 'Incapaz de criar um arquivo temporário para upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objeto "$1" já existe neste local e não pode ser substituído por um objeto com outro tipo.', // new 'errReplace' : 'Incapaz de substituir "$1".', 'errSave' : 'Incapaz de salvar "$1".', 'errCopy' : 'Incapaz de copiar "$1".', 'errMove' : 'Incapaz de mover "$1".', 'errCopyInItself' : 'Incapaz de copiar "$1" nele mesmo.', 'errRm' : 'Incapaz de remover "$1".', 'errTrash' : 'Incapaz de deletar.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Incapaz de remover o(s) arquivo(s) fonte.', 'errExtract' : 'Incapaz de extrair os arquivos de "$1".', 'errArchive' : 'Incapaz de criar o arquivo.', 'errArcType' : 'Tipo de arquivo não suportado.', 'errNoArchive' : 'Arquivo inválido ou é de um tipo não suportado.', 'errCmdNoSupport' : 'Backend não suporta este comando.', 'errReplByChild' : 'A pasta “$1” não pode ser substituída por um item que contém.', 'errArcSymlinks' : 'Por razões de segurança, negada a permissão para descompactar arquivos que contenham links ou arquivos com nomes não permitidos.', // edited 24.06.2012 'errArcMaxSize' : 'Arquivo excede o tamanho máximo permitido.', 'errResize' : 'Incapaz de redimensionar "$1".', 'errResizeDegree' : 'Grau de rotação inválido.', // added 7.3.2013 'errResizeRotate' : 'Incapaz de rotacionar a imagem.', // added 7.3.2013 'errResizeSize' : 'Tamanho inválido de imagem.', // added 7.3.2013 'errResizeNoChange' : 'Tamanho da imagem não alterado.', // added 7.3.2013 'errUsupportType' : 'Tipo de arquivo não suportado.', 'errNotUTF8Content' : 'Arquivo "$1" não está em UTF-8 e não pode ser editado.', // added 9.11.2011 'errNetMount' : 'Incapaz de montar montagem "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocolo não suportado.', // added 17.04.2012 'errNetMountFailed' : 'Montagem falhou.', // added 17.04.2012 'errNetMountHostReq' : 'Servidor requerido.', // added 18.04.2012 'errSessionExpires' : 'Sua sessão expirou por inatividade.', 'errCreatingTempDir' : 'Não foi possível criar um diretório temporário: "$1"', 'errFtpDownloadFile' : 'Não foi possível fazer o download do arquivo do FTP: "$1"', 'errFtpUploadFile' : 'Não foi possível fazer o upload do arquivo para o FTP: "$1"', 'errFtpMkdir' : 'Não foi possível criar um diretório remoto no FTP: "$1"', 'errArchiveExec' : 'Erro ao arquivar os arquivos: "$1"', 'errExtractExec' : 'Erro na extração dos arquivos: "$1"', 'errNetUnMount' : 'Incapaz de desmontar', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Não conversivel para UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Tente utilizar o Google Chrome, se você deseja enviar uma pasta.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Tempo limite atingido para a busca "$1". O resultado da pesquisa é parcial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-autorização é necessária.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'O número máximo de itens selecionáveis ​​é $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Não foi possível restaurar a partir do lixo. Não é possível identificar o destino da restauração.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor não encontrado para este tipo de arquivo.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Ocorreu um erro no lado do servidor.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Não foi possível esvaziar a pasta "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existem mais $1 erros.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Você pode criar até $1 pastas de uma vez.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Criar arquivo', 'cmdback' : 'Voltar', 'cmdcopy' : 'Copiar', 'cmdcut' : 'Cortar', 'cmddownload' : 'Baixar', 'cmdduplicate' : 'Duplicar', 'cmdedit' : 'Editar arquivo', 'cmdextract' : 'Extrair arquivo de ficheiros', 'cmdforward' : 'Avançar', 'cmdgetfile' : 'Selecionar arquivos', 'cmdhelp' : 'Sobre este software', 'cmdhome' : 'Home', 'cmdinfo' : 'Propriedades', 'cmdmkdir' : 'Nova pasta', 'cmdmkdirin' : 'Em uma nova pasta', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Novo arquivo', 'cmdopen' : 'Abrir', 'cmdpaste' : 'Colar', 'cmdquicklook' : 'Pré-vizualização', 'cmdreload' : 'Recarregar', 'cmdrename' : 'Renomear', 'cmdrm' : 'Deletar', 'cmdtrash' : 'Mover para a lixeira', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurar', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Achar arquivos', 'cmdup' : 'Ir para o diretório pai', 'cmdupload' : 'Fazer upload de arquivo', 'cmdview' : 'Vizualizar', 'cmdresize' : 'Redimencionar & Rotacionar', 'cmdsort' : 'Ordenar', 'cmdnetmount' : 'Montar unidade de rede', // added 18.04.2012 'cmdnetunmount': 'Desmontar', // from v2.1 added 30.04.2012 'cmdplaces' : 'Para locais', // added 28.12.2014 'cmdchmod' : 'Alterar permissão', // from v2.1 added 20.6.2015 'cmdopendir' : 'Abrir pasta', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Redefinir largura da coluna', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Tela cheia', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mover', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Esvaziar a pasta', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Desfazer', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refazer', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferências', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Selecionar tudo', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Selecionar nenhum', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverter seleção', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Abrir em nova janela', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ocultar (preferência)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fechar', 'btnSave' : 'Salvar', 'btnRm' : 'Remover', 'btnApply' : 'Aplicar', 'btnCancel' : 'Cancelar', 'btnNo' : 'Não', 'btnYes' : 'Sim', 'btnMount' : 'Montar', // added 18.04.2012 'btnApprove': 'Vá para $1 & aprove', // from v2.1 added 26.04.2012 'btnUnmount': 'Desmontar', // from v2.1 added 30.04.2012 'btnConv' : 'Converter', // from v2.1 added 08.04.2014 'btnCwd' : 'Aqui', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Todos', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nome do arquivo', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salvar & Fechar', // from v2.1 added 12.6.2015 'btnBackup' : 'Cópia de segurança', // fromv2.1 added 28.11.2015 'btnRename' : 'Renomear', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renomear (tudo)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Anterior ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Próximo ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Salvar como', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Abrir pasta', 'ntffile' : 'Abrir arquivo', 'ntfreload' : 'Recarregar conteudo da pasta', 'ntfmkdir' : 'Criar diretório', 'ntfmkfile' : 'Criar arquivos', 'ntfrm' : 'Deletar arquivos', 'ntfcopy' : 'Copiar arquivos', 'ntfmove' : 'Mover arquivos', 'ntfprepare' : 'Preparando para copiar arquivos', 'ntfrename' : 'Renomear arquivos', 'ntfupload' : 'Subindo os arquivos', 'ntfdownload' : 'Baixando os arquivos', 'ntfsave' : 'Salvando os arquivos', 'ntfarchive' : 'Criando os arquivos', 'ntfextract' : 'Extraindo arquivos compactados', 'ntfsearch' : 'Procurando arquivos', 'ntfresize' : 'Redimensionando imagens', 'ntfsmth' : 'Fazendo alguma coisa', 'ntfloadimg' : 'Carregando Imagem', 'ntfnetmount' : 'Montando unidade de rede', // added 18.04.2012 'ntfnetunmount': 'Desmontando unidade de rede', // from v2.1 added 30.04.2012 'ntfdim' : 'Adquirindo dimensão da imagem', // added 20.05.2013 'ntfreaddir' : 'Lendo informações da pasta', // from v2.1 added 01.07.2013 'ntfurl' : 'Recebendo URL do link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Alterando permissões do arquivo', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verificando o nome do arquivo de upload', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Criando um arquivo para download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obtendo informações do caminho', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processando o arquivo carregado', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Movendo para a lixeira', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurando da lixeira', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Verificando a pasta de destino', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Desfazendo a operação anterior', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refazendo o desfazer anterior', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Verificando conteúdos', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Lixo', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Desconhecido', 'Today' : 'Hoje', 'Yesterday' : 'Ontem', 'msJan' : 'janeiro', 'msFeb' : 'Fev', 'msMar' : 'março', 'msApr' : 'Abr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'julho', 'msAug' : 'Ago', 'msSep' : 'Set', 'msOct' : 'Out', 'msNov' : 'novembro', 'msDec' : 'Dez', 'January' : 'Janeiro', 'February' : 'Fevereiro', 'March' : 'Março', 'April' : 'Abril', 'May' : 'Maio', 'June' : 'Junho', 'July' : 'Julho', 'August' : 'Agosto', 'September' : 'Setembro', 'October' : 'Outubro', 'November' : 'Novembro', 'December' : 'Dezembro', 'Sunday' : 'Domingo', 'Monday' : 'Segunda-feira', 'Tuesday' : 'Terça-feira', 'Wednesday' : 'Quarta-feira', 'Thursday' : 'Quinta-feira', 'Friday' : 'Sexta-feira', 'Saturday' : 'Sábado', 'Sun' : 'Dom', 'Mon' : 'Seg', 'Tue' : 'Ter', 'Wed' : 'Qua', 'Thu' : 'Qui', 'Fri' : 'Sex', 'Sat' : 'Sáb', /******************************** sort variants ********************************/ 'sortname' : 'por nome', 'sortkind' : 'por tipo', 'sortsize' : 'por tam.', 'sortdate' : 'por data', 'sortFoldersFirst' : 'Pastas primeiro', 'sortperm' : 'Com permissão', // from v2.1.13 added 13.06.2016 'sortmode' : 'Por modo', // from v2.1.13 added 13.06.2016 'sortowner' : 'Por proprietário', // from v2.1.13 added 13.06.2016 'sortgroup' : 'Por grupo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Vizualizar em árvore', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NovoArquivo.txt', // added 10.11.2015 'untitled folder' : 'NovaPasta', // added 10.11.2015 'Archive' : 'NovoArquivo', // from v2.1 added 10.11.2015 'untitled file' : 'NovoArquivo.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Arquivo', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmação requerida', 'confirmRm' : 'Você tem certeza que deseja remover os arquivos?
Isto não pode ser desfeito!', 'confirmRepl' : 'Substituir arquivo velho com este novo?', 'confirmRest' : 'Substituir o item existente pelo item na lixeira?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Não está em UTF-8
Converter para UTF-8?
Conteúdo se torna UTF-8 após salvar as conversões.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Não foi possível detectar a codificação de caracteres deste arquivo. Ele precisa ser convertido temporariamente em UTF-8 para edição. Por favor, selecione a codificação de caracteres deste arquivo.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Isto foi modificado.
Você vai perder seu trabalho caso não salve as mudanças.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Tem certeza de que deseja mover itens para a lixeira?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Tem certeza de que deseja mover itens para "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Aplicar a todos', 'name' : 'Nome', 'size' : 'Tamanho', 'perms' : 'Permissões', 'modify' : 'Modificado', 'kind' : 'Tipo', 'read' : 'Ler', 'write' : 'Escrever', 'noaccess' : 'Inacessível', 'and' : 'e', 'unknown' : 'Desconhecido', 'selectall' : 'Selecionar todos arquivos', 'selectfiles' : 'Selecionar arquivo(s)', 'selectffile' : 'Selecionar primeiro arquivo', 'selectlfile' : 'Slecionar último arquivo', 'viewlist' : 'Exibir como lista', 'viewicons' : 'Exibir como ícones', 'viewSmall' : 'Ícones pequenos', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Ícones médios', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Ícones grandes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ícones gigantes', // from v2.1.39 added 22.5.2018 'places' : 'Lugares', 'calc' : 'Calcular', 'path' : 'Caminho', 'aliasfor' : 'Alias para', 'locked' : 'Bloqueado', 'dim' : 'Dimesões', 'files' : 'Arquivos', 'folders' : 'Pastas', 'items' : 'Itens', 'yes' : 'sim', 'no' : 'não', 'link' : 'Link', 'searcresult' : 'Resultados da pesquisa', 'selected' : 'itens selecionados', 'about' : 'Sobre', 'shortcuts' : 'Atalhos', 'help' : 'Ajuda', 'webfm' : 'Gerenciador de arquivos web', 'ver' : 'Versão', 'protocolver' : 'Versão do protocolo', 'homepage' : 'Home do projeto', 'docs' : 'Documentação', 'github' : 'Fork us on Github', 'twitter' : 'Siga-nos no twitter', 'facebook' : 'Junte-se a nós no Facebook', 'team' : 'Time', 'chiefdev' : 'Desenvolvedor chefe', 'developer' : 'Desenvolvedor', 'contributor' : 'Contribuinte', 'maintainer' : 'Mantenedor', 'translator' : 'Tradutor', 'icons' : 'Ícones', 'dontforget' : 'e não se esqueça de levar a sua toalha', 'shortcutsof' : 'Atalhos desabilitados', 'dropFiles' : 'Solte os arquivos aqui', 'or' : 'ou', 'selectForUpload' : 'Selecione arquivos para upload', 'moveFiles' : 'Mover arquivos', 'copyFiles' : 'Copiar arquivos', 'restoreFiles' : 'Restaurar itens', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remover de Lugares', 'aspectRatio' : 'Manter aspecto', 'scale' : 'Tamanho', 'width' : 'Largura', 'height' : 'Altura', 'resize' : 'Redimencionar', 'crop' : 'Cortar', 'rotate' : 'Rotacionar', 'rotate-cw' : 'Girar 90 graus CW', 'rotate-ccw' : 'Girar 90 graus CCW', 'degree' : '°', 'netMountDialogTitle' : 'Montar Unidade de rede', // added 18.04.2012 'protocol' : 'Protocolo', // added 18.04.2012 'host' : 'Servidor', // added 18.04.2012 'port' : 'Porta', // added 18.04.2012 'user' : 'Usuário', // added 18.04.2012 'pass' : 'Senha', // added 18.04.2012 'confirmUnmount' : 'Deseja desmontar $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Soltar ou colar arquivos do navegador', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Solte ou cole arquivos aqui', // from v2.1 added 07.04.2014 'encoding' : 'Codificação', // from v2.1 added 19.12.2014 'locale' : 'Local', // from v2.1 added 19.12.2014 'searchTarget' : 'Alvo: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Perquisar por input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Dono', // from v2.1 added 20.6.2015 'group' : 'Grupo', // from v2.1 added 20.6.2015 'other' : 'Outro', // from v2.1 added 20.6.2015 'execute' : 'Executar', // from v2.1 added 20.6.2015 'perm' : 'Permissão', // from v2.1 added 20.6.2015 'mode' : 'Modo', // from v2.1 added 20.6.2015 'emptyFolder' : 'Pasta vazia', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Pasta vazia\\A Arraste itens para os adicionar', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Pasta vazia\\A De um toque longo para adicionar itens', // from v2.1.6 added 30.12.2015 'quality' : 'Qualidade', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sincronização', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mover para cima', // from v2.1.6 added 18.1.2016 'getLink' : 'Obter link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Itens selecionados ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID da pasta', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permitir acesso offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Se autenticar novamente', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Carregando...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Abrir múltiplos arquivos', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Você está tentando abrir os arquivos $1. Tem certeza de que deseja abrir no navegador?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Os resultados da pesquisa estão vazios no destino da pesquisa.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Arquivo sendo editado.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Voce selecionou $1 itens.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Você tem $1 itens na área de transferência.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'A pesquisa incremental é apenas da visualização atual.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Restabelecer', // from v2.1.15 added 3.8.2016 'complete' : '$1 completo', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Virar página', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Raízes de volume', // from v2.1.16 added 16.9.2016 'reset' : 'Resetar', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Cor de fundo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Seletor de cores', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grade 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Ativado', // from v2.1.16 added 4.10.2016 'disabled' : 'Desativado', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Os resultados da pesquisa estão vazios na exibição atual.\\APressione [Enter] para expandir o alvo da pesquisa.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Os resultados da pesquisa da primeira letra estão vazios na exibição atual.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Texto do rótulo', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minutos restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reabrir com a codificação selecionada', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Salvar com a codificação selecionada', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Selecione a pasta', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Buscar primeira letra', // from v2.1.23 added 24.3.2017 'presets' : 'Predefinições', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'São muitos itens, portanto não podem ser jogados no lixo.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Esvaziar a pasta "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Não há itens em uma pasta "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferência', // from v2.1.26 added 28.6.2017 'language' : 'Língua', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicialize as configurações salvas neste navegador', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Barra de ferramentas', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caracteres restantes.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 linhas restantes.', // from v2.1.52 added 16.1.2020 'sum' : 'Somar', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Tamanho aproximado do arquivo', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focar no elemento do diálogo com o mouse por cima', // from v2.1.30 added 2.11.2017 'select' : 'Selecione', // from v2.1.30 added 23.11.2017 'selectAction' : 'Ação ao selecionar arquivo', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Abrir com o editor usado pela última vez', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverter seleção', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Tem certeza de que deseja renomear $1 itens selecionados como $2?
Isto não poderá ser desfeito!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renomear Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Número', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Adicionar prefixo', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Adicionar sufixo', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Alterar extensão', // from v2.1.31 added 8.12.2017 'columnPref' : 'Configurações de colunas (exibição em lista)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Todas as alterações serão refletidas imediatamente no arquivo.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Quaisquer alterações não serão refletidas até desmontar este volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'O(s) seguinte(s) volume(s) montado neste volume também desmontado. Você tem certeza que quer desmontá-lo(s)?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informações da seleção', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmos para mostrar o hash do arquivo', // from v2.1.33 added 10.3.2018 'infoItems' : 'Itens de informação (painel Informações de seleção)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Pressione novamente para sair.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra de ferramentas', // from v2.1.38 added 4.4.2018 'workspace' : 'Área de trabalho', // from v2.1.38 added 4.4.2018 'dialog' : 'Diálogo', // from v2.1.38 added 4.4.2018 'all' : 'Tudo', // from v2.1.38 added 4.4.2018 'iconSize' : 'Tamanho do ícone (Visualização de ícones)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Abra a janela maximizada do editor', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Como a conversão por API não está disponível no momento, faça a conversão no site.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Após a conversão, você deve fazer o upload com o URL do item ou um arquivo baixado para salvar o arquivo convertido.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converter no site $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrações', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Este elFinder possui os seguintes serviços externos integrados. Por favor, verifique os termos de uso, política de privacidade, etc. antes de usá-lo.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostrar itens ocultos', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ocultar itens ocultos', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Mostrar/Ocultar itens ocultos', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipos de arquivo para ativar com "Novo arquivo"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipo do arquivo de texto', // from v2.1.41 added 7.8.2018 'add' : 'Adicionar', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Padrão', // from v2.1.43 added 19.10.2018 'description' : 'Descrição', // from v2.1.43 added 19.10.2018 'website' : 'Site da internet', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licença', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Este item não pode ser salvo. Para evitar perder as edições, você precisa exportar para o seu PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Clique duas vezes no arquivo para selecioná-lo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Usar o modo de tela cheia', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconhecio', 'kindRoot' : 'Raiz do volume', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Pasta', 'kindSelects' : 'Seleções', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias inválido', // applications 'kindApp' : 'Aplicação', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Apresentação Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Aplicação Flash', 'kindPDF' : 'Formato de Documento Portátil (PDF)', 'kindTorrent' : 'Arquivo Bittorrent', 'kind7z' : 'Arquivo 7z', 'kindTAR' : 'Arquivo TAR', 'kindGZIP' : 'Arquivo GZIP', 'kindBZIP' : 'Arquivo BZIP', 'kindXZ' : 'Arquivo XZ', 'kindZIP' : 'Arquivo ZIP', 'kindRAR' : 'Arquivo RAR', 'kindJAR' : 'Arquivo JAR', 'kindTTF' : 'Tipo verdadeiro da fonte', 'kindOTF' : 'Abrir tipo de fonte', 'kindRPM' : 'Pacote RPM', // texts 'kindText' : 'Arquivo de texto', 'kindTextPlain' : 'Texto simples', 'kindPHP' : 'PHP', 'kindCSS' : 'Planilha em estilo cascata (CSS)', 'kindHTML' : 'Documento HTML', 'kindJS' : 'Javascript', 'kindRTF' : 'Formato Rich Text', 'kindC' : 'C', 'kindCHeader' : 'C cabeçalho', 'kindCPP' : 'C++', 'kindCPPHeader' : 'C++ cabeçalho', 'kindShell' : 'script de shell Unix', 'kindPython' : 'Python', 'kindJava' : 'Java', 'kindRuby' : 'Ruby', 'kindPerl' : 'Perl', 'kindSQL' : 'SQL', 'kindXML' : 'Documento XML', 'kindAWK' : 'AWK', 'kindCSV' : 'Valores separados por vírgula', 'kindDOCBOOK' : 'Documento Docbook XML', 'kindMarkdown' : 'Texto Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagem', 'kindBMP' : 'Imagem BMP', 'kindJPEG' : 'Imagem JPEG', 'kindGIF' : 'Imagem GIF', 'kindPNG' : 'Imagem PNG', 'kindTIFF' : 'Imagem TIFF', 'kindTGA' : 'Imagem TGA', 'kindPSD' : 'Imagem Adobe Photoshop', 'kindXBITMAP' : 'Imagem X bitmap', 'kindPXM' : 'Imagem Pixelmator', // media 'kindAudio' : 'Arquivo de audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Lista de reprodução MP3 ', 'kindVideo' : 'Arquivo de video', 'kindVideoDV' : 'DV filme', 'kindVideoMPEG' : 'Video MPEG', 'kindVideoMPEG4' : 'Video MPEG-4', 'kindVideoAVI' : 'Video AVI', 'kindVideoMOV' : 'Filme rápido', 'kindVideoWM' : 'Video Windows Media', 'kindVideoFlash' : 'Video Flash', 'kindVideoMKV' : 'MKV', 'kindVideoOGG' : 'Video Ogg' } }; })); PK ZVF<js/i18n/elfinder.ja.jsnuW+A/** * Japanese translation * @author Tomoaki Yoshida * @author Naoki Sawada * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ja = { translator : 'Tomoaki Yoshida <info@yoshida-studio.jp>, Naoki Sawada <hypweb+elfinder@gmail.com>', language : 'Japanese', direction : 'ltr', dateFormat : 'Y/m/d h:i A', // will show like: 2022/03/02 01:09 PM fancyDateFormat : '$1 h:i A', // will show like: 今日 01:09 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 220302-130931 messages : { 'getShareText' : '共有', 'Editor ': 'コードエディタ', /********************************** errors **********************************/ 'error' : 'エラー', 'errUnknown' : '不明なエラーです。', 'errUnknownCmd' : '不明なコマンドです。', 'errJqui' : '無効な jQuery UI 設定です。Selectable, Draggable, Droppable コンポーネントを含める必要があります。', 'errNode' : 'elFinder は DOM Element が必要です。', 'errURL' : '無効な elFinder 設定です! URLを設定されていません。', 'errAccess' : 'アクセスが拒否されました。', 'errConnect' : 'バックエンドとの接続ができません。', 'errAbort' : '接続が中断されました。', 'errTimeout' : '接続がタイムアウトしました。', 'errNotFound' : 'バックエンドが見つかりません。', 'errResponse' : '無効なバックエンドレスポンスです。', 'errConf' : 'バックエンドの設定が有効ではありません。', 'errJSON' : 'PHP JSON モジュールがインストールされていません。', 'errNoVolumes' : '読み込み可能なボリュームがありません。', 'errCmdParams' : 'コマンド "$1"のパラメーターが無効です。', 'errDataNotJSON' : 'JSONデータではありません。', 'errDataEmpty' : '空のデータです。', 'errCmdReq' : 'バックエンドリクエストはコマンド名が必要です。', 'errOpen' : '"$1" を開くことができません。', 'errNotFolder' : 'オブジェクトがフォルダではありません。', 'errNotFile' : 'オブジェクトがファイルではありません。', 'errRead' : '"$1" を読み込むことができません。', 'errWrite' : '"$1" に書き込むことができません。', 'errPerm' : '権限がありません。', 'errLocked' : '"$1" はロックされているので名前の変更、移動、削除ができません。', 'errExists' : '"$1" というアイテム名はすでに存在しています。', 'errInvName' : '無効なファイル名です。', 'errInvDirname' : '無効なフォルダ名です。', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'フォルダが見つかりません。', 'errFileNotFound' : 'ファイルが見つかりません。', 'errTrgFolderNotFound' : 'ターゲットとするフォルダ "$1" が見つかりません。', 'errPopup' : 'ポップアップウィンドウが開けません。ファイルを開くにはブラウザの設定を変更してください。', 'errMkdir' : 'フォルダ "$1" を作成することができません。', 'errMkfile' : 'ファイル "$1" を作成することができません。', 'errRename' : '"$1" の名前を変更することができません。', 'errCopyFrom' : '"$1" からのファイルコピーは許可されていません。', 'errCopyTo' : '"$1" へのファイルコピーは許可されていません。', 'errMkOutLink' : 'ボリュームルート外へのリンクを作成することはできません。', // from v2.1 added 03.10.2015 'errUpload' : 'アップロードエラー', // old name - errUploadCommon 'errUploadFile' : '"$1" をアップロードすることができません。', // old name - errUpload 'errUploadNoFiles' : 'アップロードされたファイルはありません。', 'errUploadTotalSize' : 'データが許容サイズを超えています。', // old name - errMaxSize 'errUploadFileSize' : 'ファイルが許容サイズを超えています。', // old name - errFileMaxSize 'errUploadMime' : '許可されていないファイル形式です。', 'errUploadTransfer' : '"$1" 転送エラーです。', 'errUploadTemp' : 'アップロード用一時ファイルを作成できません。', // from v2.1 added 26.09.2015 'errNotReplace' : 'アイテム "$1" はすでにこの場所にあり、アイテムのタイプが違うので置き換えることはできません。', // new 'errReplace' : '"$1" を置き換えることができません。', 'errSave' : '"$1" を保存することができません。', 'errCopy' : '"$1" をコピーすることができません。', 'errMove' : '"$1" を移動することができません。', 'errCopyInItself' : '"$1" をそれ自身の中にコピーすることはできません。', 'errRm' : '"$1" を削除することができません。', 'errTrash' : 'ごみ箱に入れることができません。', // from v2.1.24 added 30.4.2017 'errRmSrc' : '元ファイルを削除することができません。', 'errExtract' : '"$1" を解凍することができません。', 'errArchive' : 'アーカイブを作成することができません。', 'errArcType' : 'サポート外のアーカイブ形式です。', 'errNoArchive' : 'アーカイブでないかサポートされていないアーカイブ形式です。', 'errCmdNoSupport' : 'サポートされていないコマンドです。', 'errReplByChild' : 'フォルダ "$1" に含まれてるアイテムを置き換えることはできません。', 'errArcSymlinks' : 'シンボリックリンクまたは許容されないファイル名を含むアーカイブはセキュリティ上、解凍できません。', // edited 24.06.2012 'errArcMaxSize' : 'アーカイブが許容されたサイズを超えています。', 'errResize' : '"$1" のリサイズまたは回転ができません。', 'errResizeDegree' : 'イメージの回転角度が不正です。', // added 7.3.2013 'errResizeRotate' : 'イメージを回転できません。', // added 7.3.2013 'errResizeSize' : '指定されたイメージサイズが不正です。', // added 7.3.2013 'errResizeNoChange' : 'イメージサイズなどの変更点がありません。', // added 7.3.2013 'errUsupportType' : 'このファイルタイプはサポートされていません。', 'errNotUTF8Content' : 'ファイル "$1" には UTF-8 以外の文字が含まれているので編集できません。', // added 9.11.2011 'errNetMount' : '"$1" をマウントできません。', // added 17.04.2012 'errNetMountNoDriver' : 'サポートされていないプロトコルです。', // added 17.04.2012 'errNetMountFailed' : 'マウントに失敗しました。', // added 17.04.2012 'errNetMountHostReq' : 'ホスト名は必須です。', // added 18.04.2012 'errSessionExpires' : 'アクションがなかったため、セッションが期限切れになりました。', 'errCreatingTempDir' : '一時ディレクトリを作成できません:"$1"', 'errFtpDownloadFile' : 'FTP からファイルをダウンロードできません:"$1"', 'errFtpUploadFile' : 'FTP へファイルをアップロードできません:"$1"', 'errFtpMkdir' : 'FTP にリモートディレクトリを作成できません:"$1"', 'errArchiveExec' : 'ファイルのアーカイブ中にエラーが発生しました:"$1"', 'errExtractExec' : 'ファイルの抽出中にエラーが発生しました:"$1"', 'errNetUnMount' : 'アンマウントできません。', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8 に変換できませんでした。', // from v2.1 added 08.04.2014 'errFolderUpload' : 'フォルダをアップロードしたいのであれば、モダンブラウザを試してください。', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" を検索中にタイムアウトしました。検索結果は部分的です。', // from v2.1 added 12.1.2016 'errReauthRequire' : '再認可が必要です。', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '選択可能な最大アイテム数は $1 個です。', // from v2.1.17 added 17.10.2016 'errRestore' : '宛先の特定ができないため、ごみ箱から戻せません。', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'このファイルタイプのエディターがありません。', // from v2.1.25 added 23.5.2017 'errServerError' : 'サーバー側でエラーが発生しました。', // from v2.1.25 added 16.6.2017 'errEmpty' : 'フォルダ"$1"を空にすることができません。', // from v2.1.25 added 22.6.2017 'moreErrors' : 'さらに $1 件のエラーがあります。', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : '一度に作成できるフォルダーは $1 個までです。', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'アーカイブ作成', 'cmdback' : '戻る', 'cmdcopy' : 'コピー', 'cmdcut' : 'カット', 'cmddownload' : 'ダウンロード', 'cmdduplicate' : '複製', 'cmdedit' : 'ファイル編集', 'cmdextract' : 'アーカイブを解凍', 'cmdforward' : '進む', 'cmdgetfile' : 'ファイル選択', 'cmdhelp' : 'このソフトウェアについて', 'cmdhome' : 'ルート', 'cmdinfo' : '情報', 'cmdmkdir' : '新規フォルダ', 'cmdmkdirin' : '新規フォルダへ', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '新規ファイル', 'cmdopen' : '開く', 'cmdpaste' : 'ペースト', 'cmdquicklook' : 'プレビュー', 'cmdreload' : 'リロード', 'cmdrename' : 'リネーム', 'cmdrm' : '削除', 'cmdtrash' : 'ごみ箱へ', //from v2.1.24 added 29.4.2017 'cmdrestore' : '復元', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ファイルを探す', 'cmdup' : '親フォルダへ移動', 'cmdupload' : 'ファイルアップロード', 'cmdview' : 'ビュー', 'cmdresize' : 'リサイズと回転', 'cmdsort' : 'ソート', 'cmdnetmount' : 'ネットワークボリュームをマウント', // added 18.04.2012 'cmdnetunmount': 'アンマウント', // from v2.1 added 30.04.2012 'cmdplaces' : 'よく使う項目へ', // added 28.12.2014 'cmdchmod' : '属性変更', // from v2.1 added 20.6.2015 'cmdopendir' : 'フォルダを開く', // from v2.1 added 13.1.2016 'cmdcolwidth' : '列幅リセット', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'フルスクリーン', // from v2.1.15 added 03.08.2016 'cmdmove' : '移動', // from v2.1.15 added 21.08.2016 'cmdempty' : 'フォルダを空に', // from v2.1.25 added 22.06.2017 'cmdundo' : '元に戻す', // from v2.1.27 added 31.07.2017 'cmdredo' : 'やり直し', // from v2.1.27 added 31.07.2017 'cmdpreference': '個人設定', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'すべて選択', // from v2.1.28 added 15.08.2017 'cmdselectnone': '選択解除', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '選択を反転', // from v2.1.28 added 15.08.2017 'cmdopennew' : '新しいウィンドウで開く', // from v2.1.38 added 3.4.2018 'cmdhide' : '非表示 (個人設定)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '閉じる', 'btnSave' : '保存', 'btnRm' : '削除', 'btnApply' : '適用', 'btnCancel' : 'キャンセル', 'btnNo' : 'いいえ', 'btnYes' : 'はい', 'btnMount' : 'マウント', // added 18.04.2012 'btnApprove': '$1へ行き認可する', // from v2.1 added 26.04.2012 'btnUnmount': 'アンマウント', // from v2.1 added 30.04.2012 'btnConv' : '変換', // from v2.1 added 08.04.2014 'btnCwd' : 'この場所', // from v2.1 added 22.5.2015 'btnVolume' : 'ボリューム', // from v2.1 added 22.5.2015 'btnAll' : '全て', // from v2.1 added 22.5.2015 'btnMime' : 'MIMEタイプ', // from v2.1 added 22.5.2015 'btnFileName':'ファイル名', // from v2.1 added 22.5.2015 'btnSaveClose': '保存して閉じる', // from v2.1 added 12.6.2015 'btnBackup' : 'バックアップ', // fromv2.1 added 28.11.2015 'btnRename' : 'リネーム', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'リネーム(全て)', // from v2.1.24 added 6.4.2017 'btnPrevious' : '前へ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '次へ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '別名保存', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'フォルダを開いています', 'ntffile' : 'ファイルを開いています', 'ntfreload' : 'フォルダを再読込しています', 'ntfmkdir' : 'フォルダを作成しています', 'ntfmkfile' : 'ファイルを作成しています', 'ntfrm' : 'アイテムを削除しています', 'ntfcopy' : 'アイテムをコピーしています', 'ntfmove' : 'アイテムを移動しています', 'ntfprepare' : '既存アイテムを確認しています', 'ntfrename' : 'ファイル名を変更しています', 'ntfupload' : 'ファイルをアップロードしています', 'ntfdownload' : 'ファイルをダウンロードしています', 'ntfsave' : 'ファイルを保存しています', 'ntfarchive' : 'アーカイブ作成しています', 'ntfextract' : 'アーカイブを解凍しています', 'ntfsearch' : 'ファイル検索中', 'ntfresize' : 'リサイズしています', 'ntfsmth' : '処理をしています', 'ntfloadimg' : 'イメージを読み込んでいます', 'ntfnetmount' : 'ネットボリュームをマウント中', // added 18.04.2012 'ntfnetunmount': 'ネットボリュームをアンマウント中', // from v2.1 added 30.04.2012 'ntfdim' : '画像サイズを取得しています', // added 20.05.2013 'ntfreaddir' : 'フォルダ情報を読み取っています', // from v2.1 added 01.07.2013 'ntfurl' : 'リンクURLを取得しています', // from v2.1 added 11.03.2014 'ntfchmod' : 'ファイル属性を変更しています', // from v2.1 added 20.6.2015 'ntfpreupload': 'アップロードファイル名を検証中', // from v2.1 added 31.11.2015 'ntfzipdl' : 'ダウンロード用ファイルを作成中', // from v2.1.7 added 23.1.2016 'ntfparents' : 'パス情報を取得しています', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'アップロード済みファイルを処理中', // from v2.1.17 added 2.11.2016 'ntftrash' : 'ごみ箱に入れています', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'ごみ箱から元に戻しています', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '宛先フォルダを確認しています', // from v2.1.24 added 3.5.2017 'ntfundo' : '前の操作を取り消して元に戻しています', // from v2.1.27 added 31.07.2017 'ntfredo' : '元に戻した操作をやり直しています', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'コンテンツをチェックしています', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'ごみ箱', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '不明', 'Today' : '今日', 'Yesterday' : '昨日', 'msJan' : '1月', 'msFeb' : '2月', 'msMar' : '3月', 'msApr' : '4月', 'msMay' : '5月', 'msJun' : '6月', 'msJul' : '7月', 'msAug' : '8月', 'msSep' : '9月', 'msOct' : '10月', 'msNov' : '11月', 'msDec' : '12月', 'January' : '1月', 'February' : '2月', 'March' : '3月', 'April' : '4月', 'May' : '5月', 'June' : '6月', 'July' : '7月', 'August' : '8月', 'September' : '9月', 'October' : '10月', 'November' : '11月', 'December' : '12月', 'Sunday' : '日曜日', 'Monday' : '月曜日', 'Tuesday' : '火曜日', 'Wednesday' : '水曜日', 'Thursday' : '木曜日', 'Friday' : '金曜日', 'Saturday' : '土曜日', 'Sun' : '(日)', 'Mon' : '(月)', 'Tue' : '(火)', 'Wed' : '(水)', 'Thu' : '(木)', 'Fri' : '(金)', 'Sat' : '(土)', /******************************** sort variants ********************************/ 'sortname' : '名前順', 'sortkind' : '種類順', 'sortsize' : 'サイズ順', 'sortdate' : '日付順', 'sortFoldersFirst' : 'フォルダ優先', 'sortperm' : '権限順', // from v2.1.13 added 13.06.2016 'sortmode' : '属性順', // from v2.1.13 added 13.06.2016 'sortowner' : 'オーナー順', // from v2.1.13 added 13.06.2016 'sortgroup' : 'グループ順', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'ツリービューも', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '新規ファイル.txt', // added 10.11.2015 'untitled folder' : '新規フォルダ', // added 10.11.2015 'Archive' : '新規アーカイブ', // from v2.1 added 10.11.2015 'untitled file' : '新規ファイル.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ファイル', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '処理を実行しますか?', 'confirmRm' : 'アイテムを完全に削除してもよろしいですか?
この操作は取り消しできません!', 'confirmRepl' : '古いファイルを新しいファイルで上書きしますか? (フォルダが含まれている場合は統合されます。置き換える場合は「バックアップ」選択してください。)', 'confirmRest' : '既存のアイテムをごみ箱のアイテムで上書きしますか?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 以外の文字が含まれています。
UTF-8 に変換しますか?
変換後の保存でコンテンツは UTF-8 になります。', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'このファイルの文字エンコーディングを判別できませんでした。編集するには一時的に UTF-8 に変換する必要があります。
文字エンコーディングを指定してください。', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '変更されています。
保存せずに閉じると編集内容が失われます。', // from v2.1 added 15.7.2015 'confirmTrash' : 'アイテムをごみ箱に移動してもよろしいですか?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'アイテムを"$1"に移動してもよろしいですか?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全てに適用します', 'name' : '名前', 'size' : 'サイズ', 'perms' : '権限', 'modify' : '更新', 'kind' : '種類', 'read' : '読み取り', 'write' : '書き込み', 'noaccess' : 'アクセス禁止', 'and' : ',', 'unknown' : '不明', 'selectall' : 'すべてのアイテムを選択', 'selectfiles' : 'アイテム選択', 'selectffile' : '最初のアイテムを選択', 'selectlfile' : '最後のアイテムを選択', 'viewlist' : 'リスト形式で表示', 'viewicons' : 'アイコン形式で表示', 'viewSmall' : '小アイコン', // from v2.1.39 added 22.5.2018 'viewMedium' : '中アイコン', // from v2.1.39 added 22.5.2018 'viewLarge' : '大アイコン', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '特大アイコン', // from v2.1.39 added 22.5.2018 'places' : 'よく使う項目', 'calc' : '計算中', 'path' : 'パス', 'aliasfor' : 'エイリアス', 'locked' : 'ロック', 'dim' : '画素数', 'files' : 'ファイル', 'folders' : 'フォルダ', 'items' : 'アイテム', 'yes' : 'はい', 'no' : 'いいえ', 'link' : 'リンク', 'searcresult' : '検索結果', 'selected' : '選択されたアイテム', 'about' : '概要', 'shortcuts' : 'ショートカット', 'help' : 'ヘルプ', 'webfm' : 'ウェブファイルマネージャー', 'ver' : 'バージョン', 'protocolver' : 'プロトコルバージョン', 'homepage' : 'プロジェクトホーム', 'docs' : 'ドキュメンテーション', 'github' : 'Github でフォーク', 'twitter' : 'Twitter でフォロー', 'facebook' : 'Facebookグループ に参加', 'team' : 'チーム', 'chiefdev' : 'チーフデベロッパー', 'developer' : 'デベロッパー', 'contributor' : 'コントリビュータ', 'maintainer' : 'メインテナー', 'translator' : '翻訳者', 'icons' : 'アイコン', 'dontforget' : 'タオル忘れちゃだめよ~', 'shortcutsof' : 'ショートカットは利用できません', 'dropFiles' : 'ここにファイルをドロップ', 'or' : 'または', 'selectForUpload' : 'ファイルを選択', 'moveFiles' : 'アイテムを移動', 'copyFiles' : 'アイテムをコピー', 'restoreFiles' : 'アイテムを元に戻す', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'ここから削除', 'aspectRatio' : '縦横比維持', 'scale' : '表示縮尺', 'width' : '幅', 'height' : '高さ', 'resize' : 'リサイズ', 'crop' : '切り抜き', 'rotate' : '回転', 'rotate-cw' : '90度左回転', 'rotate-ccw' : '90度右回転', 'degree' : '度', 'netMountDialogTitle' : 'ネットワークボリュームのマウント', // added 18.04.2012 'protocol' : 'プロトコル', // added 18.04.2012 'host' : 'ホスト名', // added 18.04.2012 'port' : 'ポート', // added 18.04.2012 'user' : 'ユーザー名', // added 18.04.2012 'pass' : 'パスワード', // added 18.04.2012 'confirmUnmount' : '$1をアンマウントしますか?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'ブラウザからファイルをドロップまたは貼り付け', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'ここにファイルをドロップ または URLリスト, 画像(クリップボード) を貼り付け', // from v2.1 added 07.04.2014 'encoding' : 'エンコーディング', // from v2.1 added 19.12.2014 'locale' : 'ロケール', // from v2.1 added 19.12.2014 'searchTarget' : '検索範囲: $1', // from v2.1 added 22.5.2015 'searchMime' : '指定した MIME タイプで検索', // from v2.1 added 22.5.2015 'owner' : 'オーナー', // from v2.1 added 20.6.2015 'group' : 'グループ', // from v2.1 added 20.6.2015 'other' : 'その他', // from v2.1 added 20.6.2015 'execute' : '実行', // from v2.1 added 20.6.2015 'perm' : 'パーミッション', // from v2.1 added 20.6.2015 'mode' : '属性', // from v2.1 added 20.6.2015 'emptyFolder' : '空のフォルダ', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '空のフォルダ\\Aアイテムを追加するにはここへドロップ', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '空のフォルダ\\Aアイテムを追加するにはここをロングタップ', // from v2.1.6 added 30.12.2015 'quality' : '品質', // from v2.1.6 added 5.1.2016 'autoSync' : '自動更新', // from v2.1.6 added 10.1.2016 'moveUp' : '上へ移動', // from v2.1.6 added 18.1.2016 'getLink' : 'リンクURLを取得', // from v2.1.7 added 9.2.2016 'selectedItems' : '選択アイテム ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'フォルダID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'オフライン アクセスを可能にする', // from v2.1.10 added 3.25.2016 'reAuth' : '再認証する', // from v2.1.10 added 3.25.2016 'nowLoading' : '読み込んでいます...', // from v2.1.12 added 4.26.2016 'openMulti' : '複数ファイルオープン', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 個のファイルを開こうとしています。このままブラウザで開きますか?', // from v2.1.12 added 5.14.2016 'emptySearch' : '検索対象に該当するアイテムはありません。', // from v2.1.12 added 5.16.2016 'editingFile' : 'ファイルを編集中です。', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 個のアイテムを選択中です。', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 個のアイテムがクリップボードに入っています。', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '逐次検索対象は現在のビューのみです。', // from v2.1.13 added 6.30.2016 'reinstate' : '元に戻す', // from v2.1.15 added 3.8.2016 'complete' : '$1 完了', // from v2.1.15 added 21.8.2016 'contextmenu' : 'コンテキストメニュー', // from v2.1.15 added 9.9.2016 'pageTurning' : 'ページめくり', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'ボリュームルート', // from v2.1.16 added 16.9.2016 'reset' : 'リセット', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景色', // from v2.1.16 added 1.10.2016 'colorPicker' : 'カラーピッカー', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8pxグリッド', // from v2.1.16 added 4.10.2016 'enabled' : '有効', // from v2.1.16 added 4.10.2016 'disabled' : '無効', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '現在のビュー内に該当するアイテムはありません。\\A[Enter]キーで検索対象を拡げます。', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '現在のビュー内に指定された文字で始まるアイテムはありません。', // from v2.1.23 added 24.3.2017 'textLabel' : 'テキストラベル', // from v2.1.17 added 13.10.2016 'minsLeft' : '残り$1分', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '選択したエンコーディングで開き直す', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '選択したエンコーディングで保存', // from v2.1.19 added 2.12.2016 'selectFolder' : 'フォルダを選択', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '一文字目で検索', // from v2.1.23 added 24.3.2017 'presets' : 'プリセット', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'アイテム数が多すぎるのでごみ箱に入れられません。', // from v2.1.25 added 9.6.2017 'TextArea' : 'テキストエリア', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'フォルダ"$1"を空にします。', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'フォルダ"$1"にアイテムはありません。', // from v2.1.25 added 22.6.2017 'preference' : '個人設定', // from v2.1.26 added 28.6.2017 'language' : '言語', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'ブラウザに保存された設定を初期化する', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'ツールバー設定', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 残り $1 文字', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 残り $1 行', // from v2.1.52 added 16.1.2020 'sum' : '合計', // from v2.1.29 added 28.9.2017 'roughFileSize' : '大まかなファイルサイズ', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'マウスオーバーでダイアログの要素にフォーカスする', // from v2.1.30 added 2.11.2017 'select' : '選択', // from v2.1.30 added 23.11.2017 'selectAction' : 'ファイル選択時の動作', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '前回使用したエディターで開く', // from v2.1.30 added 23.11.2017 'selectinvert' : '選択アイテムを反転', // from v2.1.30 added 25.11.2017 'renameMultiple' : '選択した $1 個のアイテムを $2 のようにリネームしますか?
この操作は取り消しできません!', // from v2.1.31 added 4.12.2017 'batchRename' : '一括リネーム', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ 連番', // from v2.1.31 added 8.12.2017 'asPrefix' : '先頭に追加', // from v2.1.31 added 8.12.2017 'asSuffix' : '末尾に追加', // from v2.1.31 added 8.12.2017 'changeExtention' : '拡張子変更', // from v2.1.31 added 8.12.2017 'columnPref' : '列項目設定(リストビュー)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '全ての変更は、直ちにアーカイブに反映されます。', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'このボリュームをアンマウントするまで、変更は反映されません。', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'このボリュームにマウントされている以下のボリュームもアンマウントされます。アンマウントしますか?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '選択情報', // from v2.1.33 added 7.3.2018 'hashChecker' : 'ファイルハッシュを表示するアルゴリズム', // from v2.1.33 added 10.3.2018 'infoItems' : '情報項目 (選択情報パネル)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'もう一度押すと終了します。', // from v2.1.38 added 1.4.2018 'toolbar' : 'ツールバー', // from v2.1.38 added 4.4.2018 'workspace' : 'ワークスペース', // from v2.1.38 added 4.4.2018 'dialog' : 'ダイアログ', // from v2.1.38 added 4.4.2018 'all' : 'すべて', // from v2.1.38 added 4.4.2018 'iconSize' : 'アイコンサイズ (アイコンビュー)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'エディターウィンドウを最大化して開く', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '現在 API による変換は利用できないので、Web サイトで変換を行ってください。', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '変換後に変換されたファイルを保存するには、アイテムの URL またはダウンロードしたファイルをアップロードする必要があります。', //from v2.1.40 added 8.7.2018 'convertOn' : '$1 のサイト上で変換する', // from v2.1.40 added 10.7.2018 'integrations' : '統合', // from v2.1.40 added 11.7.2018 'integrationWith' : 'この elFinder は次の外部サービスが統合されています。それらの利用規約、プライバシーポリシーなどをご確認の上、ご利用ください。', // from v2.1.40 added 11.7.2018 'showHidden' : '非表示アイテムを表示', // from v2.1.41 added 24.7.2018 'hideHidden' : '非表示アイテムを隠す', // from v2.1.41 added 24.7.2018 'toggleHidden' : '非表示アイテムの表示/非表示', // from v2.1.41 added 24.7.2018 'makefileTypes' : '「新しいファイル」で有効にするファイルタイプ', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'テキストファイルのタイプ', // from v2.1.41 added 7.8.2018 'add' : '追加', // from v2.1.41 added 7.8.2018 'theme' : 'テーマ', // from v2.1.43 added 19.10.2018 'default' : 'デフォルト', // from v2.1.43 added 19.10.2018 'description' : '説明', // from v2.1.43 added 19.10.2018 'website' : 'ウェブサイト', // from v2.1.43 added 19.10.2018 'author' : '作者', // from v2.1.43 added 19.10.2018 'email' : 'Eメール', // from v2.1.43 added 19.10.2018 'license' : 'ライセンス', // from v2.1.43 added 19.10.2018 'exportToSave' : 'このアイテムは保存できません。 編集内容を失わないようにするには、PCにエクスポートする必要があります。', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'ファイルをダブルクリックして選択します。', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'フルスクリーンモードの利用', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '不明', 'kindRoot' : 'ボリュームルート', // from v2.1.16 added 16.10.2016 'kindFolder' : 'フォルダ', 'kindSelects' : '複数選択', // from v2.1.29 added 29.8.2017 'kindAlias' : '別名', 'kindAliasBroken' : '宛先不明の別名', // applications 'kindApp' : 'アプリケーション', 'kindPostscript' : 'Postscript ドキュメント', 'kindMsOffice' : 'Microsoft Office ドキュメント', 'kindMsWord' : 'Microsoft Word ドキュメント', 'kindMsExcel' : 'Microsoft Excel ドキュメント', 'kindMsPP' : 'Microsoft Powerpoint プレゼンテーション', 'kindOO' : 'Open Office ドキュメント', 'kindAppFlash' : 'Flash アプリケーション', 'kindPDF' : 'PDF', 'kindTorrent' : 'Bittorrent ファイル', 'kind7z' : '7z アーカイブ', 'kindTAR' : 'TAR アーカイブ', 'kindGZIP' : 'GZIP アーカイブ', 'kindBZIP' : 'BZIP アーカイブ', 'kindXZ' : 'XZ アーカイブ', 'kindZIP' : 'ZIP アーカイブ', 'kindRAR' : 'RAR アーカイブ', 'kindJAR' : 'Java JAR ファイル', 'kindTTF' : 'True Type フォント', 'kindOTF' : 'Open Type フォント', 'kindRPM' : 'RPM パッケージ', // texts 'kindText' : 'Text ドキュメント', 'kindTextPlain' : 'プレインテキスト', 'kindPHP' : 'PHP ソース', 'kindCSS' : 'スタイルシート', 'kindHTML' : 'HTML ドキュメント', 'kindJS' : 'Javascript ソース', 'kindRTF' : 'Rich Text フォーマット', 'kindC' : 'C ソース', 'kindCHeader' : 'C ヘッダーソース', 'kindCPP' : 'C++ ソース', 'kindCPPHeader' : 'C++ ヘッダーソース', 'kindShell' : 'Unix shell スクリプト', 'kindPython' : 'Python ソース', 'kindJava' : 'Java ソース', 'kindRuby' : 'Ruby ソース', 'kindPerl' : 'Perl スクリプト', 'kindSQL' : 'SQL ソース', 'kindXML' : 'XML ドキュメント', 'kindAWK' : 'AWK ソース', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML ドキュメント', 'kindMarkdown' : 'Markdown テキスト', // added 20.7.2015 // images 'kindImage' : 'イメージ', 'kindBMP' : 'BMP イメージ', 'kindJPEG' : 'JPEG イメージ', 'kindGIF' : 'GIF イメージ', 'kindPNG' : 'PNG イメージ', 'kindTIFF' : 'TIFF イメージ', 'kindTGA' : 'TGA イメージ', 'kindPSD' : 'Adobe Photoshop イメージ', 'kindXBITMAP' : 'X bitmap イメージ', 'kindPXM' : 'Pixelmator イメージ', // media 'kindAudio' : 'オーディオメディア', 'kindAudioMPEG' : 'MPEG オーディオ', 'kindAudioMPEG4' : 'MPEG-4 オーディオ', 'kindAudioMIDI' : 'MIDI オーディオ', 'kindAudioOGG' : 'Ogg Vorbis オーディオ', 'kindAudioWAV' : 'WAV オーディオ', 'AudioPlaylist' : 'MP3 プレイリスト', 'kindVideo' : 'ビデオメディア', 'kindVideoDV' : 'DV ムービー', 'kindVideoMPEG' : 'MPEG ムービー', 'kindVideoMPEG4' : 'MPEG-4 ムービー', 'kindVideoAVI' : 'AVI ムービー', 'kindVideoMOV' : 'Quick Time ムービー', 'kindVideoWM' : 'Windows Media ムービー', 'kindVideoFlash' : 'Flash ムービー', 'kindVideoMKV' : 'Matroska ムービー', 'kindVideoOGG' : 'Ogg ムービー' } }; })); PK Zjs/i18n/help/cs.html.jsnuW+A

Tipy na obsluhu

Obsluha na uživatelském rozhraní je podobná standardnímu správci souborů operačního systému. Drag and Drop však není možné používat s mobilními prohlížeči.

  • Kliknutím pravým tlačítkem nebo dlouhým klepnutím zobrazíte kontextové menu.
  • Přetáhněte do stromu složek nebo do aktuálního pracovního prostoru a přetáhněte / kopírujte položky.
  • Výběr položky v pracovním prostoru můžete rozšířit pomocí kláves Shift nebo Alt (Možnost).
  • Přemístěte soubory a složky do cílové složky nebo do pracovního prostoru.
  • Dialog předávání může přijímat data schránky nebo seznamy adres URL a přitáhnout a odejít z jiných prohlížečů nebo správců souborů.
  • Zatažením spusťte stisknutím klávesy Alt (Možnost) přetáhněte do vnějšího prohlížeče. Tato funkce se převezme pomocí prohlížeče Google Chrome.
PK ZFjs/i18n/help/ja.html.jsnuW+A

操作のヒント

UIの操作は、オペレーティングシステムの標準ファイルマネージャにほぼ準拠しています。ただし、モバイルブラウザではドラッグ&ドロップはできません。

  • 右クリックまたはロングタップでコンテキストメニューを表示します。
  • アイテムを移動/コピーするには、フォルダツリーまたはワークスペースにドラッグ&ドロップします。
  • ワークスペース内のアイテムの選択は、ShiftキーまたはAltキー(Optionキー)で選択範囲を拡張できます。
  • コピー先のフォルダまたはワークスペースにドラッグアンドドロップして、ファイルとフォルダをアップロードします。
  • アップロードダイアログでは、クリップボードのデータやURLリストのペースト/ドロップ、他のブラウザやファイルマネージャからのドラッグ&ドロップなどを受け入れることができます。
  • Altキー(Optionキー)を押しながらドラッグすると、ブラウザの外にドラッグできます。Google Chromeでダウンロード操作になります。
PK ZQ8Yjs/i18n/help/tr.html.jsnuW+A

İşlem İpuçları

Kullanıcı arayüzündeki işlem, işletim sisteminin standart dosya yöneticisine benzer. Ancak Sürükle ve Bırak özelliği mobil tarayıcılarda mümkün değildir.

  • Bağlam menüsünü göstermek için sağ tıklayın veya uzun dokunun.
  • Öğeleri taşımak/kopyalamak için klasör ağacına veya geçerli çalışma alanına sürükleyip bırakın.
  • Çalışma alanındaki öğe seçimi Shift veya Alt (Seçenek) tuşuyla genişletilebilir.
  • Dosya ve klasör yüklemek için hedef klasöre veya çalışma alanına sürükleyip bırakın.
  • Yükleme iletişim kutusu, pano verilerini veya URL listelerini yapıştırma/bırakma ve diğer tarayıcı veya dosya yöneticilerinden Sürükle ve Bırak vb.
  • Dış tarayıcıya sürüklemek için Alt (Seçenek) tuşuna basarak sürükleyin. Google Chrome ile indirme işlemi olacak.
PK Z:ȡjs/i18n/help/de.html.jsnuW+A

Anwendungstipps

Die Verwendung dieser Anwendung ist ähnlich der einer lokalen Dateiverwaltung.
Hinweis: auf mobilen Geräten ist das Ziehen und Ablegen (Drag and Drop) von Dateien nicht möglich.

  • Rechtsklick auf ein Element oder länger darauf zeigen öffnet das Kontextmenü
  • Um Elemente in andere Ordner oder aktuellen Arbeitsbereich zu kopieren oder verschieben diese Ziehen und Ablegen
  • Elementauswahl im Arbeitsbereich kann mit der Hochstell- oder ALT-TAste erweitert werden
  • Um lokale Ordner und Dateien in den Zielorder oder -arbeitsbereich zu kopieren diese Ziehen und Ablegen
  • Der Uploaddialog erlaubt Daten aus dem Clipboard (Zwischenspeicher), eine URL und Ziehen und Ablegen aus anderen Browsern und Dateiverwaltungsoberflächen
  • Ziehen mit gedrückter ALT-Taste erlaubt einen einfachen Dateidownload (nur Google Chrome)
  • Ordner und Dateien können ausgeblendet (versteckt) werden. Um sie wieder dauerhaft sichtbar zu machen, über die Menüleiste das "Icon Einstellungen" anklicken, dort unter Arbeitsplatz "Zeige versteckte Elemente" den Button "Neustart" anklicken
  • Das Kontextmenü (rechte Maustaste) zeigt je nach ausgewählten Element diverse Aktionen an
  • Je nach Art des Elements kann der Inhalt entweder mit dem integrierten Editor bearbeitet werden (z.B. .php, .txt, .ini usw.) oder wenn ein Bild dieses gedreht sowie die Größe geändert werden
  • Zum verbinden externer Speicherorte (FTP, Dropbox, Box, GoogleDrive, OneDrive) sowie Onlineeditor Zoho Office Editor oder Konvertierungsdienst Online-Convert müssen diese Anwendungen freigeschaltet als auch die entsprechenden API-Daten zum Abrufen je Dienst definiert sein.
    Sollten diese Dienste nicht verfügbar sein, müssen diese entweder selbständig dazu programmiert werden, oder einen Entwickler des Vertrauens damit beauftragen (z.B. OSWorX)
  • In den Einstellungen "Menü Icon Einstellungen" kann der gesamte Arbeitsbereich, die Menüleiste sowie etliche weitere Aktionen definiert werden
PK Z'O}""js/i18n/help/es.html.jsnuW+A

Consejos de operación

Operar en la Interfaz del Usuario es similar al administrador de archivos estandar del sistema operativo. Sin embargo, Arrastrar y soltar no es posible con los navegadores móviles.

  • Click derecho o un tap largo para mostrar el menú de contexto.
  • Arrastrar y soltar dentro del árbol de carpetas o el espacio de trabajo actual para mover/copiar elementos.
  • La selección de elementos en el espacio de trabajo puede ampliarse con la tecla Shift o Alt (Opción).
  • Arrastrar y soltar a la carpeta de destino o área de trabajo para cargar archivos y carpetas.
  • El cuadro de diálogo de carga puede aceptar pegar/soltar datos del portapapeles o listas de URL y arrastrar y soltar desde otro navegador o administrador de archivos, etc.
  • Iniciar a arrastrar presionando la tecla Alt (Opción) para arrastrar fuera del navegador. Se convertirá en una operación de descarga con Google Chrome.
PK Z9js/i18n/help/ko.html.jsnuW+A

사용 팁

UI 조작은 운영체제의 표준 파일 관리자를 사용하는 방법과 비슷합니다. 하지만 모바일 브라우저에서는 드래그앤드롭을 사용할 수 없습니다.

  • 오른쪽 클릭하거나 길게 누르면 컨텍스트 메뉴가 나타납니다.
  • 이동/복사하려면 폴더 트리 또는 원하는 폴더로 드래그앤드롭하십시오.
  • 작업공간에서 항목을 선택하려면 Shift또는 Alt(Option) 키를 사용하여 선택 영역을 넓힐 수 있습니다.
  • 업로드 대상 폴더 또는 작업 영역으로 파일및 폴더를 드래그앤드롭하여 업로드할 수 있습니다.
  • 다른 브라우저 또는 파일관리자등에서 드래그앤드롭하거나, 클립보드를 통해 데이터또는 URL을 복사/붙여넣어 업로드할 수 있습니다.
  • 크롬브라우저의 경우, Alt(Option) 키를 누른 상태에서 브라우저 밖으로 드래그앤드롭하면 다운로드가 가능합니다.
PK Z^Ę6js/i18n/help/sk.html.jsnuW+A

Tipy na obsluhu

Obsluha na používateľskom rozhraní je podobná štandardnému správcovi súborov operačného systému. Drag and Drop však nie je možné používať s mobilnými prehliadačmi.

  • Kliknutím pravým tlačidlom alebo dlhým klepnutím zobrazíte kontextové menu.
  • Presuňte myšou do stromu priečinkov alebo do aktuálneho pracovného priestoru a presuňte / kopírujte položky.
  • Výber položky v pracovnom priestore môžete rozšíriť pomocou klávesov Shift alebo Alt (Možnosť).
  • Premiestnite súbory a priečinky do cieľovej zložky alebo do pracovného priestoru.
  • Dialog odovzdávania môže prijímať dáta schránky alebo zoznamy adries URL a pritiahnuť a odísť z iných prehliadačov alebo správcov súborov.
  • Potiahnutím spustite stlačením klávesu Alt (Možnosť) pretiahnite do vonkajšieho prehliadača. Táto funkcia sa prevezme pomocou prehliadača Google Chrome.
PK Z]3`  js/i18n/help/en.html.jsnuW+A

Operation Tips

Operation on the UI is similar to operating system's standard file manager. However, Drag and Drop is not possible with mobile browsers.

  • Right click or long tap to show the context menu.
  • Drag and drop into the folder tree or the current workspace to move/copy items.
  • Item selection in the workspace can be extended selection with Shift or Alt (Option) key.
  • Drag and Drop to the destination folder or workspace to upload files and folders.
  • The upload dialog can accept paste/drop clipboard data or URL lists and Drag and Drop from other browser or file managers etc.
  • Drag start with pressing Alt(Option) key to drag out to outside browser. It will became download operation with Google Chrome.
PK ZGjs/i18n/help/pl.html.jsnuW+A

Wskazówki Obsługi

Działanie w interfejsie użytkownika jest podobne do standardowego menedżera plików systemu operacyjnego. Jednak Przeciąganie i Upuszczanie nie jest możliwe w przeglądarkach mobilnych.

  • Kliknij prawym przyciskiem myszy lub dłużej, aby wyświetlić menu kontekstowe.
  • Przeciągnij i upuść w drzewie folderów lub bieżącym obszarze roboczym, aby przenieść/kopiować elementy.
  • Wybór elementu w obszarze roboczym można rozszerzyć wybór z klawiszem Shift lub Alt(Opcja).
  • Przeciągnij i Upuść do folderu docelowego lub obszaru roboczego, aby przesłać pliki i foldery.
  • W oknie dialogowym przesyłania można zaakceptować wklejanie/upuszczanie danych schowka lub listy adresów URL, i Przeciągnij i Upuść z innych przeglądarek lub menedżerów plików, itp.
  • Rozpocznij Przeciąganie naciskając Alt (Opcja), aby przeciągnąć na zewnątrz przeglądarki. Stanie się operacją pobierania z Google Chrome.
PK ZK5EEjs/i18n/help/ru.html.jsnuW+A

Советы по работе

Работа с пользовательским интерфейсом похожа на стандартный файловый менеджер операционной системы. Однако перетаскивание в мобильных браузерах невозможно.

  • Щелкните правой кнопкой мыши или используйте «длинный тап», чтобы отобразить контекстное меню.
  • Перетащите в дерево папок или текущую рабочую область для перемещения / копирования элементов.
  • Выбор элемента в рабочей области может быть расширен с помощью клавиши Shift или Alt (Option).
  • Перетащите в папку назначения или рабочую область для загрузки файлов и папок.
  • В диалоговом окне загрузки можно использовать вставку данных или списков URL-адресов из буфера обмена, а также перетаскивать из других браузеров или файловых менеджеров и т.д.
  • Начните перетаскивание, нажав Alt (Option), чтобы перетащить за пределы браузера. Это запустить процесс скачивания в Google Chrome.
PK Z0{{js/i18n/help/.htaccessnuW+A Order allow,deny Deny from all PK Z]js/i18n/elfinder.it.jsnuW+A/** * Italiano translation * @author Alberto Tocci (alberto.tocci@gmail.com) * @author Claudio Nicora (coolsoft.ita@gmail.com) * @author Stefano Galeazzi * @author Thomas Camaran * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.it = { translator : 'Alberto Tocci (alberto.tocci@gmail.com), Claudio Nicora (coolsoft.ita@gmail.com), Stefano Galeazzi <stefano.galeazzi@probanet.it>, Thomas Camaran <camaran@gmail.com>', language : 'Italiano', direction : 'ltr', dateFormat : 'd/m/Y H:i', // will show like: 02/03/2022 12:52 fancyDateFormat : '$1 H:i', // will show like: Oggi 12:52 nonameDateFormat : 'ymd-His', // noname upload will show like: 220302-125236 messages : { 'getShareText' : 'Condividere', 'Editor ': 'Editor di codice', /********************************** errors **********************************/ 'error' : 'Errore', 'errUnknown' : 'Errore sconosciuto.', 'errUnknownCmd' : 'Comando sconosciuto.', 'errJqui' : 'Configurazione JQuery UI non valida. Devono essere inclusi i plugin Selectable, Draggable e Droppable.', 'errNode' : 'elFinder necessita dell\'elemento DOM per essere inizializzato.', 'errURL' : 'Configurazione non valida.Il parametro URL non è settato.', 'errAccess' : 'Accesso negato.', 'errConnect' : 'Impossibile collegarsi al backend.', 'errAbort' : 'Connessione annullata.', 'errTimeout' : 'Timeout di connessione.', 'errNotFound' : 'Backend non trovato.', 'errResponse' : 'Risposta non valida dal backend.', 'errConf' : 'Configurazione backend non valida.', 'errJSON' : 'Modulo PHP JSON non installato.', 'errNoVolumes' : 'Non è stato possibile leggere i volumi.', 'errCmdParams' : 'Parametri non validi per il comando "$1".', 'errDataNotJSON' : 'I dati non sono nel formato JSON.', 'errDataEmpty' : 'Stringa vuota.', 'errCmdReq' : 'La richiesta al backend richiede il nome del comando.', 'errOpen' : 'Impossibile aprire "$1".', 'errNotFolder' : 'L\'oggetto non è una cartella..', 'errNotFile' : 'L\'oggetto non è un file.', 'errRead' : 'Impossibile leggere "$1".', 'errWrite' : 'Non è possibile scrivere in "$1".', 'errPerm' : 'Permesso negato.', 'errLocked' : '"$1" è bloccato e non può essere rinominato, spostato o eliminato.', 'errExists' : 'Il file "$1" è già esistente.', 'errInvName' : 'Nome file non valido.', 'errInvDirname' : 'Nome cartella non valido.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Cartella non trovata.', 'errFileNotFound' : 'File non trovato.', 'errTrgFolderNotFound' : 'La cartella di destinazione"$1" non è stata trovata.', 'errPopup' : 'Il tuo Browser non consente di aprire finestre di pop-up. Per aprire il file abilita questa opzione nelle impostazioni del tuo Browser.', 'errMkdir' : 'Impossibile creare la cartella "$1".', 'errMkfile' : 'Impossibile creare il file "$1".', 'errRename' : 'Impossibile rinominare "$1".', 'errCopyFrom' : 'Non è possibile copiare file da "$1".', 'errCopyTo' : 'Non è possibile copiare file in "$1".', 'errMkOutLink' : 'Impossibile creare un link all\'esterno della radice del volume.', // from v2.1 added 03.10.2015 'errUpload' : 'Errore di Caricamento.', // old name - errUploadCommon 'errUploadFile' : 'Impossibile Caricare "$1".', // old name - errUpload 'errUploadNoFiles' : 'Non sono stati specificati file da caricare.', 'errUploadTotalSize' : 'La dimensione totale dei file supera il limite massimo consentito.', // old name - errMaxSize 'errUploadFileSize' : 'Le dimensioni del file superano il massimo consentito.', // old name - errFileMaxSize 'errUploadMime' : 'FileType non consentito.', 'errUploadTransfer' : 'Trasferimento errato del file "$1".', 'errUploadTemp' : 'Impossibile creare il file temporaneo per l\'upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'oggetto "$1" esiste già in questa cartella e non può essere sostituito con un oggetto di un tipo differente.', // new 'errReplace' : 'Impossibile sostituire "$1".', 'errSave' : 'Impossibile salvare "$1".', 'errCopy' : 'Impossibile copiare "$1".', 'errMove' : 'Impossibile spostare "$1".', 'errCopyInItself' : 'Sorgente e destinazione risultato essere uguali.', 'errRm' : 'Impossibile rimuovere "$1".', 'errTrash' : 'Impossibile cestinare.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossibile eliminare i file origine.', 'errExtract' : 'Impossibile estrarre file da "$1".', 'errArchive' : 'Impossibile creare archivio.', 'errArcType' : 'Tipo di archivio non supportato.', 'errNoArchive' : 'Il file non è un archivio o contiene file non supportati.', 'errCmdNoSupport' : 'Il Backend non supporta questo comando.', 'errReplByChild' : 'La cartella $1 non può essere sostituita da un oggetto in essa contenuto.', 'errArcSymlinks' : 'Per questioni di sicurezza non è possibile estrarre archivi che contengono collegamenti..', // edited 24.06.2012 'errArcMaxSize' : 'La dimensione dell\'archivio supera le massime dimensioni consentite.', 'errResize' : 'Impossibile ridimensionare "$1".', 'errResizeDegree' : 'Angolo di rotazione non valido.', // added 7.3.2013 'errResizeRotate' : 'Impossibile ruotare l\'immagine.', // added 7.3.2013 'errResizeSize' : 'Dimensione dell\'immagine non valida.', // added 7.3.2013 'errResizeNoChange' : 'Dimensione dell\'immagine non modificata.', // added 7.3.2013 'errUsupportType' : 'Tipo di file non supportato.', 'errNotUTF8Content' : 'Il file "$1" non è nel formato UTF-8 e non può essere modificato.', // added 9.11.2011 'errNetMount' : 'Impossibile montare "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocollo non supportato.', // added 17.04.2012 'errNetMountFailed' : 'Mount fallito.', // added 17.04.2012 'errNetMountHostReq' : 'Host richiesto.', // added 18.04.2012 'errSessionExpires' : 'La sessione è scaduta a causa di inattività.', 'errCreatingTempDir' : 'Impossibile creare la cartella temporanea: "$1"', 'errFtpDownloadFile' : 'Impossibile scaricare il file tramite FTP: "$1"', 'errFtpUploadFile' : 'Impossibile caricare il file tramite FTP: "$1"', 'errFtpMkdir' : 'Impossibile creare la cartella remota tramite FTP: "$1"', 'errArchiveExec' : 'Errore durante l\'archiviazione dei file: "$1"', 'errExtractExec' : 'Errore durante l\'estrazione dei file: "$1"', 'errNetUnMount' : 'Impossibile smontare', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Non convertibile nel formato UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Per uploadare l0intera cartella usare Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timeout durante la ricerca di "$1". I risultati della ricerca sono parziali.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'E\' necessaria la riautorizzazione.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Il numero massimo di oggetti selezionabili è $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossibile ripristinare dal cestino: destinazione di ripristino non trovata.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Impossibile trovare un editor per questo tipo di file.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Si è verificato un errore lato server.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossibile svuotare la cartella "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Ci sono $ 1 in più di errori.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Puoi creare fino a $ 1 cartelle alla volta.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Crea archivio', 'cmdback' : 'Indietro', 'cmdcopy' : 'Copia', 'cmdcut' : 'Taglia', 'cmddownload' : 'Scarica', 'cmdduplicate' : 'Duplica', 'cmdedit' : 'Modifica File', 'cmdextract' : 'Estrai Archivio', 'cmdforward' : 'Avanti', 'cmdgetfile' : 'Seleziona File', 'cmdhelp' : 'Informazioni su...', 'cmdhome' : 'Home', 'cmdinfo' : 'Informazioni', 'cmdmkdir' : 'Nuova cartella', 'cmdmkdirin' : 'In una nuova cartella', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nuovo file', 'cmdopen' : 'Apri', 'cmdpaste' : 'Incolla', 'cmdquicklook' : 'Anteprima', 'cmdreload' : 'Ricarica', 'cmdrename' : 'Rinomina', 'cmdrm' : 'Elimina', 'cmdtrash' : 'Nel cestino', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Ripristina', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Ricerca file', 'cmdup' : 'Vai alla directory padre', 'cmdupload' : 'Carica File', 'cmdview' : 'Visualizza', 'cmdresize' : 'Ridimensiona Immagine', 'cmdsort' : 'Ordina', 'cmdnetmount' : 'Monta disco di rete', // added 18.04.2012 'cmdnetunmount': 'Smonta', // from v2.1 added 30.04.2012 'cmdplaces' : 'Aggiungi ad Accesso rapido', // added 28.12.2014 'cmdchmod' : 'Cambia modalità', // from v2.1 added 20.6.2015 'cmdopendir' : 'Apri una cartella', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reimposta dimensione colonne', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Schermo intero', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Sposta', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Svuota la cartella', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annulla', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Ripeti', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferenze', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Seleziona tutto', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Annulla selezione', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverti selezione', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Apri in una nuova finestra', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Nascondi (Preferenza)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Chiudi', 'btnSave' : 'Salva', 'btnRm' : 'Elimina', 'btnApply' : 'Applica', 'btnCancel' : 'Annulla', 'btnNo' : 'No', 'btnYes' : 'Sì', 'btnMount' : 'Monta', // added 18.04.2012 'btnApprove': 'Vai a $1 & approva', // from v2.1 added 26.04.2012 'btnUnmount': 'Smonta', // from v2.1 added 30.04.2012 'btnConv' : 'Converti', // from v2.1 added 08.04.2014 'btnCwd' : 'Qui', // from v2.1 added 22.5.2015 'btnVolume' : 'Disco', // from v2.1 added 22.5.2015 'btnAll' : 'Tutti', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nome file', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salva & Chiudi', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rinomina', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rinomina (tutto)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Indietro ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Avanti ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Salva come', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Apri cartella', 'ntffile' : 'Apri file', 'ntfreload' : 'Ricarica il contenuto della cartella', 'ntfmkdir' : 'Creazione delle directory in corso', 'ntfmkfile' : 'Creazione dei files in corso', 'ntfrm' : 'Eliminazione dei files in corso', 'ntfcopy' : 'Copia file in corso', 'ntfmove' : 'Spostamento file in corso', 'ntfprepare' : 'Preparazione della copia dei file.', 'ntfrename' : 'Sto rinominando i file', 'ntfupload' : 'Caricamento file in corso', 'ntfdownload' : 'Downloading file in corso', 'ntfsave' : 'Salvataggio file in corso', 'ntfarchive' : 'Creazione archivio in corso', 'ntfextract' : 'Estrazione file dall\'archivio in corso', 'ntfsearch' : 'Ricerca files in corso', 'ntfresize' : 'Ridimensionamento immagini', 'ntfsmth' : 'Operazione in corso. Attendere...', 'ntfloadimg' : 'Caricamento immagine in corso', 'ntfnetmount' : 'Montaggio disco di rete', // added 18.04.2012 'ntfnetunmount': 'Smontaggio disco di rete', // from v2.1 added 30.04.2012 'ntfdim' : 'Lettura dimensioni immagine', // added 20.05.2013 'ntfreaddir' : 'Lettura informazioni cartella', // from v2.1 added 01.07.2013 'ntfurl' : 'Lettura URL del collegamento', // from v2.1 added 11.03.2014 'ntfchmod' : 'Modifica della modalità del file', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifica del nome del file caricato', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creazione del file da scaricare', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Ottenimento informazioni percorso', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processazione file caricato', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Spostamento nel cestino', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Ripristino dal cestino', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Controllo cartella destinazione', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annullamento operazione precedente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Rifacimento precedente annullamento', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Controllo dei contenuti', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Cestino', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Sconosciuto', 'Today' : 'Oggi', 'Yesterday' : 'Ieri', 'msJan' : 'Gen', 'msFeb' : 'febbraio', 'msMar' : 'Mar', 'msApr' : 'aprile', 'msMay' : 'Mag', 'msJun' : 'Giu', 'msJul' : 'Lug', 'msAug' : 'Ago', 'msSep' : 'Set', 'msOct' : 'Ott', 'msNov' : 'Nov', 'msDec' : 'Dic', 'January' : 'Gennaio', 'February' : 'Febbraio', 'March' : 'Marzo', 'April' : 'Aprile', 'May' : 'Maggio', 'June' : 'Giugno', 'July' : 'Luglio', 'August' : 'Agosto', 'September' : 'Settembre', 'October' : 'Ottobre', 'November' : 'Novembre', 'December' : 'Dicembre', 'Sunday' : 'Domenica', 'Monday' : 'Lunedì', 'Tuesday' : 'Martedì', 'Wednesday' : 'Mercoledì', 'Thursday' : 'Giovedì', 'Friday' : 'Venerdì', 'Saturday' : 'Sabato', 'Sun' : 'Dom', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Gio', 'Fri' : 'Ven', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'per nome', 'sortkind' : 'per tipo', 'sortsize' : 'per dimensione', 'sortdate' : 'per data', 'sortFoldersFirst' : 'cartelle in testa', 'sortperm' : 'per permessi', // from v2.1.13 added 13.06.2016 'sortmode' : 'per modalità', // from v2.1.13 added 13.06.2016 'sortowner' : 'per possessore', // from v2.1.13 added 13.06.2016 'sortgroup' : 'per gruppo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Anche vista ad albero', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NuovoFile.txt', // added 10.11.2015 'untitled folder' : 'NuovaCartella', // added 10.11.2015 'Archive' : 'NuovoArchivio', // from v2.1 added 10.11.2015 'untitled file' : 'NuovoFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: file', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Conferma richiesta', 'confirmRm' : 'Sei sicuro di voler eliminare i file?
L\'operazione non è reversibile!', 'confirmRepl' : 'Sostituire i file ?', 'confirmRest' : 'Rimpiazza l\'oggetto esistente con quello nel cestino?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Non in formato UTF-8
Convertire in UTF-8?
Il contenuto diventerà UTF-8 salvando dopo la conversione.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'La codifica caratteri di questo file non può essere determinata. Sarà temporaneamente convertito in UTF-8 per l\'editting.
Per cortesia, selezionare la codifica caratteri per il file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Il contenuto è stato modificato.
Le modifiche andranno perse se non si salveranno.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sei sicuro di voler cestinare gli oggetti?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Sei sicuro di voler spostare gli articoli a "$ 1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Applica a tutti', 'name' : 'Nome', 'size' : 'Dimensione', 'perms' : 'Permessi', 'modify' : 'Modificato il', 'kind' : 'Tipo', 'read' : 'lettura', 'write' : 'scrittura', 'noaccess' : 'nessun accesso', 'and' : 'e', 'unknown' : 'sconosciuto', 'selectall' : 'Seleziona tutti i file', 'selectfiles' : 'Seleziona file', 'selectffile' : 'Seleziona il primo file', 'selectlfile' : 'Seleziona l\'ultimo file', 'viewlist' : 'Visualizza Elenco', 'viewicons' : 'Visualizza Icone', 'viewSmall' : 'Icone piccole', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Icone medie', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Icone grandi', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Icone molto grandi', // from v2.1.39 added 22.5.2018 'places' : 'Accesso rapido', 'calc' : 'Calcola', 'path' : 'Percorso', 'aliasfor' : 'Alias per', 'locked' : 'Bloccato', 'dim' : 'Dimensioni', 'files' : 'File', 'folders' : 'Cartelle', 'items' : 'Oggetti', 'yes' : 'sì', 'no' : 'no', 'link' : 'Collegamento', 'searcresult' : 'Risultati ricerca', 'selected' : 'oggetti selezionati', 'about' : 'Informazioni', 'shortcuts' : 'Scorciatoie', 'help' : 'Aiuto', 'webfm' : 'Gestore file WEB', 'ver' : 'Versione', 'protocolver' : 'versione protocollo', 'homepage' : 'Home del progetto', 'docs' : 'Documentazione', 'github' : 'Seguici su Github', 'twitter' : 'Seguici su Twitter', 'facebook' : 'Seguici su Facebook', 'team' : 'Gruppo', 'chiefdev' : 'sviluppatore capo', 'developer' : 'sviluppatore', 'contributor' : 'collaboratore', 'maintainer' : 'manutentore', 'translator' : 'traduttore', 'icons' : 'Icone', 'dontforget' : 'e non dimenticate di portare l\'asciugamano', 'shortcutsof' : 'Scorciatoie disabilitate', 'dropFiles' : 'Trascina i file qui', 'or' : 'o', 'selectForUpload' : 'Seleziona file da caricare', 'moveFiles' : 'Sposta file', 'copyFiles' : 'Copia file', 'restoreFiles' : 'Ripristina oggetti', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Rimuovi da Accesso rapido', 'aspectRatio' : 'Proporzioni', 'scale' : 'Scala', 'width' : 'Larghezza', 'height' : 'Altezza', 'resize' : 'Ridimensione', 'crop' : 'Ritaglia', 'rotate' : 'Ruota', 'rotate-cw' : 'Ruota di 90° in senso orario', 'rotate-ccw' : 'Ruota di 90° in senso antiorario', 'degree' : 'Gradi', 'netMountDialogTitle' : 'Monta disco di rete', // added 18.04.2012 'protocol' : 'Protocollo', // added 18.04.2012 'host' : 'Ospite', // added 18.04.2012 'port' : 'Porta', // added 18.04.2012 'user' : 'Utente', // added 18.04.2012 'pass' : 'Parola d\'ordine', // added 18.04.2012 'confirmUnmount' : 'Vuoi smontare $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Rilascia o incolla dal browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Rilascia o incolla files e indirizzi URL qui', // from v2.1 added 07.04.2014 'encoding' : 'Codifica', // from v2.1 added 19.12.2014 'locale' : 'Lingua', // from v2.1 added 19.12.2014 'searchTarget' : 'Destinazione: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Cerca per MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Possessore', // from v2.1 added 20.6.2015 'group' : 'Gruppo', // from v2.1 added 20.6.2015 'other' : 'Altri', // from v2.1 added 20.6.2015 'execute' : 'Esegui', // from v2.1 added 20.6.2015 'perm' : 'Permessi', // from v2.1 added 20.6.2015 'mode' : 'Modalità', // from v2.1 added 20.6.2015 'emptyFolder' : 'La cartella è vuota', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'La cartella è vuota\\A Trascina e rilascia per aggiungere elementi', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'La cartella è vuota\\A Premi a lungo per aggiungere elementi', // from v2.1.6 added 30.12.2015 'quality' : 'Qualità', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sincr. automatica', // from v2.1.6 added 10.1.2016 'moveUp' : 'Sposta in alto', // from v2.1.6 added 18.1.2016 'getLink' : 'Mostra URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Elementi selezionati ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID cartella', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permetti accesso non in linea', // from v2.1.10 added 3.25.2016 'reAuth' : 'Per ri-autenticarsi', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Caricamento...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Apri più files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Stai cercando di aprire $1 files. Sei sicuro di volerli aprire nel browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Nessun risultato soddisfa i criteri di ricerca', // from v2.1.12 added 5.16.2016 'editingFile' : 'Il file è in modifica.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 elementi sono selezionati.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 elementi negli appunti.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'La ricerca incrementale è solo dalla vista corrente.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reistanzia', // from v2.1.15 added 3.8.2016 'complete' : '$1 completato', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contestuale', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Orientamento pagina', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Percorsi base del volume', // from v2.1.16 added 16.9.2016 'reset' : 'Resetta', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Colore di sfondo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selettore colori', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Griglia di 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Abilitato', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabilitato', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Nessun risultato di ricerca nella vista corrente\\APremere [Invio] per espandere l\'oggetto della ricerca.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Nessun risultato di ricerca tramite prima lettera nella vista corrente.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etichetta di testo', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minuti rimanenti', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Riapri con la codifica di caratteri selezionata', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Salva con la codifica di caratteri selezionata', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Seleziona cartella', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Cerca tramite la prima lettera', // from v2.1.23 added 24.3.2017 'presets' : 'Opzioni predefinite', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Troppi oggetti da spostare nel cestino', // from v2.1.25 added 9.6.2017 'TextArea' : 'Area di testo', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Svuota la cartella "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Non ci sono oggetti nella cartella "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferenze', // from v2.1.26 added 28.6.2017 'language' : 'Impostazioni Lingua', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inizializza le impostazioni salvate nel browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Impostazioni ToolBar', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caratteri rimanenti.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $ 1 righe rimaste.', // from v2.1.52 added 16.1.2020 'sum' : 'Somma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Dimensione file approssimativa', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fuoco sull\'elemento sotto al mouse', // from v2.1.30 added 2.11.2017 'select' : 'Seleziona', // from v2.1.30 added 23.11.2017 'selectAction' : 'Azione quando un file è selezionato', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Apri con l\'editor usato l\'ultima volta', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverti selezione', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sei sicuro di voler rinominare $1 selezionati come $2?
Questo non può essere annullato!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Rinomina in batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Numero', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Aggiungi prefisso', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Aggiungi sufisso', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Cambia estensione', // from v2.1.31 added 8.12.2017 'columnPref' : 'Impostazioni delle colonne (visualizzazione elenco)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tutti i cambiamenti saranno immeditamente applicati.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Qualsiasi modifica non sarà visibile fino a quando non si monta questo volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Anche i seguenti volumi montati su questo volume smontati. Sei sicuro di smontarlo?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Seleziona Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmi per visualizzare l\'hash del file', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informazioni (pannello di informazioni sulla selezione)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Premi di nuovo per uscire.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra degli strumenti', // from v2.1.38 added 4.4.2018 'workspace' : 'Spazio di lavoro', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogo', // from v2.1.38 added 4.4.2018 'all' : 'Tutti', // from v2.1.38 added 4.4.2018 'iconSize' : 'Dimensione icona (Visualizzazione icone)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Apri la finestra dell\'editor ingrandita', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Poiché la conversione tramite API non è attualmente disponibile, converti sul sito web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Dopo la conversione, devi essere caricato con l\'URL dell\'elemento o un file scaricato per salvare il file convertito.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converti sul sito di $ 1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrazioni', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Questo elFinder ha i seguenti servizi esterni integrati. Si prega di verificare i termini di utilizzo, l\'informativa sulla privacy, ecc. prima di utilizzarlo.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostra elementi nascosti', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Nascondi oggetti nascosti', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Mostra/Nascondi elementi nascosti', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipi di file da abilitare con "Nuovo file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipo di file di testo', // from v2.1.41 added 7.8.2018 'add' : 'Aggiungere', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'predefinita', // from v2.1.43 added 19.10.2018 'description' : 'Descrizione', // from v2.1.43 added 19.10.2018 'website' : 'Sito web', // from v2.1.43 added 19.10.2018 'author' : 'autrice', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licenza', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Questo elemento non può essere salvato. Per evitare di perdere le modifiche, devi esportare sul tuo PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Fare doppio clic sul file per selezionarlo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Usa la modalità a schermo intero', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Sconosciuto', 'kindRoot' : 'Percorso base del volume', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Cartella', 'kindSelects' : 'Selezioni', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias guasto', // applications 'kindApp' : 'Applicazione', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Presentazione Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Applicazione Flash', 'kindPDF' : 'Documento PDF', 'kindTorrent' : 'File Bittorrent', 'kind7z' : 'Archivio 7z', 'kindTAR' : 'Archivio TAR', 'kindGZIP' : 'Archivio GZIP', 'kindBZIP' : 'Archivio BZIP', 'kindXZ' : 'Archivio XZ', 'kindZIP' : 'Archivio ZIP', 'kindRAR' : 'Archivio RAR', 'kindJAR' : 'File Java JAR', 'kindTTF' : 'Font True Type', 'kindOTF' : 'Font Open Type', 'kindRPM' : 'Pacchetto RPM', // texts 'kindText' : 'Documento di testo', 'kindTextPlain' : 'Testo Semplice', 'kindPHP' : 'File PHP', 'kindCSS' : 'Foglio di stile a cascata (CSS)', 'kindHTML' : 'Documento HTML', 'kindJS' : 'File Javascript', 'kindRTF' : 'File RTF (Rich Text Format)', 'kindC' : 'File C', 'kindCHeader' : 'File C (header)', 'kindCPP' : 'File C++', 'kindCPPHeader' : 'File C++ (header)', 'kindShell' : 'Script Unix shell', 'kindPython' : 'File Python', 'kindJava' : 'File Java', 'kindRuby' : 'File Ruby', 'kindPerl' : 'File Perl', 'kindSQL' : 'File SQL', 'kindXML' : 'File XML', 'kindAWK' : 'File AWK', 'kindCSV' : 'File CSV (Comma separated values)', 'kindDOCBOOK' : 'File Docbook XML', 'kindMarkdown' : 'Testo markdown', // added 20.7.2015 // images 'kindImage' : 'Immagine', 'kindBMP' : 'Immagine BMP', 'kindJPEG' : 'Immagine JPEG', 'kindGIF' : 'Immagine GIF', 'kindPNG' : 'Immagine PNG', 'kindTIFF' : 'Immagine TIFF', 'kindTGA' : 'Immagine TGA', 'kindPSD' : 'Immagine Adobe Photoshop', 'kindXBITMAP' : 'Immagine X bitmap', 'kindPXM' : 'Immagine Pixelmator', // media 'kindAudio' : 'File Audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Playlist MP3', 'kindVideo' : 'File Video', 'kindVideoDV' : 'Filmato DV', 'kindVideoMPEG' : 'Filmato MPEG', 'kindVideoMPEG4' : 'Filmato MPEG-4', 'kindVideoAVI' : 'Filmato AVI', 'kindVideoMOV' : 'Filmato Quick Time', 'kindVideoWM' : 'Filmato Windows Media', 'kindVideoFlash' : 'Filmato Flash', 'kindVideoMKV' : 'Filmato Matroska', 'kindVideoOGG' : 'Filmato Ogg' } }; })); PK Zm.yjs/i18n/elfinder.ko.jsnuW+A/** * Korea-한국어 translation * @author Hwang Ahreum; * @author Park Sungyong; * @author Yeonjeong Woo * @author Kwon Hyungjoo * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ko = { translator : 'Hwang Ahreum; <luckmagic@naver.com>, Park Sungyong; <sungyong@gmail.com>, Yeonjeong Woo <eat_sweetly@naver.com>, Kwon Hyungjoo <hyung778@gmail.com>', language : 'Korea-한국어', direction : 'ltr', dateFormat : 'Y-m-d H:i', // will show like: 2022-03-02 13:21 fancyDateFormat : '$1 H:i', // will show like: 오늘 13:21 nonameDateFormat : 'ymd-His', // noname upload will show like: 220302-132116 messages : { 'getShareText' : '공유하다', 'Editor ': '코드 편집기', /********************************** errors **********************************/ 'error' : '오류', 'errUnknown' : '알 수 없는 오류.', 'errUnknownCmd' : '알 수 없는 명령어.', 'errJqui' : 'jQuery UI 설정이 올바르지 않습니다. Selectable, draggable 및 droppable 구성 요소가 포함되어 있어야 합니다.', 'errNode' : 'elFinder를 생성하기 위해서는 DOM Element를 요구합니다.', 'errURL' : 'elFinder 환경설정이 올바르지 않습니다! URL 옵션이 설정되지 않았습니다.', 'errAccess' : '접근 제한.', 'errConnect' : 'Backend에 연결할 수 없습니다.', 'errAbort' : '연결 실패.', 'errTimeout' : '연결시간 초과.', 'errNotFound' : 'Backend를 찾을 수 없습니다.', 'errResponse' : 'Backend가 응답하지 않습니다.', 'errConf' : 'Backend 환경설정이 올바르지 않습니다.', 'errJSON' : 'PHP JSON 모듈이 설치되지 않았습니다.', 'errNoVolumes' : '읽을 수 있는 볼륨이 없습니다.', 'errCmdParams' : '"$1" 명령에 잘못된 매개 변수가 있습니다.', 'errDataNotJSON' : '데이터가 JSON이 아닙니다.', 'errDataEmpty' : '데이터가 비어있습니다.', 'errCmdReq' : 'Backend 요청에는 명령어 이름이 필요합니다.', 'errOpen' : '"$1"을(를) 열 수 없습니다.', 'errNotFolder' : '폴더가 아닙니다.', 'errNotFile' : '파일이 아닙니다.', 'errRead' : '"$1"을(를) 읽을 수 없습니다.', 'errWrite' : '"$1"에 쓸 수 없습니다.', 'errPerm' : '권한이 없습니다.', 'errLocked' : '"$1"이(가) 잠겨 있습니다, 이동, 삭제가 불가능합니다', 'errExists' : '이미 "$1"파일이 존재합니다.', 'errInvName' : '파일명에 올바르지 않은 문자가 포함되었습니다.', 'errInvDirname' : '폴더명에 올바르지 않은 문자가 포함되었습니다.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : '폴더를 찾을 수 없습니다.', 'errFileNotFound' : '파일을 찾을 수 없습니다.', 'errTrgFolderNotFound' : '"$1" 폴더를 찾을 수 없습니다.', 'errPopup' : '브라우저에서 팝업을 차단하였습니다. 팝업을 허용하려면 브라우저 옵션을 변경하세요.', 'errMkdir' : '"$1" 폴더를 생성할 수 없습니다.', 'errMkfile' : '"$1" 파일을 생성할 수 없습니다.', 'errRename' : '"$1"의 이름을 변경할 수 없습니다.', 'errCopyFrom' : '볼률 "$1"으(로)부터 파일을 복사할 수 없습니다.', 'errCopyTo' : '볼률 "$1"에 파일을 복사할 수 없습니다.', 'errMkOutLink' : 'root 볼륨 외부에 링크를 만들 수 없습니다.', // from v2.1 added 03.10.2015 'errUpload' : '업로드 오류.', // old name - errUploadCommon 'errUploadFile' : '"$1"을(를) 업로드할 수 없습니다.', // old name - errUpload 'errUploadNoFiles' : '업로드할 파일이 없습니다.', 'errUploadTotalSize' : '데이터가 허용된 최대크기를 초과하였습니다.', // old name - errMaxSize 'errUploadFileSize' : '파일이 허용된 최대크기를 초과하였습니다.', // old name - errFileMaxSize 'errUploadMime' : '잘못된 파일형식입니다.', 'errUploadTransfer' : '"$1" 전송 오류.', 'errUploadTemp' : '업로드에 필요한 임시파일 생성을 할 수 없습니다.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1"개체가 현재 위치에 이미 존재하며 다른 유형의 개체로 대체 할 수 없습니다.', // new 'errReplace' : '"$1"을(를) 변경할 수 없습니다.', 'errSave' : '"$1"을(를) 저장할 수 없습니다.', 'errCopy' : '"$1"을(를) 복사할 수 없습니다.', 'errMove' : '"$1"을(를) 이동할 수 없습니다.', 'errCopyInItself' : '"$1"을(를) 자기 자신에게 복사할 수 없습니다.', 'errRm' : '"$1"의 이름을 변경할 수 없습니다.', 'errTrash' : '휴지통으로 보낼 수 없습니다.', // from v2.1.24 added 30.4.2017 'errRmSrc' : '원본 파일을 제거할 수 없습니다.', 'errExtract' : '"$1"에 압축을 풀 수 없습니다.', 'errArchive' : '압축파일을 생성할 수 없습니다.', 'errArcType' : '지원하지 않는 압축파일 형식입니다.', 'errNoArchive' : '압축파일이 아니거나 지원하지 않는 압축파일 형식입니다.', 'errCmdNoSupport' : 'Backend에서 이 명령을 지원하지 않습니다.', 'errReplByChild' : '"$1" 폴더에 덮어쓸수 없습니다.', 'errArcSymlinks' : '보안상의 이유로 압축파일이 심볼릭 링크를 포함하거나 허용되지 않는 이름이 있을 경우 압축 해제가 불가능합니다.', // edited 24.06.2012 'errArcMaxSize' : '압축파일이 허용된 최대크기를 초과하였습니다.', 'errResize' : '"$1"의 크기 변경을 할 수 없습니다.', 'errResizeDegree' : '회전가능한 각도가 아닙니다.', // added 7.3.2013 'errResizeRotate' : '이미지를 회전할 수 없습니다.', // added 7.3.2013 'errResizeSize' : '올바르지 않은 크기의 이미지입니다.', // added 7.3.2013 'errResizeNoChange' : '이미지 크기가 변경되지 않았습니다.', // added 7.3.2013 'errUsupportType' : '지원하지 않는 파일 형식.', 'errNotUTF8Content' : '파일 "$1"은 UTF-8 형식이 아니어서 편집할 수 없습니다.', // added 9.11.2011 'errNetMount' : '"$1"을(를) 마운트할 수 없습니다.', // added 17.04.2012 'errNetMountNoDriver' : '지원되지 않는 프로토콜.', // added 17.04.2012 'errNetMountFailed' : '마운드 실패.', // added 17.04.2012 'errNetMountHostReq' : '호스트가 필요합니다.', // added 18.04.2012 'errSessionExpires' : '활동이 없어 세션이 만료되었습니다.', 'errCreatingTempDir' : '임시 폴더 생성에 실패했습니다: "$1"', 'errFtpDownloadFile' : 'FTP를 통한 다운로드에 실패했습니다: "$1"', 'errFtpUploadFile' : 'FTP에 업로드 실패했습니다: "$1"', 'errFtpMkdir' : 'FTP에서 폴더 생성에 실패했습니다: "$1"', 'errArchiveExec' : '압축중 오류가 발생했습니다: "$1"', 'errExtractExec' : '압축해제중 오류가 발생했습니다: "$1"', 'errNetUnMount' : '마운트를 해제할 수 없습니다.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8로 변환할 수 없습니다.', // from v2.1 added 08.04.2014 'errFolderUpload' : '폴더를 업로드 하려면 최신 브라우저를 사용하세요.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" 검색중 시간을 초과하였습니다. 일부 결과만 표시됩니다.', // from v2.1 added 12.1.2016 'errReauthRequire' : '재인증이 필요합니다.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '선택 가능한 최대 개수는 $1개입니다.', // from v2.1.17 added 17.10.2016 'errRestore' : '휴지통에서 복원할 수 없습니다. 복원할 위치를 확인할 수 없습니다.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : '이 파일 형식을 위한 편집기를 찾지 못했습니다.', // from v2.1.25 added 23.5.2017 'errServerError' : '서버측에서 오류가 발생했습니다.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" 폴더를 비울 수 없습니다.', // from v2.1.25 added 22.6.2017 'moreErrors' : '$1개의 오류가 더 발생했습니다.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : '한 번에 최대 $1개의 폴더를 만들 수 있습니다.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : '압축파일생성', 'cmdback' : '뒤로', 'cmdcopy' : '복사', 'cmdcut' : '자르기', 'cmddownload' : '다운로드', 'cmdduplicate' : '사본', 'cmdedit' : '편집', 'cmdextract' : '압축풀기', 'cmdforward' : '앞으로', 'cmdgetfile' : '선택', 'cmdhelp' : '이 소프트웨어는', 'cmdhome' : '홈', 'cmdinfo' : '파일정보', 'cmdmkdir' : '새 폴더', 'cmdmkdirin' : '새 폴더로', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '새 파일', 'cmdopen' : '열기', 'cmdpaste' : '붙여넣기', 'cmdquicklook' : '미리보기', 'cmdreload' : '새로고침', 'cmdrename' : '이름바꾸기', 'cmdrm' : '삭제', 'cmdtrash' : '휴지통으로', //from v2.1.24 added 29.4.2017 'cmdrestore' : '복원', //from v2.1.24 added 3.5.2017 'cmdsearch' : '파일찾기', 'cmdup' : '상위폴더', 'cmdupload' : '업로드', 'cmdview' : '보기', 'cmdresize' : '이미지 크기 변경 & 회전', 'cmdsort' : '정렬', 'cmdnetmount' : '네트워크 볼륨 마운트', // added 18.04.2012 'cmdnetunmount': '마운트 해제', // from v2.1 added 30.04.2012 'cmdplaces' : '즐겨찾기로', // added 28.12.2014 'cmdchmod' : '모드 변경', // from v2.1 added 20.6.2015 'cmdopendir' : '폴더 열기', // from v2.1 added 13.1.2016 'cmdcolwidth' : '컬럼 넓이 초기화', // from v2.1.13 added 12.06.2016 'cmdfullscreen': '전체 화면', // from v2.1.15 added 03.08.2016 'cmdmove' : '이동', // from v2.1.15 added 21.08.2016 'cmdempty' : '폴더 비우기', // from v2.1.25 added 22.06.2017 'cmdundo' : '실행 취소', // from v2.1.27 added 31.07.2017 'cmdredo' : '다시 실행', // from v2.1.27 added 31.07.2017 'cmdpreference': '환경설정', // from v2.1.27 added 03.08.2017 'cmdselectall' : '전체 선택', // from v2.1.28 added 15.08.2017 'cmdselectnone': '선택 취소', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '선택 반전', // from v2.1.28 added 15.08.2017 'cmdopennew' : '새 창으로 열기', // from v2.1.38 added 3.4.2018 'cmdhide' : '숨기기 (환경설정)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '닫기', 'btnSave' : '저장', 'btnRm' : '삭제', 'btnApply' : '적용', 'btnCancel' : '취소', 'btnNo' : '아니오', 'btnYes' : '예', 'btnMount' : '마운트', // added 18.04.2012 'btnApprove': '$1로 이동 및 승인', // from v2.1 added 26.04.2012 'btnUnmount': '마운트 해제', // from v2.1 added 30.04.2012 'btnConv' : '변환', // from v2.1 added 08.04.2014 'btnCwd' : '여기', // from v2.1 added 22.5.2015 'btnVolume' : '볼륨', // from v2.1 added 22.5.2015 'btnAll' : '전체', // from v2.1 added 22.5.2015 'btnMime' : 'MIME 타입', // from v2.1 added 22.5.2015 'btnFileName':'파일 이름', // from v2.1 added 22.5.2015 'btnSaveClose': '저장후 닫기', // from v2.1 added 12.6.2015 'btnBackup' : '백업', // fromv2.1 added 28.11.2015 'btnRename' : '이름변경', // from v2.1.24 added 6.4.2017 'btnRenameAll' : '전체이름 변경', // from v2.1.24 added 6.4.2017 'btnPrevious' : '이전 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '다음 ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '다른 이름으로 저장하기', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : '폴더 열기', 'ntffile' : '파일 열기', 'ntfreload' : '새로고침', 'ntfmkdir' : '폴더 생성', 'ntfmkfile' : '파일 생성', 'ntfrm' : '삭제', 'ntfcopy' : '복사', 'ntfmove' : '이동', 'ntfprepare' : '복사 준비', 'ntfrename' : '이름바꾸기', 'ntfupload' : '업로드', 'ntfdownload' : '다운로드', 'ntfsave' : '저장하기', 'ntfarchive' : '압축파일만들기', 'ntfextract' : '압축풀기', 'ntfsearch' : '검색', 'ntfresize' : '이미지 크기 변경', 'ntfsmth' : '작업중 >_<', 'ntfloadimg' : '이미지 불러오는 중', 'ntfnetmount' : '네트워크 볼륨 마운트 중', // added 18.04.2012 'ntfnetunmount': '네트워크 볼륨 마운트 해제 중', // from v2.1 added 30.04.2012 'ntfdim' : '이미지 해상도 가져오는 중', // added 20.05.2013 'ntfreaddir' : '폴더 정보 읽는 중', // from v2.1 added 01.07.2013 'ntfurl' : '링크 URL 가져오는 중', // from v2.1 added 11.03.2014 'ntfchmod' : '파일 모드 변경하는 중', // from v2.1 added 20.6.2015 'ntfpreupload': '업로드된 파일명 검증 중', // from v2.1 added 31.11.2015 'ntfzipdl' : '다운로드할 파일 생성 중', // from v2.1.7 added 23.1.2016 'ntfparents' : '경로 정보 가져오는 중', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '업로드된 파일 처리 중', // from v2.1.17 added 2.11.2016 'ntftrash' : '휴지통으로 이동 중', // from v2.1.24 added 2.5.2017 'ntfrestore' : '휴지통에서 복원 중', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '대상 폴더 점검 중', // from v2.1.24 added 3.5.2017 'ntfundo' : '이전 작업 취소 중', // from v2.1.27 added 31.07.2017 'ntfredo' : '취소된 작업 다시 하는 중', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : '내용 확인 중', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '휴지통', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '알 수 없음', 'Today' : '오늘', 'Yesterday' : '어제', 'msJan' : '1월', 'msFeb' : '2월', 'msMar' : '3월', 'msApr' : '4월', 'msMay' : '5월', 'msJun' : '6월', 'msJul' : '7월', 'msAug' : '8월', 'msSep' : '9월', 'msOct' : '10월', 'msNov' : '11월', 'msDec' : '12월', 'January' : '1월', 'February' : '2월', 'March' : '3월', 'April' : '4월', 'May' : '5월', 'June' : '6월', 'July' : '7월', 'August' : '8월', 'September' : '9월', 'October' : '10월', 'November' : '11월', 'December' : '12월', 'Sunday' : '일요일', 'Monday' : '월요일', 'Tuesday' : '화요일', 'Wednesday' : '수요일', 'Thursday' : '목요일', 'Friday' : '금요일', 'Saturday' : '토요일', 'Sun' : '일', 'Mon' : '월', 'Tue' : '화', 'Wed' : '수', 'Thu' : '목', 'Fri' : '금', 'Sat' : '토', /******************************** sort variants ********************************/ 'sortname' : '이름', 'sortkind' : '종류', 'sortsize' : '크기', 'sortdate' : '날짜', 'sortFoldersFirst' : '폴더 먼저', 'sortperm' : '퍼미션별', // from v2.1.13 added 13.06.2016 'sortmode' : '모드별', // from v2.1.13 added 13.06.2016 'sortowner' : '소유자별', // from v2.1.13 added 13.06.2016 'sortgroup' : '그룹별', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : '트리뷰도 같이', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '새파일.txt', // added 10.11.2015 'untitled folder' : '새폴더', // added 10.11.2015 'Archive' : '새아카이브', // from v2.1 added 10.11.2015 'untitled file' : '새파일.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 파일', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '확인', 'confirmRm' : '이 파일을 정말로 삭제 하겠습니까?
실행 후 되돌릴 수 없습니다!', 'confirmRepl' : '오래된 파일을 새 파일로 바꾸시겠습니까? (폴더가 포함되어 있으면 병합됩니다. 백업 및 교체하려면 백업을 선택하세요.)', 'confirmRest' : '이미 있는 파일을 휴지통에 있는 파일로 교체하시겠습니까?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8이 아닙니다
UTF-8로 변환할까요?
변환후 저장하면 UTF-8로 바뀝니다.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '이 파일의 인코딩 타입을 알아내지 못했습니다. 편집하려면 임시로 UTF-8로 변환해야 합니다.
이 파일의 인코딩을 선택해주세요.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '변경된 부분이 있습니다.
저장하지 않는다면 현재 작업중인 내용을 잃을 수 있습니다.', // from v2.1 added 15.7.2015 'confirmTrash' : '휴지통으로 이동하시겠습니까?', //from v2.1.24 added 29.4.2017 'confirmMove' : '이 파일을 정말 "$1"(으)로 이동하시겠습니까?', //from v2.1.50 added 27.7.2019 'apllyAll' : '모두 적용', 'name' : '이름', 'size' : '크기', 'perms' : '권한', 'modify' : '수정된 시간', 'kind' : '종류', 'read' : '읽기', 'write' : '쓰기', 'noaccess' : '액세스 불가', 'and' : '와', 'unknown' : '알 수 없음', 'selectall' : '모든 파일 선택', 'selectfiles' : '파일 선택', 'selectffile' : '첫번째 파일 선택', 'selectlfile' : '마지막 파일 선택', 'viewlist' : '리스트 보기', 'viewicons' : '아이콘 보기', 'viewSmall' : '작은 아이콘', // from v2.1.39 added 22.5.2018 'viewMedium' : '중간 아이콘', // from v2.1.39 added 22.5.2018 'viewLarge' : '큰 아이콘', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '아주 큰 아이콘', // from v2.1.39 added 22.5.2018 'places' : '즐겨찾기', 'calc' : '계산', 'path' : '경로', 'aliasfor' : '별명', 'locked' : '잠금', 'dim' : '크기', 'files' : '파일', 'folders' : '폴더', 'items' : '아이템', 'yes' : '예', 'no' : '아니오', 'link' : '링크', 'searcresult' : '검색 결과', 'selected' : '아이템 선택', 'about' : '이 프로그램은..', 'shortcuts' : '단축아이콘', 'help' : '도움말', 'webfm' : '웹 파일매니저', 'ver' : '버전', 'protocolver' : '프로토콜 버전', 'homepage' : '홈페이지', 'docs' : '문서', 'github' : 'Github에서 포크하기', 'twitter' : '트위터에서 팔로우하기', 'facebook' : '페이스북에서 가입하기', 'team' : '팀', 'chiefdev' : '개발팀장', 'developer' : '개발자', 'contributor' : '공헌자', 'maintainer' : '관리자', 'translator' : '번역', 'icons' : '아이콘', 'dontforget' : '그리고 수건 가져가는 것을 잊지 마세요', 'shortcutsof' : '단축아이콘 사용불가', 'dropFiles' : '여기로 이동하기', 'or' : '또는', 'selectForUpload' : '업로드 파일 선택', 'moveFiles' : '파일 이동', 'copyFiles' : '파일 복사', 'restoreFiles' : '복원하기', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '현재 폴더에서 삭제하기', 'aspectRatio' : '화면비율', 'scale' : '크기', 'width' : '가로', 'height' : '세로', 'resize' : '사이즈 변경', 'crop' : '자르기', 'rotate' : '회전', 'rotate-cw' : '반시계방향 90도 회전', 'rotate-ccw' : '시계방향 90도 회전', 'degree' : '도', 'netMountDialogTitle' : '네트워크 볼륨 마운트', // added 18.04.2012 'protocol' : '프로토콜', // added 18.04.2012 'host' : '호스트', // added 18.04.2012 'port' : '포트', // added 18.04.2012 'user' : '사용자', // added 18.04.2012 'pass' : '비밀번호', // added 18.04.2012 'confirmUnmount' : '$1을(를) 마운트 해제하시겠습니까?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '브라우저에서 파일을 끌어오거나 붙여넣으세요', // from v2.1 added 30.05.2012 'dropPasteFiles' : '파일을 끌어오거나, 클립보드의 URL이나 이미지들을 붙여넣으세요', // from v2.1 added 07.04.2014 'encoding' : '인코딩', // from v2.1 added 19.12.2014 'locale' : '로케일', // from v2.1 added 19.12.2014 'searchTarget' : '대상: $1', // from v2.1 added 22.5.2015 'searchMime' : '입력한 MIME 타입으로 검색하기', // from v2.1 added 22.5.2015 'owner' : '소유자', // from v2.1 added 20.6.2015 'group' : '그룹', // from v2.1 added 20.6.2015 'other' : '그외', // from v2.1 added 20.6.2015 'execute' : '실행', // from v2.1 added 20.6.2015 'perm' : '권한', // from v2.1 added 20.6.2015 'mode' : '모드', // from v2.1 added 20.6.2015 'emptyFolder' : '빈 폴더입니다', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '빈 폴더입니다\\A 드래드 앤 드롭으로 파일을 추가하세요', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '빈 폴더입니다\\A 길게 눌러 파일을 추가하세요', // from v2.1.6 added 30.12.2015 'quality' : '품질', // from v2.1.6 added 5.1.2016 'autoSync' : '자동 동기', // from v2.1.6 added 10.1.2016 'moveUp' : '위로 이동', // from v2.1.6 added 18.1.2016 'getLink' : 'URL 링크 가져오기', // from v2.1.7 added 9.2.2016 'selectedItems' : '선택된 항목 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '폴더 ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '오프라인 접근 허용', // from v2.1.10 added 3.25.2016 'reAuth' : '재인증하기', // from v2.1.10 added 3.25.2016 'nowLoading' : '로딩중...', // from v2.1.12 added 4.26.2016 'openMulti' : '여러 파일 열기', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 파일을 열려고 합니다. 브라우저에서 열겠습니까?', // from v2.1.12 added 5.14.2016 'emptySearch' : '검색결과가 없습니다.', // from v2.1.12 added 5.16.2016 'editingFile' : '편집중인 파일입니다.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1개를 선택했습니다.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '클립보드에 $1개가 있습니다.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '증분 검색은 현재 보기에서만 가능합니다.', // from v2.1.13 added 6.30.2016 'reinstate' : '복원', // from v2.1.15 added 3.8.2016 'complete' : '$1 완료', // from v2.1.15 added 21.8.2016 'contextmenu' : '컨텍스트 메뉴', // from v2.1.15 added 9.9.2016 'pageTurning' : '페이지 전환', // from v2.1.15 added 10.9.2016 'volumeRoots' : '볼륨 루트', // from v2.1.16 added 16.9.2016 'reset' : '초기화', // from v2.1.16 added 1.10.2016 'bgcolor' : '배경색', // from v2.1.16 added 1.10.2016 'colorPicker' : '색 선택기', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px 그리드', // from v2.1.16 added 4.10.2016 'enabled' : '활성', // from v2.1.16 added 4.10.2016 'disabled' : '비활성', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '현재 보기에는 검색결과가 없습니다.\\A[Enter]를 눌러 검색 대상을 확장하세요.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '현재 보기에는 첫 글자 검색 결과가 없습니다.', // from v2.1.23 added 24.3.2017 'textLabel' : '텍스트 라벨', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 분 남았습니다', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '선택한 인코딩으로 다시 열기', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '선택한 인코딩으로 저장하기', // from v2.1.19 added 2.12.2016 'selectFolder' : '폴더 선택', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '첫 글자 검색', // from v2.1.23 added 24.3.2017 'presets' : '프리셋', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '휴지통으로 옮기기엔 항목이 너무 많습니다.', // from v2.1.25 added 9.6.2017 'TextArea' : '글자영역', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '"$1" 폴더를 비우세요.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" 폴더에 아무것도 없습니다.', // from v2.1.25 added 22.6.2017 'preference' : '환경설정', // from v2.1.26 added 28.6.2017 'language' : '언어 설정', // from v2.1.26 added 28.6.2017 'clearBrowserData': '이 브라우저에 저장된 설정값 초기화하기', // from v2.1.26 added 28.6.2017 'toolbarPref' : '툴바 설정', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 글자 남았습니다.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 줄 남았습니다.', // from v2.1.52 added 16.1.2020 'sum' : '합계', // from v2.1.29 added 28.9.2017 'roughFileSize' : '대략적인 파일 크기', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '마우스를 가져갈 때 대화창 요소에 초점 맞추기', // from v2.1.30 added 2.11.2017 'select' : '선택', // from v2.1.30 added 23.11.2017 'selectAction' : '파일 선택시 동작', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '마지막 사용한 편집기로 열기', // from v2.1.30 added 23.11.2017 'selectinvert' : '선택 반전', // from v2.1.30 added 25.11.2017 'renameMultiple' : '선택한 $1을(를) $2와 같이 바꾸겠습니까?
이 작업은 되돌릴 수 없습니다!', // from v2.1.31 added 4.12.2017 'batchRename' : '일괄 이름 바꾸기', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ 숫자', // from v2.1.31 added 8.12.2017 'asPrefix' : '접두사 추가', // from v2.1.31 added 8.12.2017 'asSuffix' : '접미사 추가', // from v2.1.31 added 8.12.2017 'changeExtention' : '확장자 변경', // from v2.1.31 added 8.12.2017 'columnPref' : '사이드바 설정 (리스트 보기)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '모든 변경은 아카이브에 즉시 반영됩니다.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : '이 볼륨의 마운트를 해제할 때까지는 어떠한 변경사항도 반영되지 않습니다.', // from v2.1.33 added 2.3.2018 'unmountChildren' : '아래의 볼륨들도 이 볼륨과 함께 마운트가 해제됩니다. 계속하시겠습니까?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '선택 정보', // from v2.1.33 added 7.3.2018 'hashChecker' : '파일 해쉬 알고리즘', // from v2.1.33 added 10.3.2018 'infoItems' : '정보 (선택 정보 패널)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': '나가기 위해서 한 번 더 누르세요.', // from v2.1.38 added 1.4.2018 'toolbar' : '툴바', // from v2.1.38 added 4.4.2018 'workspace' : '작업공간', // from v2.1.38 added 4.4.2018 'dialog' : '대화상자', // from v2.1.38 added 4.4.2018 'all' : '전체', // from v2.1.38 added 4.4.2018 'iconSize' : '아이콘 크기 (아이콘 보기)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '최대화된 편집기 창을 엽니다', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '현재 API를 통한 변환이 불가능하므로 웹 사이트에서 변환하시기 바랍니다.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '변환 후 변환된 파일을 저장하기 위해서는 파일 URL이나 다운로드받은 파일을 업로드 해야 합니다.', //from v2.1.40 added 8.7.2018 'convertOn' : '$1 사이트에서 변환하시기 바랍니다.', // from v2.1.40 added 10.7.2018 'integrations' : '통합', // from v2.1.40 added 11.7.2018 'integrationWith' : 'elFinder에는 다음과 같은 외부 서비스가 통합되어 있습니다. 이용하기 전에 이용 약관, 개인정보 보호정책 등을 확인하시기 바랍니다.', // from v2.1.40 added 11.7.2018 'showHidden' : '숨겨진 파일 표시', // from v2.1.41 added 24.7.2018 'hideHidden' : '숨겨진 파일 숨기기', // from v2.1.41 added 24.7.2018 'toggleHidden' : '숨겨진 항목 표시/숨기기', // from v2.1.41 added 24.7.2018 'makefileTypes' : '"새 파일"에서 사용할 파일 형식', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : '텍스트 파일 유형', // from v2.1.41 added 7.8.2018 'add' : '추가', // from v2.1.41 added 7.8.2018 'theme' : '테마', // from v2.1.43 added 19.10.2018 'default' : '기본값', // from v2.1.43 added 19.10.2018 'description' : '설명', // from v2.1.43 added 19.10.2018 'website' : '웹사이트', // from v2.1.43 added 19.10.2018 'author' : '저자', // from v2.1.43 added 19.10.2018 'email' : '이메일', // from v2.1.43 added 19.10.2018 'license' : '라이선스', // from v2.1.43 added 19.10.2018 'exportToSave' : '이 파일은 저장될 수 없습니다. 편집한 내용을 유지하려면 PC로 내보내시기 바랍니다.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '파일을 두 번 클릭하여 선택하세요.', // from v2.1.47 added 22.1.2019 'useFullscreen' : '전체 화면 모드 사용', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '알 수 없음', 'kindRoot' : 'Root 볼륨', // from v2.1.16 added 16.10.2016 'kindFolder' : '폴더', 'kindSelects' : '선택', // from v2.1.29 added 29.8.2017 'kindAlias' : '별칭', 'kindAliasBroken' : '손상된 별칭', // applications 'kindApp' : '응용프로그램', 'kindPostscript' : 'Postscript 문서', 'kindMsOffice' : 'Microsoft Office 문서', 'kindMsWord' : 'Microsoft Word 문서', 'kindMsExcel' : 'Microsoft Excel 문서', 'kindMsPP' : 'Microsoft Powerpoint 프레젠테이션', 'kindOO' : 'Open Office 문서', 'kindAppFlash' : '플래쉬 파일', 'kindPDF' : 'PDF 문서', 'kindTorrent' : '비트토렌트 파일', 'kind7z' : '7z 압축파일', 'kindTAR' : 'TAR 압축파일', 'kindGZIP' : 'GZIP 압축파일', 'kindBZIP' : 'BZIP 압축파일', 'kindXZ' : 'XZ 압축파일', 'kindZIP' : 'ZIP 압축파일', 'kindRAR' : 'RAR 압축파일', 'kindJAR' : '자바 JAR 파일', 'kindTTF' : '트루 타입 글꼴', 'kindOTF' : '오픈 타입 글꼴', 'kindRPM' : 'RPM 패키지', // texts 'kindText' : '텍스트 문서', 'kindTextPlain' : '일반 텍스트', 'kindPHP' : 'PHP 소스', 'kindCSS' : 'CSS 문서', 'kindHTML' : 'HTML 문서', 'kindJS' : '자바스크립트 소스', 'kindRTF' : 'RTF 형식', 'kindC' : 'C 소스', 'kindCHeader' : 'C 헤더 소스', 'kindCPP' : 'C++ 소스', 'kindCPPHeader' : 'C++ 헤더 소스', 'kindShell' : '유닉스 쉘 스크립트', 'kindPython' : '파이썬 소스', 'kindJava' : '자바 소스', 'kindRuby' : '루비 소스', 'kindPerl' : '펄 스크립트', 'kindSQL' : 'SQL 소스', 'kindXML' : 'XML 문서', 'kindAWK' : 'AWK 소스', 'kindCSV' : 'CSV 파일', 'kindDOCBOOK' : '닥북 XML 문서', 'kindMarkdown' : '마크다운 문서', // added 20.7.2015 // images 'kindImage' : '이미지', 'kindBMP' : 'BMP 이미지', 'kindJPEG' : 'JPEG 이미지', 'kindGIF' : 'GIF 이미지', 'kindPNG' : 'PNG 이미지', 'kindTIFF' : 'TIFF 이미지', 'kindTGA' : 'TGA 이미지', 'kindPSD' : 'Adobe Photoshop 이미지', 'kindXBITMAP' : 'X 비트맵 이미지', 'kindPXM' : 'Pixelmator 이미지', // media 'kindAudio' : '오디오 미디어', 'kindAudioMPEG' : 'MPEG 오디오', 'kindAudioMPEG4' : 'MPEG-4 오디오', 'kindAudioMIDI' : 'MIDI 오디오', 'kindAudioOGG' : 'Ogg Vorbis 오디오', 'kindAudioWAV' : 'WAV 오디오', 'AudioPlaylist' : 'MP3 플레이 리스트', 'kindVideo' : '동영상 미디어', 'kindVideoDV' : 'DV 동영상', 'kindVideoMPEG' : 'MPEG 동영상', 'kindVideoMPEG4' : 'MPEG-4 동영상', 'kindVideoAVI' : 'AVI 동영상', 'kindVideoMOV' : '퀵 타임 동영상', 'kindVideoWM' : '윈도우 미디어 플레이어 동영상', 'kindVideoFlash' : '플래쉬 동영상', 'kindVideoMKV' : 'Matroska 동영상', 'kindVideoOGG' : 'Ogg 동영상' } }; })); PK Z? œœjs/i18n/elfinder.he.jsnuW+A/** * עברית translation * @author Yaron Shahrabani * @version 2022-03-01 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.he = { translator : 'Yaron Shahrabani <sh.yaron@gmail.com>', language : 'עברית', direction : 'rtl', dateFormat : 'd.m.Y H:i', // will show like: 01.03.2022 16:25 fancyDateFormat : '$1 H:i', // will show like: היום 16:25 nonameDateFormat : 'ymd-His', // noname upload will show like: 220301-162510 messages : { 'getShareText' : 'שתפו', 'Editor ': 'עורך קוד', /********************************** errors **********************************/ 'error' : 'שגיאה', 'errUnknown' : 'שגיאה בלתי מוכרת.', 'errUnknownCmd' : 'פקודה בלתי מוכרת.', 'errJqui' : 'תצורת ה־jQuery UI שגויה. יש לכלול רכיבים הניתנים לבחירה, גרירה והשלכה.', 'errNode' : 'elFinder דורש יצירה של רכיב DOM.', 'errURL' : 'התצורה של elFinder שגויה! אפשרות הכתובת (URL) לא הוגדרה.', 'errAccess' : 'הגישה נדחית.', 'errConnect' : 'לא ניתן להתחבר למנגנון.', 'errAbort' : 'החיבור בוטל.', 'errTimeout' : 'זמן החיבור פג.', 'errNotFound' : 'לא נמצא מנגנון.', 'errResponse' : 'תגובת המנגנון שגויה.', 'errConf' : 'תצורת המנגנון שגויה.', 'errJSON' : 'המודול PHP JSON לא מותקן.', 'errNoVolumes' : 'אין כוננים זמינים לקריאה.', 'errCmdParams' : 'פרמטרים שגויים לפקודה „$1“.', 'errDataNotJSON' : 'הנתונים אינם JSON.', 'errDataEmpty' : 'הנתונים ריקים.', 'errCmdReq' : 'בקשה למנגנון דורשת שם פקודה.', 'errOpen' : 'לא ניתן לפתוח את „$1“.', 'errNotFolder' : 'הפריט אינו תיקייה.', 'errNotFile' : 'הפריט אינו קובץ.', 'errRead' : 'לא ניתן לקרוא את „$1“.', 'errWrite' : 'לא ניתן לכתוב אל „$1“.', 'errPerm' : 'ההרשאה נדחתה.', 'errLocked' : '„$1“ נעול ואין אפשרות לשנות את שמו, להעבירו או להסירו.', 'errExists' : 'קובץ בשם „$1“ כבר קיים.', 'errInvName' : 'שם הקובץ שגוי.', 'errInvDirname' : 'שם תיקייה לא חוקי.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'התיקייה לא נמצאה.', 'errFileNotFound' : 'הקובץ לא נמצא.', 'errTrgFolderNotFound' : 'תיקיית היעד „$1“ לא נמצאה.', 'errPopup' : 'הדפדפן מנע פתיחת חלון קובץ. כדי לפתוח קובץ יש לאפשר זאת בהגדרות הדפדפן.', 'errMkdir' : 'לא ניתן ליצור את התיקייה „$1“.', 'errMkfile' : 'לא ניתן ליצור את הקובץ „$1“.', 'errRename' : 'לא ניתן לשנות את השם של „$1“.', 'errCopyFrom' : 'העתקת קבצים מהכונן „$1“ אינה מאופשרת.', 'errCopyTo' : 'העתקת קבצים אל הכונן „$1“ אינה מאופשרת.', 'errMkOutLink' : 'לא ניתן ליצור קישור אל מחוץ לשורש הנפח.', // from v2.1 added 03.10.2015 'errUpload' : 'שגיאת העלאה.', // old name - errUploadCommon 'errUploadFile' : 'לא ניתן להעלות את „$1“.', // old name - errUpload 'errUploadNoFiles' : 'לא נמצאו קבצים להעלאה.', 'errUploadTotalSize' : 'הנתונים חורגים מהגודל המרבי המותר.', // old name - errMaxSize 'errUploadFileSize' : 'הקובץ חורג מהגודל המרבי המותר.', // old name - errFileMaxSize 'errUploadMime' : 'סוג הקובץ אינו מורשה.', 'errUploadTransfer' : 'שגיאת העברה „$1“.', 'errUploadTemp' : 'לא ניתן ליצור קובץ זמני להעלאה.', // from v2.1 added 26.09.2015 'errNotReplace' : 'הפריט „$1“ כבר קיים במיקום זה ואי אפשר להחליפו בפריט מסוג אחר.', // new 'errReplace' : 'לא ניתן להחליף את „$1“.', 'errSave' : 'לא ניתן לשמור את „$1“.', 'errCopy' : 'לא ניתן להעתיק את „$1“.', 'errMove' : 'לא ניתן להעביר את „$1“.', 'errCopyInItself' : 'לא ניתן להעתיק את „$1“ לתוך עצמו.', 'errRm' : 'לא ניתן להסיר את „$1“.', 'errTrash' : 'לא ניתן לאשפה.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'לא ניתן להסיר את קובצי המקור.', 'errExtract' : 'לא ניתן לחלץ קבצים מהארכיון „$1“.', 'errArchive' : 'לא ניתן ליצור ארכיון.', 'errArcType' : 'סוג הארכיון אינו נתמך.', 'errNoArchive' : 'הקובץ אינו ארכיון או שסוג הקובץ שלו אינו נתמך.', 'errCmdNoSupport' : 'המנגנון אינו תומך בפקודה זו.', 'errReplByChild' : 'לא ניתן להחליף את התיקייה „$1“ בפריט מתוכה.', 'errArcSymlinks' : 'מטעמי אבטחה לא ניתן לחלץ ארכיונים שמכילים קישורים סימבוליים או קבצים עם שמות בלתי מורשים.', // edited 24.06.2012 'errArcMaxSize' : 'הארכיון חורג מהגודל המרבי המותר.', 'errResize' : 'לא ניתן לשנות את הגודל של „$1“.', 'errResizeDegree' : 'מעלות ההיפוך שגויות.', // added 7.3.2013 'errResizeRotate' : 'לא ניתן להפוך את התמונה.', // added 7.3.2013 'errResizeSize' : 'גודל התמונה שגוי.', // added 7.3.2013 'errResizeNoChange' : 'גודל התמונה לא השתנה.', // added 7.3.2013 'errUsupportType' : 'סוג הקובץ אינו נתמך.', 'errNotUTF8Content' : 'הקובץ „$1“ הוא לא בתסדיר UTF-8 ולא ניתן לערוך אותו.', // added 9.11.2011 'errNetMount' : 'לא ניתן לעגן את „$1“.', // added 17.04.2012 'errNetMountNoDriver' : 'פרוטוקול בלתי נתמך.', // added 17.04.2012 'errNetMountFailed' : 'העיגון נכשל.', // added 17.04.2012 'errNetMountHostReq' : 'נדרש מארח.', // added 18.04.2012 'errSessionExpires' : 'ההפעלה שלך פגה עקב חוסר פעילות.', 'errCreatingTempDir' : 'לא ניתן ליצור תיקייה זמנית: „$1“', 'errFtpDownloadFile' : 'לא ניתן להוריד קובץ מ־ FTP: „$1“', 'errFtpUploadFile' : 'לא ניתן להעלות קובץ ל־FTP: „$1“', 'errFtpMkdir' : 'לא ניתן ליצור תיקייה מרוחקת ב־FTP: „$1“', 'errArchiveExec' : 'שמירת הקבצים בארכיון נכשלה: „$1“', 'errExtractExec' : 'חילוץ קבצים נכשל: „$1“', 'errNetUnMount' : 'Unable to unmount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'לא ניתן להמרה ל-UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'נסה את הדפדפן המודרני, אם תרצה להעלות את התיקיה.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'תם הזמן הקצוב בזמן חיפוש "$1". תוצאת החיפוש היא חלקית.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'נדרש אישור מחדש.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'המספר המרבי של פריטים לבחירה הוא $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'לא ניתן לשחזר מהאשפה. לא ניתן לזהות את יעד השחזור.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'עורך לא נמצא לסוג קובץ זה.', // from v2.1.25 added 23.5.2017 'errServerError' : 'אירעה שגיאה בצד השרת.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'לא ניתן לרוקן את התיקייה "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'יש $1 שגיאות נוספות.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'אתה יכול ליצור עד $1 תיקיות בבת אחת.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'יצירת ארכיון', 'cmdback' : 'חזרה', 'cmdcopy' : 'העתקה', 'cmdcut' : 'גזירה', 'cmddownload' : 'הורדה', 'cmdduplicate' : 'שכפול', 'cmdedit' : 'עריכת קובץ', 'cmdextract' : 'חילוץ קבצים מארכיון', 'cmdforward' : 'העברה', 'cmdgetfile' : 'בחירת קבצים', 'cmdhelp' : 'פרטים על התכנית הזו', 'cmdhome' : 'בית', 'cmdinfo' : 'קבלת מידע', 'cmdmkdir' : 'תיקייה חדשה', 'cmdmkdirin' : 'לתוך תיקייה חדשה', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'קובץ חדש', 'cmdopen' : 'פתיחה', 'cmdpaste' : 'הדבקה', 'cmdquicklook' : 'תצוגה מקדימה', 'cmdreload' : 'רענון', 'cmdrename' : 'שינוי שם', 'cmdrm' : 'מחיקה', 'cmdtrash' : 'לפח', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'לשחזר', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'חיפוש קבצים', 'cmdup' : 'מעבר לתיקיית ההורה', 'cmdupload' : 'העלאת קבצים', 'cmdview' : 'תצוגה', 'cmdresize' : 'שינוי גודל והיפוך', 'cmdsort' : 'מיון', 'cmdnetmount' : 'עיגון כונן רשת', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'למקומות', // added 28.12.2014 'cmdchmod' : 'שנה מצב', // from v2.1 added 20.6.2015 'cmdopendir' : 'פתח תיקיה', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'אפס את רוחב העמודה', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'מסך מלא', // from v2.1.15 added 03.08.2016 'cmdmove' : 'לָזוּז', // from v2.1.15 added 21.08.2016 'cmdempty' : 'רוקן את התיקיה', // from v2.1.25 added 22.06.2017 'cmdundo' : 'לבטל', // from v2.1.27 added 31.07.2017 'cmdredo' : 'לַעֲשׂוֹת שׁוּב', // from v2.1.27 added 31.07.2017 'cmdpreference': 'העדפות', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'בחר הכל', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'בחר אף אחד', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'בחירה הפוך', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'פתח בחלון חדש', // from v2.1.38 added 3.4.2018 'cmdhide' : 'הסתר (העדפה)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'סגירה', 'btnSave' : 'שמירה', 'btnRm' : 'הסרה', 'btnApply' : 'החלה', 'btnCancel' : 'ביטול', 'btnNo' : 'לא', 'btnYes' : 'כן', 'btnMount' : 'עיגון', // added 18.04.2012 'btnApprove': 'עבור אל $1 ואשר', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'להמיר', // from v2.1 added 08.04.2014 'btnCwd' : 'כאן', // from v2.1 added 22.5.2015 'btnVolume' : 'כרך', // from v2.1 added 22.5.2015 'btnAll' : 'את כל', // from v2.1 added 22.5.2015 'btnMime' : 'סוג MIME', // from v2.1 added 22.5.2015 'btnFileName':'שם קובץ', // from v2.1 added 22.5.2015 'btnSaveClose': 'שמור וסגור', // from v2.1 added 12.6.2015 'btnBackup' : 'גיבוי', // fromv2.1 added 28.11.2015 'btnRename' : 'שנה שם', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'שנה שם (הכל)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'הקודם ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'הבא ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'שמור בשם', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'פתיחת תיקייה', 'ntffile' : 'פתיחת קובץ', 'ntfreload' : 'רענון תוכן התיקייה', 'ntfmkdir' : 'תיקייה נוצרת', 'ntfmkfile' : 'קבצים נוצרים', 'ntfrm' : 'קבצים נמחקים', 'ntfcopy' : 'קבצים מועתקים', 'ntfmove' : 'קבצים מועברים', 'ntfprepare' : 'העתקת קבצים בהכנה', 'ntfrename' : 'שמות קבצים משתנים', 'ntfupload' : 'קבצים נשלחים', 'ntfdownload' : 'קבצים מתקבלים', 'ntfsave' : 'שמירת קבצים', 'ntfarchive' : 'ארכיון נוצר', 'ntfextract' : 'מחולצים קבצים מארכיון', 'ntfsearch' : 'קבצים בחיפוש', 'ntfresize' : 'גודל קבצים משתנה', 'ntfsmth' : 'מתבצעת פעולה', 'ntfloadimg' : 'נטענת תמונה', 'ntfnetmount' : 'כונן רשת מעוגן', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'ממדי תמונה מתקבלים', // added 20.05.2013 'ntfreaddir' : 'קריאת מידע על תיקיות', // from v2.1 added 01.07.2013 'ntfurl' : 'מקבל את כתובת האתר של הקישור', // from v2.1 added 11.03.2014 'ntfchmod' : 'שינוי מצב קובץ', // from v2.1 added 20.6.2015 'ntfpreupload': 'מאמת את שם הקובץ להעלאה', // from v2.1 added 31.11.2015 'ntfzipdl' : 'יצירת קובץ להורדה', // from v2.1.7 added 23.1.2016 'ntfparents' : 'קבלת מידע על נתיב', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'מעבד את הקובץ שהועלה', // from v2.1.17 added 2.11.2016 'ntftrash' : 'עושה לזרוק לפח', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'עושה שחזור מהאשפה', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'בודק תיקיית יעד', // from v2.1.24 added 3.5.2017 'ntfundo' : 'מבטל פעולה קודמת', // from v2.1.27 added 31.07.2017 'ntfredo' : 'ביצוע מחדש של ביטול קודמים', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'בדיקת תכולה', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'פַּח אַשׁפָּה', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'לא ידוע', 'Today' : 'היום', 'Yesterday' : 'מחר', 'msJan' : 'ינו׳', 'msFeb' : 'פבר׳', 'msMar' : 'מרץ', 'msApr' : 'אפר׳', 'msMay' : 'מאי', 'msJun' : 'יונ׳', 'msJul' : 'יול׳', 'msAug' : 'אוג׳', 'msSep' : 'ספט׳', 'msOct' : 'אוק׳', 'msNov' : 'נוב׳', 'msDec' : 'דצמ׳', 'January' : 'ינואר', 'February' : 'פברואר', 'March' : 'מרץ', 'April' : 'אפריל', 'May' : 'מאי', 'June' : 'יוני', 'July' : 'יולי', 'August' : 'אוגוסט', 'September' : 'ספטמבר', 'October' : 'אוקטובר', 'November' : 'נובמבר', 'December' : 'דצמבר', 'Sunday' : 'יום ראשון', 'Monday' : 'יום שני', 'Tuesday' : 'יום שלישי', 'Wednesday' : 'יום רביעי', 'Thursday' : 'יום חמישי', 'Friday' : 'יום שישי', 'Saturday' : 'שבת', 'Sun' : 'א׳', 'Mon' : 'ב׳', 'Tue' : 'ג׳', 'Wed' : 'ד׳', 'Thu' : 'ה', 'Fri' : 'ו׳', 'Sat' : 'ש׳', /******************************** sort variants ********************************/ 'sortname' : 'לפי שם', 'sortkind' : 'לפי סוג', 'sortsize' : 'לפי גודל', 'sortdate' : 'לפי תאריך', 'sortFoldersFirst' : 'תיקיות תחילה', 'sortperm' : 'על פי רשות', // from v2.1.13 added 13.06.2016 'sortmode' : 'לפי מצב', // from v2.1.13 added 13.06.2016 'sortowner' : 'by ownerלפי הבעלים', // from v2.1.13 added 13.06.2016 'sortgroup' : 'לפי קבוצה', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'גם Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'תיקייה חדשה', // added 10.11.2015 'Archive' : 'ארכיון חדש', // from v2.1 added 10.11.2015 'untitled file' : 'קובץ חדש.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: קובץ', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'נדרש אישור', 'confirmRm' : 'להסיר את הקבצים?
פעולה זו בלתי הפיכה!', 'confirmRepl' : 'להחליף קובץ ישן בקובץ חדש?', 'confirmRest' : 'להחליף את הפריט הקיים בפריט שנמצא באשפה?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'לא ב-UTF-8
המר ל-UTF-8?
התוכן הופך ל-UTF-8 על ידי שמירה לאחר המרה.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'לא ניתן לזהות את קידוד התווים של הקובץ הזה. זה צריך להמיר זמנית ל-UTF-8 לצורך עריכה.
אנא בחר קידוד תווים של קובץ זה.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'הוא השתנה.
מאבד עבודה אם לא תשמור שינויים.', // from v2.1 added 15.7.2015 'confirmTrash' : 'האם אתה בטוח שברצונך להעביר פריטים לפח האשפה?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'האם אתה בטוח שברצונך להעביר פריטים ל-"$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'להחיל על הכול', 'name' : 'שם', 'size' : 'גודל', 'perms' : 'הרשאות', 'modify' : 'שינוי', 'kind' : 'סוג', 'read' : 'קריאה', 'write' : 'כתיבה', 'noaccess' : 'אין גישה', 'and' : 'וגם', 'unknown' : 'לא ידוע', 'selectall' : 'בחירת כל הקבצים', 'selectfiles' : 'בחירת קובץ אחד ומעלה', 'selectffile' : 'בחירת הקובץ הראשון', 'selectlfile' : 'בחירת הקובץ האחרון', 'viewlist' : 'תצוגת רשימה', 'viewicons' : 'תצוגת סמלים', 'viewSmall' : 'אייקונים קטנים', // from v2.1.39 added 22.5.2018 'viewMedium' : 'אייקונים בינוניים', // from v2.1.39 added 22.5.2018 'viewLarge' : 'אייקונים גדולים', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'סמלים גדולים במיוחד', // from v2.1.39 added 22.5.2018 'places' : 'מיקומים', 'calc' : 'חישוב', 'path' : 'נתיב', 'aliasfor' : 'כינוי עבור', 'locked' : 'נעול', 'dim' : 'ממדים', 'files' : 'קבצים', 'folders' : 'תיקיות', 'items' : 'פריטים', 'yes' : 'כן', 'no' : 'לא', 'link' : 'קישור', 'searcresult' : 'תוצאות חיפוש', 'selected' : 'קבצים נבחרים', 'about' : 'על אודות', 'shortcuts' : 'קיצורי דרך', 'help' : 'עזרה', 'webfm' : 'מנהל קבצים בדפדפן', 'ver' : 'גרסה', 'protocolver' : 'גרסת פרוטוקול', 'homepage' : 'דף הבית של המיזם', 'docs' : 'תיעוד', 'github' : 'פילוג עותק ב־Github', 'twitter' : 'לעקוב אחרינו בטוויטר', 'facebook' : 'להצטרף אלינו בפייסבוק', 'team' : 'צוות', 'chiefdev' : 'מפתח ראשי', 'developer' : 'מתכנת', 'contributor' : 'תורם', 'maintainer' : 'מתחזק', 'translator' : 'מתרגם', 'icons' : 'סמלים', 'dontforget' : 'לא לשכוח לקחת את המגבת שלך', 'shortcutsof' : 'קיצורי הדרך מנוטרלים', 'dropFiles' : 'ניתן להשליך את הקבצים לכאן', 'or' : 'או', 'selectForUpload' : 'לבחור קבצים להעלאה', 'moveFiles' : 'העברת קבצים', 'copyFiles' : 'העתקת קבצים', 'restoreFiles' : 'שחזור פריטים', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'הסרה ממיקומים', 'aspectRatio' : 'יחס תצוגה', 'scale' : 'מתיחה', 'width' : 'רוחב', 'height' : 'גובה', 'resize' : 'שינוי הגודל', 'crop' : 'חיתוך', 'rotate' : 'היפוך', 'rotate-cw' : 'היפוך ב־90 מעלות נגד השעון', 'rotate-ccw' : 'היפוך ב־90 מעלות עם השעון CCW', 'degree' : '°', 'netMountDialogTitle' : 'עיגון כונן רשת', // added 18.04.2012 'protocol' : 'פרוטוקול', // added 18.04.2012 'host' : 'מארח', // added 18.04.2012 'port' : 'פתחה', // added 18.04.2012 'user' : 'משתמש', // added 18.04.2012 'pass' : 'ססמה', // added 18.04.2012 'confirmUnmount' : 'האם אתה מבטל $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'שחרר או הדבק קבצים מהדפדפן', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'שחרר קבצים, הדבק כתובות URL או תמונות (לוח) כאן', // from v2.1 added 07.04.2014 'encoding' : 'הקידוד', // from v2.1 added 19.12.2014 'locale' : 'שפה', // from v2.1 added 19.12.2014 'searchTarget' : 'יעד: $1', // from v2.1 added 22.5.2015 'searchMime' : 'חפש לפי סוג MIME קלט', // from v2.1 added 22.5.2015 'owner' : 'בעלים', // from v2.1 added 20.6.2015 'group' : 'קְבוּצָה', // from v2.1 added 20.6.2015 'other' : 'אַחֵר', // from v2.1 added 20.6.2015 'execute' : 'לבצע', // from v2.1 added 20.6.2015 'perm' : 'רְשׁוּת', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'התיקייה ריקה', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'התיקיה ריקה\\השחרר כדי להוסיף פריטים', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'התיקיה ריקה\\הקשה ארוכה כדי להוסיף פריטים', // from v2.1.6 added 30.12.2015 'quality' : 'איכות', // from v2.1.6 added 5.1.2016 'autoSync' : 'סנכרון אוטומטי', // from v2.1.6 added 10.1.2016 'moveUp' : 'לזוז למעלה', // from v2.1.6 added 18.1.2016 'getLink' : 'קבל קישור כתובת URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'פריטים נבחרים ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'מזהה תיקייה', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'אפשר גישה לא מקוונת', // from v2.1.10 added 3.25.2016 'reAuth' : 'לאימות מחדש', // from v2.1.10 added 3.25.2016 'nowLoading' : 'כעת טוען...', // from v2.1.12 added 4.26.2016 'openMulti' : 'פתח מספר קבצים', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'אתה מנסה לפתוח את קבצי $1. האם אתה בטוח שברצונך לפתוח בדפדפן?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'תוצאות החיפוש ריקות ביעד החיפוש.', // from v2.1.12 added 5.16.2016 'editingFile' : 'זה עריכת קובץ.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'בחרת $1 פריטים.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'יש לך $1 פריטים בלוח.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'חיפוש מצטבר הוא רק מהתצוגה הנוכחית.', // from v2.1.13 added 6.30.2016 'reinstate' : 'חזרה לשגרה', // from v2.1.15 added 3.8.2016 'complete' : '$1 הושלם', // from v2.1.15 added 21.8.2016 'contextmenu' : 'תפריט הקשר', // from v2.1.15 added 9.9.2016 'pageTurning' : 'הפיכת עמודים', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'שורשי נפח', // from v2.1.16 added 16.9.2016 'reset' : 'איפוס', // from v2.1.16 added 1.10.2016 'bgcolor' : 'צבע רקע', // from v2.1.16 added 1.10.2016 'colorPicker' : 'בוחר צבעים', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8 פיקסלים רשת', // from v2.1.16 added 4.10.2016 'enabled' : 'מופעל', // from v2.1.16 added 4.10.2016 'disabled' : 'מושבת', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'תוצאות החיפוש ריקות בתצוגה הנוכחית.\\Aלחץ על [Enter] כדי להרחיב את יעד החיפוש.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'תוצאות החיפוש של האות הראשונה ריקות בתצוגה הנוכחית.', // from v2.1.23 added 24.3.2017 'textLabel' : 'תווית טקסט', // from v2.1.17 added 13.10.2016 'minsLeft' : 'נותרה 1 דקות', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'פתח מחדש עם הקידוד שנבחר', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'שמור עם הקידוד שנבחר', // from v2.1.19 added 2.12.2016 'selectFolder' : 'בחר תיקייה', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'חיפוש באות ראשונה', // from v2.1.23 added 24.3.2017 'presets' : 'הגדרות קבועות מראש', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'זה יותר מדי פריטים כך שהוא לא יכול לאשפה.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'רוקן את התיקיה "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'אין פריטים בתיקייה "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'הַעֲדָפָה', // from v2.1.26 added 28.6.2017 'language' : 'שפה', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'אתחל את ההגדרות שנשמרו בדפדפן זה', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'הגדרות סרגל הכלים', // from v2.1.27 added 2.8.2017 'charsLeft' : '... נותרו $1 תווים.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... נותרו שורות 1$.', // from v2.1.52 added 16.1.2020 'sum' : 'סְכוּם', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'גודל קובץ מחוספס', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'התמקד באלמנט של דיאלוג עם העברה בעכבר', // from v2.1.30 added 2.11.2017 'select' : 'בחר', // from v2.1.30 added 23.11.2017 'selectAction' : 'פעולה בעת בחירת קובץ', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'פתח עם העורך שבו השתמשת בפעם הקודמת', // from v2.1.30 added 23.11.2017 'selectinvert' : 'בחירה הפוך', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'האם אתה בטוח שברצונך לשנות את השם של $1 פריטים נבחרים כמו $2?
לא ניתן לבטל זאת!', // from v2.1.31 added 4.12.2017 'batchRename' : 'שינוי שם אצווה', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ מספר', // from v2.1.31 added 8.12.2017 'asPrefix' : 'הוסף קידומת', // from v2.1.31 added 8.12.2017 'asSuffix' : 'הוסיפו סיומת', // from v2.1.31 added 8.12.2017 'changeExtention' : 'שנה סיומת', // from v2.1.31 added 8.12.2017 'columnPref' : 'הגדרות עמודות (תצוגת רשימה)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'כל השינויים ישתקפו מיד לארכיון.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'כל השינויים לא ישתקפו עד לביטול הטעינה של אמצעי אחסון זה.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'הכרך/ים הבאים שהותקנו על הכרך הזה בוטלו גם הם. האם אתה בטוח שתבטל אותו?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'מידע בחירה', // from v2.1.33 added 7.3.2018 'hashChecker' : 'אלגוריתמים להצגת ה-hash של הקובץ', // from v2.1.33 added 10.3.2018 'infoItems' : 'פריטי מידע (חלונית פרטי בחירה)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'לחץ שוב כדי לצאת.', // from v2.1.38 added 1.4.2018 'toolbar' : 'סרגל כלים', // from v2.1.38 added 4.4.2018 'workspace' : 'חלל עבודה', // from v2.1.38 added 4.4.2018 'dialog' : 'דיאלוג', // from v2.1.38 added 4.4.2018 'all' : 'את כל', // from v2.1.38 added 4.4.2018 'iconSize' : 'גודל סמל (תצוגת סמלים)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'פתח את חלון העורך המקסימלי', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'מכיוון שהמרה באמצעות API אינה זמינה כעת, אנא המרה באתר.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'לאחר ההמרה, עליך להעלות עם כתובת האתר של הפריט או קובץ שהורדת כדי לשמור את הקובץ שהומר.', //from v2.1.40 added 8.7.2018 'convertOn' : 'המר באתר של $1', // from v2.1.40 added 10.7.2018 'integrations' : 'אינטגרציות', // from v2.1.40 added 11.7.2018 'integrationWith' : 'ל-elFinder זה משולבים השירותים החיצוניים הבאים. אנא בדוק את תנאי השימוש, מדיניות הפרטיות וכו\' לפני השימוש בו.', // from v2.1.40 added 11.7.2018 'showHidden' : 'הצג פריטים מוסתרים', // from v2.1.41 added 24.7.2018 'hideHidden' : 'הסתר פריטים מוסתרים', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'הצג/הסתר פריטים מוסתרים', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'סוגי קבצים להפעלה עם "קובץ חדש"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'סוג קובץ הטקסט', // from v2.1.41 added 7.8.2018 'add' : 'לְהוֹסִיף', // from v2.1.41 added 7.8.2018 'theme' : 'תמה', // from v2.1.43 added 19.10.2018 'default' : 'בְּרִירַת מֶחדָל', // from v2.1.43 added 19.10.2018 'description' : 'תיאור', // from v2.1.43 added 19.10.2018 'website' : 'Websiteאתר אינטרנט', // from v2.1.43 added 19.10.2018 'author' : 'מְחַבֵּר', // from v2.1.43 added 19.10.2018 'email' : 'אימייל', // from v2.1.43 added 19.10.2018 'license' : 'רישיון', // from v2.1.43 added 19.10.2018 'exportToSave' : 'לא ניתן לשמור את הפריט הזה. כדי למנוע אובדן של העריכות, עליך לייצא למחשב האישי שלך.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'לחץ פעמיים על הקובץ כדי לבחור אותו.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'השתמש במצב מסך מלא', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'בלתי ידוע', 'kindRoot' : 'שורש נפח', // from v2.1.16 added 16.10.2016 'kindFolder' : 'תיקייה', 'kindSelects' : 'סלקציות', // from v2.1.29 added 29.8.2017 'kindAlias' : 'כינוי', 'kindAliasBroken' : 'כינוי שבור', // applications 'kindApp' : 'יישום', 'kindPostscript' : 'מסמך Postscript', 'kindMsOffice' : 'מסמך Microsoft Office', 'kindMsWord' : 'מסמך Microsoft Word', 'kindMsExcel' : 'מסמך Microsoft Excel', 'kindMsPP' : 'מצגת Microsoft Powerpoint', 'kindOO' : 'מסמך Open Office', 'kindAppFlash' : 'יישום Flash', 'kindPDF' : 'פורמט מסמך נייד (PDF)', 'kindTorrent' : 'קובץ Bittorrent', 'kind7z' : 'ארכיון 7z', 'kindTAR' : 'ארכיון TAR', 'kindGZIP' : 'ארכיון GZIP', 'kindBZIP' : 'ארכיון BZIP', 'kindXZ' : 'ארכיון XZ', 'kindZIP' : 'ארכיון ZIP', 'kindRAR' : 'ארכיון RAR', 'kindJAR' : 'קובץ JAR של Java', 'kindTTF' : 'גופן True Type', 'kindOTF' : 'גופן Open Type', 'kindRPM' : 'חבילת RPM', // texts 'kindText' : 'מסמך טקסט', 'kindTextPlain' : 'טקסט פשוט', 'kindPHP' : 'מקור PHP', 'kindCSS' : 'גיליון סגנון מדורג', 'kindHTML' : 'מסמך HTML', 'kindJS' : 'מקור Javascript', 'kindRTF' : 'תבנית טקסט עשיר', 'kindC' : 'מקור C', 'kindCHeader' : 'מקור כותרת C', 'kindCPP' : 'מקור C++', 'kindCPPHeader' : 'מקור כותרת C++', 'kindShell' : 'תסריט מעטפת יוניקס', 'kindPython' : 'מקור Python', 'kindJava' : 'מקור Java', 'kindRuby' : 'מקור Ruby', 'kindPerl' : 'תסריט Perl', 'kindSQL' : 'מקור SQL', 'kindXML' : 'מקור XML', 'kindAWK' : 'מקור AWK', 'kindCSV' : 'ערכים מופרדים בפסיקים', 'kindDOCBOOK' : 'מסמךDocbook XML', 'kindMarkdown' : 'טקסט של סימון', // added 20.7.2015 // images 'kindImage' : 'תמונה', 'kindBMP' : 'תמונת BMP', 'kindJPEG' : 'תמונת JPEG', 'kindGIF' : 'תמונת GIF', 'kindPNG' : 'תמונת PNG', 'kindTIFF' : 'תמונת TIFF', 'kindTGA' : 'תמונת TGA', 'kindPSD' : 'תמונת Adobe Photoshop', 'kindXBITMAP' : 'תמונת מפת סיביות X', 'kindPXM' : 'תמונת Pixelmator', // media 'kindAudio' : 'מדיה מסוג שמע', 'kindAudioMPEG' : 'שמע MPEG', 'kindAudioMPEG4' : 'שמע MPEG-4', 'kindAudioMIDI' : 'שמע MIDI', 'kindAudioOGG' : 'שמע Ogg Vorbis', 'kindAudioWAV' : 'שמע WAV', 'AudioPlaylist' : 'רשימת נגינה MP3', 'kindVideo' : 'מדיה מסוג וידאו', 'kindVideoDV' : 'סרטון DV', 'kindVideoMPEG' : 'סרטון MPEG', 'kindVideoMPEG4' : 'סרטון MPEG-4', 'kindVideoAVI' : 'סרטון AVI', 'kindVideoMOV' : 'סרטון Quick Time', 'kindVideoWM' : 'סרטון Windows Media', 'kindVideoFlash' : 'סרטון Flash', 'kindVideoMKV' : 'סרטון Matroska', 'kindVideoOGG' : 'סרטון Ogg' } }; }));PK Z;敌js/i18n/elfinder.fr_CA.jsnuW+A/** * française translation * @author Régis Guyomarch * @author Benoit Delachaux * @author Jonathan Grunder * @version 2022-03-01 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fr_CA = { translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>', language : 'française', direction : 'ltr', dateFormat : 'd/M/Y H:i', // will show like: 01/Mar/2022 12:32 fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 12:32 nonameDateFormat : 'ymd-His', // noname upload will show like: 220301-123221 messages : { 'getShareText' : 'Partagez', 'Editor ': 'Editeur de codes', /********************************** errors **********************************/ 'error' : 'Erreur', 'errUnknown' : 'Erreur inconnue.', 'errUnknownCmd' : 'Commande inconnue.', 'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.', 'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.', 'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.', 'errAccess' : 'Accès refusé.', 'errConnect' : 'Impossible de se connecter au backend.', 'errAbort' : 'Connexion interrompue.', 'errTimeout' : 'Délai de connexion dépassé.', 'errNotFound' : 'Backend non trouvé.', 'errResponse' : 'Mauvaise réponse du backend.', 'errConf' : 'Mauvaise configuration du backend.', 'errJSON' : 'Le module PHP JSON n\'est pas installé.', 'errNoVolumes' : 'Aucun volume lisible.', 'errCmdParams' : 'Mauvais paramétrage de la commande "$1".', 'errDataNotJSON' : 'Les données ne sont pas au format JSON.', 'errDataEmpty' : 'Données inexistantes.', 'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.', 'errOpen' : 'Impossible d\'ouvrir "$1".', 'errNotFolder' : 'Cet objet n\'est pas un dossier.', 'errNotFile' : 'Cet objet n\'est pas un fichier.', 'errRead' : 'Impossible de lire "$1".', 'errWrite' : 'Impossible d\'écrire dans "$1".', 'errPerm' : 'Permission refusée.', 'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.', 'errExists' : 'Un élément nommé "$1" existe déjà.', 'errInvName' : 'Nom de fichier incorrect.', 'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Dossier non trouvé.', 'errFileNotFound' : 'Fichier non trouvé.', 'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.', 'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.', 'errMkdir' : 'Impossible de créer le dossier "$1".', 'errMkfile' : 'Impossible de créer le fichier "$1".', 'errRename' : 'Impossible de renommer "$1".', 'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".', 'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".', 'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015 'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon 'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload 'errUploadNoFiles' : 'Aucun fichier à envoyer.', 'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize 'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize 'errUploadMime' : 'Type de fichier non autorisé.', 'errUploadTransfer' : '"$1" erreur transfert.', 'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new 'errReplace' : 'Impossible de remplacer "$1".', 'errSave' : 'Impossible de sauvegarder "$1".', 'errCopy' : 'Impossible de copier "$1".', 'errMove' : 'Impossible de déplacer "$1".', 'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.', 'errRm' : 'Impossible de supprimer "$1".', 'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).', 'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".', 'errArchive' : 'Impossible de créer l\'archive.', 'errArcType' : 'Type d\'archive non supporté.', 'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.', 'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.', 'errReplByChild' : 'Le dossier “$1” ne peut pas être remplacé par un élément qu\'il contient.', 'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012 'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.', 'errResize' : 'Impossible de redimensionner "$1".', 'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013 'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013 'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013 'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013 'errUsupportType' : 'Type de fichier non supporté.', 'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011 'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012 'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012 'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012 'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.', 'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"', 'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"', 'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"', 'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"', 'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"', 'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"', 'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Il y a $1 d\'erreurs supplémentaires.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Vous pouvez créer jusqu\'à $1 dossiers à la fois.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Créer une archive', 'cmdback' : 'Précédent', 'cmdcopy' : 'Copier', 'cmdcut' : 'Couper', 'cmddownload' : 'Télécharger', 'cmdduplicate' : 'Dupliquer', 'cmdedit' : 'Éditer le fichier', 'cmdextract' : 'Extraire les fichiers de l\'archive', 'cmdforward' : 'Suivant', 'cmdgetfile' : 'Sélectionner les fichiers', 'cmdhelp' : 'À propos de ce logiciel', 'cmdhome' : 'Accueil', 'cmdinfo' : 'Informations', 'cmdmkdir' : 'Nouveau dossier', 'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nouveau fichier', 'cmdopen' : 'Ouvrir', 'cmdpaste' : 'Coller', 'cmdquicklook' : 'Prévisualiser', 'cmdreload' : 'Actualiser', 'cmdrename' : 'Renommer', 'cmdrm' : 'Supprimer', 'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Trouver les fichiers', 'cmdup' : 'Remonter au dossier parent', 'cmdupload' : 'Envoyer les fichiers', 'cmdview' : 'Vue', 'cmdresize' : 'Redimensionner l\'image', 'cmdsort' : 'Trier', 'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012 'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Vers Favoris', // added 28.12.2014 'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Masquer (Préférence)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fermer', 'btnSave' : 'Sauvegarder', 'btnRm' : 'Supprimer', 'btnApply' : 'Confirmer', 'btnCancel' : 'Annuler', 'btnNo' : 'Non', 'btnYes' : 'Oui', 'btnMount' : 'Monter', // added 18.04.2012 'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012 'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Ici', // from v2.1 added 22.5.2015 'btnVolume' : 'Le volume', // from v2.1 added 22.5.2015 'btnAll' : 'Tous', // from v2.1 added 22.5.2015 'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Enregistrer & Ferme', // from v2.1 added 12.6.2015 'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015 'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ouvrir le dossier', 'ntffile' : 'Ouvrir le fichier', 'ntfreload' : 'Actualiser le contenu du dossier', 'ntfmkdir' : 'Création du dossier', 'ntfmkfile' : 'Création des fichiers', 'ntfrm' : 'Supprimer les éléments', 'ntfcopy' : 'Copier les éléments', 'ntfmove' : 'Déplacer les éléments', 'ntfprepare' : 'Préparation de la copie des éléments', 'ntfrename' : 'Renommer les fichiers', 'ntfupload' : 'Envoi des fichiers', 'ntfdownload' : 'Téléchargement des fichiers', 'ntfsave' : 'Sauvegarder les fichiers', 'ntfarchive' : 'Création de l\'archive', 'ntfextract' : 'Extraction des fichiers de l\'archive', 'ntfsearch' : 'Recherche des fichiers', 'ntfresize' : 'Redimensionner les images', 'ntfsmth' : 'Fait quelque chose', 'ntfloadimg' : 'Chargement de l\'image', 'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012 'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012 'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013 'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013 'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Vérification du contenu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Inconnue', 'Today' : 'Aujourd\'hui', 'Yesterday' : 'Hier', 'msJan' : 'Jan', 'msFeb' : 'Fév', 'msMar' : 'Mar', 'msApr' : 'Avr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aoû', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Déc', 'January' : 'Janvier', 'February' : 'Février', 'March' : 'Mars', 'April' : 'Avril', 'May' : 'Mai', 'June' : 'Juin', 'July' : 'Huillet', 'August' : 'Août', 'September' : 'Septembre', 'October' : 'Octobre', 'November' : 'Novembre', 'December' : 'Décembre', 'Sunday' : 'Dimanche', 'Monday' : 'Lundi', 'Tuesday' : 'Mardi', 'Wednesday' : 'Mercredi', 'Thursday' : 'Jeudi', 'Friday' : 'Vendredi', 'Saturday' : 'Samedi', 'Sun' : 'Dim', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Jeu', 'Fri' : 'Ven', 'Sat' : 'Sam', /******************************** sort variants ********************************/ 'sortname' : 'par nom', 'sortkind' : 'par type', 'sortsize' : 'par taille', 'sortdate' : 'par date', 'sortFoldersFirst' : 'Dossiers en premier', 'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016 'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015 'untitled folder' : 'NouveauDossier', // added 10.11.2015 'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NouveauFichier.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fichier', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation requise', 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
Cela ne peut être annulé !', 'confirmRepl' : 'Supprimer l\'ancien fichier par le nouveau ?', 'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
Convertir en UTF-8 ?
Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ce fichier a été modifié.
Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Voulez-vous vraiment déplacer les éléments vers "$1" ?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Appliquer à tous', 'name' : 'Nom', 'size' : 'Taille', 'perms' : 'Autorisations', 'modify' : 'Modifié', 'kind' : 'Type', 'read' : 'Lecture', 'write' : 'Écriture', 'noaccess' : 'Pas d\'accès', 'and' : 'et', 'unknown' : 'inconnu', 'selectall' : 'Sélectionner tous les éléments', 'selectfiles' : 'Sélectionner le(s) élément(s)', 'selectffile' : 'Sélectionner le premier élément', 'selectlfile' : 'Sélectionner le dernier élément', 'viewlist' : 'Vue par liste', 'viewicons' : 'Vue par icônes', 'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018 'places' : 'Favoris', 'calc' : 'Calculer', 'path' : 'Chemin', 'aliasfor' : 'Raccourcis pour', 'locked' : 'Verrouiller', 'dim' : 'Dimensions', 'files' : 'Fichiers', 'folders' : 'Dossiers', 'items' : 'Éléments', 'yes' : 'oui', 'no' : 'non', 'link' : 'Lien', 'searcresult' : 'Résultats de la recherche', 'selected' : 'Éléments sélectionnés', 'about' : 'À propos', 'shortcuts' : 'Raccourcis', 'help' : 'Aide', 'webfm' : 'Gestionnaire de fichier Web', 'ver' : 'Version', 'protocolver' : 'Version du protocole', 'homepage' : 'Page du projet', 'docs' : 'La documentation', 'github' : 'Forkez-nous sur Github', 'twitter' : 'Suivez nous sur twitter', 'facebook' : 'Joignez-nous facebook', 'team' : 'Équipe', 'chiefdev' : 'Développeur en chef', 'developer' : 'Développeur', 'contributor' : 'Contributeur', 'maintainer' : 'Mainteneur', 'translator' : 'Traducteur', 'icons' : 'Icônes', 'dontforget' : 'et n\'oubliez pas votre serviette', 'shortcutsof' : 'Raccourcis désactivés', 'dropFiles' : 'Déposez les fichiers ici', 'or' : 'ou', 'selectForUpload' : 'Sélectionner les fichiers à envoyer', 'moveFiles' : 'Déplacer les éléments', 'copyFiles' : 'Copier les éléments', 'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Retirer des favoris', 'aspectRatio' : 'Ratio d’affichage', 'scale' : 'Mise à l\'échelle', 'width' : 'Largeur', 'height' : 'Hauteur', 'resize' : 'Redimensionner', 'crop' : 'Recadrer', 'rotate' : 'Rotation', 'rotate-cw' : 'Rotation de 90 degrés horaire', 'rotate-ccw' : 'Rotation de 90 degrés antihoraire', 'degree' : '°', 'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012 'protocol' : 'Protocole', // added 18.04.2012 'host' : 'Hôte', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilisateur', // added 18.04.2012 'pass' : 'Mot de passe', // added 18.04.2012 'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014 'encoding' : 'Encodage', // from v2.1 added 19.12.2014 'locale' : 'Encodage régional', // from v2.1 added 19.12.2014 'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015 'owner' : 'Propriétaire', // from v2.1 added 20.6.2015 'group' : 'Groupe', // from v2.1 added 20.6.2015 'other' : 'Autre', // from v2.1 added 20.6.2015 'execute' : 'Exécuter', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'quality' : 'Qualité', // from v2.1.6 added 5.1.2016 'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016 'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016 'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016 'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016 'complete' : '$1 complété', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016 'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Actif', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Aucun résultat trouvé.\\AAppuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017 'presets' : 'Présélections', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Préférence', // from v2.1.26 added 28.6.2017 'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caractères restants.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 de lignes restantes.', // from v2.1.52 added 16.1.2020 'sum' : 'Somme', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Concentrez-vous sur l\'élément de dialogue avec le survol de la souris', // from v2.1.30 added 2.11.2017 'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
L\'action est définitive !', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018 'infoItems' : 'Éléments d\'information (panneau d\'informations de sélection)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018 'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018 'all' : 'Tout', // from v2.1.38 added 4.4.2018 'iconSize' : 'Taille des icônes (vue Icônes)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Ouvrir la fenêtre agrandie de l\'éditeur', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Étant donné que la conversion par API n\'est pas disponible actuellement, veuillez effectuer la conversion sur le site Web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Après la conversion, vous devez télécharger l\'URL de l\'élément ou un fichier téléchargé pour enregistrer le fichier converti.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convertissez sur le site de $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Intégrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Cet elFinder intègre les services externes suivants. Veuillez vérifier les conditions d\'utilisation, la politique de confidentialité, etc. avant de l\'utiliser.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Afficher les éléments cachés', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Masquer les éléments cachés', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Afficher/Masquer les éléments masqués', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Types de fichiers à activer avec "Nouveau fichier"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type de fichier texte', // from v2.1.41 added 7.8.2018 'add' : 'Ajouter', // from v2.1.41 added 7.8.2018 'theme' : 'Défaut', // from v2.1.43 added 19.10.2018 'default' : 'défaut', // from v2.1.43 added 19.10.2018 'description' : 'La description', // from v2.1.43 added 19.10.2018 'website' : 'Site Internet', // from v2.1.43 added 19.10.2018 'author' : 'Auteure', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'la licence', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Cet élément ne peut pas être enregistré. Pour éviter de perdre les modifications, vous devez exporter vers votre PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double-cliquez sur le fichier pour le sélectionner.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Utiliser le mode plein écran', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Inconnu', 'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dossier', 'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Raccourci', 'kindAliasBroken' : 'Raccourci cassé', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Présentation Microsoft PowerPoint', 'kindOO' : 'Document OpenOffice', 'kindAppFlash' : 'Application Flash', 'kindPDF' : 'Format de document portable (PDF)', 'kindTorrent' : 'Fichier BitTorrent', 'kind7z' : 'Archive 7z', 'kindTAR' : 'Archive TAR', 'kindGZIP' : 'Archive GZIP', 'kindBZIP' : 'Archive BZIP', 'kindXZ' : 'Archive XZ', 'kindZIP' : 'Archive ZIP', 'kindRAR' : 'Archive RAR', 'kindJAR' : 'Fichier Java JAR', 'kindTTF' : 'Police True Type', 'kindOTF' : 'Police Open Type', 'kindRPM' : 'Package RPM', // texts 'kindText' : 'Document Text', 'kindTextPlain' : 'Texte non formaté', 'kindPHP' : 'Source PHP', 'kindCSS' : 'Feuille de style en cascade', 'kindHTML' : 'Document HTML', 'kindJS' : 'Source JavaScript', 'kindRTF' : 'Format de texte enrichi (Rich Text Format)', 'kindC' : 'Source C', 'kindCHeader' : 'Source header C', 'kindCPP' : 'Source C++', 'kindCPPHeader' : 'Source header C++', 'kindShell' : 'Shell script Unix', 'kindPython' : 'Source Python', 'kindJava' : 'Source Java', 'kindRuby' : 'Source Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Source SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Source AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Texte de démarque', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'Image BMP', 'kindJPEG' : 'Image JPEG', 'kindGIF' : 'Image GIF', 'kindPNG' : 'Image PNG', 'kindTIFF' : 'Image TIFF', 'kindTGA' : 'Image TGA', 'kindPSD' : 'Image Adobe Photoshop', 'kindXBITMAP' : 'Image X bitmap', 'kindPXM' : 'Image Pixelmator', // media 'kindAudio' : 'Son', 'kindAudioMPEG' : 'Son MPEG', 'kindAudioMPEG4' : 'Son MPEG-4', 'kindAudioMIDI' : 'Son MIDI', 'kindAudioOGG' : 'Son Ogg Vorbis', 'kindAudioWAV' : 'Son WAV', 'AudioPlaylist' : 'Liste de lecture audio', 'kindVideo' : 'Vidéo', 'kindVideoDV' : 'Vidéo DV', 'kindVideoMPEG' : 'Vidéo MPEG', 'kindVideoMPEG4' : 'Vidéo MPEG-4', 'kindVideoAVI' : 'Vidéo AVI', 'kindVideoMOV' : 'Vidéo Quick Time', 'kindVideoWM' : 'Vidéo Windows Media', 'kindVideoFlash' : 'Vidéo Flash', 'kindVideoMKV' : 'Vidéo Matroska', 'kindVideoOGG' : 'Vidéo Ogg' } }; }));PK Z0{{js/i18n/.htaccessnuW+A Order allow,deny Deny from all PK Zp5 js/i18n/elfinder.ru.jsnuW+A/** * Русский язык translation * @author Dmitry "dio" Levashov * @author Andrew Berezovsky * @author Alex Yashkin * @version 2022-03-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ru = { translator : 'Dmitry "dio" Levashov <dio@std42.ru>, Andrew Berezovsky <andrew.berezovsky@gmail.com>, Alex Yashkin <alex@yashkin.by>', language : 'Русский язык', direction : 'ltr', dateFormat : 'd M Y H:i', // will show like: 03 Мар 2022 11:22 fancyDateFormat : '$1 H:i', // will show like: Сегодня 11:22 nonameDateFormat : 'ymd-His', // noname upload will show like: 220303-112216 messages : { 'getShareText' : 'Делиться', 'Editor ': 'Редактор кода', /********************************** errors **********************************/ 'error' : 'Ошибка', 'errUnknown' : 'Неизвестная ошибка.', 'errUnknownCmd' : 'Неизвестная команда.', 'errJqui' : 'Отсутствуют необходимые компоненты jQuery UI - selectable, draggable и droppable.', 'errNode' : 'Отсутствует DOM элемент для инициализации elFinder.', 'errURL' : 'Неверная конфигурация elFinder! Не указан URL.', 'errAccess' : 'Доступ запрещен.', 'errConnect' : 'Не удалось соединиться с сервером.', 'errAbort' : 'Соединение прервано.', 'errTimeout' : 'Таймаут соединения.', 'errNotFound' : 'Сервер не найден.', 'errResponse' : 'Некорректный ответ сервера.', 'errConf' : 'Некорректная настройка сервера.', 'errJSON' : 'Модуль PHP JSON не установлен.', 'errNoVolumes' : 'Отсутствуют корневые директории достуные для чтения.', 'errCmdParams' : 'Некорректные параметры команды "$1".', 'errDataNotJSON' : 'Данные не в формате JSON.', 'errDataEmpty' : 'Данные отсутствуют.', 'errCmdReq' : 'Для запроса к серверу необходимо указать имя команды.', 'errOpen' : 'Не удалось открыть "$1".', 'errNotFolder' : 'Объект не является папкой.', 'errNotFile' : 'Объект не является файлом.', 'errRead' : 'Ошибка чтения "$1".', 'errWrite' : 'Ошибка записи в "$1".', 'errPerm' : 'Доступ запрещен.', 'errLocked' : '"$1" защищен и не может быть переименован, перемещен или удален.', 'errExists' : 'В папке уже существует файл с именем "$1".', 'errInvName' : 'Недопустимое имя файла.', 'errInvDirname' : 'Недопустимое имя папки.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Папка не найдена.', 'errFileNotFound' : 'Файл не найден.', 'errTrgFolderNotFound' : 'Целевая папка "$1" не найдена.', 'errPopup' : 'Браузер заблокировал открытие нового окна. Чтобы открыть файл, измените настройки браузера.', 'errMkdir' : 'Ошибка создания папки "$1".', 'errMkfile' : 'Ошибка создания файла "$1".', 'errRename' : 'Ошибка переименования "$1".', 'errCopyFrom' : 'Копирование файлов из директории "$1" запрещено.', 'errCopyTo' : 'Копирование файлов в директорию "$1" запрещено.', 'errMkOutLink' : 'Невозможно создать ссылку вне корня раздела.', // from v2.1 added 03.10.2015 'errUpload' : 'Ошибка загрузки.', // old name - errUploadCommon 'errUploadFile' : 'Невозможно загрузить "$1".', // old name - errUpload 'errUploadNoFiles' : 'Нет файлов для загрузки.', 'errUploadTotalSize' : 'Превышен допустимый размер загружаемых данных.', // old name - errMaxSize 'errUploadFileSize' : 'Размер файла превышает допустимый.', // old name - errFileMaxSize 'errUploadMime' : 'Недопустимый тип файла.', 'errUploadTransfer' : 'Ошибка передачи файла "$1".', 'errUploadTemp' : 'Невозможно создать временный файл для загрузки.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Объект "$1" по этому адресу уже существует и не может быть заменен объектом другого типа.', // new 'errReplace' : 'Невозможно заменить "$1".', 'errSave' : 'Невозможно сохранить "$1".', 'errCopy' : 'Невозможно скопировать "$1".', 'errMove' : 'Невозможно переместить "$1".', 'errCopyInItself' : 'Невозможно скопировать "$1" в самого себя.', 'errRm' : 'Невозможно удалить "$1".', 'errTrash' : 'Невозможно переместить в корзину.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Невозможно удалить файлы источника.', 'errExtract' : 'Невозможно извлечь фалы из "$1".', 'errArchive' : 'Невозможно создать архив.', 'errArcType' : 'Неподдерживаемый тип архива.', 'errNoArchive' : 'Файл не является архивом или неподдерживаемый тип архива.', 'errCmdNoSupport' : 'Сервер не поддерживает эту команду.', 'errReplByChild' : 'Невозможно заменить папку "$1" содержащимся в ней объектом.', 'errArcSymlinks' : 'По соображениям безопасности запрещена распаковка архивов, содержащих ссылки (symlinks) или файлы с недопустимыми именами.', // edited 24.06.2012 'errArcMaxSize' : 'Размер файлов в архиве превышает максимально разрешенный.', 'errResize' : 'Не удалось изменить размер "$1".', 'errResizeDegree' : 'Некорректный градус поворота.', // added 7.3.2013 'errResizeRotate' : 'Невозможно повернуть изображение.', // added 7.3.2013 'errResizeSize' : 'Некорректный размер изображения.', // added 7.3.2013 'errResizeNoChange' : 'Размер изображения не изменился.', // added 7.3.2013 'errUsupportType' : 'Неподдерживаемый тип файла.', 'errNotUTF8Content' : 'Файл "$1" содержит текст в кодировке отличной от UTF-8 и не может быть отредактирован.', // added 9.11.2011 'errNetMount' : 'Невозможно подключить "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Неподдерживаемый протокол.', // added 17.04.2012 'errNetMountFailed' : 'Ошибка монтирования.', // added 17.04.2012 'errNetMountHostReq' : 'Требуется указать хост.', // added 18.04.2012 'errSessionExpires' : 'Сессия была завершена так как превышено время отсутствия активности.', 'errCreatingTempDir' : 'Невозможно создать временную директорию: "$1"', 'errFtpDownloadFile' : 'Невозможно скачать файл с FTP: "$1"', 'errFtpUploadFile' : 'Невозможно загрузить файл на FTP: "$1"', 'errFtpMkdir' : 'Невозможно создать директорию на FTP: "$1"', 'errArchiveExec' : 'Ошибка при выполнении архивации: "$1"', 'errExtractExec' : 'Ошибка при выполнении распаковки: "$1"', 'errNetUnMount' : 'Невозможно отключить', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Не конвертируется в UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Если вы хотите загружать папки, попробуйте Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Превышено время ожидания при поиске "$1". Результаты поиска частичные.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Требуется повторная авторизация.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Максимальное число выбираемых файлов: $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Невозможно восстановить из корзины. Не удалось определить путь для восстановления.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Не найден редактор для этого типа файлов.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Возникла ошибка на стороне сервера.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Невозможно очистить папку "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Еще ошибок: $1', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Вы можете создать до $1 папки одновременно.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Создать архив', 'cmdback' : 'Назад', 'cmdcopy' : 'Копировать', 'cmdcut' : 'Вырезать', 'cmddownload' : 'Скачать', 'cmdduplicate' : 'Сделать копию', 'cmdedit' : 'Редактировать файл', 'cmdextract' : 'Распаковать архив', 'cmdforward' : 'Вперед', 'cmdgetfile' : 'Выбрать файлы', 'cmdhelp' : 'О программе', 'cmdhome' : 'Домой', 'cmdinfo' : 'Свойства', 'cmdmkdir' : 'Новая папка', 'cmdmkdirin' : 'В новую папку', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Новый файл', 'cmdopen' : 'Открыть', 'cmdpaste' : 'Вставить', 'cmdquicklook' : 'Быстрый просмотр', 'cmdreload' : 'Обновить', 'cmdrename' : 'Переименовать', 'cmdrm' : 'Удалить', 'cmdtrash' : 'Переместить в корзину', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Восстановить', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Поиск файлов', 'cmdup' : 'Наверх', 'cmdupload' : 'Загрузить файлы', 'cmdview' : 'Вид', 'cmdresize' : 'Изменить размер и повернуть', 'cmdsort' : 'Сортировать', 'cmdnetmount' : 'Подключить сетевой раздел', // added 18.04.2012 'cmdnetunmount': 'Отключить', // from v2.1 added 30.04.2012 'cmdplaces' : 'В избранное', // added 28.12.2014 'cmdchmod' : 'Изменить права доступа', // from v2.1 added 20.6.2015 'cmdopendir' : 'Открыть папку', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Сбросить ширину колонок', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Полный экран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Переместить', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Очистить папку', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Отменить', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Вернуть', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Предпочтения', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Выбрать все', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Отменить выбор', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Инвертировать выбор', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Открыть в новом окне', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Скрыть (персонально)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Закрыть', 'btnSave' : 'Сохранить', 'btnRm' : 'Удалить', 'btnApply' : 'Применить', 'btnCancel' : 'Отмена', 'btnNo' : 'Нет', 'btnYes' : 'Да', 'btnMount' : 'Подключить', // added 18.04.2012 'btnApprove': 'Перейти в $1 и применить', // from v2.1 added 26.04.2012 'btnUnmount': 'Отключить', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертировать', // from v2.1 added 08.04.2014 'btnCwd' : 'Здесь', // from v2.1 added 22.5.2015 'btnVolume' : 'Раздел', // from v2.1 added 22.5.2015 'btnAll' : 'Все', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Имя файла', // from v2.1 added 22.5.2015 'btnSaveClose': 'Сохранить и закрыть', // from v2.1 added 12.6.2015 'btnBackup' : 'Резервная копия', // fromv2.1 added 28.11.2015 'btnRename' : 'Переименовать', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Переименовать (все)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Пред. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'След. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Сохранить как', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Открыть папку', 'ntffile' : 'Открыть файл', 'ntfreload' : 'Обновить текущую папку', 'ntfmkdir' : 'Создание папки', 'ntfmkfile' : 'Создание файлов', 'ntfrm' : 'Удалить файлы', 'ntfcopy' : 'Скопировать файлы', 'ntfmove' : 'Переместить файлы', 'ntfprepare' : 'Подготовка к копированию файлов', 'ntfrename' : 'Переименовать файлы', 'ntfupload' : 'Загрузка файлов', 'ntfdownload' : 'Скачивание файлов', 'ntfsave' : 'Сохранить файлы', 'ntfarchive' : 'Создание архива', 'ntfextract' : 'Распаковка архива', 'ntfsearch' : 'Поиск файлов', 'ntfresize' : 'Изменение размеров изображений', 'ntfsmth' : 'Занят важным делом', 'ntfloadimg' : 'Загрузка изображения', 'ntfnetmount' : 'Подключение сетевого диска', // added 18.04.2012 'ntfnetunmount': 'Отключение сетевого диска', // from v2.1 added 30.04.2012 'ntfdim' : 'Получение размеров изображения', // added 20.05.2013 'ntfreaddir' : 'Чтение информации о папке', // from v2.1 added 01.07.2013 'ntfurl' : 'Получение URL ссылки', // from v2.1 added 11.03.2014 'ntfchmod' : 'Изменение прав доступа к файлу', // from v2.1 added 20.6.2015 'ntfpreupload': 'Проверка измени загруженного файла', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Создание файла для скачки', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Получение информации о пути', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обработка загруженного файла', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Перемещение в корзину', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Восстановление из корзины', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Проверка папки назначения', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Отмена предыдущей операции', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Восстановление предыдущей операции', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Проверка содержимого', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Корзина', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'неизвестно', 'Today' : 'Сегодня', 'Yesterday' : 'Вчера', 'msJan' : 'Янв', 'msFeb' : 'Фев', 'msMar' : 'Мар', 'msApr' : 'Апр', 'msMay' : 'Май', 'msJun' : 'Июн', 'msJul' : 'Июл', 'msAug' : 'Авг', 'msSep' : 'Сен', 'msOct' : 'Окт', 'msNov' : 'Ноя', 'msDec' : 'Дек', 'January' : 'Январь', 'February' : 'Февраль', 'March' : 'Март', 'April' : 'Апрель', 'May' : 'Май', 'June' : 'Июнь', 'July' : 'Июль', 'August' : 'Август', 'September' : 'Сентябрь', 'October' : 'Октябрь', 'November' : 'Ноябрь', 'December' : 'Декабрь', 'Sunday' : 'Воскресенье', 'Monday' : 'Понедельник', 'Tuesday' : 'Вторник', 'Wednesday' : 'Среда', 'Thursday' : 'Четверг', 'Friday' : 'Пятница', 'Saturday' : 'Суббота', 'Sun' : 'Вск', 'Mon' : 'Пнд', 'Tue' : 'Втр', 'Wed' : 'Срд', 'Thu' : 'Чтв', 'Fri' : 'Птн', 'Sat' : 'Сбт', /******************************** sort variants ********************************/ 'sortname' : 'по имени', 'sortkind' : 'по типу', 'sortsize' : 'по размеру', 'sortdate' : 'по дате', 'sortFoldersFirst' : 'Папки в начале', 'sortperm' : 'по разрешениям', // from v2.1.13 added 13.06.2016 'sortmode' : 'по режиму', // from v2.1.13 added 13.06.2016 'sortowner' : 'по владельцу', // from v2.1.13 added 13.06.2016 'sortgroup' : 'по группе', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Также и дерево каталогов', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'НовыйФайл.txt', // added 10.11.2015 'untitled folder' : 'НоваяПапка', // added 10.11.2015 'Archive' : 'НовыйАрхив', // from v2.1 added 10.11.2015 'untitled file' : 'НовыйФайл.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 Файл', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Необходимо подтверждение', 'confirmRm' : 'Вы уверены, что хотите удалить файлы?
Действие необратимо!', 'confirmRepl' : 'Заменить старый файл новым?', 'confirmRest' : 'Заменить существующий файл файлом из корзины?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Не UTF-8
Сконвертировать в UTF-8?
Данные станут UTF-8 при сохранении после конвертации.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Невозможно определить кодировку файла. Необходима предварительная конвертация файла в UTF-8 для дальнейшего редактирования.
Выберите кодировку файла.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Произошли изменения.
Если не сохраните изменения, то потеряете их.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Вы уверены, что хотите переместить файлы в корзину?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Вы уверены, что хотите переместить файлы в "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Применить для всех', 'name' : 'Имя', 'size' : 'Размер', 'perms' : 'Доступ', 'modify' : 'Изменен', 'kind' : 'Тип', 'read' : 'чтение', 'write' : 'запись', 'noaccess' : 'нет доступа', 'and' : 'и', 'unknown' : 'неизвестно', 'selectall' : 'Выбрать все файлы', 'selectfiles' : 'Выбрать файл(ы)', 'selectffile' : 'Выбрать первый файл', 'selectlfile' : 'Выбрать последний файл', 'viewlist' : 'В виде списка', 'viewicons' : 'В виде иконок', 'viewSmall' : 'Маленькие иконки', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Средние иконки', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Большие иконки', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Очень большие иконки', // from v2.1.39 added 22.5.2018 'places' : 'Избранное', 'calc' : 'Вычислить', 'path' : 'Путь', 'aliasfor' : 'Указывает на', 'locked' : 'Защита', 'dim' : 'Размеры', 'files' : 'Файлы', 'folders' : 'Папки', 'items' : 'Объекты', 'yes' : 'да', 'no' : 'нет', 'link' : 'Ссылка', 'searcresult' : 'Результаты поиска', 'selected' : 'выбрано', 'about' : 'О программе', 'shortcuts' : 'Горячие клавиши', 'help' : 'Помощь', 'webfm' : 'Файловый менеджер для Web', 'ver' : 'Версия', 'protocolver' : 'версия протокола', 'homepage' : 'Сайт проекта', 'docs' : 'Документация', 'github' : 'Форкните на GitHub', 'twitter' : 'Следите в Twitter', 'facebook' : 'Присоединяйтесь на Facebook', 'team' : 'Команда', 'chiefdev' : 'ведущий разработчик', 'developer' : 'разработчик', 'contributor' : 'участник', 'maintainer' : 'сопровождение проекта', 'translator' : 'переводчик', 'icons' : 'Иконки', 'dontforget' : 'и не забудьте взять своё полотенце', 'shortcutsof' : 'Горячие клавиши отключены', 'dropFiles' : 'Перетащите файлы сюда', 'or' : 'или', 'selectForUpload' : 'Выбрать файлы для загрузки', 'moveFiles' : 'Переместить файлы', 'copyFiles' : 'Скопировать файлы', 'restoreFiles' : 'Восстановить файлы', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Удалить из избранного', 'aspectRatio' : 'Соотношение сторон', 'scale' : 'Масштаб', 'width' : 'Ширина', 'height' : 'Высота', 'resize' : 'Изменить размер', 'crop' : 'Обрезать', 'rotate' : 'Повернуть', 'rotate-cw' : 'Повернуть на 90 градусов по часовой стрелке', 'rotate-ccw' : 'Повернуть на 90 градусов против часовой стрелке', 'degree' : '°', 'netMountDialogTitle' : 'Подключить сетевой диск', // added 18.04.2012 'protocol' : 'Протокол', // added 18.04.2012 'host' : 'Хост', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Пользователь', // added 18.04.2012 'pass' : 'Пароль', // added 18.04.2012 'confirmUnmount' : 'Вы хотите отключить $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Перетащите или вставьте файлы из браузера', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Перетащите или вставьте файлы и ссылки сюда', // from v2.1 added 07.04.2014 'encoding' : 'Кодировка', // from v2.1 added 19.12.2014 'locale' : 'Локаль', // from v2.1 added 19.12.2014 'searchTarget' : 'Цель: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Поиск по введенному MIME типу', // from v2.1 added 22.5.2015 'owner' : 'Владелец', // from v2.1 added 20.6.2015 'group' : 'Группа', // from v2.1 added 20.6.2015 'other' : 'Остальные', // from v2.1 added 20.6.2015 'execute' : 'Исполнить', // from v2.1 added 20.6.2015 'perm' : 'Разрешение', // from v2.1 added 20.6.2015 'mode' : 'Режим', // from v2.1 added 20.6.2015 'emptyFolder' : 'Папка пуста', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Папка пуста\\A Перетащите чтобы добавить', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Папка пуста\\A Долгое нажатие чтобы добавить', // from v2.1.6 added 30.12.2015 'quality' : 'Качество', // from v2.1.6 added 5.1.2016 'autoSync' : 'Авто синхронизация', // from v2.1.6 added 10.1.2016 'moveUp' : 'Передвинуть вверх', // from v2.1.6 added 18.1.2016 'getLink' : 'Получить URL ссылку', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Выбранные объекты ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID папки', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Позволить автономный доступ', // from v2.1.10 added 3.25.2016 'reAuth' : 'Авторизоваться повторно', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Загружается...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Открыть несколько файлов', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Вы пытаетесь открыть $1 файл(а/ов). Вы уверены, что хотите открыть их в браузере?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Ничего не найдено', // from v2.1.12 added 5.16.2016 'editingFile' : 'Это редактируемый файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Вы выбрали $1 файл(-ов).', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'У вас $1 файл(-ов) в буфере обмена.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Инкрементный поиск возможен только из текущего вида.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Восстановить', // from v2.1.15 added 3.8.2016 'complete' : '$1 завершен', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контекстное меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Переключение страницы', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Корни томов', // from v2.1.16 added 16.9.2016 'reset' : 'Сбросить', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Фоновый цвет', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Выбор цвета', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px сетка', // from v2.1.16 added 4.10.2016 'enabled' : 'Включено', // from v2.1.16 added 4.10.2016 'disabled' : 'Отключено', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Ничего не найдено в текущем виде.\\AНажмите [Enter] для развертывания цели поиска.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Поиск по первому символу не дал результатов в текущем виде.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Текстовая метка', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 минут осталось', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Переоткрыть с выбранной кодировкой', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Сохранить с выбранной кодировкой', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Выбрать папку', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Поиск по первому символу', // from v2.1.23 added 24.3.2017 'presets' : 'Пресеты', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Слишком много файлов для перемещения в корзину.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Текстовая область', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Очистить папку "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Нет файлов в паке "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Настройки', // from v2.1.26 added 28.6.2017 'language' : 'Язык', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Сбросить настройки для этого браузера', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Настройки панели', // from v2.1.27 added 2.8.2017 'charsLeft' : '... еще символов: $1.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... еще строк: $1.', // from v2.1.52 added 16.1.2020 'sum' : 'Общий размер', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Приблизительный размер файла', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фокус на элементе диалога при наведении мыши', // from v2.1.30 added 2.11.2017 'select' : 'Выбрать', // from v2.1.30 added 23.11.2017 'selectAction' : 'Действие при выборе файла', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Открывать в редакторе, выбранном в прошлый раз', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Выбрать элементы с инвертированием', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Переименовать выбранные элементы ($1 шт.) в $2?
Действие нельзя отменить!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Групповое переименование', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Число', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Добавить префикс', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Добавить суффикс', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Изменить расширение', // from v2.1.31 added 8.12.2017 'columnPref' : 'Настройки колонок (для просмотра в виде списка)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Все изменения будут немедленно отражены в архиве.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Изменения не вступят в силу до тех пор, пока вы не размонтируете этот том.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Тома, смонтированные на этом томе, также будут размонтированы. Вы хотите отключить его?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Свойства', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Алгоритмы для отображения хеш-сумм файлов', // from v2.1.33 added 10.3.2018 'infoItems' : 'Элементы в панели свойств', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Нажмите снова для выхода.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Панель', // from v2.1.38 added 4.4.2018 'workspace' : 'Рабочая область', // from v2.1.38 added 4.4.2018 'dialog' : 'Диалог', // from v2.1.38 added 4.4.2018 'all' : 'Все', // from v2.1.38 added 4.4.2018 'iconSize' : 'Размер иконок (В виде иконок)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Открывать редактор в развернутом виде', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Так как конвертация с помощью API недоступно, произведите конвертацию на веб-сайте.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'После конвертации вы должны загрузить скачанный файл, чтобы сохранить его.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертировать на сайте $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Интеграции', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Менеджер elFinder интегрирован со следующими внешними сервисами. Ознакомьтесь с правилами пользования, политиками безопасности и др. перед их использованием.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Показать скрытые элементы', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Скрыть скрытые элементы', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Показать/скрыть скрытые элементы', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Типы файлов в меню "Новый файл"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Тип текстового файла', // from v2.1.41 added 7.8.2018 'add' : 'Добавить', // from v2.1.41 added 7.8.2018 'theme' : 'Тема', // from v2.1.43 added 19.10.2018 'default' : 'По умолчанию', // from v2.1.43 added 19.10.2018 'description' : 'Описание', // from v2.1.43 added 19.10.2018 'website' : 'Веб-сайт', // from v2.1.43 added 19.10.2018 'author' : 'Автор', // from v2.1.43 added 19.10.2018 'email' : 'Эл. адрес', // from v2.1.43 added 19.10.2018 'license' : 'Лицензия', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Невозможно сохранить файл. Чтобы не потерять изменения, экспортируйте их на свой ПК.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Двойной клик по файлу для его выбора.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Использовать полноэкранный режим', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Неизвестный', 'kindRoot' : 'Корень тома', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Выбор', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Ссылка', 'kindAliasBroken' : 'Битая ссылка', // applications 'kindApp' : 'Приложение', 'kindPostscript' : 'Документ Postscript', 'kindMsOffice' : 'Документ Microsoft Office', 'kindMsWord' : 'Документ Microsoft Word', 'kindMsExcel' : 'Документ Microsoft Excel', 'kindMsPP' : 'Презентация Microsoft Powerpoint', 'kindOO' : 'Документ Open Office', 'kindAppFlash' : 'Приложение Flash', 'kindPDF' : 'Документ PDF', 'kindTorrent' : 'Файл Bittorrent', 'kind7z' : 'Архив 7z', 'kindTAR' : 'Архив TAR', 'kindGZIP' : 'Архив GZIP', 'kindBZIP' : 'Архив BZIP', 'kindXZ' : 'Архив XZ', 'kindZIP' : 'Архив ZIP', 'kindRAR' : 'Архив RAR', 'kindJAR' : 'Файл Java JAR', 'kindTTF' : 'Шрифт True Type', 'kindOTF' : 'Шрифт Open Type', 'kindRPM' : 'Пакет RPM', // texts 'kindText' : 'Текстовый документ', 'kindTextPlain' : 'Простой текст', 'kindPHP' : 'Исходник PHP', 'kindCSS' : 'Таблицы стилей CSS', 'kindHTML' : 'Документ HTML', 'kindJS' : 'Исходник Javascript', 'kindRTF' : 'Расширенный текстовый формат', 'kindC' : 'Исходник C', 'kindCHeader' : 'Заголовочный файл C', 'kindCPP' : 'Исходник C++', 'kindCPPHeader' : 'Заголовочный файл C++', 'kindShell' : 'Скрипт Unix shell', 'kindPython' : 'Исходник Python', 'kindJava' : 'Исходник Java', 'kindRuby' : 'Исходник Ruby', 'kindPerl' : 'Исходник Perl', 'kindSQL' : 'Исходник SQL', 'kindXML' : 'Документ XML', 'kindAWK' : 'Исходник AWK', 'kindCSV' : 'Текст с разделителями', 'kindDOCBOOK' : 'Документ Docbook XML', 'kindMarkdown' : 'Текст Markdown', // added 20.7.2015 // images 'kindImage' : 'Изображение', 'kindBMP' : 'Изображение BMP', 'kindJPEG' : 'Изображение JPEG', 'kindGIF' : 'Изображение GIF', 'kindPNG' : 'Изображение PNG', 'kindTIFF' : 'Изображение TIFF', 'kindTGA' : 'Изображение TGA', 'kindPSD' : 'Изображение Adobe Photoshop', 'kindXBITMAP' : 'Изображение X bitmap', 'kindPXM' : 'Изображение Pixelmator', // media 'kindAudio' : 'Аудио файл', 'kindAudioMPEG' : 'Аудио MPEG', 'kindAudioMPEG4' : 'Аудио MPEG-4', 'kindAudioMIDI' : 'Аудио MIDI', 'kindAudioOGG' : 'Аудио Ogg Vorbis', 'kindAudioWAV' : 'Аудио WAV', 'AudioPlaylist' : 'Плейлист MP3', 'kindVideo' : 'Видео файл', 'kindVideoDV' : 'Видео DV', 'kindVideoMPEG' : 'Видео MPEG', 'kindVideoMPEG4' : 'Видео MPEG-4', 'kindVideoAVI' : 'Видео AVI', 'kindVideoMOV' : 'Видео Quick Time', 'kindVideoWM' : 'Видео Windows Media', 'kindVideoFlash' : 'Видео Flash', 'kindVideoMKV' : 'Видео Matroska', 'kindVideoOGG' : 'Видео Ogg' } }; })); PK Zˑˑjs/i18n/elfinder.vi.jsnuW+A/** * Ngôn ngữ Việt Nam translation * @author Chung Thủy f * @author Son Nguyen * @author Nguyễn Trần Chung * @version 2022-03-04 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.vi = { translator : 'Chung Thủy f <chungthuyf@gmail.com>, Son Nguyen <son.nguyen@catalyst.net.nz>, Nguyễn Trần Chung <admin@chungnguyen.xyz>', language : 'Ngôn ngữ Việt Nam', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 04.03.2022 11:11 fancyDateFormat : '$1 H:i', // will show like: Hôm nay 11:11 nonameDateFormat : 'ymd-His', // noname upload will show like: 220304-111107 messages : { 'getShareText' : 'Đăng lại', 'Editor ': 'Trình chỉnh sửa mã', /********************************** errors **********************************/ 'error' : 'Lỗi', 'errUnknown' : 'Lỗi không xác định được.', 'errUnknownCmd' : 'Lỗi không rõ lệnh.', 'errJqui' : 'Cấu hình jQueryUI không hợp lệ. Các thành phần lựa chọn, kéo và thả phải được bao gồm.', 'errNode' : 'elFinder đòi hỏi phần tử DOM phải được tạo ra.', 'errURL' : 'Cấu hình elFinder không hợp lệ! URL không được thiết lập tùy chọn.', 'errAccess' : 'Truy cập bị từ chối.', 'errConnect' : 'Không thể kết nối với backend.', 'errAbort' : 'Kết nối bị hủy bỏ.', 'errTimeout' : 'Thời gian chờ kết nối đã hết.', 'errNotFound' : 'Backend không tìm thấy.', 'errResponse' : 'Phản hồi backend không hợp lệ.', 'errConf' : 'Cấu hình backend không hợp lệ.', 'errJSON' : 'Mô-đun PHP JSON không được cài đặt.', 'errNoVolumes' : 'Tập có thể đọc không có sẵn.', 'errCmdParams' : 'Thông số không hợp lệ cho lệnh "$1".', 'errDataNotJSON' : 'Dữ liệu không phải là JSON.', 'errDataEmpty' : 'Dữ liệu trống.', 'errCmdReq' : 'Backend đòi hỏi tên lệnh.', 'errOpen' : 'Không thể mở "$1".', 'errNotFolder' : 'Đối tượng không phải là một thư mục.', 'errNotFile' : 'Đối tượng không phải là một tập tin.', 'errRead' : 'Không thể đọc "$1".', 'errWrite' : 'Không thể ghi vào "$1".', 'errPerm' : 'Quyền bị từ chối.', 'errLocked' : '"$1" đã bị khóa và không thể đổi tên, di chuyển hoặc loại bỏ.', 'errExists' : 'Tập tin có tên "$1" đã tồn tại.', 'errInvName' : 'Tên tập tin không hợp lệ.', 'errInvDirname' : 'Tên thư mục không hợp lệ.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Thư mục không tìm thấy.', 'errFileNotFound' : 'Tập tin không tìm thấy.', 'errTrgFolderNotFound' : 'Thư mục đích "$1" không được tìm thấy.', 'errPopup' : 'Trình duyệt ngăn chặn mở cửa sổ popup.', 'errMkdir' : 'Không thể tạo thư mục "$1".', 'errMkfile' : 'Không thể tạo tập tin "$1".', 'errRename' : 'Không thể đổi tên "$1".', 'errCopyFrom' : 'Sao chép tập tin từ tập "$1" không được phép.', 'errCopyTo' : 'Sao chép tập tin tới tập "$1" không được phép.', 'errMkOutLink' : 'Không thể tạo liên kết ra bên ngoài volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Tải lên báo lỗi.', // old name - errUploadCommon 'errUploadFile' : 'Không thể tải lên "$1".', // old name - errUpload 'errUploadNoFiles' : 'Không thấy tập tin nào để tải lên.', 'errUploadTotalSize' : 'Dữ liệu vượt quá kích thước tối đa cho phép.', // old name - errMaxSize 'errUploadFileSize' : 'Tập tin vượt quá kích thước tối đa cho phép.', // old name - errFileMaxSize 'errUploadMime' : 'Kiểu tập tin không được phép.', 'errUploadTransfer' : 'Lỗi khi truyền "$1".', 'errUploadTemp' : 'Không thể tạo thư mục tạm để tải lên.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Đối tượng "$1" đã tồn tại ở vị trí này và không thể thay thế bằng đối tượng với loại khác.', // new 'errReplace' : 'Không thể thay thế "$1".', 'errSave' : 'Không thể lưu "$1".', 'errCopy' : 'Không thể sao chép "$1".', 'errMove' : 'Không thể chuyển "$1".', 'errCopyInItself' : 'Không thể sao chép "$1" vào chính nó.', 'errRm' : 'Không thể xóa "$1".', 'errTrash' : 'Không thể cho vào thùng rác.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Không thể xóa tệp nguồn.', 'errExtract' : 'Không thể giải nén các tập tin từ"$1".', 'errArchive' : 'Không thể tạo ra lưu trữ.', 'errArcType' : 'Loại lưu trữ không được hỗ trợ.', 'errNoArchive' : 'Tập tin không phải là lưu trữ hoặc có kiểu lưu trữ không được hỗ trợ.', 'errCmdNoSupport' : 'Backend không hỗ trợ lệnh này.', 'errReplByChild' : 'Thư mục "$1" không thể được thay thế bằng một mục con mà nó chứa.', 'errArcSymlinks' : 'Vì lý do bảo mật, từ chối giải nén tập tin lưu trữ có chứa liên kết mềm.', // edited 24.06.2012 'errArcMaxSize' : 'Tập tin lưu trữ vượt quá kích thước tối đa cho phép.', 'errResize' : 'Không thể thay đổi kích thước "$1".', 'errResizeDegree' : 'Độ xoay không hợp lệ.', // added 7.3.2013 'errResizeRotate' : 'Không thể xoay hình ảnh.', // added 7.3.2013 'errResizeSize' : 'Kích thước hình ảnh không hợp lệ.', // added 7.3.2013 'errResizeNoChange' : 'Kích thước hình ảnh không thay đổi.', // added 7.3.2013 'errUsupportType' : 'Loại tập tin không được hỗ trợ.', 'errNotUTF8Content' : 'Tệp "$1" không phải bộ ký tự UTF-8 nên không thể chỉnh sửa.', // added 9.11.2011 'errNetMount' : 'Không thể gắn kết "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Giao thức không được hỗ trợ.', // added 17.04.2012 'errNetMountFailed' : 'Gắn (kết nối) thất bại.', // added 17.04.2012 'errNetMountHostReq' : 'Yêu cầu máy chủ.', // added 18.04.2012 'errSessionExpires' : 'Phiên của bạn đã hết hạn do không hoạt động.', 'errCreatingTempDir' : 'Không thể tạo thư mục tạm thời: "$1"', 'errFtpDownloadFile' : 'Không thể tải xuống tệp từ FTP: "$1"', 'errFtpUploadFile' : 'Không thể tải tệp lên FTP: "$1"', 'errFtpMkdir' : 'Không thể tạo thư mục từ xa trên FTP: "$1"', 'errArchiveExec' : 'Lỗi trong khi lưu trữ tệp: "$1"', 'errExtractExec' : 'Lỗi trong khi giải nén tập tin: "$1"', 'errNetUnMount' : 'Không thể gỡ gắn (liên kết).', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Không thể chuyển đổi thành UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Hãy thử trình duyệt mới hơn (vì trình duyệt hiện tại có vẻ cũ nên không hỗ trợ tải lên thư mục).', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Đã hết thời gian trong khi tìm kiếm "$1". Kết quả tìm kiếm là một phần.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Cần ủy quyền lại.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Số lượng tối đa của các mục có thể chọn là $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Không thể khôi phục từ thùng rác. Không thể xác định đích khôi phục.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Không tìm thấy trình chỉnh sửa cho loại tệp này.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Lỗi xảy ra ở phía máy chủ.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Không thể làm rỗng thư mục "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Có thêm $1 lỗi.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Bạn có thể tạo tối đa $ 1 thư mục cùng một lúc.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Tạo tập tin nén', 'cmdback' : 'Trở lại', 'cmdcopy' : 'Sao chép', 'cmdcut' : 'Cắt', 'cmddownload' : 'Tải về', 'cmdduplicate' : 'Bản sao', 'cmdedit' : 'Sửa tập tin', 'cmdextract' : 'Giải nén tập tin', 'cmdforward' : 'Trước', 'cmdgetfile' : 'Chọn tập tin', 'cmdhelp' : 'Giới thiệu phần mềm', 'cmdhome' : 'Home', 'cmdinfo' : 'Thông tin', 'cmdmkdir' : 'Thư mục', 'cmdmkdirin' : 'Vào thư mục mới', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Tạo tập tin Text', 'cmdopen' : 'Mở', 'cmdpaste' : 'Dán', 'cmdquicklook' : 'Xem trước', 'cmdreload' : 'Nạp lại', 'cmdrename' : 'Đổi tên', 'cmdrm' : 'Xóa', 'cmdtrash' : 'Vào thùng rác', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Khôi phục', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Tìm tập tin', 'cmdup' : 'Đi tới thư mục mẹ', 'cmdupload' : 'Tải tập tin lên', 'cmdview' : 'Xem', 'cmdresize' : 'Thay đổi kích thước và xoay', 'cmdsort' : 'Sắp xếp', 'cmdnetmount' : 'Gắn kết khối lượng mạng', // added 18.04.2012 'cmdnetunmount': 'Gỡ mount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Đến địa điểm', // added 28.12.2014 'cmdchmod' : 'Thay đổi chế độ', // from v2.1 added 20.6.2015 'cmdopendir' : 'Mở một thư mục', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Đặt lại chiều rộng cột', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Toàn màn hình', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Di chuyển', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Làm rỗng thư mục', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Hủy bỏ (hoàn tác)', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Làm lại', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Sở thích', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Chọn tất cả', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Không chọn gì', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Chọn ngược lại', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Mở trong cửa sổ mới', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ẩn (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Đóng', 'btnSave' : 'Lưu', 'btnRm' : 'Gỡ bỏ', 'btnApply' : 'Áp dụng', 'btnCancel' : 'Hủy bỏ', 'btnNo' : 'Không', 'btnYes' : 'Đồng ý', 'btnMount' : 'Gắn kết', // added 18.04.2012 'btnApprove': 'Đạt được $ 1 và phê duyệt', // from v2.1 added 26.04.2012 'btnUnmount': 'Tháo gỡ', // from v2.1 added 30.04.2012 'btnConv' : 'Chuyển thành', // from v2.1 added 08.04.2014 'btnCwd' : 'Đây', // from v2.1 added 22.5.2015 'btnVolume' : 'Âm lượng', // from v2.1 added 22.5.2015 'btnAll' : 'Tất cả', // from v2.1 added 22.5.2015 'btnMime' : 'Loại MIME', // from v2.1 added 22.5.2015 'btnFileName':'Tên tệp', // from v2.1 added 22.5.2015 'btnSaveClose': 'Lưu & Đóng', // from v2.1 added 12.6.2015 'btnBackup' : 'Sao lưu', // fromv2.1 added 28.11.2015 'btnRename' : 'Đổi tên', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Đổi tên (Tất cả)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Trước đó ($ 1 / $ 2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Tiếp theo ($ 1 / $ 2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Lưu thành', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Mở thư mục', 'ntffile' : 'Mở tập tin', 'ntfreload' : 'Nạp lại nội dung thư mục', 'ntfmkdir' : 'Tạo thư mục', 'ntfmkfile' : 'Tạo tập tin', 'ntfrm' : 'Xóa tập tin', 'ntfcopy' : 'Sao chép tập tin', 'ntfmove' : 'Di chuyển tập tin', 'ntfprepare' : 'Chuẩn bị để sao chép các tập tin', 'ntfrename' : 'Đổi tên tập tin', 'ntfupload' : 'Tải tập tin lên', 'ntfdownload' : 'Tải tập tin', 'ntfsave' : 'Lưu tập tin', 'ntfarchive' : 'Tạo tập tin nén', 'ntfextract' : 'Giải nén tập tin', 'ntfsearch' : 'Tìm kiếm tập tin', 'ntfresize' : 'Thay đổi kích thước hình ảnh', 'ntfsmth' : 'Doing something >_<', 'ntfloadimg' : 'Đang tải hình ảnh', 'ntfnetmount' : 'Gắn kết khối lượng mạng', // added 18.04.2012 'ntfnetunmount': 'Ngắt kết nối âm lượng mạng', // from v2.1 added 30.04.2012 'ntfdim' : 'Nhận kích thước hình ảnh', // added 20.05.2013 'ntfreaddir' : 'Đọc thông tin thư mục', // from v2.1 added 01.07.2013 'ntfurl' : 'Lấy URL của liên kết', // from v2.1 added 11.03.2014 'ntfchmod' : 'Thay đổi chế độ tệp', // from v2.1 added 20.6.2015 'ntfpreupload': 'Xác minh tên tệp tải lên', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Tạo một tệp để tải xuống', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Nhận thông tin đường dẫn', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Xử lý tệp đã tải lên', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Ném vào thùng rác', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Đang khôi phục từ thùng rác', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kiểm tra thư mục đích', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Hoàn tác hoạt động trước đó', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Làm lại hoàn tác trước đó', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kiểm tra nội dung', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Rác', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Chưa biết', 'Today' : 'Hôm nay', 'Yesterday' : 'Hôm qua', 'msJan' : 'Tháng 1', 'msFeb' : 'Tháng 2', 'msMar' : 'Tháng 3', 'msApr' : 'Tháng 4', 'msMay' : 'Tháng 5', 'msJun' : 'Tháng 6', 'msJul' : 'Tháng 7', 'msAug' : 'Tháng 8', 'msSep' : 'Tháng 9', 'msOct' : 'Tháng 10', 'msNov' : 'Tháng 11', 'msDec' : 'Tháng 12', 'January' : 'Tháng 1', 'February' : 'Tháng 2', 'March' : 'Tháng 3', 'April' : 'Tháng 4', 'May' : 'Tháng 5', 'June' : 'Tháng 6', 'July' : 'Tháng 7', 'August' : 'Tháng 8', 'September' : 'Tháng 9', 'October' : 'Tháng 10', 'November' : 'Tháng 11', 'December' : 'Tháng 12', 'Sunday' : 'Chủ nhật', 'Monday' : 'Thứ 2', 'Tuesday' : 'Thứ 3', 'Wednesday' : 'Thứ 4', 'Thursday' : 'Thứ 5', 'Friday' : 'Thứ 6', 'Saturday' : 'Thứ 7', 'Sun' : 'Chủ nhật', 'Mon' : 'Thứ 2', 'Tue' : 'Thứ 3', 'Wed' : 'Thứ 4', 'Thu' : 'Thứ 5', 'Fri' : 'Thứ 6', 'Sat' : 'Thứ 7', /******************************** sort variants ********************************/ 'sortname' : 'theo tên', 'sortkind' : 'theo loại', 'sortsize' : 'theo kích cỡ', 'sortdate' : 'theo ngày', 'sortFoldersFirst' : 'Thư mục đầu tiên', 'sortperm' : 'theo quyền hạn', // from v2.1.13 added 13.06.2016 'sortmode' : 'theo chế độ', // from v2.1.13 added 13.06.2016 'sortowner' : 'theo người tạo', // from v2.1.13 added 13.06.2016 'sortgroup' : 'theo nhóm', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Ngoài ra Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Tập tin mới.txt', // added 10.11.2015 'untitled folder' : 'Thư mục mới', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'Tập tin mới.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$ 1: Tệp', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Yêu cầu xác nhận', 'confirmRm' : 'Bạn có chắc chắn muốn xóa vĩnh viễn các mục?
Điều này không thể được hoàn tác!', 'confirmRepl' : 'Thay tập tin cũ bằng tập tin mới? (Nếu nó chứa các thư mục, nó sẽ được hợp nhất. Để sao lưu và thay thế, chọn Sao lưu.)', 'confirmRest' : 'Thay thế mục hiện có bằng một mục trong thùng rác?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Không có trong UTF-8
Chuyển đổi thành UTF-8?
Nội dung trở thành UTF-8 bằng cách lưu sau khi chuyển đổi.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Không thể phát hiện mã hóa ký tự của tệp này. Nó cần tạm thời chuyển đổi thành UTF-8 để chỉnh sửa.
Vui lòng chọn mã hóa ký tự của tệp này.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Nó đã được sửa đổi.
Sẽ mất công nếu bạn không lưu các thay đổi.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Bạn có chắc chắn muốn chuyển các mục vào thùng rác?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Bạn có chắc chắn muốn chuyển các mục vào "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Áp dụng cho tất cả', 'name' : 'Tên', 'size' : 'Kích cỡ', 'perms' : 'Quyền', 'modify' : 'Sửa đổi', 'kind' : 'Loại', 'read' : 'đọc', 'write' : 'viết', 'noaccess' : 'không truy cập', 'and' : 'và', 'unknown' : 'không xác định', 'selectall' : 'Chọn tất cả các mục', 'selectfiles' : 'Chọn các mục', 'selectffile' : 'Chọn mục đầu tiên', 'selectlfile' : 'Chọn mục cuối cùng', 'viewlist' : 'Hiển thị danh sách', 'viewicons' : 'Hiển thị biểu tượng', 'viewSmall' : 'Biểu tượng nhỏ', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Biểu tượng vừa', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Biểu tượng lớn', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Biểu tượng cực lớn', // from v2.1.39 added 22.5.2018 'places' : 'Nơi', 'calc' : 'Tính toán', 'path' : 'Đường dẫn', 'aliasfor' : 'Bí danh cho', 'locked' : 'Đã khóa', 'dim' : 'Kích thước', 'files' : 'Tệp', 'folders' : 'Thư mục', 'items' : 'vật phẩm', 'yes' : 'Vâng', 'no' : 'không', 'link' : 'Liên kết', 'searcresult' : 'Kết quả tìm kiếm', 'selected' : 'mục đã chọn', 'about' : 'Về', 'shortcuts' : 'Lối tắt', 'help' : 'Giúp đỡ', 'webfm' : 'Trình quản lý tệp web', 'ver' : 'Phiên bản', 'protocolver' : 'phiên bản protocol', 'homepage' : 'Trang chủ dự án', 'docs' : 'Tài liệu', 'github' : 'Theo dõi chúng tôi trên GitHub', 'twitter' : 'Theo dõi chúng tôi trên Twitter', 'facebook' : 'Theo dõi chúng tôi trên Facebook', 'team' : 'Đội ngũ', 'chiefdev' : 'Trùm sò', 'developer' : 'người phát triển', 'contributor' : 'người đóng góp', 'maintainer' : 'người bảo trì', 'translator' : 'người dịch', 'icons' : 'Biểu tượng', 'dontforget' : 'và đừng quên lấy khăn tắm của bạn', 'shortcutsof' : 'Các phím tắt bị tắt', 'dropFiles' : 'Thả tệp vào đây', 'or' : 'hoặc', 'selectForUpload' : 'Chọn tệp', 'moveFiles' : 'Di chuyển các mục', 'copyFiles' : 'Sao chép các mục', 'restoreFiles' : 'Khôi mục các mục', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Xóa khỏi địa điểm', 'aspectRatio' : 'Tỉ lệ khung hình', 'scale' : 'Tỉ lệ', 'width' : 'Rộng', 'height' : 'Cao', 'resize' : 'Thay đổi kích cỡ', 'crop' : 'Cắt', 'rotate' : 'Xoay', 'rotate-cw' : 'Xoay 90 độ CW', 'rotate-ccw' : 'Xoay 90 độ CCW', 'degree' : '°', 'netMountDialogTitle' : 'Gắn kết khối lượng mạng', // added 18.04.2012 'protocol' : 'Giao thức', // added 18.04.2012 'host' : 'Chủ nhà', // added 18.04.2012 'port' : 'Hải cảng', // added 18.04.2012 'user' : 'Người sử dụng', // added 18.04.2012 'pass' : 'Mật khẩu', // added 18.04.2012 'confirmUnmount' : 'Bạn có ngắt kết nối $ 1 không?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Thả hoặc dán tệp từ trình duyệt', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Thả tệp, dán URL hoặc hình ảnh (khay nhớ tạm) vào đây', // from v2.1 added 07.04.2014 'encoding' : 'Mã hóa', // from v2.1 added 19.12.2014 'locale' : 'Địa phương', // from v2.1 added 19.12.2014 'searchTarget' : 'Mục tiêu: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Tìm kiếm theo kiểu tệp (MIME)', // from v2.1 added 22.5.2015 'owner' : 'Chủ sở hữu', // from v2.1 added 20.6.2015 'group' : 'Nhóm', // from v2.1 added 20.6.2015 'other' : 'Khác', // from v2.1 added 20.6.2015 'execute' : 'Thực thi', // from v2.1 added 20.6.2015 'perm' : 'Quyền', // from v2.1 added 20.6.2015 'mode' : 'Chế độ', // from v2.1 added 20.6.2015 'emptyFolder' : 'Thư mục trống', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Thư mục trống\\A Kéo thả vào đây để thêm các mục', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Thư mục trống\\A Nhấn giữ để thêm các mục', // from v2.1.6 added 30.12.2015 'quality' : 'Chất lượng', // from v2.1.6 added 5.1.2016 'autoSync' : 'Tự động động bộ', // from v2.1.6 added 10.1.2016 'moveUp' : 'Di chuyển lên', // from v2.1.6 added 18.1.2016 'getLink' : 'Lấy liên kết URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Các mục đã chọn ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID thư mục', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Cho phép truy cập ngoại tuyến', // from v2.1.10 added 3.25.2016 'reAuth' : 'Xác thực lại', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Đang tải...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Mở nhiều tập tin', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Bạn đang cố mở các tệp $ 1. Bạn có chắc chắn muốn mở trong trình duyệt không?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Kết quả tìm kiếm trống trong mục tiêu tìm kiếm.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Nó là một tập tin đang chỉnh sửa.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Bạn đã chọn $ 1 mục.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Bạn có $ 1 mục trong khay nhớ tạm.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Tìm kiếm gia tăng chỉ từ hiển thị hiện tại.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Phục hồi', // from v2.1.15 added 3.8.2016 'complete' : '$1 hoàn thành', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Trình đơn ngữ cảnh', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Chuyển trang', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Khối lượng rễ', // from v2.1.16 added 16.9.2016 'reset' : 'Đặt lại', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Màu nền', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Chọn màu', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Lưới 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Đã bật', // from v2.1.16 added 4.10.2016 'disabled' : 'Đã tắt', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Kết quả tìm kiếm trống trong chế độ xem hiện tại. \\ APress [Enter] để mở rộng mục tiêu tìm kiếm.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Kết quả tìm kiếm thư đầu tiên là trống trong chế độ xem hiện tại.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nhãn văn bản', // from v2.1.17 added 13.10.2016 'minsLeft' : 'Còn $ 1 phút', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Mở lại với mã hóa đã chọn', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Lưu với mã hóa đã chọn', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Chọn thư mục', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Tìm kiếm chữ cái đầu tiên', // from v2.1.23 added 24.3.2017 'presets' : 'Đặt trước', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Có quá nhiều mục vì vậy không thể cho vào thùng rác.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Làm trống thư mục "$ 1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Không có mục nào trong thư mục "$ 1".', // from v2.1.25 added 22.6.2017 'preference' : 'Sự ưa thích', // from v2.1.26 added 28.6.2017 'language' : 'Ngôn ngữ', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Khởi tạo các cài đặt được lưu trong trình duyệt này', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Cài đặt thanh công cụ', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $ 1 ký tự còn lại.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $ 1 dòng còn lại.', // from v2.1.52 added 16.1.2020 'sum' : 'Tổng', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Kích thước tệp thô', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Tập trung vào thành phần của hộp thoại bằng cách di chuột qua', // from v2.1.30 added 2.11.2017 'select' : 'Lựa chọn', // from v2.1.30 added 23.11.2017 'selectAction' : 'Hành động khi chọn tệp', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Mở bằng trình chỉnh sửa được sử dụng lần trước', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Lựa chọn đối nghịch', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Bạn có chắc chắn muốn đổi tên $ 1 các mục đã chọn như $ 2 không?
Không thể hoàn tác thao tác này!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Đổi tên hàng loạt', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Số', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Thêm tiền tố', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Thêm hậu tố', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Thay đổi phần mở rộng', // from v2.1.31 added 8.12.2017 'columnPref' : 'Cài đặt cột (Chế độ xem danh sách)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tất cả các thay đổi sẽ phản ánh ngay lập tức vào kho lưu trữ.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Mọi thay đổi sẽ không phản ánh cho đến khi hủy gắn ổ đĩa này.', // from v2.1.33 added 2.3.2018 'unmountChildren' : '(Các) tập sau được gắn trên tập này cũng đã được ngắt kết nối. Bạn có chắc chắn để ngắt kết nối nó không?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Thông tin lựa chọn', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Các thuật toán để hiển thị hàm băm của tệp', // from v2.1.33 added 10.3.2018 'infoItems' : 'Mục thông tin (Bảng thông tin lựa chọn)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Nhấn một lần nữa để thoát.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Thanh công cụ', // from v2.1.38 added 4.4.2018 'workspace' : 'Không gian làm việc', // from v2.1.38 added 4.4.2018 'dialog' : 'Hộp thoại', // from v2.1.38 added 4.4.2018 'all' : 'Tất cả', // from v2.1.38 added 4.4.2018 'iconSize' : 'Kích thước biểu tượng (Chế độ xem biểu tượng)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Mở cửa sổ trình chỉnh sửa tối đa', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Bởi vì chuyển đổi bằng API hiện không khả dụng, vui lòng chuyển đổi trên trang web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Sau khi chuyển đổi, bạn phải tải lên với URL mục hoặc tệp đã tải xuống để lưu tệp đã chuyển đổi.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Chuyển đổi trên trang web của $ 1', // from v2.1.40 added 10.7.2018 'integrations' : 'Tích hợp', // from v2.1.40 added 11.7.2018 'integrationWith' : 'ElFinder này được tích hợp các dịch vụ bên ngoài sau. Vui lòng kiểm tra các điều khoản sử dụng, chính sách bảo mật, v.v. trước khi sử dụng.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Hiển thị các mục ẩn', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ẩn các mục ẩn', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Hiển thị / Ẩn các mục ẩn', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Loại tệp để bật với "Tệp mới"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Loại tệp văn bản', // from v2.1.41 added 7.8.2018 'add' : 'Thêm vào', // from v2.1.41 added 7.8.2018 'theme' : 'Chủ đề', // from v2.1.43 added 19.10.2018 'default' : 'Mặc định', // from v2.1.43 added 19.10.2018 'description' : 'Sự miêu tả', // from v2.1.43 added 19.10.2018 'website' : 'Trang mạng', // from v2.1.43 added 19.10.2018 'author' : 'Tác giả', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Giấy phép', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Không thể lưu mục này. Để tránh mất các chỉnh sửa, bạn cần xuất sang PC của mình.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Nhấp đúp vào tệp để chọn nó.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Sử dụng chế độ toàn màn hình', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'không xác định', 'kindRoot' : 'Khối lượng gốc', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Thư mục', 'kindSelects' : 'Lựa chọn', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Bí danh', 'kindAliasBroken' : 'Bí danh bị hỏng', // applications 'kindApp' : 'Ứng dụng', 'kindPostscript' : 'Tài liệu tái bút', 'kindMsOffice' : 'Tài liệu Microsoft Office', 'kindMsWord' : 'Tài liệu Microsoft Word', 'kindMsExcel' : 'Tài liệu Microsoft Excel', 'kindMsPP' : 'Bản trình bày Microsoft Powerpoint', 'kindOO' : 'Mở tài liệu Office', 'kindAppFlash' : 'Ứng dụng flash', 'kindPDF' : 'Định dạng tài liệu di động (PDF)', 'kindTorrent' : 'Tệp bittorrent', 'kind7z' : 'Kho lưu trữ 7z', 'kindTAR' : 'TAR lưu trữ', 'kindGZIP' : 'Kho lưu trữ GZIP', 'kindBZIP' : 'Kho lưu trữ BZIP', 'kindXZ' : 'Kho lưu trữ XZ', 'kindZIP' : 'Kho lưu trữ ZIP', 'kindRAR' : 'Kho lưu trữ RAR', 'kindJAR' : 'Tệp Java JAR', 'kindTTF' : 'Phông chữ True Type', 'kindOTF' : 'Mở loại phông chữ', 'kindRPM' : 'Gói RPM', // texts 'kindText' : 'Tai liệu kiểm tra', 'kindTextPlain' : 'Văn bản thô', 'kindPHP' : 'Nguồn PHP', 'kindCSS' : 'Bảng kiểu xếp tầng', 'kindHTML' : 'Tài liệu HTML', 'kindJS' : 'Nguồn Javascript', 'kindRTF' : 'Định dạng văn bản phong phú', 'kindC' : 'Nguồn C', 'kindCHeader' : 'Nguồn tiêu đề C', 'kindCPP' : 'Nguồn C ++', 'kindCPPHeader' : 'Nguồn tiêu đề C ++', 'kindShell' : 'Tập lệnh shell Unix', 'kindPython' : 'Nguồn Python', 'kindJava' : 'Nguồn Java', 'kindRuby' : 'Nguồn Ruby', 'kindPerl' : 'Tập lệnh Perl', 'kindSQL' : 'Nguồn SQL', 'kindXML' : 'Tài liệu XML', 'kindAWK' : 'Nguồn AWK', 'kindCSV' : 'Các giá trị được phân tách bằng dấu phẩy', 'kindDOCBOOK' : 'Tài liệu XML của Docbook', 'kindMarkdown' : 'Văn bản đánh dấu', // added 20.7.2015 // images 'kindImage' : 'Hình ảnh', 'kindBMP' : 'Hình ảnh BMP', 'kindJPEG' : 'Hình ảnh JPEG', 'kindGIF' : 'Ảnh GIF', 'kindPNG' : 'Hình ảnh PNG', 'kindTIFF' : 'Hình ảnh TIFF', 'kindTGA' : 'Hình ảnh TGA', 'kindPSD' : 'Hình ảnh Adobe Photoshop', 'kindXBITMAP' : 'Hình ảnh bitmap X', 'kindPXM' : 'Hình ảnh Pixelmator', // media 'kindAudio' : 'Phương tiện âm thanh', 'kindAudioMPEG' : 'Âm thanh MPEG', 'kindAudioMPEG4' : 'Âm thanh MPEG-4', 'kindAudioMIDI' : 'Âm thanh MIDI', 'kindAudioOGG' : 'Âm thanh Ogg Vorbis', 'kindAudioWAV' : 'Âm thanh WAV', 'AudioPlaylist' : 'Danh sách nhạc MP3', 'kindVideo' : 'Phương tiện video', 'kindVideoDV' : 'Phim DV', 'kindVideoMPEG' : 'Phim MPEG', 'kindVideoMPEG4' : 'Phim MPEG-4', 'kindVideoAVI' : 'Phim AVI', 'kindVideoMOV' : 'Phim thời gian nhanh', 'kindVideoWM' : 'Phim Windows Media', 'kindVideoFlash' : 'Phim flash', 'kindVideoMKV' : 'Phim matroska', 'kindVideoOGG' : 'Phim ogg' } }; })); PK Z݅kjs/i18n/elfinder.nl.jsnuW+A/** * Nederlands translation * @author Barry vd. Heuvel * @author Patrick Tingen * @version 2022-03-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.nl = { translator : 'Barry vd. Heuvel <barry@fruitcakestudio.nl>, Patrick Tingen <patrick@tingen.net>', language : 'Nederlands', direction : 'ltr', dateFormat : 'd-m-Y H:i', // will show like: 02-03-2022 15:08 fancyDateFormat : '$1 H:i', // will show like: Vandaag 15:08 nonameDateFormat : 'ymd-His', // noname upload will show like: 220302-150849 messages : { 'getShareText' : 'Delen', 'Editor ': 'Code-editor', /********************************** errors **********************************/ 'error' : 'Fout', 'errUnknown' : 'Onbekend fout', 'errUnknownCmd' : 'Onbekend commando', 'errJqui' : 'Ongeldige jQuery UI configuratie. Selectable, draggable en droppable componenten moeten aanwezig zijn', 'errNode' : 'Voor elFinder moet een DOM Element gemaakt worden', 'errURL' : 'Ongeldige elFinder configuratie! URL optie is niet ingesteld', 'errAccess' : 'Toegang geweigerd', 'errConnect' : 'Kan geen verbinding met de backend maken', 'errAbort' : 'Verbinding afgebroken', 'errTimeout' : 'Verbinding time-out', 'errNotFound' : 'Backend niet gevonden', 'errResponse' : 'Ongeldige reactie van de backend', 'errConf' : 'Ongeldige backend configuratie', 'errJSON' : 'PHP JSON module niet geïnstalleerd', 'errNoVolumes' : 'Leesbaar volume is niet beschikbaar', 'errCmdParams' : 'Ongeldige parameters voor commando "$1"', 'errDataNotJSON' : 'Data is niet JSON', 'errDataEmpty' : 'Data is leeg', 'errCmdReq' : 'Backend verzoek heeft een commando naam nodig', 'errOpen' : 'Kan "$1" niet openen', 'errNotFolder' : 'Object is geen map', 'errNotFile' : 'Object is geen bestand', 'errRead' : 'Kan "$1" niet lezen', 'errWrite' : 'Kan niet schrijven in "$1"', 'errPerm' : 'Toegang geweigerd', 'errLocked' : '"$1" is vergrendeld en kan niet hernoemd, verplaats of verwijderd worden', 'errExists' : 'Bestand "$1" bestaat al', 'errInvName' : 'Ongeldige bestandsnaam', 'errInvDirname' : 'Ongeldige mapnaam.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Map niet gevonden', 'errFileNotFound' : 'Bestand niet gevonden', 'errTrgFolderNotFound' : 'Doelmap "$1" niet gevonden', 'errPopup' : 'De browser heeft voorkomen dat de pop-up is geopend. Pas de browser instellingen aan om de popup te kunnen openen', 'errMkdir' : 'Kan map "$1" niet aanmaken', 'errMkfile' : 'Kan bestand "$1" niet aanmaken', 'errRename' : 'Kan "$1" niet hernoemen', 'errCopyFrom' : 'Bestanden kopiëren van "$1" is niet toegestaan', 'errCopyTo' : 'Bestanden kopiëren naar "$1" is niet toegestaan', 'errMkOutLink' : 'Kan geen link maken buiten de hoofdmap', // from v2.1 added 03.10.2015 'errUpload' : 'Upload fout', // old name - errUploadCommon 'errUploadFile' : 'Kan "$1" niet uploaden', // old name - errUpload 'errUploadNoFiles' : 'Geen bestanden gevonden om te uploaden', 'errUploadTotalSize' : 'Data overschrijdt de maximale grootte', // old name - errMaxSize 'errUploadFileSize' : 'Bestand overschrijdt de maximale grootte', // old name - errFileMaxSize 'errUploadMime' : 'Bestandstype niet toegestaan', 'errUploadTransfer' : '"$1" overdrachtsfout', 'errUploadTemp' : 'Kan geen tijdelijk bestand voor de upload maken', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" bestaat al op deze locatie en kan niet vervangen worden door een ander type object', // new 'errReplace' : 'Kan "$1" niet vervangen', 'errSave' : 'Kan "$1" niet opslaan', 'errCopy' : 'Kan "$1" niet kopiëren', 'errMove' : 'Kan "$1" niet verplaatsen', 'errCopyInItself' : 'Kan "$1" niet in zichzelf kopiëren', 'errRm' : 'Kan "$1" niet verwijderen', 'errTrash' : 'Kan niet in de prullenbak.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kan bronbestanden niet verwijderen', 'errExtract' : 'Kan de bestanden van "$1" niet uitpakken', 'errArchive' : 'Kan het archief niet maken', 'errArcType' : 'Archief type is niet ondersteund', 'errNoArchive' : 'Bestand is geen archief of geen ondersteund archief type', 'errCmdNoSupport' : 'Backend ondersteund dit commando niet', 'errReplByChild' : 'De map "$1" kan niet vervangen worden door een item uit die map', 'errArcSymlinks' : 'Om veiligheidsredenen kan een bestand met symlinks of bestanden met niet toegestane namen niet worden uitgepakt ', // edited 24.06.2012 'errArcMaxSize' : 'Archief overschrijdt de maximale bestandsgrootte', 'errResize' : 'Kan het formaat van "$1" niet wijzigen', 'errResizeDegree' : 'Ongeldig aantal graden om te draaien', // added 7.3.2013 'errResizeRotate' : 'Afbeelding kan niet gedraaid worden', // added 7.3.2013 'errResizeSize' : 'Ongeldig afbeelding formaat', // added 7.3.2013 'errResizeNoChange' : 'Afbeelding formaat is niet veranderd', // added 7.3.2013 'errUsupportType' : 'Bestandstype wordt niet ondersteund', 'errNotUTF8Content' : 'Bestand "$1" is niet in UTF-8 and kan niet aangepast worden', // added 9.11.2011 'errNetMount' : 'Kan "$1" niet mounten', // added 17.04.2012 'errNetMountNoDriver' : 'Niet ondersteund protocol', // added 17.04.2012 'errNetMountFailed' : 'Mount mislukt', // added 17.04.2012 'errNetMountHostReq' : 'Host is verplicht', // added 18.04.2012 'errSessionExpires' : 'Uw sessie is verlopen vanwege inactiviteit', 'errCreatingTempDir' : 'Kan de tijdelijke map niet aanmaken: "$1" ', 'errFtpDownloadFile' : 'Kan het bestand niet downloaden vanaf FTP: "$1"', 'errFtpUploadFile' : 'Kan het bestand niet uploaden naar FTP: "$1"', 'errFtpMkdir' : 'Kan het externe map niet aanmaken op de FTP-server: "$1"', 'errArchiveExec' : 'Er is een fout opgetreden bij het archivering van de bestanden: "$1" ', 'errExtractExec' : 'Er is een fout opgetreden bij het uitpakken van de bestanden: "$1" ', 'errNetUnMount' : 'Kan niet unmounten', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Niet om te zetten naar UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Probeer een moderne browser als je bestanden wil uploaden', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Time-out bij zoeken naar "$1". Zoekresulataat is niet compleet', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Je moet je opnieuw aanmelden', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max aantal selecteerbare items is $1', // from v2.1.17 added 17.10.2016 'errRestore' : 'Kan niet herstellen uit prullenbak, weet niet waar het heen moet', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Geen editor voor dit type bestand', // from v2.1.25 added 23.5.2017 'errServerError' : 'Fout opgetreden op de server', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Kan folder "$1" niet legen', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Er zijn nog $1 fouten', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'U kunt maximaal $1 mappen tegelijk maken.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Maak archief', 'cmdback' : 'Vorige', 'cmdcopy' : 'Kopieer', 'cmdcut' : 'Knip', 'cmddownload' : 'Downloaden', 'cmdduplicate' : 'Dupliceer', 'cmdedit' : 'Pas bestand aan', 'cmdextract' : 'Bestanden uit archief uitpakken', 'cmdforward' : 'Volgende', 'cmdgetfile' : 'Kies bestanden', 'cmdhelp' : 'Over deze software', 'cmdhome' : 'Home', 'cmdinfo' : 'Bekijk info', 'cmdmkdir' : 'Nieuwe map', 'cmdmkdirin' : 'In nieuwe map', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nieuw bestand', 'cmdopen' : 'Open', 'cmdpaste' : 'Plak', 'cmdquicklook' : 'Voorbeeld', 'cmdreload' : 'Vernieuwen', 'cmdrename' : 'Naam wijzigen', 'cmdrm' : 'Verwijder', 'cmdtrash' : 'Naar prullenbak', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Herstellen', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Zoek bestanden', 'cmdup' : 'Ga een map hoger', 'cmdupload' : 'Upload bestanden', 'cmdview' : 'Bekijk', 'cmdresize' : 'Formaat wijzigen', 'cmdsort' : 'Sorteren', 'cmdnetmount' : 'Mount netwerk volume', // added 18.04.2012 'cmdnetunmount': 'Afmelden', // from v2.1 added 30.04.2012 'cmdplaces' : 'Naar Plaatsen', // added 28.12.2014 'cmdchmod' : 'Wijzig modus', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open een map', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Herstel kolombreedtes', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Volledig scherm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Verplaatsen', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Map leegmaken', // from v2.1.25 added 22.06.2017 'cmdundo' : 'ongedaan maken', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Opnieuw doen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Voorkeuren', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Selecteer alles', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Deselecteer alles', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Selectie omkeren', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in nieuw venster', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Verberg (voorkeur)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Sluit', 'btnSave' : 'Opslaan', 'btnRm' : 'Verwijder', 'btnApply' : 'Toepassen', 'btnCancel' : 'Annuleren', 'btnNo' : 'Nee', 'btnYes' : 'Ja', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Ga naar $1 & keur goed', // from v2.1 added 26.04.2012 'btnUnmount': 'Afmelden', // from v2.1 added 30.04.2012 'btnConv' : 'Converteer', // from v2.1 added 08.04.2014 'btnCwd' : 'Hier', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Alles', // from v2.1 added 22.5.2015 'btnMime' : 'Mime type', // from v2.1 added 22.5.2015 'btnFileName':'Bestandsnaam', // from v2.1 added 22.5.2015 'btnSaveClose': 'Opslaan & Sluiten', // from v2.1 added 12.6.2015 'btnBackup' : 'Back-up', // fromv2.1 added 28.11.2015 'btnRename' : 'Hernoemen', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Hernoem alles', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Vorige ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Volgende ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Opslaan als', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Bezig met openen van map', 'ntffile' : 'Bezig met openen bestand', 'ntfreload' : 'Herladen map inhoud', 'ntfmkdir' : 'Bezig met map maken', 'ntfmkfile' : 'Bezig met Bestanden maken', 'ntfrm' : 'Verwijderen bestanden', 'ntfcopy' : 'Kopieer bestanden', 'ntfmove' : 'Verplaats bestanden', 'ntfprepare' : 'Voorbereiden kopiëren', 'ntfrename' : 'Hernoem bestanden', 'ntfupload' : 'Bestanden uploaden actief', 'ntfdownload' : 'Bestanden downloaden actief', 'ntfsave' : 'Bestanden opslaan', 'ntfarchive' : 'Archief aan het maken', 'ntfextract' : 'Bestanden uitpakken actief', 'ntfsearch' : 'Zoeken naar bestanden', 'ntfresize' : 'Formaat wijzigen van afbeeldingen', 'ntfsmth' : 'Iets aan het doen', 'ntfloadimg' : 'Laden van plaatje', 'ntfnetmount' : 'Mounten van netwerk volume', // added 18.04.2012 'ntfnetunmount': 'Unmounten van netwerk volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Opvragen afbeeldingen dimensies', // added 20.05.2013 'ntfreaddir' : 'Map informatie lezen', // from v2.1 added 01.07.2013 'ntfurl' : 'URL van link ophalen', // from v2.1 added 11.03.2014 'ntfchmod' : 'Bestandsmodus wijzigen', // from v2.1 added 20.6.2015 'ntfpreupload': 'Upload bestandsnaam verifiëren', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Zipbestand aan het maken', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Verzamelen padinformatie', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Aan het verwerken', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Aan het verwijderen', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Aan het herstellen', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Controleren doelmap', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Vorige bewerking ongedaan maken', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Opnieuw doen', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Inhoud controleren', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Prullenbak', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'onbekend', 'Today' : 'Vandaag', 'Yesterday' : 'Gisteren', 'msJan' : 'Jan', 'msFeb' : 'februari', 'msMar' : 'maart', 'msApr' : 'april', 'msMay' : 'Mei', 'msJun' : 'Jun', 'msJul' : 'juli', 'msAug' : 'aug', 'msSep' : 'september', 'msOct' : 'Okt', 'msNov' : 'november', 'msDec' : 'december', 'January' : 'Januari', 'February' : 'Februari', 'March' : 'Maart', 'April' : 'april', 'May' : 'Mei', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Augustus', 'September' : 'september', 'October' : 'Oktober', 'November' : 'november', 'December' : 'december', 'Sunday' : 'Zondag', 'Monday' : 'Maandag', 'Tuesday' : 'Dinsdag', 'Wednesday' : 'Woensdag', 'Thursday' : 'Donderdag', 'Friday' : 'Vrijdag', 'Saturday' : 'Zaterdag', 'Sun' : 'Zo', 'Mon' : 'Ma', 'Tue' : 'Di', 'Wed' : 'Wo', 'Thu' : 'Do', 'Fri' : 'Vr', 'Sat' : 'Za', /******************************** sort variants ********************************/ 'sortname' : 'op naam', 'sortkind' : 'op type', 'sortsize' : 'op grootte', 'sortdate' : 'op datum', 'sortFoldersFirst' : 'Mappen eerst', 'sortperm' : 'op rechten', // from v2.1.13 added 13.06.2016 'sortmode' : 'op mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'op eigenaar', // from v2.1.13 added 13.06.2016 'sortgroup' : 'op groep', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Als boom', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NieuwBestand.txt', // added 10.11.2015 'untitled folder' : 'NieuweMap', // added 10.11.2015 'Archive' : 'NieuwArchief', // from v2.1 added 10.11.2015 'untitled file' : 'NieuwBestand.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Bestand', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bevestiging nodig', 'confirmRm' : 'Weet u zeker dat u deze bestanden wil verwijderen?
Deze actie kan niet ongedaan gemaakt worden!', 'confirmRepl' : 'Oud bestand vervangen door het nieuwe bestand?', 'confirmRest' : 'Bestaand item vervangen door het item in de prullenbak?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Niet in UTF-8
Converteren naar UTF-8?
De inhoud wordt UTF-8 door op te slaan na de conversie', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Tekencodering van dit bestand kan niet worden gedetecteerd. Het moet tijdelijk worden geconverteerd naar UTF-8 voor bewerking.
Selecteer de tekencodering van dit bestand.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Het is aangepast.
Wijzigingen gaan verloren als je niet opslaat', // from v2.1 added 15.7.2015 'confirmTrash' : 'Weet u zeker dat u items naar de prullenbak wilt verplaatsen?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Weet u zeker dat u items naar \'$1\' wilt verplaatsen?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Toepassen op alles', 'name' : 'Naam', 'size' : 'Grootte', 'perms' : 'Rechten', 'modify' : 'Aangepast', 'kind' : 'Type', 'read' : 'lees', 'write' : 'schrijf', 'noaccess' : 'geen toegang', 'and' : 'en', 'unknown' : 'onbekend', 'selectall' : 'Selecteer alle bestanden', 'selectfiles' : 'Selecteer bestand(en)', 'selectffile' : 'Selecteer eerste bestand', 'selectlfile' : 'Selecteer laatste bestand', 'viewlist' : 'Lijst weergave', 'viewicons' : 'Icoon weergave', 'viewSmall' : 'Klein', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Middelgroot', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Groot', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra groot', // from v2.1.39 added 22.5.2018 'places' : 'Plaatsen', 'calc' : 'Bereken', 'path' : 'Pad', 'aliasfor' : 'Alias voor', 'locked' : 'Vergrendeld', 'dim' : 'Dimensies', 'files' : 'Bestanden', 'folders' : 'Mappen', 'items' : 'Artikelen', 'yes' : 'ja', 'no' : 'nee', 'link' : 'Koppeling', 'searcresult' : 'Zoek resultaten', 'selected' : 'geselecteerde items', 'about' : 'Over', 'shortcuts' : 'Snelkoppelingen', 'help' : 'Helpen', 'webfm' : 'Web bestandsmanager', 'ver' : 'Versie', 'protocolver' : 'protocol versie', 'homepage' : 'Project thuis', 'docs' : 'Documentatie', 'github' : 'Fork ons op Github', 'twitter' : 'Volg ons op twitter', 'facebook' : 'Wordt lid op facebook', 'team' : 'Team', 'chiefdev' : 'Hoofd ontwikkelaar', 'developer' : 'ontwikkelaar', 'contributor' : 'bijdrager', 'maintainer' : 'onderhouder', 'translator' : 'vertaler', 'icons' : 'Iconen', 'dontforget' : 'En vergeet je handdoek niet!', 'shortcutsof' : 'Snelkoppelingen uitgeschakeld', 'dropFiles' : 'Sleep hier uw bestanden heen', 'or' : 'of', 'selectForUpload' : 'Selecteer bestanden om te uploaden', 'moveFiles' : 'Verplaats bestanden', 'copyFiles' : 'Kopieer bestanden', 'restoreFiles' : 'Items herstellen', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Verwijder uit Plaatsen', 'aspectRatio' : 'beeldverhouding', 'scale' : 'Schaal', 'width' : 'Breedte', 'height' : 'Hoogte', 'resize' : 'Verkleinen', 'crop' : 'Bijsnijden', 'rotate' : 'Draaien', 'rotate-cw' : 'Draai 90 graden rechtsom', 'rotate-ccw' : 'Draai 90 graden linksom', 'degree' : '°', 'netMountDialogTitle' : 'Mount netwerk volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Gastheer', // added 18.04.2012 'port' : 'Poort', // added 18.04.2012 'user' : 'Gebruikersnaams', // added 18.04.2012 'pass' : 'Wachtwoord', // added 18.04.2012 'confirmUnmount' : 'Weet u zeker dat u $1 wil unmounten?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Sleep of plak bestanden vanuit de browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Sleep of plak bestanden hier', // from v2.1 added 07.04.2014 'encoding' : 'Encodering', // from v2.1 added 19.12.2014 'locale' : 'Localisatie', // from v2.1 added 19.12.2014 'searchTarget' : 'Doel: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Zoek op invoer MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Eigenaar', // from v2.1 added 20.6.2015 'group' : 'Groep', // from v2.1 added 20.6.2015 'other' : 'Overig', // from v2.1 added 20.6.2015 'execute' : 'Uitvoeren', // from v2.1 added 20.6.2015 'perm' : 'Rechten', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Map is leeg', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Map is leeg\\A Sleep hier naar toe om toe te voegen', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Map is leeg\\A Lang ingedrukt houden om toe te voegen', // from v2.1.6 added 30.12.2015 'quality' : 'Kwaliteit', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatisch synchroniseren', // from v2.1.6 added 10.1.2016 'moveUp' : 'Omhoog', // from v2.1.6 added 18.1.2016 'getLink' : 'Geef link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Geselecteerde items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Map ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Toestaan offline toegang', // from v2.1.10 added 3.25.2016 'reAuth' : 'Opnieuw autenticeren', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Laden..', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open meerdere bestanden', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Je probeert het $1 bestanden te openen. Weet je zeker dat je dat in je browser wil doen?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Geen zoekresultaten', // from v2.1.12 added 5.16.2016 'editingFile' : 'Bestand wordt bewerkt', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Je hebt $1 items geselecteerd', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Je hebt $1 items op het clipboard', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Verder zoeken kan alleen vanuit huidige view', // from v2.1.13 added 6.30.2016 'reinstate' : 'Herstellen', // from v2.1.15 added 3.8.2016 'complete' : '$1 compleet', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Contextmenu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Pagina omslaan', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumewortels', // from v2.1.16 added 16.9.2016 'reset' : 'Resetten', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Achtergrondkleur', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Kleurkiezer', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px raster', // from v2.1.16 added 4.10.2016 'enabled' : 'Actief', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactief', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Zoekresultaten zijn leeg in actuele view\\ADruk [Enter] om zoekgebied uit te breiden', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Zoeken op eerste letter is leeg in actuele view', // from v2.1.23 added 24.3.2017 'textLabel' : 'Tekstlabel', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minuten over', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Opnieuw openen met geselecteerde encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Opslaan met geselecteerde encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Selecteer map', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Zoeken op eerste letter', // from v2.1.23 added 24.3.2017 'presets' : 'Voorkeuren', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Teveel voor in de prullenbak', // from v2.1.25 added 9.6.2017 'TextArea' : 'Tekstgebied', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Map "$1" legen', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Er zijn geen items in map "$1"', // from v2.1.25 added 22.6.2017 'preference' : 'Voorkeur', // from v2.1.26 added 28.6.2017 'language' : 'Taal', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialiseer instellingen van deze browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar instellingen', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tekens over', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 regels over.', // from v2.1.52 added 16.1.2020 'sum' : 'Totaal', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Geschatte bestandsgrootte', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus op het dialoogelement met mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Selecteren', // from v2.1.30 added 23.11.2017 'selectAction' : 'Actie als bestand is geselecteerd', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open met laatstgebruikte editor', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Selectie omkeren', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Weet je zeker dat je $1 items wil hernoemen naar $2?
Dit kan niet ongedaan worden gemaakt!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch hernoemen', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Voeg prefix toe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Voeg suffix toe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Verander extentie', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolominstelllingen (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Aanpassingen worden direct toegepast op het archief', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aanpassingen worden pas toegepast na re-mount van dit volume', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Deze volume(s) worden ook unmounted. Weet je het zeker?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selectie informatie', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmes voor file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informatie Items (Selectie Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Druk nogmaals om te eindigen', // from v2.1.38 added 1.4.2018 'toolbar' : 'Werkbalk', // from v2.1.38 added 4.4.2018 'workspace' : 'Werkruimte', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialoog', // from v2.1.38 added 4.4.2018 'all' : 'Alles', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icoongrootte (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open de maximale editor', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Conversie via API is niet beschikbaar, converteer aub op de website', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converteer op de site $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integratie', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Deze elFinder heeft de volgende externe services. Controleer de voorwaarden, privacy policy, etc. voor gebruik', // from v2.1.40 added 11.7.2018 'showHidden' : 'Toon verborgen items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Verberg verborgen items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Toon/verberg verborgen items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types die aangemaakt mogen worden', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type voor tekstbestand', // from v2.1.41 added 7.8.2018 'add' : 'Toevoegen', // from v2.1.41 added 7.8.2018 'theme' : 'Thema', // from v2.1.43 added 19.10.2018 'default' : 'Standaard', // from v2.1.43 added 19.10.2018 'description' : 'Beschrijving', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Auteur', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licensie', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dit item kan niet worden opgeslagen, exporteer naar je pc om wijzingen te bewaren', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dubbelklik op het bestand om het te selecteren.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Volledig scherm gebruiken', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Onbekend', 'kindRoot' : 'Volume root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Map', 'kindSelects' : 'Selecties', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Verbroken alias', // applications 'kindApp' : 'Applicatie', 'kindPostscript' : 'Postscript-document', 'kindMsOffice' : 'Microsoft Office-document', 'kindMsWord' : 'Microsoft Word-document', 'kindMsExcel' : 'Microsoft Excel-document', 'kindMsPP' : 'Microsoft Powerpoint-presentatie', 'kindOO' : 'Office-document openen', 'kindAppFlash' : 'Flash applicatie', 'kindPDF' : 'Draagbaar documentformaat (PDF)', 'kindTorrent' : 'Bittorrent bestand', 'kind7z' : '7z archief', 'kindTAR' : 'TAR archief', 'kindGZIP' : 'GZIP archief', 'kindBZIP' : 'BZIP archief', 'kindXZ' : 'XZ archief', 'kindZIP' : 'ZIP archief', 'kindRAR' : 'RAR archief', 'kindJAR' : 'Java JAR bestand', 'kindTTF' : 'True Type-lettertype', 'kindOTF' : 'Lettertype openen', 'kindRPM' : 'RPM pakket', // texts 'kindText' : 'Tekst bestand', 'kindTextPlain' : 'Tekst', 'kindPHP' : 'PHP bronbestand', 'kindCSS' : 'Trapsgewijze stijlblad', 'kindHTML' : 'HTML-document', 'kindJS' : 'Javascript bronbestand', 'kindRTF' : 'Rijk tekst formaat', 'kindC' : 'C bronbestand', 'kindCHeader' : 'C header bronbestand', 'kindCPP' : 'C++ bronbestand', 'kindCPPHeader' : 'C++ header bronbestand', 'kindShell' : 'Unix-shellscript', 'kindPython' : 'Python bronbestand', 'kindJava' : 'Java bronbestand', 'kindRuby' : 'Ruby bronbestand', 'kindPerl' : 'Perl bronbestand', 'kindSQL' : 'SQL bronbestand', 'kindXML' : 'XML-document', 'kindAWK' : 'AWK bronbestand', 'kindCSV' : 'Komma gescheiden waardes', 'kindDOCBOOK' : 'Docbook XML-document', 'kindMarkdown' : 'Markdown tekst', // added 20.7.2015 // images 'kindImage' : 'Afbeelding', 'kindBMP' : 'BMP afbeelding', 'kindJPEG' : 'JPEG afbeelding', 'kindGIF' : 'GIF afbeelding', 'kindPNG' : 'PNG afbeelding', 'kindTIFF' : 'TIFF afbeelding', 'kindTGA' : 'TGA afbeelding', 'kindPSD' : 'Adobe Photoshop afbeelding', 'kindXBITMAP' : 'X bitmap afbeelding', 'kindPXM' : 'Pixelmator afbeelding', // media 'kindAudio' : 'Audiomedia', 'kindAudioMPEG' : 'MPEG-audio', 'kindAudioMPEG4' : 'MPEG-4-audio', 'kindAudioMIDI' : 'MIDI-audio', 'kindAudioOGG' : 'Ogg Vorbis-audio', 'kindAudioWAV' : 'WAV-audio', 'AudioPlaylist' : 'MP3-afspeellijst', 'kindVideo' : 'Videomedia', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK ZO''js/proxy/elFinderSupportVer1.jsnuW+A/** * elFinder transport to support old protocol. * * @example * jQuery('selector').elfinder({ * .... * transport : new elFinderSupportVer1() * }) * * @author Dmitry (dio) Levashov **/ window.elFinderSupportVer1 = function(upload) { "use strict"; var self = this, dateObj, today, yesterday, getDateString = function(date) { return date.replace('Today', today).replace('Yesterday', yesterday); }; dateObj = new Date(); today = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate(); dateObj = new Date(Date.now() - 86400000); yesterday = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate(); this.upload = upload || 'auto'; this.init = function(fm) { this.fm = fm; this.fm.parseUploadData = function(text) { var data; if (!jQuery.trim(text)) { return {error : ['errResponse', 'errDataEmpty']}; } try { data = JSON.parse(text); } catch (e) { return {error : ['errResponse', 'errDataNotJSON']}; } return self.normalize('upload', data); }; }; this.send = function(opts) { var self = this, fm = this.fm, dfrd = jQuery.Deferred(), cmd = opts.data.cmd, args = [], _opts = {}, data, xhr; dfrd.abort = function() { if (xhr.state() == 'pending') { xhr.quiet = true; xhr.abort(); } }; switch (cmd) { case 'open': opts.data.tree = 1; break; case 'parents': case 'tree': return dfrd.resolve({tree : []}); case 'get': opts.data.cmd = 'read'; opts.data.current = fm.file(opts.data.target).phash; break; case 'put': opts.data.cmd = 'edit'; opts.data.current = fm.file(opts.data.target).phash; break; case 'archive': case 'rm': opts.data.current = fm.file(opts.data.targets[0]).phash; break; case 'extract': case 'rename': case 'resize': opts.data.current = fm.file(opts.data.target).phash; break; case 'duplicate': _opts = jQuery.extend(true, {}, opts); jQuery.each(opts.data.targets, function(i, hash) { jQuery.ajax(Object.assign(_opts, {data : {cmd : 'duplicate', target : hash, current : fm.file(hash).phash}})) .fail(function(error) { fm.error(fm.res('error', 'connect')); }) .done(function(data) { data = self.normalize('duplicate', data); if (data.error) { fm.error(data.error); } else if (data.added) { fm.trigger('add', {added : data.added}); } }); }); return dfrd.resolve({}); case 'mkdir': case 'mkfile': opts.data.current = opts.data.target; break; case 'paste': opts.data.current = opts.data.dst; if (! opts.data.tree) { jQuery.each(opts.data.targets, function(i, h) { if (fm.file(h) && fm.file(h).mime === 'directory') { opts.data.tree = '1'; return false; } }); } break; case 'size': return dfrd.resolve({error : fm.res('error', 'cmdsupport')}); case 'search': return dfrd.resolve({error : fm.res('error', 'cmdsupport')}); case 'file': opts.data.cmd = 'open'; opts.data.current = fm.file(opts.data.target).phash; break; } // cmd = opts.data.cmd xhr = jQuery.ajax(opts) .fail(function(error) { dfrd.reject(error); }) .done(function(raw) { data = self.normalize(cmd, raw); dfrd.resolve(data); }); return dfrd; }; // fix old connectors errors messages as possible // this.errors = { // 'Unknown command' : 'Unknown command.', // 'Invalid backend configuration' : 'Invalid backend configuration.', // 'Access denied' : 'Access denied.', // 'PHP JSON module not installed' : 'PHP JSON module not installed.', // 'File not found' : 'File not found.', // 'Invalid name' : 'Invalid file name.', // 'File or folder with the same name already exists' : 'File named "$1" already exists in this location.', // 'Not allowed file type' : 'Not allowed file type.', // 'File exceeds the maximum allowed filesize' : 'File exceeds maximum allowed size.', // 'Unable to copy into itself' : 'Unable to copy "$1" into itself.', // 'Unable to create archive' : 'Unable to create archive.', // 'Unable to extract files from archive' : 'Unable to extract files from "$1".' // } this.normalize = function(cmd, data) { var self = this, fm = this.fm, files = {}, filter = function(file) { return file && file.hash && file.name && file.mime ? file : null; }, getDirs = function(items) { return jQuery.grep(items, function(i) { return i && i.mime && i.mime === 'directory'? true : false; }); }, getTreeDiff = function(files) { var dirs = getDirs(files); treeDiff = fm.diff(dirs, null, ['date', 'ts']); if (treeDiff.added.length) { treeDiff.added = getDirs(treeDiff.added); } if (treeDiff.changed.length) { treeDiff.changed = getDirs(treeDiff.changed); } if (treeDiff.removed.length) { var removed = []; jQuery.each(treeDiff.removed, function(i, h) { var item; if ((item = fm.file(h)) && item.mime === 'directory') { removed.push(h); } }); treeDiff.removed = removed; } return treeDiff; }, phash, diff, isCwd, treeDiff; if ((cmd == 'tmb' || cmd == 'get')) { return data; } // if (data.error) { // jQuery.each(data.error, function(i, msg) { // if (self.errors[msg]) { // data.error[i] = self.errors[msg]; // } // }); // } if (cmd == 'upload' && data.error && data.cwd) { data.warning = Object.assign({}, data.error); data.error = false; } if (data.error) { return data; } if (cmd == 'put') { phash = fm.file(data.target.hash).phash; return {changed : [this.normalizeFile(data.target, phash)]}; } phash = data.cwd.hash; isCwd = (phash == fm.cwd().hash); if (data.tree) { jQuery.each(this.normalizeTree(data.tree), function(i, file) { files[file.hash] = file; }); } jQuery.each(data.cdc||[], function(i, file) { var hash = file.hash, mcts; if (files[hash]) { if (file.date) { mcts = Date.parse(getDateString(file.date)); if (mcts && !isNaN(mcts)) { files[hash].ts = Math.floor(mcts / 1000); } else { files[hash].date = file.date || fm.formatDate(file); } } files[hash].locked = file.hash == phash ? true : file.rm === void(0) ? false : !file.rm; } else { files[hash] = self.normalizeFile(file, phash, data.tmb); } }); if (!data.tree) { jQuery.each(fm.files(), function(hash, file) { if (!files[hash] && file.phash != phash && file.mime == 'directory') { files[hash] = file; } }); } if (cmd == 'open') { return { cwd : files[phash] || this.normalizeFile(data.cwd), files : jQuery.map(files, function(f) { return f; }), options : self.normalizeOptions(data), init : !!data.params, debug : data.debug }; } if (isCwd) { diff = fm.diff(jQuery.map(files, filter)); } else { if (data.tree && cmd !== 'paste') { diff = getTreeDiff(files); } else { diff = { added : [], removed : [], changed : [] }; if (cmd === 'paste') { diff.sync = true; } } } return Object.assign({ current : data.cwd.hash, error : data.error, warning : data.warning, options : {tmb : !!data.tmb} }, diff); }; /** * Convert old api tree into plain array of dirs * * @param Object root dir * @return Array */ this.normalizeTree = function(root) { var self = this, result = [], traverse = function(dirs, phash) { var i, dir; for (i = 0; i < dirs.length; i++) { dir = dirs[i]; result.push(self.normalizeFile(dir, phash)); dir.dirs.length && traverse(dir.dirs, dir.hash); } }; traverse([root]); return result; }; /** * Convert file info from old api format into new one * * @param Object file * @param String parent dir hash * @return Object */ this.normalizeFile = function(file, phash, tmb) { var mime = file.mime || 'directory', size = mime == 'directory' && !file.linkTo ? 0 : file.size, mcts = file.date? Date.parse(getDateString(file.date)) : void 0, info = { url : file.url, hash : file.hash, phash : phash, name : file.name, mime : mime, ts : file.ts, size : size, read : file.read, write : file.write, locked : !phash ? true : file.rm === void(0) ? false : !file.rm }; if (! info.ts) { if (mcts && !isNaN(mcts)) { info.ts = Math.floor(mcts / 1000); } else { info.date = file.date || this.fm.formatDate(file); } } if (file.mime == 'application/x-empty' || file.mime == 'inode/x-empty') { info.mime = 'text/plain'; } if (file.linkTo) { info.alias = file.linkTo; } if (file.linkTo) { info.linkTo = file.linkTo; } if (file.tmb) { info.tmb = file.tmb; } else if (info.mime.indexOf('image/') === 0 && tmb) { info.tmb = 1; } if (file.dirs && file.dirs.length) { info.dirs = true; } if (file.dim) { info.dim = file.dim; } if (file.resize) { info.resize = file.resize; } return info; }; this.normalizeOptions = function(data) { var opts = { path : data.cwd.rel, disabled : jQuery.merge((data.disabled || []), [ 'search', 'netmount', 'zipdl' ]), tmb : !!data.tmb, copyOverwrite : true }; if (data.params) { opts.api = 1; opts.url = data.params.url; opts.archivers = { create : data.params.archives || [], extract : data.params.extract || [] }; } if (opts.path.indexOf('/') !== -1) { opts.separator = '/'; } else if (opts.path.indexOf('\\') !== -1) { opts.separator = '\\'; } return opts; }; }; PK Z0{{js/proxy/.htaccessnuW+A Order allow,deny Deny from all PK Z@;  !js/extras/quicklook.googledocs.jsnuW+A(function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { "use strict"; try { if (! elFinder.prototype.commands.quicklook.plugins) { elFinder.prototype.commands.quicklook.plugins = []; } elFinder.prototype.commands.quicklook.plugins.push(function(ql) { var fm = ql.fm, preview = ql.preview; preview.on('update', function(e) { var win = ql.window, file = e.file, node, loading; if (file.mime.indexOf('application/vnd.google-apps.') === 0) { if (file.url == '1') { preview.hide(); jQuery('
').appendTo(ql.info.find('.elfinder-quicklook-info')) .on('click', function() { jQuery(this).html(''); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true }) .always(function() { preview.show(); jQuery(this).html(''); }) .done(function(data) { var rfile = fm.file(file.hash); ql.value.url = rfile.url = data.url || ''; if (ql.value.url) { preview.trigger(jQuery.Event('update', {file : ql.value})); } }); }); } if (file.url !== '' && file.url != '1') { e.stopImmediatePropagation(); loading = jQuery('
'+fm.i18n('nowLoading')+'
').appendTo(ql.info.find('.elfinder-quicklook-info')); node = jQuery('') .css('background-color', 'transparent') .on('load', function() { ql.hideinfo(); loading.remove(); node.css('background-color', '#fff'); }) .on('error', function() { loading.remove(); node.remove(); }) .appendTo(preview) .attr('src', fm.url(file.hash)); preview.one('change', function() { loading.remove(); node.off('load').remove(); }); } } }); }); } catch(e) {} })); PK Z!''%js/extras/quicklook.googledocs.min.jsnuW+A!function(e,n){"function"==typeof define&&define.amd?define(["elfinder"],n):"undefined"!=typeof exports?module.exports=n(require("elfinder")):n(e.elFinder)}(this,function(e){"use strict";try{e.prototype.commands.quicklook.plugins||(e.prototype.commands.quicklook.plugins=[]),e.prototype.commands.quicklook.plugins.push(function(e){var n=e.fm,o=e.preview;o.on("update",function(i){var r,a,t=(e.window,i.file);0===t.mime.indexOf("application/vnd.google-apps.")&&("1"==t.url&&(o.hide(),$('
").appendTo(e.info.find(".elfinder-quicklook-info")).on("click",function(){$(this).html(''),n.request({data:{cmd:"url",target:t.hash},preventDefault:!0}).always(function(){o.show(),$(this).html("")}).done(function(i){var r=n.file(t.hash);e.value.url=r.url=i.url||"",e.value.url&&o.trigger($.Event("update",{file:e.value}))})})),""!==t.url&&"1"!=t.url&&(i.stopImmediatePropagation(),a=$('
'+n.i18n("nowLoading")+'
').appendTo(e.info.find(".elfinder-quicklook-info")),r=$('').css("background-color","transparent").on("load",function(){e.hideinfo(),a.remove(),r.css("background-color","#fff")}).on("error",function(){a.remove(),r.remove()}).appendTo(o).attr("src",n.url(t.hash)),o.one("change",function(){a.remove(),r.off("load").remove()})))})})}catch(n){}});PK ZJ js/extras/editors.default.min.jsnuW+A!function(e,t){if("function"==typeof define&&define.amd)define(["elfinder"],e);else if(t){var i=t.prototype._options.commandsOptions.edit.editors;t.prototype._options.commandsOptions.edit.editors=i.concat(e(t))}}(function(e){"use strict";var t,i=window.location.search.match(/getfile=([a-z]+)/),n=e.prototype.hasRequire,o={bmp:"image/x-ms-bmp",dng:"image/x-adobe-dng",gif:"image/gif",jpeg:"image/jpeg",jpg:"image/jpeg",pdf:"application/pdf",png:"image/png",ppm:"image/x-portable-pixmap",psd:"image/vnd.adobe.photoshop",pxd:"image/x-pixlr-data",svg:"image/svg+xml",tiff:"image/tiff",webp:"image/webp",xcf:"image/x-xcf",sketch:"application/x-sketch",ico:"image/x-icon",dds:"image/vnd-ms.dds",emf:"application/x-msmetafile"},a=function(e,i,n){t||(t=i.arrayFlip(o));var a=t[e]||i.mimeTypes[e];return n?"jpg"===a&&(a="jpeg"):"jpeg"===a&&(a="jpg"),a},r=function(e,t){var i=$.Deferred();try{var n=document.createElement("canvas"),o=n.getContext("2d"),a=new Image,r=function(){var e,o,a=n.toDataURL(t);e=(o=a.match(/^data:([a-z0-9]+\/[a-z0-9.+-]+)/i))?o[1]:"",e.toLowerCase()===t.toLowerCase()?i.resolve(n.toDataURL(t),n):i.reject()};return a.src=e,$(a).on("load",function(){try{n.width=a.width,n.height=a.height,o.drawImage(a,0,0),r()}catch(e){i.reject()}}).on("error",function(){i.reject()}),i}catch(s){return i.reject()}},s=function(e,t,i,n){var o,r=$(this).children("img:first").data("ext",a(t.mime,n)),s=$('
').html(''+n.i18n("ntfloadimg")+'').hide().appendTo(this),c=function(){r.attr("id",e+"-img").attr("src",o||i).css({height:"","max-width":"100%","max-height":"100%",cursor:"pointer"}).data("loading",function(e){var t=r.closest(".elfinder-dialog").find("button,.elfinder-titlebar-button");return t.prop("disabled",!e)[e?"removeClass":"addClass"]("ui-state-disabled"),r.css("opacity",e?"":"0.3"),s[e?"hide":"show"](),r})};i.match(/^data:/)?c():n.openUrl(t.hash,!1,function(e){o=e,r.attr("_src",i),c()})},c=function(e,t){var i,n,o,a=e.attr("style");try{e.attr("style",""),i=e.get(0),n=document.createElement("canvas"),n.width=i.width,n.height=i.height,e.attr("style",a),n.getContext("2d").drawImage(i,0,0),o=n.toDataURL(t)}catch(r){o=e.attr("src")}return o},d=function(e){var t,i=$(e),n=$.Deferred().always(function(){i.off("load",r)}),o="about:blank",a=function(){t=setTimeout(function(){var e;try{e=base.contentWindow.location.href}catch(t){e=null}e===o?n.resolve():--s>0?a():n.reject()},500)},r=function(){t&&clearTimeout(t),n.resolve()},s=20;return i.one("load",r),e.src=o,a(),n};return i&&(i=i[1],"ckeditor"===i&&(e.prototype._options.getFileCallback=function(e,t){window.opener.CKEDITOR.tools.callFunction(function(){var e=new RegExp("(?:[?&]|&)CKEditorFuncNum=([^&]+)","i"),t=window.location.search.match(e);return t&&t.length>1?t[1]:""}(),t.convAbsUrl(e.url)),t.destroy(),window.close()})),[{info:{id:"tuiimgedit",name:"TUI Image Editor",iconImg:"img/editor-icons.png 0 -48",dataScheme:!0,schemeContent:!0,openMaximized:!0,canMakeEmpty:!1,integrate:{title:"TOAST UI Image Editor",link:"http://ui.toast.com/tui-image-editor/"}},mimes:["image/jpeg","image/png","image/gif","image/svg+xml","image/x-ms-bmp"],html:'
',setup:function(e,t){t.UA.ltIE8||t.UA.Mobile?this.disabled=!0:(this.opts=Object.assign({version:"v3.14.3"},e.extraOptions.tuiImgEditOpts||{},{iconsPath:t.baseUrl+"img/tui-",theme:{}}),t.isSameOrigin(this.opts.iconsPath)||(this.disabled=!0,t.debug("warning","Setting `commandOptions.edit.extraOptions.tuiImgEditOpts.iconsPath` MUST follow the same origin policy.")))},init:function(e,t,i,n){this.data("url",i)},load:function(e){var t,i=this,n=this.fm,o=$.Deferred(),a=n.options.cdns,r=i.confObj.opts.version,s=function(t){var a,r,s,c,d=$(e),l=d.parent(),p=i.confObj.opts,m=p.iconsPath,u=$('
').appendTo(l),f=[$('
').appendTo(u),$('
').appendTo(u)],g=new t(e,{includeUI:{loadImage:{path:d.data("url"),name:i.file.name},theme:Object.assign(p.theme,{"menu.normalIcon.path":m+"icon-d.svg","menu.normalIcon.name":"icon-d","menu.activeIcon.path":m+"icon-b.svg","menu.activeIcon.name":"icon-b","menu.disabledIcon.path":m+"icon-a.svg","menu.disabledIcon.name":"icon-a","menu.hoverIcon.path":m+"icon-c.svg","menu.hoverIcon.name":"icon-c","submenu.normalIcon.path":m+"icon-d.svg","submenu.normalIcon.name":"icon-d","submenu.activeIcon.path":m+"icon-c.svg","submenu.activeIcon.name":"icon-c"}),initMenu:"filter",menuBarPosition:"bottom"},cssMaxWidth:Math.max(300,l.width()),cssMaxHeight:Math.max(200,l.height()-(f[0].height()+f[1].height()+3)),usageStatistics:!1}),h=d.find("canvas:first").get(0),v=function(e){if("undefined"!=typeof e){var t,i,n=$(h),o=parseInt(n.attr("width")),a=parseInt(n.attr("height")),r=o/a;0===e?(t=o,i=a):(t=parseInt(n.css("max-width"))+Number(e),i=t/r,t>o&&i>a&&(t=o,i=a)),y.text(Math.round(t/o*100)+"%"),g.resizeCanvasDimension({width:t,height:i}),c&&setTimeout(function(){c&&v(e)},50)}},b=$('').data("val",10),x=$('').data("val",-10),y=$("").css("width","4em").text("%").attr("title","100%").data("val",0);u.remove(),d.removeData("url").data("mime",i.file.mime),"image/jpeg"===i.file.mime?(d.data("quality",n.storage("jpgQuality")||n.option("jpgQuality")),a=$('').attr("min","1").attr("max","100").attr("title","1 - 100").on("change",function(){var e=a.val();d.data("quality",e),r&&cancelAnimationFrame(r),r=requestAnimationFrame(function(){h.toBlob(function(e){e&&a.next("span").text(" ("+n.formatSize(e.size)+")")},"image/jpeg",Math.max(Math.min(e,100),1)/100)})}).val(d.data("quality")),$('
').append($("").html(n.i18n("quality")+" : "),a,$("")).prependTo(d.parent().next())):"image/svg+xml"===i.file.mime&&d.closest(".ui-dialog").trigger("changeType",{extention:"png",mime:"image/png",keepEditor:!0}),$('
').append(x,y,b).attr("title",n.i18n("scale")).on("click","span,button",function(){v($(this).data("val"))}).on("mousedown mouseup mouseleave","span",function(e){c=!1,s&&clearTimeout(s),"mousedown"===e.type&&(s=setTimeout(function(){c=!0,v($(e.target).data("val"))},500))}).prependTo(d.parent().next()),setTimeout(function(){o.resolve(g),a&&(a.trigger("change"),g.on("redoStackChanged undoStackChanged",function(){a.trigger("change")})),v(null)},100),d.find(".tui-colorpicker-palette-container").on("click",".tui-colorpicker-palette-preview",function(){$(this).closest(".color-picker-control").height("auto").find(".tui-colorpicker-slider-container").toggle()}),d.on("click",function(){d.find(".tui-colorpicker-slider-container").hide()})};return i.confObj.editor?s(i.confObj.editor):(t=$.Deferred(),n.loadCss([a.tui+"/tui-color-picker/latest/tui-color-picker.css",a.tui+"/tui-image-editor/"+r+"/tui-image-editor.css"]),n.hasRequire?(require.config({paths:{"fabric/dist/fabric.require":a.fabric+"/fabric.require.min",fabric:a.fabric+"/fabric.min","tui-code-snippet":a.tui+"/tui.code-snippet/latest/tui-code-snippet.min","tui-color-picker":a.tui+"/tui-color-picker/latest/tui-color-picker.min","tui-image-editor":a.tui+"/tui-image-editor/"+r+"/tui-image-editor.min"}}),require(["tui-image-editor"],function(e){t.resolve(e)})):n.loadScript([a.fabric+"/fabric.min.js",a.tui+"/tui.code-snippet/latest/tui-code-snippet.min.js"],function(){n.loadScript([a.tui+"/tui-color-picker/latest/tui-color-picker.min.js"],function(){n.loadScript([a.tui+"/tui-image-editor/"+r+"/tui-image-editor.min.js"],function(){t.resolve(window.tui.ImageEditor)},{loadType:"tag"})},{loadType:"tag"})},{loadType:"tag"}),t.done(function(e){i.confObj.editor=e,s(e)})),o},getContent:function(e){var t=this.editor,i=t.fm,n=$(e),o=n.data("quality");if(t.instance)return"image/jpeg"===n.data("mime")&&(o=o||i.storage("jpgQuality")||i.option("jpgQuality"),o=Math.max(.1,Math.min(1,o/100))),t.instance.toDataURL({format:a(n.data("mime"),i,!0),quality:o})},save:function(e){var t,i=$(e),n=i.data("quality"),o=i.data("hash");this.instance.deactivateAll(),"undefined"!=typeof n&&this.fm.storage("jpgQuality",n),o&&(t=this.fm.file(o),i.data("mime",t.mime))}},{info:{id:"photopea",name:"Photopea",iconImg:"img/editor-icons.png 0 -160",single:!0,noContent:!0,arrayBufferContent:!0,openMaximized:!0,canMakeEmpty:["image/jpeg","image/png","image/gif","image/svg+xml","image/x-ms-bmp","image/tiff","image/webp","image/vnd.adobe.photoshop","application/pdf","image/x-portable-pixmap","image/x-sketch","image/x-icon","image/vnd-ms.dds"],integrate:{title:"Photopea",link:"https://www.photopea.com/learn/"}},mimes:["image/jpeg","image/png","image/gif","image/svg+xml","image/x-ms-bmp","image/tiff","image/x-adobe-dng","image/webp","image/x-xcf","image/vnd.adobe.photoshop","application/pdf","image/x-portable-pixmap","image/x-sketch","image/x-icon","image/vnd-ms.dds","application/x-msmetafile"],html:'',setup:function(e,t){(t.UA.IE||t.UA.Mobile)&&(this.disabled=!0)},init:function(e,t,i,n){var r,s,c,d="https://www.photopea.com",l=$(this).hide().on("load",function(){l.show()}).on("error",function(){u.remove(),l.show()}),p=this.editor,m=p.confObj,u=$('
').html(''+n.i18n("nowLoading")+'').appendTo(l.parent()),f=n.arrayFlip(m.info.canMakeEmpty),g=function(e){var t=a(e,n),i=o[t];return m.mimesFlip[i]?"jpeg"===t&&(t="jpg"):t="",t&&f[i]||(t="psd",i=o[t],l.closest(".ui-dialog").trigger("changeType",{extention:t,mime:i,keepEditor:!0})),t},h=t.mime;m.mimesFlip||(m.mimesFlip=n.arrayFlip(m.mimes,!0)),m.liveMsg||(m.liveMsg=function(e,t,i){var o,a=e.get(0).contentWindow,r=0,s=null,c=$.Deferred().done(function(){t.remove(),r=1,a.postMessage(s,d)});this.load=function(){return n.getContents(i.hash,"arraybuffer").done(function(e){s=e})},this.receive=function(t){var i=t.originalEvent;i.origin===d&&i.source===a&&("done"===i.data?0===r?c.resolve():1===r?(r=2,e.trigger("contentsloaded")):o&&"pending"===o.state()&&o.reject("errDataEmpty"):"Save"===i.data?p.doSave():o&&"pending"===o.state()&&("object"==typeof i.data?o.resolve("data:"+h+";base64,"+n.arrayBufferToBase64(i.data)):o.reject("errDataEmpty")))},this.getContent=function(){var t,i;if(r>1)return o&&"pending"===o.state()&&o.reject(),o=null,o=$.Deferred(),2===r?(r=3,o.resolve("data:"+h+";base64,"+n.arrayBufferToBase64(s)),s=null,o):(e.data("mime")&&(h=e.data("mime"),t=g(h)),(i=e.data("quality"))&&(t+=":"+i/100),a.postMessage('app.activeDocument.saveToOE("'+t+'")',d),o)}}),l.parent().css("padding",0),s=g(t.mime),r=p.liveMsg=new m.liveMsg(l,u,t),$(window).on("message."+n.namespace,r.receive),r.load().done(function(){var e=JSON.stringify({files:[],environment:{lang:n.lang.replace(/_/g,"-"),customIO:{save:'app.echoToOE("Save");'}}});l.attr("src",d+"/#"+encodeURI(e))}).fail(function(e){e&&n.error(e),p.initFail=!0}),"image/jpeg"!==t.mime&&"image/webp"!==t.mime||(l.data("quality",n.storage("jpgQuality")||n.option("jpgQuality")),c=$('').attr("min","1").attr("max","100").attr("title","1 - 100").on("change",function(){var e=c.val();l.data("quality",e)}).val(l.data("quality")),$('
').append($("").html(n.i18n("quality")+" : "),c,$("")).prependTo(l.parent().next()))},load:function(e){var t=$.Deferred(),i=this,n=(this.fm,$(e));return i.initFail?t.reject():n.on("contentsloaded",function(){t.resolve(i.liveMsg)}),t},getContent:function(){return this.editor.liveMsg?this.editor.liveMsg.getContent():void 0},save:function(e,t){var i,n=$(e),o=n.data("quality"),a=n.data("hash");"undefined"!=typeof o&&this.fm.storage("jpgQuality",o),a?(i=this.fm.file(a),n.data("mime",i.mime)):n.removeData("mime")},close:function(e,t){$(e).attr("src",""),t&&$(window).off("message."+this.fm.namespace,t.receive)}},{info:{id:"pixo",name:"Pixo Editor",iconImg:"img/editor-icons.png 0 -208",dataScheme:!0,schemeContent:!0,single:!0,canMakeEmpty:!1,integrate:{title:"Pixo Editor",link:"https://pixoeditor.com/privacy-policy/"}},mimes:["image/jpeg","image/png","image/gif","image/svg+xml","image/x-ms-bmp"],html:'
',setup:function(e,t){!t.UA.ltIE8&&e.extraOptions&&e.extraOptions.pixo&&e.extraOptions.pixo.apikey?this.editorOpts=e.extraOptions.pixo:this.disabled=!0},init:function(e,t,i,n){s.call(this,e,t,i,n)},getContent:function(){return $(this).children("img:first").attr("src")},load:function(e){var t,i,n,o,s,c=this,d=this.fm,l=$(e),p=l.children("img:first"),m=l.closest(".ui-dialog"),u=d.getUI(),f=$.Deferred(),g=$("#elfinder-pixo-container"),h=function(n){var h;g.length?g.appendTo(g.parent()):(g=$('
').css({position:"fixed",top:0,right:0,width:"100%",height:$(window).height(),overflow:"hidden"}).hide().appendTo(u.hasClass("elfinder-fullscreen")?u:"body"),u.on("resize."+d.namespace,function(e,t){e.preventDefault(),e.stopPropagation(),t&&t.fullscreen&&g.appendTo("on"===t.fullscreen?u:"body")}),d.bind("destroy",function(){s&&s.cancelEditing(),g.remove()})),p.on("click",v),h=Object.assign({type:"child",parent:g.get(0),output:{format:"png"},onSave:function(n){var s=n.toBlob().type,l=a(s,d),u=function(e){p.one("load error",function(){p.data("loading")&&p.data("loading")(!0)}).attr("crossorigin","anonymous").attr("src",e)},f=n.toDataURL();p.data("loading")(),delete e._canvas,p.data("ext")!==l?r(f,c.file.mime).done(function(n,a){a&&(e._canvas=o=a,i.trigger("change"),t&&t.show()),u(n)}).fail(function(){m.trigger("changeType",{extention:l,mime:s}),u(f)}):u(f)},onClose:function(){m.removeClass(d.res("class","preventback")),d.toggleMaximize(g,!1),g.hide(),d.toFront(m)}},c.confObj.editorOpts),c.trigger("Prepare",{node:e,editorObj:Pixo,instance:void 0,opts:h}),s=new Pixo.Bridge(h),f.resolve(s),l.on("saveAsFail",v),n&&n()},v=function(){m.addClass(d.res("class","preventback")),d.toggleMaximize(g,!0),d.toFront(g),g.show().data("curhash",c.file.hash),s.edit(p.get(0)),p.data("loading")(!0)};return p.data("loading")(),"image/jpeg"===c.file.mime&&(i=$('').attr("min","1").attr("max","100").attr("title","1 - 100").on("change",function(){var e=i.val();n&&cancelAnimationFrame(n),n=requestAnimationFrame(function(){o&&o.toBlob(function(e){e&&i.next("span").text(" ("+d.formatSize(e.size)+")")},"image/jpeg",Math.max(Math.min(e,100),1)/100)})}).val(d.storage("jpgQuality")||d.option("jpgQuality")),t=$('
').hide().append($("").html(d.i18n("quality")+" : "),i,$("")).prependTo(l.parent().next()),l.data("quty",i)),"undefined"==typeof Pixo?d.loadScript(["https://pixoeditor.com:8443/editor/scripts/bridge.m.js"],function(){h(v)},{loadType:"tag"}):(h(),v()),f},save:function(e){var t,i=this,n=$(e),o=n.children("img:first");e._canvas?(n.data("quty")&&(t=n.data("quty").val(),t&&this.fm.storage("jpgQuality",t)),o.attr("src",e._canvas.toDataURL(i.file.mime,t?Math.max(Math.min(t,100),1)/100:void 0))):"data:"!==o.attr("src").substr(0,5)&&o.attr("src",c(o,this.file.mime))},close:function(e,t){t&&t.destroy()}},{setup:function(e,t){!t.UA.ltIE8&&t.options.cdns.ace||(this.disabled=!0)},info:{id:"aceeditor",name:"ACE Editor",iconImg:"img/editor-icons.png 0 -96"},load:function(e){var t=this,i=this.fm,n=$.Deferred(),o=i.options.cdns.ace,a=function(){var i,a,r,s=$(e),c=s.parent(),d=c.parent(),l=e.id+"_ace",p=(t.file.name.replace(/^.+\.([^.]+)|(.+)$/,"$1$2").toLowerCase(),{"text/x-php":"php","application/x-php":"php","text/html":"html","application/xhtml+xml":"html","text/javascript":"javascript","application/javascript":"javascript","text/css":"css","text/x-c":"c_cpp","text/x-csrc":"c_cpp","text/x-chdr":"c_cpp","text/x-c++":"c_cpp","text/x-c++src":"c_cpp","text/x-c++hdr":"c_cpp","text/x-shellscript":"sh","application/x-csh":"sh","text/x-python":"python","text/x-java":"java","text/x-java-source":"java","text/x-ruby":"ruby","text/x-perl":"perl","application/x-perl":"perl","text/x-sql":"sql","text/xml":"xml","application/docbook+xml":"xml","application/xml":"xml"});c.height(c.height()),ace.config.set("basePath",o),a=$('
').text(s.val()).insertBefore(s.hide()),s.data("ace",!0),i=ace.edit(l),i.$blockScrolling=1/0,i.setOptions({theme:"ace/theme/monokai",fontSize:"14px",wrap:!0}),ace.config.loadModule("ace/ext/modelist",function(){r=ace.require("ace/ext/modelist").getModeForPath("/"+t.file.name).name,"text"===r&&p[t.file.mime]&&(r=p[t.file.mime]),c.prev().children(".elfinder-dialog-title").append(" ("+t.file.mime+" : "+r.split(/[\/\\]/).pop()+")"),i.setOptions({mode:"ace/mode/"+r}),"resolved"===n.state()&&d.trigger("resize")}),ace.config.loadModule("ace/ext/language_tools",function(){ace.require("ace/ext/language_tools"),i.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!1})}),ace.config.loadModule("ace/ext/settings_menu",function(){ace.require("ace/ext/settings_menu").init(i)}),i.commands.addCommand({name:"saveFile",bindKey:{win:"Ctrl-s",mac:"Command-s"},exec:function(e){t.doSave()}}),i.commands.addCommand({name:"closeEditor",bindKey:{win:"Ctrl-w|Ctrl-q",mac:"Command-w|Command-q"},exec:function(e){t.doCancel()}}),i.resize(),$('
').css("float","left").append($("").html(t.fm.i18n("TextArea")).button().on("click",function(){s.data("ace")?(s.removeData("ace"),a.hide(),s.val(i.session.getValue()).show().trigger("focus"),$(this).text("AceEditor")):(s.data("ace",!0),a.show(),i.setValue(s.hide().val(),-1),i.focus(),$(this).html(t.fm.i18n("TextArea")))})).append($("").button({icons:{primary:"ui-icon-gear",secondary:"ui-icon-triangle-1-e"},text:!1}).on("click",function(){i.showSettingsMenu(),$("#ace_settingsmenu").css("font-size","80%").find('div[contains="setOptions"]').hide().end().parent().appendTo($("#elfinder"))})).prependTo(c.next()),t.trigger("Prepare",{node:e,editorObj:ace,instance:i,opts:{}}),n.resolve(i)};return t.confObj.loader||(t.confObj.loader=$.Deferred(),t.fm.loadScript([o+"/ace.js"],function(){t.confObj.loader.resolve()},void 0,{obj:window,name:"ace"})),t.confObj.loader.done(a),n},close:function(e,t){t&&t.destroy()},save:function(e,t){t&&$(e).data("ace")&&(e.value=t.session.getValue())},focus:function(e,t){t&&$(e).data("ace")&&t.focus()},resize:function(e,t,i,n){t&&t.resize()}},{setup:function(e,t){!t.UA.ltIE10&&t.options.cdns.codemirror||(this.disabled=!0)},info:{id:"codemirror",name:"CodeMirror",iconImg:"img/editor-icons.png 0 -176"},load:function(e){var t=this.fm,i=t.convAbsUrl(t.options.cdns.codemirror),o=$.Deferred(),a=this,r=function(t){var r,s,c,d=$(e),l=d.parent();l.height(l.height()),c={lineNumbers:!0,lineWrapping:!0,extraKeys:{"Ctrl-S":function(){a.doSave()},"Ctrl-Q":function(){a.doCancel()},"Ctrl-W":function(){a.doCancel()}}},a.trigger("Prepare",{node:e,editorObj:t,instance:void 0,opts:c}),r=t.fromTextArea(e,c),o.resolve(r);var p,m,u,f;p||(p=t.findModeByMIME(a.file.mime)),!p&&(m=a.file.name.match(/.+\.([^.]+)$/))&&(p=t.findModeByExtension(m[1])),p&&(t.modeURL=n?"codemirror/mode/%N/%N.min":i+"/mode/%N/%N.min.js",u=p.mode,f=p.mime,r.setOption("mode",f),t.autoLoadMode(r,u),l.prev().children(".elfinder-dialog-title").append(" ("+f+("null"!=u?" : "+u:"")+")")),s=$(r.getWrapperElement()).css({padding:0,border:"none"}),d.data("cm",!0),s.height("100%"),$('
').css("float","left").append($("").html(a.fm.i18n("TextArea")).button().on("click",function(){d.data("cm")?(d.removeData("cm"),s.hide(),d.val(r.getValue()).show().trigger("focus"),$(this).text("CodeMirror")):(d.data("cm",!0),s.show(),r.setValue(d.hide().val()),r.refresh(),r.focus(),$(this).html(a.fm.i18n("TextArea")))})).prependTo(l.next())};return a.confObj.loader||(a.confObj.loader=$.Deferred(),n?(require.config({packages:[{name:"codemirror",location:i,main:"codemirror.min"}],map:{codemirror:{"codemirror/lib/codemirror":"codemirror"}}}),require(["codemirror","codemirror/addon/mode/loadmode.min","codemirror/mode/meta.min"],function(e){a.confObj.loader.resolve(e)})):a.fm.loadScript([i+"/codemirror.min.js"],function(){a.fm.loadScript([i+"/addon/mode/loadmode.min.js",i+"/mode/meta.min.js"],function(){a.confObj.loader.resolve(CodeMirror)})},{loadType:"tag"}),a.fm.loadCss(i+"/codemirror.css")),a.confObj.loader.done(r),o},close:function(e,t){t&&t.toTextArea()},save:function(e,t){t&&$(e).data("cm")&&(e.value=t.getValue())},focus:function(e,t){t&&$(e).data("cm")&&t.focus()},resize:function(e,t,i,n){t&&t.refresh()}},{setup:function(e,t){!t.UA.ltIE10&&t.options.cdns.simplemde||(this.disabled=!0)},info:{id:"simplemde",name:"SimpleMDE",iconImg:"img/editor-icons.png 0 -80"},exts:["md"],load:function(e){var t=this,i=this.fm,o=$(e).parent(),a=$.Deferred(),r=i.options.cdns.simplemde,s=function(i){var n,r,s,c=o.height(),d=o.outerHeight(!0)-c+14;e._setHeight=function(e){var t,i=e||o.height(),a=0;return o.children(".editor-toolbar,.editor-statusbar").each(function(){a+=$(this).outerHeight(!0)}),t=i-a-d,r.height(t),n.codemirror.refresh(),t},o.height(c),s={element:e,autofocus:!0},t.trigger("Prepare",{node:e,editorObj:i,instance:void 0,opts:s}),n=new i(s),a.resolve(n),r=$(n.codemirror.getWrapperElement()),r.css("min-height","50px").children(".CodeMirror-scroll").css("min-height","50px"),e._setHeight(c)};return t.confObj.loader||(t.confObj.loader=$.Deferred(),t.fm.loadCss(r+"/simplemde.min.css"),n?require([r+"/simplemde.min.js"],function(e){t.confObj.loader.resolve(e)}):t.fm.loadScript([r+"/simplemde.min.js"],function(){t.confObj.loader.resolve(SimpleMDE)},{loadType:"tag"})),t.confObj.loader.done(s),a},close:function(e,t){t&&t.toTextArea(),t=null},save:function(e,t){t&&(e.value=t.value())},focus:function(e,t){t&&t.codemirror.focus()},resize:function(e,t,i,n){t&&e._setHeight()}},{info:{id:"ckeditor",name:"CKEditor",iconImg:"img/editor-icons.png 0 0"},exts:["htm","html","xhtml"],setup:function(e,t){var i=this;t.options.cdns.ckeditor?(i.ckeOpts={},e.extraOptions&&(i.ckeOpts=Object.assign({},e.extraOptions.ckeditor||{}),e.extraOptions.managerUrl&&(i.managerUrl=e.extraOptions.managerUrl))):i.disabled=!0},load:function(e){var t=this,i=this.fm,n=$.Deferred(),o=function(){var o,a=$(e).parent(),r=a.closest(".elfinder-dialog"),s=a.height(),c=/([&?]getfile=)[^&]+/,d=t.confObj.managerUrl||window.location.href.replace(/#.*$/,""),l="ckeditor";c.test(d)?d=d.replace(c,"$1"+l):d+="?getfile="+l,a.height(s),o={startupFocus:!0,fullPage:!0,allowedContent:!0,filebrowserBrowseUrl:d,toolbarCanCollapse:!0,toolbarStartupExpanded:!i.UA.Mobile,removePlugins:"resize",extraPlugins:"colorbutton,justify,docprops",on:{instanceReady:function(o){var a=o.editor;a.resize("100%",s),r.one("beforedommove."+i.namespace,function(){a.destroy()}).one("dommove."+i.namespace,function(){t.load(e).done(function(e){t.instance=e})}),n.resolve(o.editor)}}},t.trigger("Prepare",{node:e,editorObj:CKEDITOR,instance:void 0,opts:o}),CKEDITOR.replace(e.id,Object.assign(o,t.confObj.ckeOpts)),CKEDITOR.on("dialogDefinition",function(e){var t=e.data.definition.dialog;t.on("show",function(e){i.getUI().append($(".cke_dialog_background_cover")).append(this.getElement().$)}),t.on("hide",function(e){$("body:first").append($(".cke_dialog_background_cover")).append(this.getElement().$)})})};return t.confObj.loader||(t.confObj.loader=$.Deferred(),window.CKEDITOR_BASEPATH=i.options.cdns.ckeditor+"/",$.getScript(i.options.cdns.ckeditor+"/ckeditor.js",function(){t.confObj.loader.resolve()})),t.confObj.loader.done(o),n},close:function(e,t){t&&t.destroy()},save:function(e,t){t&&(e.value=t.getData())},focus:function(e,t){t&&t.focus()},resize:function(e,t,i,n){t&&"ready"===t.status&&t.resize("100%",$(e).parent().height())}},{info:{id:"ckeditor5",name:"CKEditor5",iconImg:"img/editor-icons.png 0 -16"},exts:["htm","html","xhtml"],html:'
',setup:function(e,t){var i=this;t.options.cdns.ckeditor5&&"function"==typeof window.Symbol&&"symbol"==typeof Symbol()?(i.ckeOpts={},e.extraOptions&&(e.extraOptions.ckeditor5Mode&&(i.ckeditor5Mode=e.extraOptions.ckeditor5Mode),i.ckeOpts=Object.assign({},e.extraOptions.ckeditor5||{}),i.ckeOpts.mode&&(i.ckeditor5Mode=i.ckeOpts.mode,delete i.ckeOpts.mode),e.extraOptions.managerUrl&&(i.managerUrl=e.extraOptions.managerUrl))):i.disabled=!0,t.bind("destroy",function(){i.editor=null})},prepare:function(e,t,i){$(e).height(e.editor.fm.getUI().height()-100)},init:function(e,t,i,n){var o=i.match(/^([\s\S]*]*>)([\s\S]+)(<\/body>[\s\S]*)$/i),a="",r="",s="";this.css({width:"100%",height:"100%","box-sizing":"border-box"}),o?(a=o[1],r=o[2],s=o[3]):r=i,this.data("data",{header:a,body:r,footer:s}),this._setupSelEncoding(i)},load:function(e){var t,i=this,n=this.fm,o=$.Deferred(),a=i.confObj.ckeditor5Mode||"decoupled-document",r=function(){var e=n.lang.toLowerCase().replace("_","-");return"zh"===e.substr(0,2)&&"zh-cn"!==e&&(e="zh"),e}(),s=function(t){var s,d=$(e).parent();d.height(n.getUI().height()-100),s=Object.assign({toolbar:["heading","|","fontSize","fontFamily","|","bold","italic","underline","strikethrough","highlight","|","alignment","|","numberedList","bulletedList","blockQuote","indent","outdent","|","ckfinder","link","imageUpload","insertTable","mediaEmbed","|","undo","redo"],language:r},i.confObj.ckeOpts),i.trigger("Prepare",{node:e,editorObj:t,instance:void 0,opts:s}),t.create(e,s).then(function(t){var i,r,s=t.commands.get("ckfinder"),l=t.plugins.get("FileRepository"),p={};!t.ui.view.toolbar||"classic"!==a&&"decoupled-document"!==a||$(e).closest(".elfinder-dialog").children(".ui-widget-header").append($(t.ui.view.toolbar.element).css({marginRight:"-1em",marginLeft:"-1em"})),"classic"===a&&$(e).closest(".elfinder-edit-editor").css("overflow","auto"),s&&(i=function(e){return e&&e.mime.match(/^image\//i)},r=function(e){var i=t.commands.get("imageUpload");if(!i.isEnabled){var n=t.plugins.get("Notification"),o=t.locale.t;return void n.showWarning(o("Could not insert image at the current position."),{title:o("Inserting image failed"),namespace:"ckfinder"})}t.execute("imageInsert",{source:e})},s.execute=function(){var e=d.closest(".elfinder-dialog"),o=n.getCommand("getfile"),a=function(){p.hasVar&&(e.off("resize close",a),o.callback=p.callback,o.options.folders=p.folders,o.options.multiple=p.multi,n.commandMap.open=p.open,p.hasVar=!1)};e.trigger("togleminimize").one("resize close",a),p.callback=o.callback,p.folders=o.options.folders,p.multi=o.options.multiple,p.open=n.commandMap.open,p.hasVar=!0,o.callback=function(o){var a=[];return 1===o.length&&"directory"===o[0].mime?void n.one("open",function(){n.commandMap.open="getfile"}).getCommand("open").exec(o[0].hash):(n.getUI("cwd").trigger("unselectall"),$.each(o,function(e,o){i(o)?a.push(n.convAbsUrl(o.url)):t.execute("link",n.convAbsUrl(o.url))}),a.length&&r(a),void e.trigger("togleminimize"))},o.options.folders=!0,o.options.multiple=!0,n.commandMap.open="getfile",n.toast({mode:"info",msg:n.i18n("dblclickToSelect")})}),l.createUploadAdapter=function(e){return new c(e)},t.setData($(e).data("data").body),n.getUI().append($("body > div.ck-body")),$("div.ck-balloon-panel").css({"z-index":n.getMaximizeCss().zIndex+1}),o.resolve(t)})["catch"](function(e){n.error(e)})},c=function(e){var t=function(t,i,o){n.exec("upload",{files:[t]},void 0,n.cwd().hash).done(function(e){e.added&&e.added.length?n.url(e.added[0].hash,{async:!0}).done(function(e){i({"default":n.convAbsUrl(e)})}).fail(function(){o("errFileNotFound")}):o(n.i18n(e.error?e.error:"errUpload"))}).fail(function(e){var t=n.parseError(e);o(n.i18n(t?"userabort"===t?"errAbort":t:"errUploadNoFiles"))}).progress(function(t){e.uploadTotal=t.total,e.uploaded=t.progress})};this.upload=function(){return new Promise(function(i,n){e.file instanceof Promise||e.file&&"function"==typeof e.file.then?e.file.then(function(e){t(e,i,n)}):t(e.file,i,n)})},this.abort=function(){n.getUI().trigger("uploadabort")}};return i.confObj.editor?s(i.confObj.editor):(t=$.Deferred(),i.fm.loadScript([n.options.cdns.ckeditor5+"/"+a+"/ckeditor.js"],function(e){e||(e=window.BalloonEditor||window.InlineEditor||window.ClassicEditor||window.DecoupledEditor),"en"!==n.lang?i.fm.loadScript([n.options.cdns.ckeditor5+"/"+a+"/translations/"+r+".js"],function(i){t.resolve(e)},{tryRequire:!0,loadType:"tag",error:function(i){r="en",t.resolve(e)}}):t.resolve(e)},{tryRequire:!0,loadType:"tag"}),t.done(function(e){i.confObj.editor=e,s(e)})),o},getContent:function(){var e=$(this).data("data");return e.header+e.body+e.footer},close:function(e,t){t&&t.destroy()},save:function(e,t){var i=$(e),n=i.data("data");t&&(n.body=t.getData(),i.data("data",n))},focus:function(e,t){$(e).trigger("focus")}},{info:{id:"tinymce",name:"TinyMCE",iconImg:"img/editor-icons.png 0 -64"},exts:["htm","html","xhtml"],setup:function(e,t){var i=this;t.options.cdns.tinymce?(i.mceOpts={},e.extraOptions?(i.uploadOpts=Object.assign({},e.extraOptions.uploadOpts||{}),i.mceOpts=Object.assign({},e.extraOptions.tinymce||{})):i.uploadOpts={}):i.disabled=!0},load:function(e){var t=this,i=this.fm,n=$.Deferred(),o=function(){var o,a,r,s=$(e).show().parent(),c=s.closest(".elfinder-dialog"),d=s.height(),l=s.outerHeight(!0)-d,p=function(){var e;tinymce.activeEditor.windowManager.windows?(e=tinymce.activeEditor.windowManager.windows[0],a=$(e?e.getEl():void 0).hide(),r=$("#mce-modal-block").hide()):a=$(".tox-dialog-wrap").hide()},m=function(){r&&r.show(),a&&a.show()},u=tinymce.majorVersion;s.height(d),e._setHeight=function(e){if(u<5){var t,i=$(this).parent(),n=e||i.innerHeight(),o=0;i.find(".mce-container-body:first").children(".mce-top-part,.mce-statusbar").each(function(){o+=$(this).outerHeight(!0)}),t=n-o-l,i.find(".mce-edit-area iframe:first").height(t)}},o={selector:"#"+e.id,resize:!1,plugins:"print preview fullpage searchreplace autolink directionality visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists wordcount imagetools textpattern help",toolbar:"formatselect | bold italic strikethrough forecolor backcolor | link image media | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat",image_advtab:!0,init_instance_callback:function(o){e._setHeight(d),c.one("beforedommove."+i.namespace,function(){tinymce.execCommand("mceRemoveEditor",!1,e.id)}).one("dommove."+i.namespace,function(){t.load(e).done(function(e){t.instance=e})}),n.resolve(o)},file_picker_callback:function(e,t,n){var o=i.getCommand("getfile"),a=function(){r.hasVar&&(o.callback=r.callback,o.options.folders=r.folders,o.options.multiple=r.multi,i.commandMap.open=r.open,r.hasVar=!1),c.off("resize close",a),m()},r={};return r.callback=o.callback,r.folders=o.options.folders,r.multi=o.options.multiple,r.open=i.commandMap.open,r.hasVar=!0,o.callback=function(t){var o,a;return"directory"===t.mime?void i.one("open",function(){i.commandMap.open="getfile"}).getCommand("open").exec(t.hash):(o=i.convAbsUrl(t.url),a=t.name+" ("+i.formatSize(t.size)+")","file"==n.filetype&&e(o,{text:a,title:a}),"image"==n.filetype&&e(o,{alt:a}),"media"==n.filetype&&e(o),void c.trigger("togleminimize"))},o.options.folders=!0,o.options.multiple=!1, i.commandMap.open="getfile",p(),c.trigger("togleminimize").one("resize close",a),i.toast({mode:"info",msg:i.i18n("dblclickToSelect")}),!1},images_upload_handler:function(e,n,o){var a=e.blob(),r=function(e){var t=e.data.dialog||{};(t.hasClass("elfinder-dialog-error")||t.hasClass("elfinder-confirm-upload"))&&(p(),t.trigger("togleminimize").one("resize close",s),i.unbind("dialogopened",r))},s=function(){c.off("resize close",s),m()},d=!0;a.name&&(d=void 0),i.bind("dialogopened",r).exec("upload",Object.assign({files:[a],clipdata:d},t.confObj.uploadOpts),void 0,i.cwd().hash).done(function(e){e.added&&e.added.length?i.url(e.added[0].hash,{async:!0}).done(function(e){m(),n(i.convAbsUrl(e))}).fail(function(){o(i.i18n("errFileNotFound"))}):o(i.i18n(e.error?e.error:"errUpload"))}).fail(function(e){var t=i.parseError(e);t&&("errUnknownCmd"===t?t="errPerm":"userabort"===t&&(t="errAbort")),o(i.i18n(t?t:"errUploadNoFiles"))})}},u>=5&&(o.height="100%"),t.trigger("Prepare",{node:e,editorObj:tinymce,instance:void 0,opts:o}),tinymce.init(Object.assign(o,t.confObj.mceOpts))};return t.confObj.loader||(t.confObj.loader=$.Deferred(),t.fm.loadScript([i.options.cdns.tinymce+(i.options.cdns.tinymce.match(/\.js/)?"":"/tinymce.min.js")],function(){t.confObj.loader.resolve()},{loadType:"tag"})),t.confObj.loader.done(o),n},close:function(e,t){t&&tinymce.execCommand("mceRemoveEditor",!1,e.id)},save:function(e,t){t&&t.save()},focus:function(e,t){t&&t.focus()},resize:function(e,t,i,n){t&&e._setHeight()}},{info:{id:"zohoeditor",name:"Zoho Editor",iconImg:"img/editor-icons.png 0 -32",cmdCheck:"ZohoOffice",preventGet:!0,hideButtons:!0,syncInterval:15e3,canMakeEmpty:!0,integrate:{title:"Zoho Office API",link:"https://www.zoho.com/officeapi/"}},mimes:["application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.oasis.opendocument.text","application/rtf","text/html","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.spreadsheet","application/vnd.sun.xml.calc","text/csv","text/tab-separated-values","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.presentationml.slideshow","application/vnd.oasis.opendocument.presentation","application/vnd.sun.xml.impress"],html:'',setup:function(e,t){(t.UA.Mobile||t.UA.ltIE8)&&(this.disabled=!0)},prepare:function(e,t,i){var n=e.editor.fm.getUI();$(e).height(n.height()),t.width=Math.max(t.width||0,.8*n.width())},init:function(e,t,i,n){var o=this,a=$(this).hide(),r=n.getUI("toast"),s=$('
').html(''+n.i18n("nowLoading")+'').appendTo(a.parent()),c=function(){var e="";return $.each(n.customData,function(t,i){e+="&"+encodeURIComponent(t)+"="+encodeURIComponent(i)}),e};$(o).data("xhr",n.request({data:{cmd:"editor",name:o.editor.confObj.info.cmdCheck,method:"init","args[target]":t.hash,"args[lang]":n.lang,"args[cdata]":c()},preventDefault:!0}).done(function(e){var t;e.zohourl?(t={css:{height:"100%"}},o.editor.trigger("Prepare",{node:o,editorObj:void 0,instance:a,opts:t}),a.attr("src",e.zohourl).show().css(t.css),e.warning&&(r.appendTo(o.closest(".ui-dialog")),n.toast({msg:n.i18n(e.warning),mode:"warning",timeOut:0,onHidden:function(){1===r.children().length&&r.appendTo(n.getUI())},button:{text:"btnYes"}}))):(e.error&&n.error(e.error),o.elfinderdialog("destroy"))}).fail(function(e){e&&n.error(e),o.elfinderdialog("destroy")}).always(function(){s.remove()}))},load:function(){},getContent:function(){},save:function(){},beforeclose:d,close:function(e){var t=(this.fm,$(e).data("xhr"));"pending"===t.state()&&t.reject()}},{info:{id:"ziparchive",name:"btnMount",iconImg:"img/toolbar.png 0 -416",cmdCheck:"ZipArchive",edit:function(e,t){var i=this,n=$.Deferred();return i.request({data:{cmd:"netmount",protocol:"ziparchive",host:e.hash,path:e.phash},preventFail:!0,notify:{type:"netmount",cnt:1,hideCnt:!0}}).done(function(e){var t;e.added&&e.added.length&&(e.added[0].phash&&(t=i.file(e.added[0].phash))&&(t.dirs||(t.dirs=1,i.change({changed:[t]}))),i.one("netmountdone",function(){i.exec("open",e.added[0].hash),i.one("opendone",function(){e.toast&&i.toast(e.toast)})})),n.resolve()}).fail(function(e){n.reject(e)}),n}},mimes:["application/zip"],load:function(){},save:function(){}},{info:{id:"textarea",name:"TextArea",useTextAreaEvent:!0},load:function(e){this.trigger("Prepare",{node:e,editorObj:void 0,instance:void 0,opts:{}}),e.setSelectionRange&&e.setSelectionRange(0,0),$(e).trigger("focus").show()},save:function(){}},{info:{id:"onlineconvert",name:"Online Convert",iconImg:"img/editor-icons.png 0 -144",cmdCheck:"OnlineConvert",preventGet:!0,hideButtons:!0,single:!0,converter:!0,canMakeEmpty:!1,integrate:{title:"ONLINE-CONVERT.COM",link:"https://online-convert.com"}},mimes:["*"],html:'
',setup:function(e,t){var i=e.extraOptions.onlineConvert||{maxSize:100,showLink:!0};i.maxSize&&(this.info.maxSize=1048576*i.maxSize),this.set=Object.assign({url:"https://%s.online-convert.com%s?external_url=",conv:{Archive:{"7Z":{},BZ2:{ext:"bz"},GZ:{},ZIP:{}},Audio:{MP3:{},OGG:{ext:"oga"},WAV:{},WMA:{},AAC:{},AIFF:{ext:"aif"},FLAC:{},M4A:{},MMF:{},OPUS:{ext:"oga"}},Document:{DOC:{},DOCX:{},HTML:{},ODT:{},PDF:{},PPT:{},PPTX:{},RTF:{},SWF:{},TXT:{}},eBook:{AZW3:{ext:"azw"},ePub:{},FB2:{ext:"xml"},LIT:{},LRF:{},MOBI:{},PDB:{},PDF:{},"PDF-eBook":{ext:"pdf"},TCR:{}},Hash:{Adler32:{},"Apache-htpasswd":{},Blowfish:{},CRC32:{},CRC32B:{},Gost:{},Haval128:{},MD4:{},MD5:{},RIPEMD128:{},RIPEMD160:{},SHA1:{},SHA256:{},SHA384:{},SHA512:{},Snefru:{},"Std-DES":{},Tiger128:{},"Tiger128-calculator":{},"Tiger128-converter":{},Tiger160:{},Tiger192:{},Whirlpool:{}},Image:{BMP:{},EPS:{ext:"ai"},GIF:{},EXR:{},ICO:{},JPG:{},PNG:{},SVG:{},TGA:{},TIFF:{ext:"tif"},WBMP:{},WebP:{}},Video:{"3G2":{},"3GP":{},AVI:{},FLV:{},HLS:{ext:"m3u8"},MKV:{},MOV:{},MP4:{},"MPEG-1":{ext:"mpeg"},"MPEG-2":{ext:"mpeg"},OGG:{ext:"ogv"},OGV:{},WebM:{},WMV:{},Android:{link:"/convert-video-for-%s",ext:"mp4"},Blackberry:{link:"/convert-video-for-%s",ext:"mp4"},DPG:{link:"/convert-video-for-%s",ext:"avi"},iPad:{link:"/convert-video-for-%s",ext:"mp4"},iPhone:{link:"/convert-video-for-%s",ext:"mp4"},iPod:{link:"/convert-video-for-%s",ext:"mp4"},"Nintendo-3DS":{link:"/convert-video-for-%s",ext:"avi"},"Nintendo-DS":{link:"/convert-video-for-%s",ext:"avi"},PS3:{link:"/convert-video-for-%s",ext:"mp4"},Wii:{link:"/convert-video-for-%s",ext:"avi"},Xbox:{link:"/convert-video-for-%s",ext:"wmv"}}},catExts:{Hash:"txt"},link:'',useTabs:!(!$.fn.tabs||t.UA.iOS)},i)},prepare:function(e,t,i){var n=e.editor.fm.getUI();$(e).height(n.height()),t.width=Math.max(t.width||0,.8*n.width())},init:function(e,t,i,n){var a,r,s=this,c=s.editor.confObj,d=c.set,l=n.getUI("toast"),p={},m=n.uploadMimeCheck("application/zip",t.phash),u=$("base").length?document.location.href.replace(/#.*$/,""):"",f=function(e,t){var i;return d.catExts[e]?d.catExts[e]:d.conv[e]&&(i=d.conv[e][t])?(i.ext||t).toLowerCase():t.toLowerCase()},g=function(e,t){var i,o,a;o="undefined"==typeof c.api?n.request({data:{cmd:"editor",name:"OnlineConvert",method:"init"},preventDefault:!0}):$.Deferred().resolve({api:c.api}),e=e.toLowerCase(),o.done(function(n){c.api=n.api,c.api&&(e?i="?category="+e:(i="",e="all"),c.conversions||(c.conversions={}),a=c.conversions[e]?$.Deferred().resolve(c.conversions[e]):$.getJSON("https://api2.online-convert.com/conversions"+i),a.done(function(i){c.conversions[e]=i,$.each(i,function(e,t){h[d.useTabs?"children":"find"](".onlineconvert-category-"+t.category).children(".onlineconvert-"+t.target).trigger("makeoption",t)}),t&&t()}))})},h=function(){var e=$("
").on("click","button",function(){var e=$(this),t=e.data("opts")||null,i=e.closest(".onlineconvert-category").data("cname"),n=e.data("conv");c.api===!0&&k({category:i,convert:n,options:t})}).on("change",function(e){var t=$(e.target),i=t.parent(),o=t.closest(".elfinder-edit-onlineconvert-button").children("button:first"),a=o.data("opts")||{},r="boolean"===i.data("type")?t.is(":checked"):t.val();if(e.stopPropagation(),r&&("integer"===i.data("type")&&(r=parseInt(r)),i.data("pattern"))){var s=new RegExp(i.data("pattern"));s.test(r)||(requestAnimationFrame(function(){n.error('"'+n.escape(r)+'" is not match to "/'+n.escape(i.data("pattern"))+'/"')}),r=null)}r?a[t.parent().data("optkey")]=r:delete a[i.data("optkey")],o.data("opts",a)}),i=$("
    "),a=function(e,t){var i,o,a,r=$("

    ").data("optkey",e).data("type",t.type),s="",c="",d=!1;return t.description&&r.attr("title",n.i18n(t.description)),t.pattern&&r.data("pattern",t.pattern),r.append($("").text(n.i18n(e)+" : ")),"boolean"===t.type?((t["default"]||(d="allow_multiple_outputs"===e&&!m))&&(s=" checked",d&&(c=" disabled"),o=this.children("button:first"),i=o.data("opts")||{},i[e]=!0,o.data("opts",i)),r.append($('"))):t["enum"]?(a=$("").append($('').text("Select...")),$.each(t["enum"],function(e,t){a.append($('').text(t))}),r.append(a)):r.append($('')),r},r=function(e){var t=this,i=$('').on("click",function(){n.toggle()}),n=$('
    ').hide();e.options&&$.each(e.options,function(e,i){"download_password"!==e&&n.append(a.call(t,e,i))}),t.append(i,n)},s=+new Date,l=0;return c.ext2mime||(c.ext2mime=Object.assign(n.arrayFlip(n.mimeTypes),o)),$.each(d.conv,function(o,a){var d=o.toLowerCase(),m="elfinder-edit-onlineconvert-"+d+s,g=$('
    ').data("cname",o);$.each(a,function(e,i){var a=e.toLowerCase(),s=f(o,e);c.ext2mime[s]||("audio"===d||"image"===d||"video"===d?c.ext2mime[s]=d+"/x-"+a:c.ext2mime[s]="application/octet-stream"),n.uploadMimeCheck(c.ext2mime[s],t.phash)&&g.append($('
    ').on("makeoption",function(e,t){var i=$(this);i.children(".elfinder-button-icon-preference").length||r.call(i,t)}).append($("").text(e).data("conv",e)))}),g.children().length&&(i.append($("
  • ").append($("").attr("href",u+"#"+m).text(o))),e.append(g),p[d]=l++)}),d.useTabs?e.prepend(i).tabs({beforeActivate:function(e,t){g(t.newPanel.data("cname"))}}):$.each(d.conv,function(t){var i=t.toLowerCase();e.append($('
    ').append($("").text(t)).append(e.children(".onlineconvert-category-"+i)))}),e}(),v=$(this).append(h,d.showLink?$(d.link):null),b=$('
    ').hide().html(''+n.i18n("nowLoading")+'').appendTo(v.parent()),x=$('
    ').appendTo(b),y=null,w=function(){return y?$.Deferred().resolve(y):(b.show(),n.forExternalUrl(t.hash,{progressBar:x}).done(function(e){y=e}).fail(function(e){e&&n.error(e),s.elfinderdialog("destroy")}).always(function(){b.hide()}))},k=function(e){$(s).data("dfrd",w().done(function(i){v.fadeOut(),j({info:"Start conversion request."}),n.request({data:{cmd:"editor",name:"OnlineConvert",method:"api","args[category]":e.category.toLowerCase(),"args[convert]":e.convert.toLowerCase(),"args[options]":JSON.stringify(e.options),"args[source]":n.convAbsUrl(i),"args[filename]":n.splitFileExtention(t.name)[0]+"."+f(e.category,e.convert),"args[mime]":t.mime},preventDefault:!0}).done(function(t){O(t.apires,e.category,e.convert)}).fail(function(e){e&&n.error(e),s.elfinderdialog("destroy")})}))},O=function(e,t,i){var o,a=[];e&&e.id?(o=e.status,"failed"===o.code?(b.hide(),e.errors&&e.errors.length&&$.each(e.errors,function(e,t){t.message&&a.push(t.message)}),n.error(a.length?a:o.info),v.fadeIn()):"completed"===o.code?M(e):(j(o),setTimeout(function(){C(e.id)},1e3))):(l.appendTo(s.closest(".ui-dialog")),e.message&&n.toast({msg:n.i18n(e.message),mode:"error",timeOut:5e3,onHidden:function(){1===l.children().length&&l.appendTo(n.getUI())}}),n.toast({msg:n.i18n("editorConvNoApi"),mode:"error",timeOut:3e3,onHidden:function(){1===l.children().length&&l.appendTo(n.getUI())}}),b.hide(),v.show())},j=function(e){b.show().children(".elfinder-spinner-text").text(e.info)},C=function(e){n.request({data:{cmd:"editor",name:"OnlineConvert",method:"api","args[jobid]":e},preventDefault:!0}).done(function(e){O(e.apires)}).fail(function(e){e&&n.error(e),s.elfinderdialog("destroy")})},M=function(e){var i=e.output,o=(e.id,"");b.hide(),i&&i.length&&(s.elfinderdialog("destroy"),$.each(i,function(e,t){t.uri&&(o+=t.uri+"\n")}),n.upload({target:t.phash,files:[o],type:"text",extraData:{contentSaveId:"OnlineConvert-"+e.id}}))},T="document";v.parent().css({overflow:"auto"}).addClass("overflow-scrolling-touch"),(r=t.mime.match(/^(audio|image|video)/))&&(T=r[1]),d.useTabs?p[T]&&h.tabs("option","active",p[T]):(a=Object.keys(d.conv).length,$.each(d.conv,function(e){return e.toLowerCase()===T?(g(e,function(){$.each(d.conv,function(e){e.toLowerCase()!==T&&g(e)})}),!1):void a--}),a||$.each(d.conv,function(e){g(e)}),v.parent().scrollTop(h.children(".onlineconvert-fieldset-"+T).offset().top))},load:function(){},getContent:function(){},save:function(){},close:function(e){var t=(this.fm,$(e).data("dfrd"));t&&"pending"===t.state()&&t.reject()}}]},window.elFinder);PK ZؤiHjHj"js/extras/encoding-japanese.min.jsnuW+A/*! * encoding-japanese v1.0.25 - Converts character encoding. * Copyright (c) 2013-2016 polygon planet * https://github.com/polygonplanet/encoding.js * @license MIT */ !function(a,b,c){"undefined"!=typeof exports?"undefined"!=typeof module&&module.exports?module.exports=c():exports[a]=c():"function"==typeof define&&define.amd?define(c):b[a]=c()}("Encoding",this,function(){"use strict";function a(a){for(var b,c=0,d=a&&a.length;c255)return!1;if(b>=0&&b<=7||255===b)return!0}return!1}function b(a){for(var b,c=0,d=a&&a.length;c255||b>=128&&b<=255||27===b)return!1;return!0}function c(a){for(var b,c,d,e=0,f=a&&a.length;e255||b>=128&&b<=255)return!1;if(27===b){if(e+2>=f)return!1;if(c=a[e+1],d=a[e+2],36===c){if(40===d||64===d||66===d)return!0}else{if(38===c&&64===d)return!0;if(40===c&&(66===d||73===d||74===d))return!0}}}return!1}function d(a){for(var b,c=0,d=a&&a.length;c255||b<142)return!1;if(142===b){if(c+1>=d)return!1;if(b=a[++c],b<161||223=d)return!1;if(b=a[++c],b<162||237=d)return!1;if(b=a[++c],b<161||254128;)if(a[c++]>255)return!1;for(;c239||c+1>=d)return!1;if(b=a[++c],b<64||127===b||b>252)return!1}return!0}function f(a){for(var b,c=0,d=a&&a.length;c255)return!1;if(!(9===b||10===b||13===b||b>=32&&b<=126))if(b>=194&&b<=223){if(c+1>=d||a[c+1]<128||a[c+1]>191)return!1;c++}else if(224===b){if(c+2>=d||a[c+1]<160||a[c+1]>191||a[c+2]<128||a[c+2]>191)return!1;c+=2}else if(b>=225&&b<=236||238===b||239===b){if(c+2>=d||a[c+1]<128||a[c+1]>191||a[c+2]<128||a[c+2]>191)return!1;c+=2}else if(237===b){if(c+2>=d||a[c+1]<128||a[c+1]>159||a[c+2]<128||a[c+2]>191)return!1;c+=2}else if(240===b){if(c+3>=d||a[c+1]<144||a[c+1]>191||a[c+2]<128||a[c+2]>191||a[c+3]<128||a[c+3]>191)return!1;c+=3}else if(b>=241&&b<=243){if(c+3>=d||a[c+1]<128||a[c+1]>191||a[c+2]<128||a[c+2]>191||a[c+3]<128||a[c+3]>191)return!1;c+=3}else{if(244!==b)return!1;if(c+3>=d||a[c+1]<128||a[c+1]>143||a[c+2]<128||a[c+2]>191||a[c+3]<128||a[c+3]>191)return!1;c+=3}}return!0}function g(a){var b,c,d,e,f=0,g=a&&a.length,h=null;if(g<2){if(a[0]>255)return!1}else{if(b=a[0],c=a[1],255===b&&254===c)return!0;if(254===b&&255===c)return!0;for(;f255)return!1}if(null===h)return!1;if(d=a[h+1],void 0!==d&&d>0&&d<128)return!0;if(e=a[h-1],void 0!==e&&e>0&&e<128)return!0}return!1}function h(a){var b,c,d=0,e=a&&a.length,f=null;if(e<2){if(a[0]>255)return!1}else{if(b=a[0],c=a[1],254===b&&255===c)return!0;for(;d255)return!1}if(null===f)return!1;if(f%2===0)return!0}return!1}function i(a){var b,c,d=0,e=a&&a.length,f=null;if(e<2){if(a[0]>255)return!1}else{if(b=a[0],c=a[1],255===b&&254===c)return!0;for(;d255)return!1}if(null===f)return!1;if(f%2!==0)return!0}return!1}function j(a){var b,c,d,e,f,g,h=0,i=a&&a.length,j=null;if(i<4){for(;h255)return!1}else{if(b=a[0],c=a[1],d=a[2],e=a[3],0===b&&0===c&&254===d&&255===e)return!0;if(255===b&&254===c&&0===d&&0===e)return!0;for(;h255)return!1}if(null===j)return!1;if(f=a[j+3],void 0!==f&&f>0&&f<=127)return 0===a[j+2]&&0===a[j+1];if(g=a[j-1],void 0!==g&&g>0&&g<=127)return 0===a[j+1]&&0===a[j+2]}return!1}function k(a){for(var b,c=0,d=a&&a.length;c1114111)return!1;return!0}function l(a){for(var b,c,d=[],e=0,f=0,g=a&&a.length;f>=1,b<47?b+=113:b-=79,c+=c>95?32:31):(b>>=1,b<=47?b+=112:b-=80,c+=126),d[d.length]=255&b,d[d.length]=255&c):2===e?d[d.length]=a[f]+128&255:3===e?d[d.length]=Da:d[d.length]=255&a[f]}return d}function m(a){for(var b=[],c=0,d=a&&a.length,e=0;e=161&&b<=223?(2!==e&&(e=2,d[d.length]=h[6],d[d.length]=h[7],d[d.length]=h[8]),d[d.length]=b-128&255):b>=128?(1!==e&&(e=1,d[d.length]=h[3],d[d.length]=h[4],d[d.length]=h[5]),b<<=1,c=a[++g],c<159?(b-=b<319?225:97,c-=c>126?32:31):(b-=b<319?224:96,c-=126),d[d.length]=255&b,d[d.length]=255&c):(0!==e&&(e=0,d[d.length]=h[0],d[d.length]=h[1],d[d.length]=h[2]),d[d.length]=255&b);return 0!==e&&(d[d.length]=h[0],d[d.length]=h[1],d[d.length]=h[2]),d}function o(a){for(var b,c,d=[],e=a&&a.length,f=0;f=161&&b<=223?(d[d.length]=142,d[d.length]=b):b>=129?(c=a[++f],b<<=1,c<159?(b-=b<319?97:225,c+=c>126?96:97):(b-=b<319?96:224,c+=2),d[d.length]=255&b,d[d.length]=255&c):d[d.length]=255&b;return d}function p(a){for(var b,c=[],d=0,e=a&&a.length,f=0,g=[27,40,66,27,36,66,27,40,73,27,36,40,68];f142?(1!==d&&(d=1,c[c.length]=g[3],c[c.length]=g[4],c[c.length]=g[5]),c[c.length]=b-128&255,c[c.length]=a[++f]-128&255):(0!==d&&(d=0,c[c.length]=g[0],c[c.length]=g[1],c[c.length]=g[2]),c[c.length]=255&b);return 0!==d&&(c[c.length]=g[0],c[c.length]=g[1],c[c.length]=g[2]),c}function q(a){for(var b,c,d=[],e=a&&a.length,f=0;f142?(c=a[++f],1&b?(b>>=1,b+=b<111?49:113,c-=c>223?96:97):(b>>=1,b+=b<=111?48:112,c-=2),d[d.length]=255&b,d[d.length]=255&c):142===b?d[d.length]=255&a[++f]:d[d.length]=255&b;return d}function r(a){Ca();for(var b,c,d,e,f,g,h,i=[],j=0,k=a&&a.length;j=161&&b<=223?(d=b-64,e=188|d>>6&3,f=128|63&d,i[i.length]=239,i[i.length]=255&e,i[i.length]=255&f):b>=128?(c=b<<1,d=a[++j],d<159?(c-=c<319?225:97,d-=d>126?32:31):(c-=c<319?224:96,d-=126),c&=255,g=(c<<8)+d,h=Ya[g],void 0===h?i[i.length]=Da:h<65535?(i[i.length]=h>>8&255,i[i.length]=255&h):(i[i.length]=h>>16&255,i[i.length]=h>>8&255,i[i.length]=255&h)):i[i.length]=255&a[j];return i}function s(a){Ca();for(var b,c,d,e,f,g,h,i,j=[],k=0,l=a&&a.length;k>6&3,e=128|63&c,j[j.length]=239,j[j.length]=255&d,j[j.length]=255&e):143===b?(f=a[++k]-128,g=a[++k]-128,h=(f<<8)+g,i=Za[h],void 0===i?j[j.length]=Da:i<65535?(j[j.length]=i>>8&255,j[j.length]=255&i):(j[j.length]=i>>16&255,j[j.length]=i>>8&255,j[j.length]=255&i)):b>=128?(h=(b-128<<8)+(a[++k]-128),i=Ya[h],void 0===i?j[j.length]=Da:i<65535?(j[j.length]=i>>8&255,j[j.length]=255&i):(j[j.length]=i>>16&255,j[j.length]=i>>8&255,j[j.length]=255&i)):j[j.length]=255&a[k];return j}function t(a){Ca();for(var b,c,d,e,f,g=[],h=0,i=0,j=a&&a.length;i>8&255,g[g.length]=255&f):(g[g.length]=f>>16&255,g[g.length]=f>>8&255,g[g.length]=255&f)):2===h?(b=a[i]+64,c=188|b>>6&3,d=128|63&b,g[g.length]=239,g[g.length]=255&c,g[g.length]=255&d):3===h?(e=(a[i]<<8)+a[++i],f=Za[e],void 0===f?g[g.length]=Da:f<65535?(g[g.length]=f>>8&255,g[g.length]=255&f):(g[g.length]=f>>16&255,g[g.length]=f>>8&255,g[g.length]=255&f)):g[g.length]=255&a[i]}return g}function u(a){for(var b,c,d,e,f,g=[],h=0,i=a&&a.length;h=128?(e=b<=223?(b<<8)+a[++h]:(b<<16)+(a[++h]<<8)+(255&a[++h]), f=Wa[e],void 0===f?g[g.length]=Da:f<255?g[g.length]=f+128:(f>65536&&(f-=65536),c=f>>8,d=255&f,1&c?(c>>=1,c<47?c+=113:c-=79,d+=d>95?32:31):(c>>=1,c<=47?c+=112:c-=80,d+=126),g[g.length]=255&c,g[g.length]=255&d)):g[g.length]=255&a[h];return g}function v(a){for(var b,c,d,e=[],f=0,g=a&&a.length;f=128?(c=b<=223?(a[f++]<<8)+a[f]:(a[f++]<<16)+(a[f++]<<8)+(255&a[f]),d=Wa[c],void 0===d?(d=Xa[c],void 0===d?e[e.length]=Da:(e[e.length]=143,e[e.length]=(d>>8)-128&255,e[e.length]=(255&d)-128&255)):(d>65536&&(d-=65536),d<255?(e[e.length]=142,e[e.length]=d-128&255):(e[e.length]=(d>>8)-128&255,e[e.length]=(255&d)-128&255))):e[e.length]=255&a[f];return e}function w(a){for(var b,c,d,e=[],f=0,g=a&&a.length,h=0,i=[27,40,66,27,36,66,27,40,73,27,36,40,68];h>8&255,e[e.length]=255&d)):(d>65536&&(d-=65536),d<255?(2!==f&&(f=2,e[e.length]=i[6],e[e.length]=i[7],e[e.length]=i[8]),e[e.length]=255&d):(1!==f&&(f=1,e[e.length]=i[3],e[e.length]=i[4],e[e.length]=i[5]),e[e.length]=d>>8&255,e[e.length]=255&d)));return 0!==f&&(e[e.length]=i[0],e[e.length]=i[1],e[e.length]=i[2]),e}function x(a){for(var b,c,d=[],e=0,f=a&&a.length;e=55296&&b<=56319&&e+1=56320&&c<=57343&&(b=1024*(b-55296)+c-56320+65536,e++)),b<128?d[d.length]=b:b<2048?(d[d.length]=192|b>>6&31,d[d.length]=128|63&b):b<65536?(d[d.length]=224|b>>12&15,d[d.length]=128|b>>6&63,d[d.length]=128|63&b):b<2097152&&(d[d.length]=240|b>>18&15,d[d.length]=128|b>>12&63,d[d.length]=128|b>>6&63,d[d.length]=128|63&b);return d}function y(a){for(var b,c,d,e,f,g,h=[],i=0,j=a&&a.length;i>4,b>=0&&b<=7?g=c:12===b||13===b?(d=a[i++],g=(31&c)<<6|63&d):14===b?(d=a[i++],e=a[i++],g=(15&c)<<12|(63&d)<<6|63&e):15===b&&(d=a[i++],e=a[i++],f=a[i++],g=(7&c)<<18|(63&d)<<12|(63&e)<<6|63&f),g<=65535?h[h.length]=g:(g-=65536,h[h.length]=(g>>10)+55296,h[h.length]=g%1024+56320);return h}function z(a,b){var c;if(b&&b.bom){var d=b.bom;qa(d)||(d="BE");var e,f;"B"===d.charAt(0).toUpperCase()?(e=[254,255],f=A(a)):(e=[255,254],f=B(a)),c=[],c[0]=e[0],c[1]=e[1];for(var g=0,h=f.length;g>8&255,c[c.length]=255&b);return c}function B(a){for(var b,c=[],d=0,e=a&&a.length;d>8&255);return c}function C(a){var b,c,d=[],e=0,f=a&&a.length;for(f>=2&&(254===a[0]&&255===a[1]||255===a[0]&&254===a[1])&&(e=2);e=2&&(254===a[0]&&255===a[1]||255===a[0]&&254===a[1])&&(e=2);e=2&&(254===a[0]&&255===a[1]||255===a[0]&&254===a[1])&&(h=2),c&&(f[0]=c[0],f[1]=c[1]);for(var i,j;h=2&&(254===a[0]&&255===a[1]||255===a[0]&&254===a[1])&&(h=2),c&&(f[0]=c[0],f[1]=c[1]);for(var i,j;h=2&&(254===a[0]&&255===a[1]||255===a[0]&&254===a[1])&&(e=2);eLa&&(Ma=!0),c}catch(a){Ma=!1}}}return va(a)}function va(a){for(var b,c="",d=a&&a.length,e=0;eLa&&(Ma=!0);continue}catch(a){Ma=!1}return wa(a)}c+=Ea.apply(null,b)}return c}function wa(a){for(var b="",c=a&&a.length,d=0;d>2],b[b.length]=Ta[(3&e)<<4],b[b.length]=Va,b[b.length]=Va;break}if(f=a[c++],c==d){b[b.length]=Ta[e>>2],b[b.length]=Ta[(3&e)<<4|(240&f)>>4],b[b.length]=Ta[(15&f)<<2],b[b.length]=Va;break}g=a[c++],b[b.length]=Ta[e>>2],b[b.length]=Ta[(3&e)<<4|(240&f)>>4],b[b.length]=Ta[(15&f)<<2|(192&g)>>6],b[b.length]=Ta[63&g]}return ua(b)}function Ba(a){var b,c,d,e,f,g,h;for(g=a&&a.length,f=0,h=[];f>4;do{if(d=255&a.charCodeAt(f++),61==d)return h;d=Ua[d]}while(f>2; do{if(e=255&a.charCodeAt(f++),61==e)return h;e=Ua[e]}while(f95&&(Ya[b]=0|a);for(Za={},c=ra(Xa),e=c.length,d=0;d255)return encodeURIComponent(ua(a));b>=97&&b<=122||b>=65&&b<=90||b>=48&&b<=57||33===b||b>=39&&b<=42||45===b||46===b||95===b||126===b?d[d.length]=b:(d[d.length]=37,b<16?(d[d.length]=48,d[d.length]=c[b]):(d[d.length]=c[b>>4&15],d[d.length]=c[15&b]))}return ua(d)},urlDecode:function(a){for(var b,c=[],d=0,e=a&&a.length;d=65281&&c<=65374&&(c-=65248),d[d.length]=c;return b?ua(d):d},toZenkakuCase:function(a){var b=!1;qa(a)&&(b=!0,a=ta(a));for(var c,d=[],e=a&&a.length,f=0;f=33&&c<=126&&(c+=65248),d[d.length]=c;return b?ua(d):d},toHiraganaCase:function(a){var b=!1;qa(a)&&(b=!0,a=ta(a));for(var c,d=[],e=a&&a.length,f=0;f=12449&&c<=12534?c-=96:12535===c?(d[d.length]=12431,c=12443):12538===c&&(d[d.length]=12434,c=12443),d[d.length]=c;return b?ua(d):d},toKatakanaCase:function(a){var b=!1;qa(a)&&(b=!0,a=ta(a));for(var c,d=[],e=a&&a.length,f=0;f=12353&&c<=12438&&((12431===c||12434===c)&&f=12289&&c<=12540&&(e=$a[c],void 0!==e)?f[f.length]=e:12532===c||12535===c||12538===c?(f[f.length]=_a[c],f[f.length]=65438):c>=12459&&c<=12489?(f[f.length]=$a[c-1],f[f.length]=65438):c>=12495&&c<=12509?(d=c%3,f[f.length]=$a[c-d],f[f.length]=ab[d-1]):f[f.length]=c;return b?ua(f):f},toZenkanaCase:function(a){var b=!1;qa(a)&&(b=!0,a=ta(a));var c,d,e,f=[],g=a&&a.length,h=0;for(h=0;h65376&&c<65440&&(d=bb[c-65377],h+165397&&c<65413||c>65417&&c<65423)?(d++,h++):65439===e&&c>65417&&c<65423&&(d+=2,h++)),c=d),f[f.length]=c;return b?ua(f):f},toHankakuSpace:function(a){if(qa(a))return a.replace(/\u3000/g," ");for(var b,c=[],d=a&&a.length,e=0;e Order allow,deny Deny from all PK ZE/ IIjs/extras/editors.default.jsnuW+A(function(editors, elFinder) { if (typeof define === 'function' && define.amd) { define(['elfinder'], editors); } else if (elFinder) { var optEditors = elFinder.prototype._options.commandsOptions.edit.editors; elFinder.prototype._options.commandsOptions.edit.editors = optEditors.concat(editors(elFinder)); } }(function(elFinder) { "use strict"; var apps = {}, // get query of getfile getfile = window.location.search.match(/getfile=([a-z]+)/), useRequire = elFinder.prototype.hasRequire, ext2mime = { bmp: 'image/x-ms-bmp', dng: 'image/x-adobe-dng', gif: 'image/gif', jpeg: 'image/jpeg', jpg: 'image/jpeg', pdf: 'application/pdf', png: 'image/png', ppm: 'image/x-portable-pixmap', psd: 'image/vnd.adobe.photoshop', pxd: 'image/x-pixlr-data', svg: 'image/svg+xml', tiff: 'image/tiff', webp: 'image/webp', xcf: 'image/x-xcf', sketch: 'application/x-sketch', ico: 'image/x-icon', dds: 'image/vnd-ms.dds', emf: 'application/x-msmetafile' }, mime2ext, getExtention = function(mime, fm, jpeg) { if (!mime2ext) { mime2ext = fm.arrayFlip(ext2mime); } var ext = mime2ext[mime] || fm.mimeTypes[mime]; if (!jpeg) { if (ext === 'jpeg') { ext = 'jpg'; } } else { if (ext === 'jpg') { ext = 'jpeg'; } } return ext; }, changeImageType = function(src, toMime) { var dfd = jQuery.Deferred(); try { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), img = new Image(), conv = function() { var url = canvas.toDataURL(toMime), mime, m; if (m = url.match(/^data:([a-z0-9]+\/[a-z0-9.+-]+)/i)) { mime = m[1]; } else { mime = ''; } if (mime.toLowerCase() === toMime.toLowerCase()) { dfd.resolve(canvas.toDataURL(toMime), canvas); } else { dfd.reject(); } }; img.src = src; jQuery(img).on('load', function() { try { canvas.width = img.width; canvas.height = img.height; ctx.drawImage(img, 0, 0); conv(); } catch(e) { dfd.reject(); } }).on('error', function () { dfd.reject(); }); return dfd; } catch(e) { return dfd.reject(); } }, initImgTag = function(id, file, content, fm) { var node = jQuery(this).children('img:first').data('ext', getExtention(file.mime, fm)), spnr = jQuery('
    ') .html('' + fm.i18n('ntfloadimg') + '') .hide() .appendTo(this), setup = function() { node.attr('id', id+'-img') .attr('src', url || content) .css({'height':'', 'max-width':'100%', 'max-height':'100%', 'cursor':'pointer'}) .data('loading', function(done) { var btns = node.closest('.elfinder-dialog').find('button,.elfinder-titlebar-button'); btns.prop('disabled', !done)[done? 'removeClass' : 'addClass']('ui-state-disabled'); node.css('opacity', done? '' : '0.3'); spnr[done? 'hide' : 'show'](); return node; }); }, url; if (!content.match(/^data:/)) { fm.openUrl(file.hash, false, function(v) { url = v; node.attr('_src', content); setup(); }); } else { setup(); } }, imgBase64 = function(node, mime) { var style = node.attr('style'), img, canvas, ctx, data; try { // reset css for getting image size node.attr('style', ''); // img node img = node.get(0); // New Canvas canvas = document.createElement('canvas'); canvas.width = img.width; canvas.height = img.height; // restore css node.attr('style', style); // Draw Image canvas.getContext('2d').drawImage(img, 0, 0); // To Base64 data = canvas.toDataURL(mime); } catch(e) { data = node.attr('src'); } return data; }, iframeClose = function(ifm) { var $ifm = jQuery(ifm), dfd = jQuery.Deferred().always(function() { $ifm.off('load', load); }), ab = 'about:blank', chk = function() { tm = setTimeout(function() { var src; try { src = base.contentWindow.location.href; } catch(e) { src = null; } if (src === ab) { dfd.resolve(); } else if (--cnt > 0){ chk(); } else { dfd.reject(); } }, 500); }, load = function() { tm && clearTimeout(tm); dfd.resolve(); }, cnt = 20, // 500ms * 20 = 10sec wait tm; $ifm.one('load', load); ifm.src = ab; chk(); return dfd; }; // check getfile callback function if (getfile) { getfile = getfile[1]; if (getfile === 'ckeditor') { elFinder.prototype._options.getFileCallback = function(file, fm) { window.opener.CKEDITOR.tools.callFunction((function() { var reParam = new RegExp('(?:[\?&]|&)CKEditorFuncNum=([^&]+)', 'i'), match = window.location.search.match(reParam); return (match && match.length > 1) ? match[1] : ''; })(), fm.convAbsUrl(file.url)); fm.destroy(); window.close(); }; } } // return editors Array return [ { // tui.image-editor - https://github.com/nhnent/tui.image-editor info : { id: 'tuiimgedit', name: 'TUI Image Editor', iconImg: 'img/editor-icons.png 0 -48', dataScheme: true, schemeContent: true, openMaximized: true, canMakeEmpty: false, integrate: { title: 'TOAST UI Image Editor', link: 'http://ui.toast.com/tui-image-editor/' } }, // MIME types to accept mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'], // HTML of this editor html : '
    ', // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || fm.UA.Mobile) { this.disabled = true; } else { this.opts = Object.assign({ version: 'v3.14.3' }, opts.extraOptions.tuiImgEditOpts || {}, { iconsPath : fm.baseUrl + 'img/tui-', theme : {} }); if (!fm.isSameOrigin(this.opts.iconsPath)) { this.disabled = true; fm.debug('warning', 'Setting `commandOptions.edit.extraOptions.tuiImgEditOpts.iconsPath` MUST follow the same origin policy.'); } } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, content, fm) { this.data('url', content); }, load : function(base) { var self = this, fm = this.fm, dfrd = jQuery.Deferred(), cdns = fm.options.cdns, ver = self.confObj.opts.version, init = function(editor) { var $base = jQuery(base), bParent = $base.parent(), opts = self.confObj.opts, iconsPath = opts.iconsPath, tmpContainer = jQuery('
    ').appendTo(bParent), tmpDiv = [ jQuery('
    ').appendTo(tmpContainer), jQuery('
    ').appendTo(tmpContainer) ], iEditor = new editor(base, { includeUI: { loadImage: { path: $base.data('url'), name: self.file.name }, theme: Object.assign(opts.theme, { 'menu.normalIcon.path': iconsPath + 'icon-d.svg', 'menu.normalIcon.name': 'icon-d', 'menu.activeIcon.path': iconsPath + 'icon-b.svg', 'menu.activeIcon.name': 'icon-b', 'menu.disabledIcon.path': iconsPath + 'icon-a.svg', 'menu.disabledIcon.name': 'icon-a', 'menu.hoverIcon.path': iconsPath + 'icon-c.svg', 'menu.hoverIcon.name': 'icon-c', 'submenu.normalIcon.path': iconsPath + 'icon-d.svg', 'submenu.normalIcon.name': 'icon-d', 'submenu.activeIcon.path': iconsPath + 'icon-c.svg', 'submenu.activeIcon.name': 'icon-c' }), initMenu: 'filter', menuBarPosition: 'bottom' }, cssMaxWidth: Math.max(300, bParent.width()), cssMaxHeight: Math.max(200, bParent.height() - (tmpDiv[0].height() + tmpDiv[1].height() + 3 /*margin*/)), usageStatistics: false }), canvas = $base.find('canvas:first').get(0), zoom = function(v) { if (typeof v !== 'undefined') { var c = jQuery(canvas), w = parseInt(c.attr('width')), h = parseInt(c.attr('height')), a = w / h, mw, mh; if (v === 0) { mw = w; mh = h; } else { mw = parseInt(c.css('max-width')) + Number(v); mh = mw / a; if (mw > w && mh > h) { mw = w; mh = h; } } per.text(Math.round(mw / w * 100) + '%'); iEditor.resizeCanvasDimension({width: mw, height: mh}); // continually change more if (zoomMore) { setTimeout(function() { zoomMore && zoom(v); }, 50); } } }, zup = jQuery('').data('val', 10), zdown = jQuery('').data('val', -10), per = jQuery('').css('width', '4em').text('%').attr('title', '100%').data('val', 0), quty, qutyTm, zoomTm, zoomMore; tmpContainer.remove(); $base.removeData('url').data('mime', self.file.mime); // jpeg quality controls if (self.file.mime === 'image/jpeg') { $base.data('quality', fm.storage('jpgQuality') || fm.option('jpgQuality')); quty = jQuery('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); $base.data('quality', q); qutyTm && cancelAnimationFrame(qutyTm); qutyTm = requestAnimationFrame(function() { canvas.toBlob(function(blob) { blob && quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); }, 'image/jpeg', Math.max(Math.min(q, 100), 1) / 100); }); }) .val($base.data('quality')); jQuery('
    ') .append( jQuery('').html(fm.i18n('quality') + ' : '), quty, jQuery('') ) .prependTo($base.parent().next()); } else if (self.file.mime === 'image/svg+xml') { $base.closest('.ui-dialog').trigger('changeType', { extention: 'png', mime : 'image/png', keepEditor: true }); } // zoom scale controls jQuery('
    ') .append( zdown, per, zup ) .attr('title', fm.i18n('scale')) .on('click', 'span,button', function() { zoom(jQuery(this).data('val')); }) .on('mousedown mouseup mouseleave', 'span', function(e) { zoomMore = false; zoomTm && clearTimeout(zoomTm); if (e.type === 'mousedown') { zoomTm = setTimeout(function() { zoomMore = true; zoom(jQuery(e.target).data('val')); }, 500); } }) .prependTo($base.parent().next()); // wait canvas ready setTimeout(function() { dfrd.resolve(iEditor); if (quty) { quty.trigger('change'); iEditor.on('redoStackChanged undoStackChanged', function() { quty.trigger('change'); }); } // show initial scale zoom(null); }, 100); // show color slider (maybe TUI-Image-Editor's bug) // see https://github.com/nhn/tui.image-editor/issues/153 $base.find('.tui-colorpicker-palette-container').on('click', '.tui-colorpicker-palette-preview', function() { jQuery(this).closest('.color-picker-control').height('auto').find('.tui-colorpicker-slider-container').toggle(); }); $base.on('click', function() { $base.find('.tui-colorpicker-slider-container').hide(); }); }, loader; if (!self.confObj.editor) { loader = jQuery.Deferred(); fm.loadCss([ cdns.tui + '/tui-color-picker/latest/tui-color-picker.css', cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.css' ]); if (fm.hasRequire) { require.config({ paths : { 'fabric/dist/fabric.require' : cdns.fabric + '/fabric.require.min', // for fabric < 2.0.1 'fabric' : cdns.fabric + '/fabric.min', // for fabric >= 2.0.1 'tui-code-snippet' : cdns.tui + '/tui.code-snippet/latest/tui-code-snippet.min', 'tui-color-picker' : cdns.tui + '/tui-color-picker/latest/tui-color-picker.min', 'tui-image-editor' : cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.min' } }); require(['tui-image-editor'], function(ImageEditor) { loader.resolve(ImageEditor); }); } else { fm.loadScript([ cdns.fabric + '/fabric.min.js', cdns.tui + '/tui.code-snippet/latest/tui-code-snippet.min.js' ], function() { fm.loadScript([ cdns.tui + '/tui-color-picker/latest/tui-color-picker.min.js' ], function() { fm.loadScript([ cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.min.js' ], function() { loader.resolve(window.tui.ImageEditor); }, { loadType: 'tag' }); }, { loadType: 'tag' }); }, { loadType: 'tag' }); } loader.done(function(editor) { self.confObj.editor = editor; init(editor); }); } else { init(self.confObj.editor); } return dfrd; }, getContent : function(base) { var editor = this.editor, fm = editor.fm, $base = jQuery(base), quality = $base.data('quality'); if (editor.instance) { if ($base.data('mime') === 'image/jpeg') { quality = quality || fm.storage('jpgQuality') || fm.option('jpgQuality'); quality = Math.max(0.1, Math.min(1, quality / 100)); } return editor.instance.toDataURL({ format: getExtention($base.data('mime'), fm, true), quality: quality }); } }, save : function(base) { var $base = jQuery(base), quality = $base.data('quality'), hash = $base.data('hash'), file; this.instance.deactivateAll(); if (typeof quality !== 'undefined') { this.fm.storage('jpgQuality', quality); } if (hash) { file = this.fm.file(hash); $base.data('mime', file.mime); } } }, { // Photopea advanced image editor info : { id : 'photopea', name : 'Photopea', iconImg : 'img/editor-icons.png 0 -160', single: true, noContent: true, arrayBufferContent: true, openMaximized: true, // Disable file types that cannot be saved on Photopea. canMakeEmpty: ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp', 'image/tiff', /*'image/x-adobe-dng',*/ 'image/webp', /*'image/x-xcf',*/ 'image/vnd.adobe.photoshop', 'application/pdf', 'image/x-portable-pixmap', 'image/x-sketch', 'image/x-icon', 'image/vnd-ms.dds', /*'application/x-msmetafile'*/], integrate: { title: 'Photopea', link: 'https://www.photopea.com/learn/' } }, mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp', 'image/tiff', 'image/x-adobe-dng', 'image/webp', 'image/x-xcf', 'image/vnd.adobe.photoshop', 'application/pdf', 'image/x-portable-pixmap', 'image/x-sketch', 'image/x-icon', 'image/vnd-ms.dds', 'application/x-msmetafile'], html : '', // setup on elFinder bootup setup : function(opts, fm) { if (fm.UA.IE || fm.UA.Mobile) { this.disabled = true; } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var orig = 'https://www.photopea.com', ifm = jQuery(this).hide() //.css('box-sizing', 'border-box') .on('load', function() { //spnr.remove(); ifm.show(); }) .on('error', function() { spnr.remove(); ifm.show(); }), editor = this.editor, confObj = editor.confObj, spnr = jQuery('
    ') .html('' + fm.i18n('nowLoading') + '') .appendTo(ifm.parent()), saveMimes = fm.arrayFlip(confObj.info.canMakeEmpty), getType = function(mime) { var ext = getExtention(mime, fm), extmime = ext2mime[ext]; if (!confObj.mimesFlip[extmime]) { ext = ''; } else if (ext === 'jpeg') { ext = 'jpg'; } if (!ext || !saveMimes[extmime]) { ext = 'psd'; extmime = ext2mime[ext]; ifm.closest('.ui-dialog').trigger('changeType', { extention: ext, mime : extmime, keepEditor: true }); } return ext; }, mime = file.mime, liveMsg, type, quty; if (!confObj.mimesFlip) { confObj.mimesFlip = fm.arrayFlip(confObj.mimes, true); } if (!confObj.liveMsg) { confObj.liveMsg = function(ifm, spnr, file) { var wnd = ifm.get(0).contentWindow, phase = 0, data = null, dfdIni = jQuery.Deferred().done(function() { spnr.remove(); phase = 1; wnd.postMessage(data, orig); }), dfdGet; this.load = function() { return fm.getContents(file.hash, 'arraybuffer').done(function(d) { data = d; }); }; this.receive = function(e) { var ev = e.originalEvent, state; if (ev.origin === orig && ev.source === wnd) { if (ev.data === 'done') { if (phase === 0) { dfdIni.resolve(); } else if (phase === 1) { phase = 2; ifm.trigger('contentsloaded'); } else { if (dfdGet && dfdGet.state() === 'pending') { dfdGet.reject('errDataEmpty'); } } } else if (ev.data === 'Save') { editor.doSave(); } else { if (dfdGet && dfdGet.state() === 'pending') { if (typeof ev.data === 'object') { dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(ev.data)); } else { dfdGet.reject('errDataEmpty'); } } } } }; this.getContent = function() { var type, q; if (phase > 1) { dfdGet && dfdGet.state() === 'pending' && dfdGet.reject(); dfdGet = null; dfdGet = jQuery.Deferred(); if (phase === 2) { phase = 3; dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(data)); data = null; return dfdGet; } if (ifm.data('mime')) { mime = ifm.data('mime'); type = getType(mime); } if (q = ifm.data('quality')) { type += ':' + (q / 100); } wnd.postMessage('app.activeDocument.saveToOE("' + type + '")', orig); return dfdGet; } }; }; } ifm.parent().css('padding', 0); type = getType(file.mime); liveMsg = editor.liveMsg = new confObj.liveMsg(ifm, spnr, file); jQuery(window).on('message.' + fm.namespace, liveMsg.receive); liveMsg.load().done(function() { var d = JSON.stringify({ files : [], environment : { lang: fm.lang.replace(/_/g, '-'), customIO: {"save": "app.echoToOE(\"Save\");"} } }); ifm.attr('src', orig + '/#' + encodeURI(d)); }).fail(function(err) { err && fm.error(err); editor.initFail = true; }); // jpeg quality controls if (file.mime === 'image/jpeg' || file.mime === 'image/webp') { ifm.data('quality', fm.storage('jpgQuality') || fm.option('jpgQuality')); quty = jQuery('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); ifm.data('quality', q); }) .val(ifm.data('quality')); jQuery('
    ') .append( jQuery('').html(fm.i18n('quality') + ' : '), quty, jQuery('') ) .prependTo(ifm.parent().next()); } }, load : function(base) { var dfd = jQuery.Deferred(), self = this, fm = this.fm, $base = jQuery(base); if (self.initFail) { dfd.reject(); } else { $base.on('contentsloaded', function() { dfd.resolve(self.liveMsg); }); } return dfd; }, getContent : function() { return this.editor.liveMsg? this.editor.liveMsg.getContent() : void(0); }, save : function(base, liveMsg) { var $base = jQuery(base), quality = $base.data('quality'), hash = $base.data('hash'), file; if (typeof quality !== 'undefined') { this.fm.storage('jpgQuality', quality); } if (hash) { file = this.fm.file(hash); $base.data('mime', file.mime); } else { $base.removeData('mime'); } }, // On dialog closed close : function(base, liveMsg) { jQuery(base).attr('src', ''); liveMsg && jQuery(window).off('message.' + this.fm.namespace, liveMsg.receive); } }, { // Pixo is cross-platform image editor info : { id : 'pixo', name : 'Pixo Editor', iconImg : 'img/editor-icons.png 0 -208', dataScheme: true, schemeContent: true, single: true, canMakeEmpty: false, integrate: { title: 'Pixo Editor', link: 'https://pixoeditor.com/privacy-policy/' } }, // MIME types to accept mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'], // HTML of this editor html : '
    ', // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || !opts.extraOptions || !opts.extraOptions.pixo || !opts.extraOptions.pixo.apikey) { this.disabled = true; } else { this.editorOpts = opts.extraOptions.pixo; } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, content, fm) { initImgTag.call(this, id, file, content, fm); }, // Get data uri scheme (this: this editors HTML node) getContent : function() { return jQuery(this).children('img:first').attr('src'); }, // Launch Pixo editor when dialog open load : function(base) { var self = this, fm = this.fm, $base = jQuery(base), node = $base.children('img:first'), dialog = $base.closest('.ui-dialog'), elfNode = fm.getUI(), dfrd = jQuery.Deferred(), container = jQuery('#elfinder-pixo-container'), init = function(onload) { var opts; if (!container.length) { container = jQuery('
    ').css({ position: 'fixed', top: 0, right: 0, width: '100%', height: jQuery(window).height(), overflow: 'hidden' }).hide().appendTo(elfNode.hasClass('elfinder-fullscreen')? elfNode : 'body'); // bind switch fullscreen event elfNode.on('resize.'+fm.namespace, function(e, data) { e.preventDefault(); e.stopPropagation(); data && data.fullscreen && container.appendTo(data.fullscreen === 'on'? elfNode : 'body'); }); fm.bind('destroy', function() { editor && editor.cancelEditing(); container.remove(); }); } else { // always moves to last container.appendTo(container.parent()); } node.on('click', launch); // Constructor options opts = Object.assign({ type: 'child', parent: container.get(0), output: {format: 'png'}, onSave: function(arg) { // Check current file.hash, all callbacks are called on multiple instances var mime = arg.toBlob().type, ext = getExtention(mime, fm), draw = function(url) { node.one('load error', function() { node.data('loading') && node.data('loading')(true); }) .attr('crossorigin', 'anonymous') .attr('src', url); }, url = arg.toDataURL(); node.data('loading')(); delete base._canvas; if (node.data('ext') !== ext) { changeImageType(url, self.file.mime).done(function(res, cv) { if (cv) { base._canvas = canvas = cv; quty.trigger('change'); qBase && qBase.show(); } draw(res); }).fail(function() { dialog.trigger('changeType', { extention: ext, mime : mime }); draw(url); }); } else { draw(url); } }, onClose: function() { dialog.removeClass(fm.res('class', 'preventback')); fm.toggleMaximize(container, false); container.hide(); fm.toFront(dialog); } }, self.confObj.editorOpts); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: base, editorObj: Pixo, instance: void(0), opts: opts }); // make editor instance editor = new Pixo.Bridge(opts); dfrd.resolve(editor); $base.on('saveAsFail', launch); if (onload) { onload(); } }, launch = function() { dialog.addClass(fm.res('class', 'preventback')); fm.toggleMaximize(container, true); fm.toFront(container); container.show().data('curhash', self.file.hash); editor.edit(node.get(0)); node.data('loading')(true); }, qBase, quty, qutyTm, canvas, editor; node.data('loading')(); // jpeg quality controls if (self.file.mime === 'image/jpeg') { quty = jQuery('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); qutyTm && cancelAnimationFrame(qutyTm); qutyTm = requestAnimationFrame(function() { if (canvas) { canvas.toBlob(function(blob) { blob && quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); }, 'image/jpeg', Math.max(Math.min(q, 100), 1) / 100); } }); }) .val(fm.storage('jpgQuality') || fm.option('jpgQuality')); qBase = jQuery('
    ') .hide() .append( jQuery('').html(fm.i18n('quality') + ' : '), quty, jQuery('') ) .prependTo($base.parent().next()); $base.data('quty', quty); } // load script then init if (typeof Pixo === 'undefined') { fm.loadScript(['https://pixoeditor.com:8443/editor/scripts/bridge.m.js'], function() { init(launch); }, {loadType: 'tag'}); } else { init(); launch(); } return dfrd; }, // Convert content url to data uri scheme to save content save : function(base) { var self = this, $base = jQuery(base), node = $base.children('img:first'), q; if (base._canvas) { if ($base.data('quty')) { q = $base.data('quty').val(); q && this.fm.storage('jpgQuality', q); } node.attr('src', base._canvas.toDataURL(self.file.mime, q? Math.max(Math.min(q, 100), 1) / 100 : void(0))); } else if (node.attr('src').substr(0, 5) !== 'data:') { node.attr('src', imgBase64(node, this.file.mime)); } }, close : function(base, editor) { editor && editor.destroy(); } }, { // ACE Editor // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || !fm.options.cdns.ace) { this.disabled = true; } }, // `mimes` is not set for support everything kind of text file info : { id : 'aceeditor', name : 'ACE Editor', iconImg : 'img/editor-icons.png 0 -96' }, load : function(textarea) { var self = this, fm = this.fm, dfrd = jQuery.Deferred(), cdn = fm.options.cdns.ace, start = function() { var editor, editorBase, mode, ta = jQuery(textarea), taBase = ta.parent(), dialog = taBase.parent(), id = textarea.id + '_ace', ext = self.file.name.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(), // MIME/mode map mimeMode = { 'text/x-php' : 'php', 'application/x-php' : 'php', 'text/html' : 'html', 'application/xhtml+xml' : 'html', 'text/javascript' : 'javascript', 'application/javascript' : 'javascript', 'text/css' : 'css', 'text/x-c' : 'c_cpp', 'text/x-csrc' : 'c_cpp', 'text/x-chdr' : 'c_cpp', 'text/x-c++' : 'c_cpp', 'text/x-c++src' : 'c_cpp', 'text/x-c++hdr' : 'c_cpp', 'text/x-shellscript' : 'sh', 'application/x-csh' : 'sh', 'text/x-python' : 'python', 'text/x-java' : 'java', 'text/x-java-source' : 'java', 'text/x-ruby' : 'ruby', 'text/x-perl' : 'perl', 'application/x-perl' : 'perl', 'text/x-sql' : 'sql', 'text/xml' : 'xml', 'application/docbook+xml' : 'xml', 'application/xml' : 'xml' }; // set base height taBase.height(taBase.height()); // set basePath of ace ace.config.set('basePath', cdn); // Base node of Ace editor editorBase = jQuery('
    ').text(ta.val()).insertBefore(ta.hide()); // Editor flag ta.data('ace', true); // Aceeditor instance editor = ace.edit(id); // Ace editor configure editor.$blockScrolling = Infinity; editor.setOptions({ theme: 'ace/theme/monokai', fontSize: '14px', wrap: true, }); ace.config.loadModule('ace/ext/modelist', function() { // detect mode mode = ace.require('ace/ext/modelist').getModeForPath('/' + self.file.name).name; if (mode === 'text') { if (mimeMode[self.file.mime]) { mode = mimeMode[self.file.mime]; } } // show MIME:mode in title bar taBase.prev().children('.elfinder-dialog-title').append(' (' + self.file.mime + ' : ' + mode.split(/[\/\\]/).pop() + ')'); editor.setOptions({ mode: 'ace/mode/' + mode }); if (dfrd.state() === 'resolved') { dialog.trigger('resize'); } }); ace.config.loadModule('ace/ext/language_tools', function() { ace.require('ace/ext/language_tools'); editor.setOptions({ enableBasicAutocompletion: true, enableSnippets: true, enableLiveAutocompletion: false }); }); ace.config.loadModule('ace/ext/settings_menu', function() { ace.require('ace/ext/settings_menu').init(editor); }); // Short cuts editor.commands.addCommand({ name : "saveFile", bindKey: { win : 'Ctrl-s', mac : 'Command-s' }, exec: function(editor) { self.doSave(); } }); editor.commands.addCommand({ name : "closeEditor", bindKey: { win : 'Ctrl-w|Ctrl-q', mac : 'Command-w|Command-q' }, exec: function(editor) { self.doCancel(); } }); editor.resize(); // TextArea button and Setting button jQuery('
    ').css('float', 'left') .append( jQuery('').html(self.fm.i18n('TextArea')) .button() .on('click', function(){ if (ta.data('ace')) { ta.removeData('ace'); editorBase.hide(); ta.val(editor.session.getValue()).show().trigger('focus'); jQuery(this).text('AceEditor'); } else { ta.data('ace', true); editorBase.show(); editor.setValue(ta.hide().val(), -1); editor.focus(); jQuery(this).html(self.fm.i18n('TextArea')); } }) ) .append( jQuery('') .button({ icons: { primary: 'ui-icon-gear', secondary: 'ui-icon-triangle-1-e' }, text: false }) .on('click', function(){ editor.showSettingsMenu(); jQuery('#ace_settingsmenu') .css('font-size', '80%') .find('div[contains="setOptions"]').hide().end() .parent().appendTo(jQuery('#elfinder')); }) ) .prependTo(taBase.next()); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: ace, instance: editor, opts: {} }); //dialog.trigger('resize'); dfrd.resolve(editor); }; // check ace & start if (!self.confObj.loader) { self.confObj.loader = jQuery.Deferred(); self.fm.loadScript([ cdn+'/ace.js' ], function() { self.confObj.loader.resolve(); }, void 0, {obj: window, name: 'ace'}); } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.destroy(); }, save : function(textarea, instance) { instance && jQuery(textarea).data('ace') && (textarea.value = instance.session.getValue()); }, focus : function(textarea, instance) { instance && jQuery(textarea).data('ace') && instance.focus(); }, resize : function(textarea, instance, e, data) { instance && instance.resize(); } }, { // CodeMirror // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE10 || !fm.options.cdns.codemirror) { this.disabled = true; } }, // `mimes` is not set for support everything kind of text file info : { id : 'codemirror', name : 'CodeMirror', iconImg : 'img/editor-icons.png 0 -176' }, load : function(textarea) { var fm = this.fm, cmUrl = fm.convAbsUrl(fm.options.cdns.codemirror), dfrd = jQuery.Deferred(), self = this, start = function(CodeMirror) { var ta = jQuery(textarea), base = ta.parent(), editor, editorBase, opts; // set base height base.height(base.height()); // CodeMirror configure options opts = { lineNumbers: true, lineWrapping: true, extraKeys : { 'Ctrl-S': function() { self.doSave(); }, 'Ctrl-Q': function() { self.doCancel(); }, 'Ctrl-W': function() { self.doCancel(); } } }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: CodeMirror, instance: void(0), opts: opts }); // CodeMirror configure editor = CodeMirror.fromTextArea(textarea, opts); // return editor instance dfrd.resolve(editor); // Auto mode set var info, m, mode, spec; if (! info) { info = CodeMirror.findModeByMIME(self.file.mime); } if (! info && (m = self.file.name.match(/.+\.([^.]+)$/))) { info = CodeMirror.findModeByExtension(m[1]); } if (info) { CodeMirror.modeURL = useRequire? 'codemirror/mode/%N/%N.min' : cmUrl + '/mode/%N/%N.min.js'; mode = info.mode; spec = info.mime; editor.setOption('mode', spec); CodeMirror.autoLoadMode(editor, mode); // show MIME:mode in title bar base.prev().children('.elfinder-dialog-title').append(' (' + spec + (mode != 'null'? ' : ' + mode : '') + ')'); } // editor base node editorBase = jQuery(editor.getWrapperElement()).css({ // fix CSS conflict to SimpleMDE padding: 0, border: 'none' }); ta.data('cm', true); // fit height to base editorBase.height('100%'); // TextArea button and Setting button jQuery('
    ').css('float', 'left') .append( jQuery('').html(self.fm.i18n('TextArea')) .button() .on('click', function(){ if (ta.data('cm')) { ta.removeData('cm'); editorBase.hide(); ta.val(editor.getValue()).show().trigger('focus'); jQuery(this).text('CodeMirror'); } else { ta.data('cm', true); editorBase.show(); editor.setValue(ta.hide().val()); editor.refresh(); editor.focus(); jQuery(this).html(self.fm.i18n('TextArea')); } }) ) .prependTo(base.next()); }; // load script then start if (!self.confObj.loader) { self.confObj.loader = jQuery.Deferred(); if (useRequire) { require.config({ packages: [{ name: 'codemirror', location: cmUrl, main: 'codemirror.min' }], map: { 'codemirror': { 'codemirror/lib/codemirror': 'codemirror' } } }); require([ 'codemirror', 'codemirror/addon/mode/loadmode.min', 'codemirror/mode/meta.min' ], function(CodeMirror) { self.confObj.loader.resolve(CodeMirror); }); } else { self.fm.loadScript([ cmUrl + '/codemirror.min.js' ], function() { self.fm.loadScript([ cmUrl + '/addon/mode/loadmode.min.js', cmUrl + '/mode/meta.min.js' ], function() { self.confObj.loader.resolve(CodeMirror); }); }, {loadType: 'tag'}); } self.fm.loadCss(cmUrl + '/codemirror.css'); } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.toTextArea(); }, save : function(textarea, instance) { instance && jQuery(textarea).data('cm') && (textarea.value = instance.getValue()); }, focus : function(textarea, instance) { instance && jQuery(textarea).data('cm') && instance.focus(); }, resize : function(textarea, instance, e, data) { instance && instance.refresh(); } }, { // SimpleMDE // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE10 || !fm.options.cdns.simplemde) { this.disabled = true; } }, info : { id : 'simplemde', name : 'SimpleMDE', iconImg : 'img/editor-icons.png 0 -80' }, exts : ['md'], load : function(textarea) { var self = this, fm = this.fm, base = jQuery(textarea).parent(), dfrd = jQuery.Deferred(), cdn = fm.options.cdns.simplemde, start = function(SimpleMDE) { var h = base.height(), delta = base.outerHeight(true) - h + 14, editor, editorBase, opts; // fit height function textarea._setHeight = function(height) { var h = height || base.height(), ctrH = 0, areaH; base.children('.editor-toolbar,.editor-statusbar').each(function() { ctrH += jQuery(this).outerHeight(true); }); areaH = h - ctrH - delta; editorBase.height(areaH); editor.codemirror.refresh(); return areaH; }; // set base height base.height(h); opts = { element: textarea, autofocus: true }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: SimpleMDE, instance: void(0), opts: opts }); // make editor editor = new SimpleMDE(opts); dfrd.resolve(editor); // editor base node editorBase = jQuery(editor.codemirror.getWrapperElement()); // fit height to base editorBase.css('min-height', '50px') .children('.CodeMirror-scroll').css('min-height', '50px'); textarea._setHeight(h); }; // check SimpleMDE & start if (!self.confObj.loader) { self.confObj.loader = jQuery.Deferred(); self.fm.loadCss(cdn+'/simplemde.min.css'); if (useRequire) { require([ cdn+'/simplemde.min.js' ], function(SimpleMDE) { self.confObj.loader.resolve(SimpleMDE); }); } else { self.fm.loadScript([cdn+'/simplemde.min.js'], function() { self.confObj.loader.resolve(SimpleMDE); }, {loadType: 'tag'}); } } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.toTextArea(); instance = null; }, save : function(textarea, instance) { instance && (textarea.value = instance.value()); }, focus : function(textarea, instance) { instance && instance.codemirror.focus(); }, resize : function(textarea, instance, e, data) { instance && textarea._setHeight(); } }, { // CKEditor for html file info : { id : 'ckeditor', name : 'CKEditor', iconImg : 'img/editor-icons.png 0 0' }, exts : ['htm', 'html', 'xhtml'], setup : function(opts, fm) { var confObj = this; if (!fm.options.cdns.ckeditor) { confObj.disabled = true; } else { confObj.ckeOpts = {}; if (opts.extraOptions) { confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor || {}); if (opts.extraOptions.managerUrl) { confObj.managerUrl = opts.extraOptions.managerUrl; } } } }, load : function(textarea) { var self = this, fm = this.fm, dfrd = jQuery.Deferred(), init = function() { var base = jQuery(textarea).parent(), dlg = base.closest('.elfinder-dialog'), h = base.height(), reg = /([&?]getfile=)[^&]+/, loc = self.confObj.managerUrl || window.location.href.replace(/#.*$/, ''), name = 'ckeditor', opts; // make manager location if (reg.test(loc)) { loc = loc.replace(reg, '$1' + name); } else { loc += '?getfile=' + name; } // set base height base.height(h); // CKEditor configure options opts = { startupFocus : true, fullPage: true, allowedContent: true, filebrowserBrowseUrl : loc, toolbarCanCollapse: true, toolbarStartupExpanded: !fm.UA.Mobile, removePlugins: 'resize', extraPlugins: 'colorbutton,justify,docprops', on: { 'instanceReady' : function(e) { var editor = e.editor; editor.resize('100%', h); // re-build on dom move dlg.one('beforedommove.'+fm.namespace, function() { editor.destroy(); }).one('dommove.'+fm.namespace, function() { self.load(textarea).done(function(editor) { self.instance = editor; }); }); // return editor instance dfrd.resolve(e.editor); } } }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: CKEDITOR, instance: void(0), opts: opts }); // CKEditor configure CKEDITOR.replace(textarea.id, Object.assign(opts, self.confObj.ckeOpts)); CKEDITOR.on('dialogDefinition', function(e) { var dlg = e.data.definition.dialog; dlg.on('show', function(e) { fm.getUI().append(jQuery('.cke_dialog_background_cover')).append(this.getElement().$); }); dlg.on('hide', function(e) { jQuery('body:first').append(jQuery('.cke_dialog_background_cover')).append(this.getElement().$); }); }); }; if (!self.confObj.loader) { self.confObj.loader = jQuery.Deferred(); window.CKEDITOR_BASEPATH = fm.options.cdns.ckeditor + '/'; jQuery.getScript(fm.options.cdns.ckeditor + '/ckeditor.js', function() { self.confObj.loader.resolve(); }); } self.confObj.loader.done(init); return dfrd; }, close : function(textarea, instance) { instance && instance.destroy(); }, save : function(textarea, instance) { instance && (textarea.value = instance.getData()); }, focus : function(textarea, instance) { instance && instance.focus(); }, resize : function(textarea, instance, e, data) { var self; if (instance) { if (instance.status === 'ready') { instance.resize('100%', jQuery(textarea).parent().height()); } } } }, { // CKEditor5 balloon mode for html file info : { id : 'ckeditor5', name : 'CKEditor5', iconImg : 'img/editor-icons.png 0 -16' }, exts : ['htm', 'html', 'xhtml'], html : '
    ', setup : function(opts, fm) { var confObj = this; // check cdn and ES6 support if (!fm.options.cdns.ckeditor5 || typeof window.Symbol !== 'function' || typeof Symbol() !== 'symbol') { confObj.disabled = true; } else { confObj.ckeOpts = {}; if (opts.extraOptions) { // @deprecated option extraOptions.ckeditor5Mode if (opts.extraOptions.ckeditor5Mode) { confObj.ckeditor5Mode = opts.extraOptions.ckeditor5Mode; } confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor5 || {}); if (confObj.ckeOpts.mode) { confObj.ckeditor5Mode = confObj.ckeOpts.mode; delete confObj.ckeOpts.mode; } if (opts.extraOptions.managerUrl) { confObj.managerUrl = opts.extraOptions.managerUrl; } } } fm.bind('destroy', function() { confObj.editor = null; }); }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { jQuery(base).height(base.editor.fm.getUI().height() - 100); }, init : function(id, file, data, fm) { var m = data.match(/^([\s\S]*]*>)([\s\S]+)(<\/body>[\s\S]*)$/i), header = '', body = '', footer =''; this.css({ width: '100%', height: '100%', 'box-sizing': 'border-box' }); if (m) { header = m[1]; body = m[2]; footer = m[3]; } else { body = data; } this.data('data', { header: header, body: body, footer: footer }); this._setupSelEncoding(data); }, load : function(editnode) { var self = this, fm = this.fm, dfrd = jQuery.Deferred(), mode = self.confObj.ckeditor5Mode || 'decoupled-document', lang = (function() { var l = fm.lang.toLowerCase().replace('_', '-'); if (l.substr(0, 2) === 'zh' && l !== 'zh-cn') { l = 'zh'; } return l; })(), init = function(cEditor) { var base = jQuery(editnode).parent(), opts; // set base height base.height(fm.getUI().height() - 100); // CKEditor5 configure options opts = Object.assign({ toolbar: ["heading", "|", "fontSize", "fontFamily", "|", "bold", "italic", "underline", "strikethrough", "highlight", "|", "alignment", "|", "numberedList", "bulletedList", "blockQuote", "indent", "outdent", "|", "ckfinder", "link", "imageUpload", "insertTable", "mediaEmbed", "|", "undo", "redo"], language: lang }, self.confObj.ckeOpts); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: editnode, editorObj: cEditor, instance: void(0), opts: opts }); cEditor .create(editnode, opts) .then(function(editor) { var ckf = editor.commands.get('ckfinder'), fileRepo = editor.plugins.get('FileRepository'), prevVars = {}, isImage, insertImages; if (editor.ui.view.toolbar && (mode === 'classic' || mode === 'decoupled-document')) { jQuery(editnode).closest('.elfinder-dialog').children('.ui-widget-header').append(jQuery(editor.ui.view.toolbar.element).css({marginRight:'-1em',marginLeft:'-1em'})); } if (mode === 'classic') { jQuery(editnode).closest('.elfinder-edit-editor').css('overflow', 'auto'); } // Set up this elFinder instead of CKFinder if (ckf) { isImage = function(f) { return f && f.mime.match(/^image\//i); }; insertImages = function(urls) { var imgCmd = editor.commands.get('imageUpload'); if (!imgCmd.isEnabled) { var ntf = editor.plugins.get('Notification'), i18 = editor.locale.t; ntf.showWarning(i18('Could not insert image at the current position.'), { title: i18('Inserting image failed'), namespace: 'ckfinder' }); return; } editor.execute('imageInsert', { source: urls }); }; // Take over ckfinder execute() ckf.execute = function() { var dlg = base.closest('.elfinder-dialog'), gf = fm.getCommand('getfile'), rever = function() { if (prevVars.hasVar) { dlg.off('resize close', rever); gf.callback = prevVars.callback; gf.options.folders = prevVars.folders; gf.options.multiple = prevVars.multi; fm.commandMap.open = prevVars.open; prevVars.hasVar = false; } }; dlg.trigger('togleminimize').one('resize close', rever); prevVars.callback = gf.callback; prevVars.folders = gf.options.folders; prevVars.multi = gf.options.multiple; prevVars.open = fm.commandMap.open; prevVars.hasVar = true; gf.callback = function(files) { var imgs = []; if (files.length === 1 && files[0].mime === 'directory') { fm.one('open', function() { fm.commandMap.open = 'getfile'; }).getCommand('open').exec(files[0].hash); return; } fm.getUI('cwd').trigger('unselectall'); jQuery.each(files, function(i, f) { if (isImage(f)) { imgs.push(fm.convAbsUrl(f.url)); } else { editor.execute('link', fm.convAbsUrl(f.url)); } }); if (imgs.length) { insertImages(imgs); } dlg.trigger('togleminimize'); }; gf.options.folders = true; gf.options.multiple = true; fm.commandMap.open = 'getfile'; fm.toast({ mode: 'info', msg: fm.i18n('dblclickToSelect') }); }; } // Set up image uploader fileRepo.createUploadAdapter = function(loader) { return new uploder(loader); }; editor.setData(jQuery(editnode).data('data').body); // move .ck-body to elFinder node for fullscreen mode fm.getUI().append(jQuery('body > div.ck-body')); jQuery('div.ck-balloon-panel').css({ 'z-index': fm.getMaximizeCss().zIndex + 1 }); dfrd.resolve(editor); /*fm.log({ defaultConfig: cEditor.defaultConfig, plugins: cEditor.builtinPlugins.map(function(p) { return p.pluginName; }), toolbars: Array.from(editor.ui.componentFactory.names()) });*/ }) ['catch'](function(error) { // ['cache'] instead .cache for fix error on ie8 fm.error(error); }); }, uploder = function(loader) { var upload = function(file, resolve, reject) { fm.exec('upload', {files: [file]}, void(0), fm.cwd().hash) .done(function(data){ if (data.added && data.added.length) { fm.url(data.added[0].hash, { async: true }).done(function(url) { resolve({ 'default': fm.convAbsUrl(url) }); }).fail(function() { reject('errFileNotFound'); }); } else { reject(fm.i18n(data.error? data.error : 'errUpload')); } }) .fail(function(err) { var error = fm.parseError(err); reject(fm.i18n(error? (error === 'userabort'? 'errAbort' : error) : 'errUploadNoFiles')); }) .progress(function(data) { loader.uploadTotal = data.total; loader.uploaded = data.progress; }); }; this.upload = function() { return new Promise(function(resolve, reject) { if (loader.file instanceof Promise || (loader.file && typeof loader.file.then === 'function')) { loader.file.then(function(file) { upload(file, resolve, reject); }); } else { upload(loader.file, resolve, reject); } }); }; this.abort = function() { fm.getUI().trigger('uploadabort'); }; }, loader; if (!self.confObj.editor) { loader = jQuery.Deferred(); self.fm.loadScript([ fm.options.cdns.ckeditor5 + '/' + mode + '/ckeditor.js' ], function(editor) { if (!editor) { editor = window.BalloonEditor || window.InlineEditor || window.ClassicEditor || window.DecoupledEditor; } if (fm.lang !== 'en') { self.fm.loadScript([ fm.options.cdns.ckeditor5 + '/' + mode + '/translations/' + lang + '.js' ], function(obj) { loader.resolve(editor); }, { tryRequire: true, loadType: 'tag', error: function(obj) { lang = 'en'; loader.resolve(editor); } }); } else { loader.resolve(editor); } }, { tryRequire: true, loadType: 'tag' }); loader.done(function(editor) { self.confObj.editor = editor; init(editor); }); } else { init(self.confObj.editor); } return dfrd; }, getContent : function() { var data = jQuery(this).data('data'); return data.header + data.body + data.footer; }, close : function(editnode, instance) { instance && instance.destroy(); }, save : function(editnode, instance) { var elm = jQuery(editnode), data = elm.data('data'); if (instance) { data.body = instance.getData(); elm.data('data', data); } }, focus : function(editnode, instance) { jQuery(editnode).trigger('focus'); } }, { // TinyMCE for html file info : { id : 'tinymce', name : 'TinyMCE', iconImg : 'img/editor-icons.png 0 -64' }, exts : ['htm', 'html', 'xhtml'], setup : function(opts, fm) { var confObj = this; if (!fm.options.cdns.tinymce) { confObj.disabled = true; } else { confObj.mceOpts = {}; if (opts.extraOptions) { confObj.uploadOpts = Object.assign({}, opts.extraOptions.uploadOpts || {}); confObj.mceOpts = Object.assign({}, opts.extraOptions.tinymce || {}); } else { confObj.uploadOpts = {}; } } }, load : function(textarea) { var self = this, fm = this.fm, dfrd = jQuery.Deferred(), init = function() { var base = jQuery(textarea).show().parent(), dlg = base.closest('.elfinder-dialog'), h = base.height(), delta = base.outerHeight(true) - h, // hide MCE dialog and modal block hideMceDlg = function() { var mceW; if (tinymce.activeEditor.windowManager.windows) { mceW = tinymce.activeEditor.windowManager.windows[0]; mceDlg = jQuery(mceW? mceW.getEl() : void(0)).hide(); mceCv = jQuery('#mce-modal-block').hide(); } else { mceDlg = jQuery('.tox-dialog-wrap').hide(); } }, // Show MCE dialog and modal block showMceDlg = function() { mceCv && mceCv.show(); mceDlg && mceDlg.show(); }, tVer = tinymce.majorVersion, opts, mceDlg, mceCv; // set base height base.height(h); // fit height function textarea._setHeight = function(height) { if (tVer < 5) { var base = jQuery(this).parent(), h = height || base.innerHeight(), ctrH = 0, areaH; base.find('.mce-container-body:first').children('.mce-top-part,.mce-statusbar').each(function() { ctrH += jQuery(this).outerHeight(true); }); areaH = h - ctrH - delta; base.find('.mce-edit-area iframe:first').height(areaH); } }; // TinyMCE configure options opts = { selector: '#' + textarea.id, resize: false, plugins: 'print preview fullpage searchreplace autolink directionality visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists wordcount imagetools textpattern help', toolbar: 'formatselect | bold italic strikethrough forecolor backcolor | link image media | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat', image_advtab: true, init_instance_callback : function(editor) { // fit height on init textarea._setHeight(h); // re-build on dom move dlg.one('beforedommove.'+fm.namespace, function() { tinymce.execCommand('mceRemoveEditor', false, textarea.id); }).one('dommove.'+fm.namespace, function() { self.load(textarea).done(function(editor) { self.instance = editor; }); }); // return editor instance dfrd.resolve(editor); }, file_picker_callback : function (callback, value, meta) { var gf = fm.getCommand('getfile'), revar = function() { if (prevVars.hasVar) { gf.callback = prevVars.callback; gf.options.folders = prevVars.folders; gf.options.multiple = prevVars.multi; fm.commandMap.open = prevVars.open; prevVars.hasVar = false; } dlg.off('resize close', revar); showMceDlg(); }, prevVars = {}; prevVars.callback = gf.callback; prevVars.folders = gf.options.folders; prevVars.multi = gf.options.multiple; prevVars.open = fm.commandMap.open; prevVars.hasVar = true; gf.callback = function(file) { var url, info; if (file.mime === 'directory') { fm.one('open', function() { fm.commandMap.open = 'getfile'; }).getCommand('open').exec(file.hash); return; } // URL normalization url = fm.convAbsUrl(file.url); // Make file info info = file.name + ' (' + fm.formatSize(file.size) + ')'; // Provide file and text for the link dialog if (meta.filetype == 'file') { callback(url, {text: info, title: info}); } // Provide image and alt text for the image dialog if (meta.filetype == 'image') { callback(url, {alt: info}); } // Provide alternative source and posted for the media dialog if (meta.filetype == 'media') { callback(url); } dlg.trigger('togleminimize'); }; gf.options.folders = true; gf.options.multiple = false; fm.commandMap.open = 'getfile'; hideMceDlg(); dlg.trigger('togleminimize').one('resize close', revar); fm.toast({ mode: 'info', msg: fm.i18n('dblclickToSelect') }); return false; }, images_upload_handler : function (blobInfo, success, failure) { var file = blobInfo.blob(), err = function(e) { var dlg = e.data.dialog || {}; if (dlg.hasClass('elfinder-dialog-error') || dlg.hasClass('elfinder-confirm-upload')) { hideMceDlg(); dlg.trigger('togleminimize').one('resize close', revert); fm.unbind('dialogopened', err); } }, revert = function() { dlg.off('resize close', revert); showMceDlg(); }, clipdata = true; // check file object if (file.name) { // file blob of client side file object clipdata = void(0); } fm.bind('dialogopened', err).exec('upload', Object.assign({ files: [file], clipdata: clipdata // to get unique name on connector }, self.confObj.uploadOpts), void(0), fm.cwd().hash).done(function(data) { if (data.added && data.added.length) { fm.url(data.added[0].hash, { async: true }).done(function(url) { showMceDlg(); success(fm.convAbsUrl(url)); }).fail(function() { failure(fm.i18n('errFileNotFound')); }); } else { failure(fm.i18n(data.error? data.error : 'errUpload')); } }).fail(function(err) { var error = fm.parseError(err); if (error) { if (error === 'errUnknownCmd') { error = 'errPerm'; } else if (error === 'userabort') { error = 'errAbort'; } } failure(fm.i18n(error? error : 'errUploadNoFiles')); }); } }; // TinyMCE 5 supports "height: 100%" if (tVer >= 5) { opts.height = '100%'; } // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: tinymce, instance: void(0), opts: opts }); // TinyMCE configure tinymce.init(Object.assign(opts, self.confObj.mceOpts)); }; if (!self.confObj.loader) { self.confObj.loader = jQuery.Deferred(); self.fm.loadScript([fm.options.cdns.tinymce + (fm.options.cdns.tinymce.match(/\.js/)? '' : '/tinymce.min.js')], function() { self.confObj.loader.resolve(); }, { loadType: 'tag' }); } self.confObj.loader.done(init); return dfrd; }, close : function(textarea, instance) { instance && tinymce.execCommand('mceRemoveEditor', false, textarea.id); }, save : function(textarea, instance) { instance && instance.save(); }, focus : function(textarea, instance) { instance && instance.focus(); }, resize : function(textarea, instance, e, data) { // fit height to base node on dialog resize instance && textarea._setHeight(); } }, { info : { id : 'zohoeditor', name : 'Zoho Editor', iconImg : 'img/editor-icons.png 0 -32', cmdCheck : 'ZohoOffice', preventGet: true, hideButtons: true, syncInterval : 15000, canMakeEmpty: true, integrate: { title: 'Zoho Office API', link: 'https://www.zoho.com/officeapi/' } }, mimes : [ 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', //'application/pdf', 'application/vnd.oasis.opendocument.text', 'application/rtf', 'text/html', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.sun.xml.calc', 'text/csv', 'text/tab-separated-values', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.sun.xml.impress' ], html : '', // setup on elFinder bootup setup : function(opts, fm) { if (fm.UA.Mobile || fm.UA.ltIE8) { this.disabled = true; } }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { var elfNode = base.editor.fm.getUI(); jQuery(base).height(elfNode.height()); dialogOpts.width = Math.max(dialogOpts.width || 0, elfNode.width() * 0.8); }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var ta = this, ifm = jQuery(this).hide(), uiToast = fm.getUI('toast'), spnr = jQuery('
    ') .html('' + fm.i18n('nowLoading') + '') .appendTo(ifm.parent()), cdata = function() { var data = ''; jQuery.each(fm.customData, function(key, val) { data += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); return data; }; jQuery(ta).data('xhr', fm.request({ data: { cmd: 'editor', name: ta.editor.confObj.info.cmdCheck, method: 'init', 'args[target]': file.hash, 'args[lang]' : fm.lang, 'args[cdata]' : cdata() }, preventDefault : true }).done(function(data) { var opts; if (data.zohourl) { opts = { css: { height: '100%' } }; // trigger event 'editEditorPrepare' ta.editor.trigger('Prepare', { node: ta, editorObj: void(0), instance: ifm, opts: opts }); ifm.attr('src', data.zohourl).show().css(opts.css); if (data.warning) { uiToast.appendTo(ta.closest('.ui-dialog')); fm.toast({ msg: fm.i18n(data.warning), mode: 'warning', timeOut: 0, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); }, button: { text: 'btnYes' } }); } } else { data.error && fm.error(data.error); ta.elfinderdialog('destroy'); } }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }).always(function() { spnr.remove(); })); }, load : function() {}, getContent : function() {}, save : function() {}, // Before dialog close beforeclose : iframeClose, // On dialog closed close : function(ta) { var fm = this.fm, xhr = jQuery(ta).data('xhr'); if (xhr.state() === 'pending') { xhr.reject(); } } }, { // Zip Archive with FlySystem info : { id : 'ziparchive', name : 'btnMount', iconImg : 'img/toolbar.png 0 -416', cmdCheck : 'ZipArchive', edit : function(file, editor) { var fm = this, dfrd = jQuery.Deferred(); fm.request({ data:{ cmd: 'netmount', protocol: 'ziparchive', host: file.hash, path: file.phash }, preventFail: true, notify : {type : 'netmount', cnt : 1, hideCnt : true} }).done(function(data) { var pdir; if (data.added && data.added.length) { if (data.added[0].phash) { if (pdir = fm.file(data.added[0].phash)) { if (! pdir.dirs) { pdir.dirs = 1; fm.change({ changed: [ pdir ] }); } } } fm.one('netmountdone', function() { fm.exec('open', data.added[0].hash); fm.one('opendone', function() { data.toast && fm.toast(data.toast); }); }); } dfrd.resolve(); }) .fail(function(error) { dfrd.reject(error); }); return dfrd; } }, mimes : ['application/zip'], load : function() {}, save : function(){} }, { // Simple Text (basic textarea editor) info : { id : 'textarea', name : 'TextArea', useTextAreaEvent : true }, load : function(textarea) { // trigger event 'editEditorPrepare' this.trigger('Prepare', { node: textarea, editorObj: void(0), instance: void(0), opts: {} }); textarea.setSelectionRange && textarea.setSelectionRange(0, 0); jQuery(textarea).trigger('focus').show(); }, save : function(){} }, { // File converter with online-convert.com info : { id : 'onlineconvert', name : 'Online Convert', iconImg : 'img/editor-icons.png 0 -144', cmdCheck : 'OnlineConvert', preventGet: true, hideButtons: true, single: true, converter: true, canMakeEmpty: false, integrate: { title: 'ONLINE-CONVERT.COM', link: 'https://online-convert.com' } }, mimes : ['*'], html : '
    ', // setup on elFinder bootup setup : function(opts, fm) { var mOpts = opts.extraOptions.onlineConvert || {maxSize:100,showLink:true}; if (mOpts.maxSize) { this.info.maxSize = mOpts.maxSize * 1048576; } this.set = Object.assign({ url : 'https://%s.online-convert.com%s?external_url=', conv : { Archive: {'7Z':{}, 'BZ2':{ext:'bz'}, 'GZ':{}, 'ZIP':{}}, Audio: {'MP3':{}, 'OGG':{ext:'oga'}, 'WAV':{}, 'WMA':{}, 'AAC':{}, 'AIFF':{ext:'aif'}, 'FLAC':{}, 'M4A':{}, 'MMF':{}, 'OPUS':{ext:'oga'}}, Document: {'DOC':{}, 'DOCX':{}, 'HTML':{}, 'ODT':{}, 'PDF':{}, 'PPT':{}, 'PPTX':{}, 'RTF':{}, 'SWF':{}, 'TXT':{}}, eBook: {'AZW3':{ext:'azw'}, 'ePub':{}, 'FB2':{ext:'xml'}, 'LIT':{}, 'LRF':{}, 'MOBI':{}, 'PDB':{}, 'PDF':{},'PDF-eBook':{ext:'pdf'}, 'TCR':{}}, Hash: {'Adler32':{}, 'Apache-htpasswd':{}, 'Blowfish':{}, 'CRC32':{}, 'CRC32B':{}, 'Gost':{}, 'Haval128':{},'MD4':{}, 'MD5':{}, 'RIPEMD128':{}, 'RIPEMD160':{}, 'SHA1':{}, 'SHA256':{}, 'SHA384':{}, 'SHA512':{}, 'Snefru':{}, 'Std-DES':{}, 'Tiger128':{}, 'Tiger128-calculator':{}, 'Tiger128-converter':{}, 'Tiger160':{}, 'Tiger192':{}, 'Whirlpool':{}}, Image: {'BMP':{}, 'EPS':{ext:'ai'}, 'GIF':{}, 'EXR':{}, 'ICO':{}, 'JPG':{}, 'PNG':{}, 'SVG':{}, 'TGA':{}, 'TIFF':{ext:'tif'}, 'WBMP':{}, 'WebP':{}}, Video: {'3G2':{}, '3GP':{}, 'AVI':{}, 'FLV':{}, 'HLS':{ext:'m3u8'}, 'MKV':{}, 'MOV':{}, 'MP4':{}, 'MPEG-1':{ext:'mpeg'}, 'MPEG-2':{ext:'mpeg'}, 'OGG':{ext:'ogv'}, 'OGV':{}, 'WebM':{}, 'WMV':{}, 'Android':{link:'/convert-video-for-%s',ext:'mp4'}, 'Blackberry':{link:'/convert-video-for-%s',ext:'mp4'}, 'DPG':{link:'/convert-video-for-%s',ext:'avi'}, 'iPad':{link:'/convert-video-for-%s',ext:'mp4'}, 'iPhone':{link:'/convert-video-for-%s',ext:'mp4'}, 'iPod':{link:'/convert-video-for-%s',ext:'mp4'}, 'Nintendo-3DS':{link:'/convert-video-for-%s',ext:'avi'}, 'Nintendo-DS':{link:'/convert-video-for-%s',ext:'avi'}, 'PS3':{link:'/convert-video-for-%s',ext:'mp4'}, 'Wii':{link:'/convert-video-for-%s',ext:'avi'}, 'Xbox':{link:'/convert-video-for-%s',ext:'wmv'}} }, catExts : { Hash: 'txt' }, link : '', useTabs : (jQuery.fn.tabs && !fm.UA.iOS)? true : false // Can't work on iOS, I don't know why. }, mOpts); }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { var elfNode = base.editor.fm.getUI(); jQuery(base).height(elfNode.height()); dialogOpts.width = Math.max(dialogOpts.width || 0, elfNode.width() * 0.8); }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var ta = this, confObj = ta.editor.confObj, set = confObj.set, uiToast = fm.getUI('toast'), idxs = {}, allowZip = fm.uploadMimeCheck('application/zip', file.phash), selfUrl = jQuery('base').length? document.location.href.replace(/#.*$/, '') : '', getExt = function(cat, con) { var c; if (set.catExts[cat]) { return set.catExts[cat]; } if (set.conv[cat] && (c = set.conv[cat][con])) { return (c.ext || con).toLowerCase(); } return con.toLowerCase(); }, setOptions = function(cat, done) { var type, dfdInit, dfd; if (typeof confObj.api === 'undefined') { dfdInit = fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'init' }, preventDefault : true }); } else { dfdInit = jQuery.Deferred().resolve({api: confObj.api}); } cat = cat.toLowerCase(); dfdInit.done(function(data) { confObj.api = data.api; if (confObj.api) { if (cat) { type = '?category=' + cat; } else { type = ''; cat = 'all'; } if (!confObj.conversions) { confObj.conversions = {}; } if (!confObj.conversions[cat]) { dfd = jQuery.getJSON('https://api2.online-convert.com/conversions' + type); } else { dfd = jQuery.Deferred().resolve(confObj.conversions[cat]); } dfd.done(function(d) { confObj.conversions[cat] = d; jQuery.each(d, function(i, o) { btns[set.useTabs? 'children' : 'find']('.onlineconvert-category-' + o.category).children('.onlineconvert-' + o.target).trigger('makeoption', o); }); done && done(); }); } }); }, btns = (function() { var btns = jQuery('
    ').on('click', 'button', function() { var b = jQuery(this), opts = b.data('opts') || null, cat = b.closest('.onlineconvert-category').data('cname'), con = b.data('conv'); if (confObj.api === true) { api({ category: cat, convert: con, options: opts }); } }).on('change', function(e) { var t = jQuery(e.target), p = t.parent(), b = t.closest('.elfinder-edit-onlineconvert-button').children('button:first'), o = b.data('opts') || {}, v = p.data('type') === 'boolean'? t.is(':checked') : t.val(); e.stopPropagation(); if (v) { if (p.data('type') === 'integer') { v = parseInt(v); } if (p.data('pattern')) { var reg = new RegExp(p.data('pattern')); if (!reg.test(v)) { requestAnimationFrame(function() { fm.error('"' + fm.escape(v) + '" is not match to "/' + fm.escape(p.data('pattern')) + '/"'); }); v = null; } } } if (v) { o[t.parent().data('optkey')] = v; } else { delete o[p.data('optkey')]; } b.data('opts', o); }), ul = jQuery('
      '), oform = function(n, o) { var f = jQuery('

      ').data('optkey', n).data('type', o.type), checked = '', disabled = '', nozip = false, opts, btn, elm; if (o.description) { f.attr('title', fm.i18n(o.description)); } if (o.pattern) { f.data('pattern', o.pattern); } f.append(jQuery('').text(fm.i18n(n) + ' : ')); if (o.type === 'boolean') { if (o['default'] || (nozip = (n === 'allow_multiple_outputs' && !allowZip))) { checked = ' checked'; if (nozip) { disabled = ' disabled'; } btn = this.children('button:first'); opts = btn.data('opts') || {}; opts[n] = true; btn.data('opts', opts); } f.append(jQuery('')); } else if (o['enum']){ elm = jQuery('').append(jQuery('').text('Select...')); jQuery.each(o['enum'], function(i, v) { elm.append(jQuery('').text(v)); }); f.append(elm); } else { f.append(jQuery('')); } return f; }, makeOption = function(o) { var elm = this, b = jQuery('').on('click', function() { f.toggle(); }), f = jQuery('
      ').hide(); if (o.options) { jQuery.each(o.options, function(k, v) { k !== 'download_password' && f.append(oform.call(elm, k, v)); }); } elm.append(b, f); }, ts = (+new Date()), i = 0; if (!confObj.ext2mime) { confObj.ext2mime = Object.assign(fm.arrayFlip(fm.mimeTypes), ext2mime); } jQuery.each(set.conv, function(t, c) { var cname = t.toLowerCase(), id = 'elfinder-edit-onlineconvert-' + cname + ts, type = jQuery('
      ').data('cname', t), cext; jQuery.each(c, function(n, o) { var nl = n.toLowerCase(), ext = getExt(t, n); if (!confObj.ext2mime[ext]) { if (cname === 'audio' || cname === 'image' || cname === 'video') { confObj.ext2mime[ext] = cname + '/x-' + nl; } else { confObj.ext2mime[ext] = 'application/octet-stream'; } } if (fm.uploadMimeCheck(confObj.ext2mime[ext], file.phash)) { type.append(jQuery('
      ').on('makeoption', function(e, data) { var elm = jQuery(this); if (!elm.children('.elfinder-button-icon-preference').length) { makeOption.call(elm, data); } }).append(jQuery('').text(n).data('conv', n))); } }); if (type.children().length) { ul.append(jQuery('
    • ').append(jQuery('').attr('href', selfUrl + '#' + id).text(t))); btns.append(type); idxs[cname] = i++; } }); if (set.useTabs) { btns.prepend(ul).tabs({ beforeActivate: function(e, ui) { setOptions(ui.newPanel.data('cname')); } }); } else { jQuery.each(set.conv, function(t) { var tl = t.toLowerCase(); btns.append(jQuery('
      ').append(jQuery('').text(t)).append(btns.children('.onlineconvert-category-' + tl))); }); } return btns; })(), select = jQuery(this) .append( btns, (set.showLink? jQuery(set.link) : null) ), spnr = jQuery('
      ') .hide() .html('' + fm.i18n('nowLoading') + '') .appendTo(select.parent()), prog = jQuery('
      ').appendTo(spnr), _url = null, url = function() { var onetime; if (_url) { return jQuery.Deferred().resolve(_url); } else { spnr.show(); return fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) { _url = url; }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }).always(function() { spnr.hide(); }); } }, api = function(opts) { jQuery(ta).data('dfrd', url().done(function(url) { select.fadeOut(); setStatus({info: 'Start conversion request.'}); fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'api', 'args[category]' : opts.category.toLowerCase(), 'args[convert]' : opts.convert.toLowerCase(), 'args[options]' : JSON.stringify(opts.options), 'args[source]' : fm.convAbsUrl(url), 'args[filename]' : fm.splitFileExtention(file.name)[0] + '.' + getExt(opts.category, opts.convert), 'args[mime]' : file.mime }, preventDefault : true }).done(function(data) { checkRes(data.apires, opts.category, opts.convert); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }); })); }, checkRes = function(res, cat, con) { var status, err = []; if (res && res.id) { status = res.status; if (status.code === 'failed') { spnr.hide(); if (res.errors && res.errors.length) { jQuery.each(res.errors, function(i, o) { o.message && err.push(o.message); }); } fm.error(err.length? err : status.info); select.fadeIn(); } else if (status.code === 'completed') { upload(res); } else { setStatus(status); setTimeout(function() { polling(res.id); }, 1000); } } else { uiToast.appendTo(ta.closest('.ui-dialog')); if (res.message) { fm.toast({ msg: fm.i18n(res.message), mode: 'error', timeOut: 5000, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); } fm.toast({ msg: fm.i18n('editorConvNoApi'), mode: 'error', timeOut: 3000, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); spnr.hide(); select.show(); } }, setStatus = function(status) { spnr.show().children('.elfinder-spinner-text').text(status.info); }, polling = function(jobid) { fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'api', 'args[jobid]': jobid }, preventDefault : true }).done(function(data) { checkRes(data.apires); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }); }, upload = function(res) { var output = res.output, id = res.id, url = ''; spnr.hide(); if (output && output.length) { ta.elfinderdialog('destroy'); jQuery.each(output, function(i, o) { if (o.uri) { url += o.uri + '\n'; } }); fm.upload({ target: file.phash, files: [url], type: 'text', extraData: { contentSaveId: 'OnlineConvert-' + res.id } }); } }, mode = 'document', cl, m; select.parent().css({overflow: 'auto'}).addClass('overflow-scrolling-touch'); if (m = file.mime.match(/^(audio|image|video)/)) { mode = m[1]; } if (set.useTabs) { if (idxs[mode]) { btns.tabs('option', 'active', idxs[mode]); } } else { cl = Object.keys(set.conv).length; jQuery.each(set.conv, function(t) { if (t.toLowerCase() === mode) { setOptions(t, function() { jQuery.each(set.conv, function(t0) { t0.toLowerCase() !== mode && setOptions(t0); }); }); return false; } cl--; }); if (!cl) { jQuery.each(set.conv, function(t) { setOptions(t); }); } select.parent().scrollTop(btns.children('.onlineconvert-fieldset-' + mode).offset().top); } }, load : function() {}, getContent : function() {}, save : function() {}, // On dialog closed close : function(ta) { var fm = this.fm, dfrd = jQuery(ta).data('dfrd'); if (dfrd && dfrd.state() === 'pending') { dfrd.reject(); } } } ]; }, window.elFinder)); PK Zp՛՛js/elFinder.options.jsnuW+A/** * Default elFinder config * * @type Object * @autor Dmitry (dio) Levashov */ elFinder.prototype._options = { /** * URLs of 3rd party libraries CDN * * @type Object */ cdns : { // for editor etc. ace : 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12', codemirror : 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.61.1', ckeditor : 'https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.16.1', ckeditor5 : 'https://cdn.ckeditor.com/ckeditor5/28.0.0', tinymce : 'https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.7.1', simplemde : 'https://cdnjs.cloudflare.com/ajax/libs/simplemde/1.11.2', fabric : 'https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.2.0', fabric16 : 'https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.7', tui : 'https://uicdn.toast.com', // for quicklook etc. hls : 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.0.2/hls.min.js', dash : 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/3.2.2/dash.all.min.js', flv : 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.5.0/flv.min.js', videojs : 'https://cdnjs.cloudflare.com/ajax/libs/video.js/7.12.1', prettify : 'https://cdn.jsdelivr.net/gh/google/code-prettify@f1c3473acd1e8ea8c8c1a60c56e89f5cdd06f915/loader/run_prettify.js', psd : 'https://cdnjs.cloudflare.com/ajax/libs/psd.js/3.2.0/psd.min.js', rar : 'https://cdn.jsdelivr.net/gh/nao-pon/rar.js@6cef13ec66dd67992fc7f3ea22f132d770ebaf8b/rar.min.js', zlibUnzip : 'https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/unzip.min.js', // need check unzipFiles() in quicklook.plugins.js when update zlibGunzip : 'https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/gunzip.min.js', bzip2 : 'https://cdn.jsdelivr.net/gh/nao-pon/bzip2.js@0.8.0/bzip2.js', marked : 'https://cdnjs.cloudflare.com/ajax/libs/marked/2.0.3/marked.min.js', sparkmd5 : 'https://cdnjs.cloudflare.com/ajax/libs/spark-md5/3.0.0/spark-md5.min.js', jssha : 'https://cdnjs.cloudflare.com/ajax/libs/jsSHA/3.2.0/sha.min.js', amr : 'https://cdn.jsdelivr.net/gh/yxl/opencore-amr-js@dcf3d2b5f384a1d9ded2a54e4c137a81747b222b/js/amrnb.js', tiff : 'https://cdn.jsdelivr.net/gh/seikichi/tiff.js@545ede3ee46b5a5bc5f06d65954e775aa2a64017/tiff.min.js' }, /** * Connector url. Required! * * @type String */ url : '', /** * Ajax request type. * * @type String * @default "get" */ requestType : 'get', /** * Use CORS to connector url * * @type Boolean|null true|false|null(Auto detect) */ cors : null, /** * Array of header names to return parrot out in HTTP headers received from the server * * @type Array */ parrotHeaders : [], /** * Maximum number of concurrent connections on request * * @type Number * @default 3 */ requestMaxConn : 3, /** * Transport to send request to backend. * Required for future extensions using websockets/webdav etc. * Must be an object with "send" method. * transport.send must return jQuery.Deferred() object * * @type Object * @default null * @example * transport : { * init : function(elfinderInstance) { }, * send : function(options) { * var dfrd = jQuery.Deferred(); * // connect to backend ... * return dfrd; * }, * upload : function(data) { * var dfrd = jQuery.Deferred(); * // upload ... * return dfrd; * } * * } **/ transport : {}, /** * URL to upload file to. * If not set - connector URL will be used * * @type String * @default '' */ urlUpload : '', /** * Allow to drag and drop to upload files * * @type Boolean|String * @default 'auto' */ dragUploadAllow : 'auto', /** * Confirmation dialog displayed at the time of overwriting upload * * @type Boolean * @default true */ overwriteUploadConfirm : true, /** * Max size of chunked data of file upload * * @type Number * @default 10485760(10MB) */ uploadMaxChunkSize : 10485760, /** * Regular expression of file name to exclude when uploading folder * * @type Object * @default { win: /^(?:desktop\.ini|thumbs\.db)$/i, mac: /^\.ds_store$/i } */ folderUploadExclude : { win: /^(?:desktop\.ini|thumbs\.db)$/i, mac: /^\.ds_store$/i }, /** * Timeout for upload using iframe * * @type Number * @default 0 - no timeout */ iframeTimeout : 0, /** * Data to append to all requests and to upload files * * @type Object * @default {} */ customData : {}, /** * Event listeners to bind on elFinder init * * @type Object * @default {} */ handlers : {}, /** * Any custom headers to send across every ajax request * * @type Object * @default {} */ customHeaders : {}, /** * Any custom xhrFields to send across every ajax request * * @type Object * @default {} */ xhrFields : {}, /** * Interface language * * @type String * @default "en" */ lang : 'en', /** * Base URL of elfFinder library starting from Manager HTML * Auto detect when empty value * * @type String * @default "" */ baseUrl : '', /** * Base URL of i18n js files * baseUrl + "js/i18n/" when empty value * * @type String * @default "" */ i18nBaseUrl : '', /** * Base URL of worker js files * baseUrl + "js/worker/" when empty value * * @type String * @default "" */ workerBaseUrl : '', /** * Auto load required CSS * `false` to disable this function or * CSS URL Array to load additional CSS files * * @type Boolean|Array * @default true */ cssAutoLoad : true, /** * Theme to load * {"themeid" : "Theme CSS URL"} or * {"themeid" : "Theme manifesto.json URL"} or * Theme manifesto.json Object * { * "themeid" : { * "name":"Theme Name", * "cssurls":"Theme CSS URL", * "author":"Author Name", * "email":"Author Email", * "license":"License", * "link":"Web Site URL", * "image":"Screen Shot URL", * "description":"Description" * } * } * * @type Object */ themes : {}, /** * Theme id to initial theme * * @type String|Null */ theme : null, /** * Maximum value of error dialog open at the same time * * @type Number */ maxErrorDialogs : 5, /** * Additional css class for filemanager node. * * @type String */ cssClass : '', /** * Active commands list. '*' means all of the commands that have been load. * If some required commands will be missed here, elFinder will add its * * @type Array */ commands : ['*'], // Available commands list //commands : [ // 'archive', 'back', 'chmod', 'colwidth', 'copy', 'cut', 'download', 'duplicate', 'edit', 'extract', // 'forward', 'fullscreen', 'getfile', 'help', 'home', 'info', 'mkdir', 'mkfile', 'netmount', 'netunmount', // 'open', 'opendir', 'paste', 'places', 'quicklook', 'reload', 'rename', 'resize', 'restore', 'rm', // 'search', 'sort', 'up', 'upload', 'view', 'zipdl' //], /** * Commands options. * * @type Object **/ commandsOptions : { // // configure shortcuts of any command // // add `shortcuts` property into each command // any_command_name : { // shortcuts : [] // for disable this command's shortcuts // }, // any_command_name : { // shortcuts : function(fm, shortcuts) { // // for add `CTRL + E` for this command action // shortcuts[0]['pattern'] += ' ctrl+e'; // return shortcuts; // } // }, // any_command_name : { // shortcuts : function(fm, shortcuts) { // // for full customize of this command's shortcuts // return [ { pattern: 'ctrl+e ctrl+down numpad_enter' + (fm.OS != 'mac' && ' enter') } ]; // } // }, // "getfile" command options. getfile : { onlyURL : false, // allow to return multiple files info multiple : false, // allow to return filers info folders : false, // action after callback (""/"close"/"destroy") oncomplete : '', // action when callback is fail (""/"close"/"destroy") onerror : '', // get path before callback call getPath : true, // get image sizes before callback call getImgSize : false }, open : { // HTTP method that request to the connector when item URL is not valid URL. // If you set to "get" will be displayed request parameter in the browser's location field // so if you want to conceal its parameters should be given "post". // Nevertheless, please specify "get" if you want to enable the partial request by HTTP Range header. method : 'post', // Where to open into : 'window'(default), 'tab' or 'tabs' // 'tabs' opens in each tabs into : 'window', // Default command list of action when select file // String value that is 'Command Name' or 'Command Name1/CommandName2...' selectAction : 'open' }, opennew : { // URL of to open elFinder manager // Default '' : Origin URL url : '', // Use search query of origin URL useOriginQuery : true }, // "upload" command options. upload : { // Open elFinder upload dialog: 'button' OR Open system OS upload dialog: 'uploadbutton' ui : 'button' }, // "download" command options. download : { // max request to download files when zipdl disabled maxRequests : 10, // minimum count of files to use zipdl minFilesZipdl : 2 }, // "quicklook" command options. quicklook : { autoplay : true, width : 450, height : 300, // ControlsList of HTML5 audio/video preview // see https://googlechrome.github.io/samples/media/controlslist.html mediaControlsList : '', // e.g. 'nodownload nofullscreen noremoteplayback' // Show toolbar of PDF preview (with tag) pdfToolbar : true, // Maximum lines to preview at initial textInitialLines : 100, // Maximum lines to preview by prettify prettifyMaxLines : 300, // quicklook window must be contained in elFinder node on window open (true|false) contain : false, // preview window into NavDock (0 : undocked | 1 : docked(show) | 2 : docked(hide)) docked : 0, // Docked preview height ('auto' or Number of pixel) 'auto' is setted to the Navbar width dockHeight : 'auto', // media auto play when docked dockAutoplay : false, // Google Maps API key (Require Maps JavaScript API) googleMapsApiKey : '', // Google Maps API Options googleMapsOpts : { maps : {}, kml : { suppressInfoWindows : false, preserveViewport : false } }, // ViewerJS (https://viewerjs.org/) Options // To enable this you need to place ViewerJS on the same server as elFinder and specify that URL in `url`. viewerjs : { url: '', // Example '/ViewerJS/index.html' mimes: ['application/pdf', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation'], pdfNative: true // Use Native PDF Viewer first }, // MIME types to CAD-Files and 3D-Models online viewer on sharecad.org // Example ['image/vnd.dwg', 'image/vnd.dxf', 'model/vnd.dwf', 'application/vnd.hp-hpgl', 'application/plt', 'application/step', 'model/iges', 'application/vnd.ms-pki.stl', 'application/sat', 'image/cgm', 'application/x-msmetafile'] sharecadMimes : [], // MIME types to use Google Docs online viewer // Example ['application/pdf', 'image/tiff', 'application/vnd.ms-office', 'application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/postscript', 'application/rtf'] googleDocsMimes : [], // MIME types to use Microsoft Office Online viewer // Example ['application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation'] // These MIME types override "googleDocsMimes" officeOnlineMimes : [], // File size threshold when using the dim command for obtain the image size necessary to image preview getDimThreshold : '200K', // Max filesize to show filenames of the zip/tar/gzip/bzip file unzipMaxSize : '50M', // MIME-Type regular expression that does not check empty files mimeRegexNotEmptyCheck : /^application\/vnd\.google-apps\./ }, // "edit" command options. edit : { // dialog width, integer(px) or integer+'%' (example: 650, '80%' ...) dialogWidth : void(0), // dialog height, integer(px) or integer+'%' (example: 650, '80%' ...) dialogHeight : void(0), // list of allowed mimetypes to edit of text files // if empty - any text files can be edited mimes : [], // MIME-types to unselected as default of "File types to enable with "New file"" in preferences mkfileHideMimes : [], // MIME-types of text file to make empty file makeTextMimes : ['text/plain', 'text/css', 'text/html'], // Use the editor stored in the browser // This value allowd overwrite with user preferences useStoredEditor : false, // Open the maximized editor window // This value allowd overwrite with user preferences editorMaximized : false, // edit files in wysisyg's editors : [ // { // /** // * editor info // * @type Object // */ // info : { name: 'Editor Name' }, // /** // * files mimetypes allowed to edit in current wysisyg // * @type Array // */ // mimes : ['text/html'], // /** // * HTML element for editing area (optional for text editor) // * @type String // */ // html : '', // /** // * Initialize editing area node (optional for text editor) // * // * @param String dialog DOM id // * @param Object target file object // * @param String target file content (text or Data URI Scheme(binary file)) // * @param Object elFinder instance // * @type Function // */ // init : function(id, file, content, fm) { // jQuery(this).attr('id', id + '-text').val(content); // }, // /** // * Get edited contents (optional for text editor) // * @type Function // */ // getContent : function() { // return jQuery(this).val(); // }, // /** // * Called when "edit" dialog loaded. // * Place to init wysisyg. // * Can return wysisyg instance // * // * @param DOMElement textarea node // * @return Object editor instance|jQuery.Deferred(return instance on resolve()) // */ // load : function(textarea) { }, // /** // * Called before "edit" dialog closed. // * Place to destroy wysisyg instance. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @return void // */ // close : function(textarea, instance) { }, // /** // * Called before file content send to backend. // * Place to update textarea content if needed. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @return void // */ // save : function(textarea, instance) {}, // /** // * Called after load() or save(). // * Set focus to wysisyg editor. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @return void // */ // focus : function(textarea, instance) {} // /** // * Called after dialog resized.. // * // * @param DOMElement textarea node // * @param Object wysisyg instance (if was returned by "load" callback) // * @param Object resize event object // * @param Object data object // * @return void // */ // resize : function(textarea, instance, event, data) {} // // } ], // Character encodings of select box encodings : ['Big5', 'Big5-HKSCS', 'Cp437', 'Cp737', 'Cp775', 'Cp850', 'Cp852', 'Cp855', 'Cp857', 'Cp858', 'Cp862', 'Cp866', 'Cp874', 'EUC-CN', 'EUC-JP', 'EUC-KR', 'GB18030', 'ISO-2022-CN', 'ISO-2022-JP', 'ISO-2022-KR', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-13', 'ISO-8859-15', 'KOI8-R', 'KOI8-U', 'Shift-JIS', 'Windows-1250', 'Windows-1251', 'Windows-1252', 'Windows-1253', 'Windows-1254', 'Windows-1257'], // options for extra editors extraOptions : { // upload command options uploadOpts : {}, // TUI Image Editor's options tuiImgEditOpts : { // Path prefix of icon-a.svg, icon-b.svg, icon-c.svg and icon-d.svg in the Theme. // `iconsPath` MUST follow the same origin policy. iconsPath : void(0), // default is "./img/tui-" // Theme object theme : {} }, // Pixo image editor constructor options - https://pixoeditor.com/ // Require 'apikey' to enable it pixo: { apikey: '' }, // Browsing manager URL for CKEditor, TinyMCE // Uses self location with the empty value or not defined. //managerUrl : 'elfinder.html' managerUrl : null, // CKEditor editor options ckeditor: {}, // CKEditor 5 editor options ckeditor5: { // builds mode - 'classic', 'inline', 'balloon', 'balloon-block' or 'decoupled-document' mode: 'decoupled-document' }, // TinyMCE editor options tinymce : {}, // Setting for Online-Convert.com onlineConvert : { maxSize : 100, // (MB) Max 100MB on free account showLink : true // It must be enabled with free account } } }, fullscreen : { // fullscreen mode 'screen'(When the browser supports it) or 'window' mode: 'screen' // 'screen' or 'window' }, search : { // Incremental search from the current view incsearch : { enable : true, // is enable true or false minlen : 1, // minimum number of characters wait : 500 // wait milliseconds }, // Additional search types searchTypes : { // "SearchMime" is implemented in default SearchMime : { // The key is search type that send to the connector name : 'btnMime', // Button text to be processed in i18n() title : 'searchMime',// Button title to be processed in i18n() incsearch : 'mime' // Incremental search target filed name of the file object // Or Callable function /* incsearch function example function(queryObject, cwdHashes, elFinderInstance) { var q = queryObject.val; var regex = queryObject.regex; var matchedHashes = jQuery.grep(cwdHashes, function(hash) { var file = elFinderInstance.file(hash); return (file && file.mime && file.mime.match(regex))? true : false; }); return matchedHashes; } */ } } }, // "info" command options. info : { // If the URL of the Directory is null, // it is assumed that the link destination is a URL to open the folder in elFinder nullUrlDirLinkSelf : true, // Information items to be hidden by default // These name are 'size', 'aliasfor', 'path', 'link', 'dim', 'modify', 'perms', 'locked', 'owner', 'group', 'perm' and your custom info items label hideItems : [], // Maximum file size (byte) to get file contents hash (md5, sha256 ...) showHashMaxsize : 104857600, // 100 MB // Array of hash algorisms to show on info dialog // These name are 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128' and 'shake256' showHashAlgorisms : ['md5', 'sha256'], // Options for fm.getContentsHashes() showHashOpts : { shake128len : 256, shake256len : 512 }, custom : { // /** // * Example of custom info `desc` // */ // desc : { // /** // * Lable (require) // * It is filtered by the `fm.i18n()` // * // * @type String // */ // label : 'Description', // // /** // * Template (require) // * `{id}` is replaced in dialog.id // * // * @type String // */ // tpl : '
      ', // // /** // * Restricts to mimetypes (optional) // * Exact match or category match // * // * @type Array // */ // mimes : ['text', 'image/jpeg', 'directory'], // // /** // * Restricts to file.hash (optional) // * // * @ type Regex // */ // hashRegex : /^l\d+_/, // // /** // * Request that asks for the description and sets the field (optional) // * // * @type Function // */ // action : function(file, fm, dialog) { // fm.request({ // data : { cmd : 'desc', target: file.hash }, // preventDefault: true, // }) // .fail(function() { // dialog.find('div.elfinder-info-desc').html(fm.i18n('unknown')); // }) // .done(function(data) { // dialog.find('div.elfinder-info-desc').html(data.desc); // }); // } // } } }, mkdir: { // Enable automatic switching function ["New Folder" / "Into New Folder"] of toolbar buttton intoNewFolderToolbtn: false }, resize: { // defalt status of snap to 8px grid of the jpeg image ("enable" or "disable") grid8px : 'disable', // Preset size array [width, height] presetSize : [[320, 240], [400, 400], [640, 480], [800,600]], // File size (bytes) threshold when using the `dim` command for obtain the image size necessary to start editing getDimThreshold : 204800, // File size (bytes) to request to get substitute image (400px) with the `dim` command dimSubImgSize : 307200 }, rm: { // If trash is valid, items moves immediately to the trash holder without confirm. quickTrash : true, // Maximum wait seconds when checking the number of items to into the trash infoCheckWait : 10, // Maximum number of items that can be placed into the Trash at one time toTrashMaxItems : 1000 }, paste : { moveConfirm : false // Display confirmation dialog when moving items }, help : { // Tabs to show view : ['about', 'shortcuts', 'help', 'integrations', 'debug'], // HTML source URL of the heip tab helpSource : '' }, preference : { // dialog width width: 600, // dialog height height: 400, // tabs setting see preference.js : build() categories: null, // preference setting see preference.js : build() prefs: null, // language setting see preference.js : build() langs: null, // Command list of action when select file // Array value are 'Command Name' or 'Command Name1/CommandName2...' selectActions : ['open', 'edit/download', 'resize/edit/download', 'download', 'quicklook'] } }, /** * Disabled commands relationship * * @type Object */ disabledCmdsRels : { 'get' : ['edit'], 'rm' : ['cut', 'empty'], 'file&url=' : ['download', 'zipdl'] // file command and volume options url is empty }, /** * Callback for prepare boot up * * - The this object in the function is an elFinder node * - The first parameter is elFinder Instance * - The second parameter is an object of other parameters * For now it can use `dfrdsBeforeBootup` Array * * @type Function * @default null * @return void */ bootCallback : null, /** * Callback for "getfile" commands. * Required to use elFinder with WYSIWYG editors etc.. * * @type Function * @default null (command not active) */ getFileCallback : null, /** * Default directory view. icons/list * * @type String * @default "icons" */ defaultView : 'icons', /** * Hash of default directory path to open * * NOTE: This setting will be disabled if the target folder is specified in location.hash. * * If you want to find the hash in Javascript * can be obtained with the following code. (In the case of a standard hashing method) * * var volumeId = 'l1_'; // volume id * var path = 'path/to/target'; // without root path * //var path = 'path\\to\\target'; // use \ on windows server * var hash = volumeId + btoa(path).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '.').replace(/\.+$/, ''); * * @type String * @default "" */ startPathHash : '', /** * Emit a sound when a file is deleted * Sounds are in sounds/ folder * * @type Boolean * @default true */ sound : true, /** * UI plugins to load. * Current dir ui and dialogs loads always. * Here set not required plugins as folders tree/toolbar/statusbar etc. * * @type Array * @default ['toolbar', 'places', 'tree', 'path', 'stat'] * @full ['toolbar', 'places', 'tree', 'path', 'stat'] */ ui : ['toolbar', 'tree', 'path', 'stat'], /** * Some UI plugins options. * @type Object */ uiOptions : { // toolbar configuration toolbar : [ ['home', 'back', 'forward', 'up', 'reload'], ['netmount'], ['mkdir', 'mkfile', 'upload'], ['open', 'download', 'getfile'], ['undo', 'redo'], ['copy', 'cut', 'paste', 'rm', 'empty', 'hide'], ['duplicate', 'rename', 'edit', 'resize', 'chmod'], ['selectall', 'selectnone', 'selectinvert'], ['quicklook', 'info'], ['extract', 'archive'], ['search'], ['view', 'sort'], ['fullscreen'] ], // toolbar extra options toolbarExtra : { // also displays the text label on the button (true / false / 'none') displayTextLabel: false, // Exclude `displayTextLabel` setting UA type labelExcludeUA: ['Mobile'], // auto hide on initial open autoHideUA: ['Mobile'], // Initial setting value of hide button in toolbar setting defaultHides: ['home', 'reload'], // show Preference button ('none', 'auto', 'always') // If you do not include 'preference' in the context menu you should specify 'auto' or 'always' showPreferenceButton: 'none', // show Preference button into contextmenu of the toolbar (true / false) preferenceInContextmenu: false }, // directories tree options tree : { // set path info to attr title attrTitle : true, // expand current root on init openRootOnLoad : true, // expand current work directory on open openCwdOnOpen : true, // auto loading current directory parents and do expand their node. syncTree : true, // Maximum number of display of each child trees // The tree of directories with children exceeding this number will be split subTreeMax : 100, // Numbar of max connctions of subdirs request subdirsMaxConn : 2, // Number of max simultaneous processing directory of subdirs subdirsAtOnce : 5, // Durations of each animations durations : { slideUpDown : 'fast', autoScroll : 'fast' } // , // /** // * Add CSS class name to navbar directories (optional) // * see: https://github.com/Studio-42/elFinder/pull/1061, // * https://github.com/Studio-42/elFinder/issues/1231 // * // * @type Function // */ // getClass: function(dir) { // // e.g. This adds the directory's name (lowercase) with prefix as a CSS class // return 'elfinder-tree-' + dir.name.replace(/[ "]/g, '').toLowerCase(); // } }, // navbar options navbar : { minWidth : 150, maxWidth : 500, // auto hide on initial open autoHideUA: [] // e.g. ['Mobile'] }, navdock : { // disabled navdock ui disabled : false, // percentage of initial maximum height to work zone initMaxHeight : '50%', // percentage of maximum height to work zone by user resize action maxHeight : '90%' }, cwd : { // display parent folder with ".." name :) oldSchool : false, // fm.UA types array to show item select checkboxes e.g. ['All'] or ['Mobile'] etc. default: ['Touch'] showSelectCheckboxUA : ['Touch'], // Enable dragout by dragstart with Alt key or Shift key metakeyDragout : true, // file info columns displayed listView : { // name is always displayed, cols are ordered // e.g. ['perm', 'date', 'size', 'kind', 'owner', 'group', 'mode'] // mode: 'mode'(by `fileModeStyle` setting), 'modestr'(rwxr-xr-x) , 'modeoct'(755), 'modeboth'(rwxr-xr-x (755)) // 'owner', 'group' and 'mode', It's necessary set volume driver option "statOwner" to `true` // for custom, characters that can be used in the name is `a-z0-9_` columns : ['perm', 'date', 'size', 'kind'], // override this if you want custom columns name // example // columnsCustomName : { // date : 'Last modification', // kind : 'Mime type' // } columnsCustomName : {}, // fixed list header colmun fixedHeader : true }, // icons view setting iconsView : { // default icon size (0-3 in default CSS (cwd.css - elfinder-cwd-size[number])) size: 0, // number of maximum size (3 in default CSS (cwd.css - elfinder-cwd-size[number])) // uses in preference.js sizeMax: 3, // Name of each size sizeNames: { 0: 'viewSmall', 1: 'viewMedium', 2: 'viewLarge', 3: 'viewExtraLarge' } }, // /** // * Add CSS class name to cwd directories (optional) // * see: https://github.com/Studio-42/elFinder/pull/1061, // * https://github.com/Studio-42/elFinder/issues/1231 // * // * @type Function // */ // , // getClass: function(file) { // // e.g. This adds the directory's name (lowercase) with prefix as a CSS class // return 'elfinder-cwd-' + file.name.replace(/[ "]/g, '').toLowerCase(); //} //, //// Template placeholders replacement rules for overwrite. see ui/cwd.js replacement //replacement : { // tooltip : function(f, fm) { // var list = fm.viewType == 'list', // current view type // query = fm.searchStatus.state == 2, // is in search results // title = fm.formatDate(f) + (f.size > 0 ? ' ('+fm.formatSize(f.size)+')' : ''), // info = ''; // if (query && f.path) { // info = fm.escape(f.path.replace(/\/[^\/]*$/, '')); // } else { // info = f.tooltip? fm.escape(f.tooltip).replace(/\r/g, ' ') : ''; // } // if (list) { // info += (info? ' ' : '') + fm.escape(f.name); // } // return info? info + ' ' + title : title; // } //} }, path : { // Move to head of work zone without UI navbar toWorkzoneWithoutNavbar : true }, dialog : { // Enable to auto focusing on mouse over in the target form element focusOnMouseOver : true }, toast : { animate : { // to show showMethod: 'fadeIn', // fadeIn, slideDown, and show are built into jQuery showDuration: 300, // milliseconds showEasing: 'swing', // swing and linear are built into jQuery // timeout to hide timeOut: 3000, // to hide hideMethod: 'fadeOut', hideDuration: 1500, hideEasing: 'swing' } } }, /** * MIME regex of send HTTP header "Content-Disposition: inline" or allow preview in quicklook * This option will overwrite by connector configuration * * @type String * @default '^(?:(?:image|video|audio)|text/plain|application/pdf$)' * @example * dispInlineRegex : '.', // is allow inline of all of MIME types * dispInlineRegex : '$^', // is not allow inline of all of MIME types */ dispInlineRegex : '^(?:(?:image|video|audio)|application/(?:x-mpegURL|dash\+xml)|(?:text/plain|application/pdf)$)', /** * Display only required files by types * * @type Array * @default [] * @example * onlyMimes : ["image"] - display all images * onlyMimes : ["image/png", "application/x-shockwave-flash"] - display png and flash */ onlyMimes : [], /** * Custom files sort rules. * All default rules (name/size/kind/date/perm/mode/owner/group) set in elFinder._sortRules * * @type {Object} * @example * sortRules : { * name : function(file1, file2) { return file1.name.toLowerCase().localeCompare(file2.name.toLowerCase()); } * } */ sortRules : {}, /** * Default sort type. * * @type {String} */ sortType : 'name', /** * Default sort order. * * @type {String} * @default "asc" */ sortOrder : 'asc', /** * Display folders first? * * @type {Boolean} * @default true */ sortStickFolders : true, /** * Sort also applies to the treeview (null: disable this feature) * * @type Boolean|null * @default false */ sortAlsoTreeview : false, /** * If true - elFinder will formating dates itself, * otherwise - backend date will be used. * * @type Boolean */ clientFormatDate : true, /** * Show UTC dates. * Required set clientFormatDate to true * * @type Boolean */ UTCDate : false, /** * File modification datetime format. * Value from selected language data is used by default. * Set format here to overwrite it. * * @type String * @default "" */ dateFormat : '', /** * File modification datetime format in form "Yesterday 12:23:01". * Value from selected language data is used by default. * Set format here to overwrite it. * Use $1 for "Today"/"Yesterday" placeholder * * @type String * @default "" * @example "$1 H:m:i" */ fancyDateFormat : '', /** * Style of file mode at cwd-list, info dialog * 'string' (ex. rwxr-xr-x) or 'octal' (ex. 755) or 'both' (ex. rwxr-xr-x (755)) * * @type {String} * @default 'both' */ fileModeStyle : 'both', /** * elFinder width * * @type String|Number * @default "auto" */ width : 'auto', /** * elFinder node height * Number: pixcel or String: Number + "%" * * @type Number | String * @default 400 */ height : 400, /** * Do not resize the elFinder node itself on resize parent node * Specify `true` when controlling with CSS such as Flexbox * * @type Boolean * @default false */ noResizeBySelf : false, /** * Base node object or selector * Element which is the reference of the height percentage * * @type Object|String * @default null | jQuery(window) (if height is percentage) **/ heightBase : null, /** * Make elFinder resizable if jquery ui resizable available * * @type Boolean * @default true */ resizable : true, /** * Timeout before open notifications dialogs * * @type Number * @default 500 (.5 sec) */ notifyDelay : 500, /** * Position CSS, Width of notifications dialogs * * @type Object * @default {position: {}, width : null} - Apply CSS definition * position: CSS object | null (null: position center & middle) */ notifyDialog : {position : {}, width : null, canClose : false, hiddens : ['open']}, /** * Dialog contained in the elFinder node * * @type Boolean * @default false */ dialogContained : false, /** * Allow shortcuts * * @type Boolean * @default true */ allowShortcuts : true, /** * Remeber last opened dir to open it after reload or in next session * * @type Boolean * @default true */ rememberLastDir : true, /** * Clear historys(elFinder) on reload(not browser) function * Historys was cleared on Reload function on elFinder 2.0 (value is true) * * @type Boolean * @default false */ reloadClearHistory : false, /** * Use browser native history with supported browsers * * @type Boolean * @default true */ useBrowserHistory : true, /** * Lazy load config. * How many files display at once? * * @type Number * @default 50 */ showFiles : 50, /** * Lazy load config. * Distance in px to cwd bottom edge to start display files * * @type Number * @default 50 */ showThreshold : 50, /** * Additional rule to valid new file name. * By default not allowed empty names or '..' * This setting does not have a sense of security. * * @type false|RegExp|function * @default false * @example * disable names with spaces: * validName : /^[^\s]+$/, */ validName : false, /** * Additional rule to filtering for browsing. * This setting does not have a sense of security. * * The object `this` is elFinder instance object in this function * * @type false|RegExp|function * @default false * @example * show only png and jpg files: * fileFilter : /.*\.(png|jpg)$/i, * * show only image type files: * fileFilter : function(file) { return file.mime && file.mime.match(/^image\//i); }, */ fileFilter : false, /** * Backup name suffix. * * @type String * @default "~" */ backupSuffix : '~', /** * Sync content interval * * @type Number * @default 0 (do not sync) */ sync : 0, /** * Sync start on load if sync value >= 1000 * * @type Bool * @default true */ syncStart : true, /** * How many thumbnails create in one request * * @type Number * @default 5 */ loadTmbs : 5, /** * Cookie option for browsersdoes not suppot localStorage * * @type Object */ cookie : { expires : 30, domain : '', path : '/', secure : false, samesite : 'lax' }, /** * Contextmenu config * * @type Object */ contextmenu : { // navbarfolder menu navbar : ['open', 'opennew', 'download', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', '|', 'archive', '|', 'places', 'info', 'chmod', 'netunmount'], // current directory menu cwd : ['undo', 'redo', '|', 'back', 'up', 'reload', '|', 'upload', 'mkdir', 'mkfile', 'paste', '|', 'empty', 'hide', '|', 'view', 'sort', 'selectall', 'colwidth', '|', 'places', 'info', 'chmod', 'netunmount', '|', 'fullscreen'], // current directory file menu files : ['getfile', '|' ,'open', 'opennew', 'download', 'opendir', 'quicklook', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', 'edit', 'resize', '|', 'archive', 'extract', '|', 'selectall', 'selectinvert', '|', 'places', 'info', 'chmod', 'netunmount'] }, /** * elFinder node enable always * This value will set to `true` if has elFinder node only * * @type Bool * @default false */ enableAlways : false, /** * elFinder node enable by mouse over * * @type Bool * @default true */ enableByMouseOver : true, /** * Show window close confirm dialog * Value is which state to show * 'hasNotifyDialog', 'editingFile', 'hasSelectedItem' and 'hasClipboardData' * * @type Array * @default ['hasNotifyDialog', 'editingFile'] */ windowCloseConfirm : ['hasNotifyDialog', 'editingFile'], /** * Function decoding 'raw' string converted to unicode * It is used instead of fm.decodeRawString(str) * * @type Null|Function */ rawStringDecoder : typeof Encoding === 'object' && jQuery.isFunction(Encoding.convert)? function(str) { return Encoding.convert(str, { to: 'UNICODE', type: 'string' }); } : null, /** * Debug config * * @type Array|String('auto')|Boolean(true|false) */ debug : ['error', 'warning', 'event-destroy'], /** * Show toast messeges of backend warning (if found data `debug.backendErrors` in backend results) * * @type Boolean|Object (toast options) */ toastBackendWarn : true }; PK Z? js/jquery.dialogelfinder.jsnuW+A/** * @class dialogelfinder - open elFinder in dialog window * * @param Object elFinder options with dialog options * @example * jQuery(selector).dialogelfinder({ * // some elfinder options * title : 'My files', // dialog title, default = "Files" * width : 850, // dialog width, default 840 * autoOpen : false, // if false - dialog will not be opened after init, default = true * destroyOnClose : true // destroy elFinder on close dialog, default = false * }) * @author Dmitry (dio) Levashov **/ jQuery.fn.dialogelfinder = function(opts, opts2) { var position = 'elfinderPosition', destroy = 'elfinderDestroyOnClose', node, pos; if (jQuery.isPlainObject(opts)) { this.not('.elfinder').each(function() { opts.handlers = opts.handlers || {}; var node = jQuery(this), doc = jQuery(document), toolbar = jQuery('
      '+(opts.title || 'Files')+'
      '), button = jQuery(' ') .appendTo(toolbar) .on('click', function(e) { e.preventDefault(); node.dialogelfinder('close'); }), init = opts.handlers.init, elfinder; opts.handlers.init = function(e, fm) { node.prepend(toolbar); init && init(e, fm); }; elfinder = node.addClass('elfinder dialogelfinder touch-punch') .css('position', 'absolute') .hide() .appendTo('body') .draggable({ handle : '.dialogelfinder-drag', containment : 'window', stop : function() { node.trigger('resize'); elfinder.trigger('resize'); } }) .elfinder(opts, opts2) .elfinder('instance'); elfinder.reloadCallback = function(o, o2) { elfinder.destroy(); o.handlers.init = init; node.dialogelfinder(o, o2).dialogelfinder('open'); }; node.width(parseInt(node.width()) || 840) // fix width if set to "auto" .data(destroy, !!opts.destroyOnClose) .find('.elfinder-toolbar').removeClass('ui-corner-top'); opts.position && node.data(position, opts.position); opts.autoOpen !== false && jQuery(this).dialogelfinder('open'); }); } else { if (opts === 'open') { node = jQuery(this); pos = node.data(position) || { top : parseInt(jQuery(document).scrollTop() + (jQuery(window).height() < node.height() ? 2 : (jQuery(window).height() - node.height())/2)), left : parseInt(jQuery(document).scrollLeft() + (jQuery(window).width() < node.width() ? 2 : (jQuery(window).width() - node.width())/2)) }; if (node.is(':hidden')) { node.addClass('ui-front').css(pos).show().trigger('resize'); setTimeout(function() { // fix resize icon position and make elfinder active node.trigger('resize').trigger('mousedown'); }, 200); } } else if (opts === 'close') { node = jQuery(this).removeClass('ui-front'); if (node.is(':visible')) { !!node.data(destroy) ? node.elfinder('destroy').remove() : node.elfinder('close'); } } else if (opts === 'instance') { return jQuery(this).getElFinder(); } } return this; }; PK Z?}({{js/ui/button.jsnuW+A/** * @class elFinder toolbar button widget. * If command has variants - create menu * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfinderbutton = function(cmd) { "use strict"; return this.each(function() { var c = 'class', fm = cmd.fm, disabled = fm.res(c, 'disabled'), active = fm.res(c, 'active'), hover = fm.res(c, 'hover'), item = 'elfinder-button-menu-item', selected = 'elfinder-button-menu-item-selected', menu, text = jQuery(''+cmd.title+''), prvCname = cmd.className? cmd.className : cmd.name, button = jQuery(this).addClass('ui-state-default elfinder-button tool-op-'+prvCname) .attr('title', cmd.title) .append('', text) .on('mouseenter mouseleave', function(e) { !button.hasClass(disabled) && button[e.type == 'mouseleave' ? 'removeClass' : 'addClass'](hover);}) .on('click', function(e) { if (!button.hasClass(disabled)) { if (menu && cmd.variants.length >= 1) { // close other menus menu.is(':hidden') && fm.getUI().click(); e.stopPropagation(); menu.css(getMenuOffset()).slideToggle({ duration: 100, done: function(e) { fm[menu.is(':visible')? 'toFront' : 'toHide'](menu); } }); } else { fm.exec(cmd.name, getSelected(), {_userAction: true, _currentType: 'toolbar', _currentNode: button }); } } }), hideMenu = function() { fm.toHide(menu); }, getMenuOffset = function() { var fmNode = fm.getUI(), baseOffset = fmNode.offset(), buttonOffset = button.offset(); return { top : buttonOffset.top - baseOffset.top, left : buttonOffset.left - baseOffset.left, maxHeight : fmNode.height() - 40 }; }, getSelected = function() { var sel = fm.selected(), cwd; if (!sel.length) { if (cwd = fm.cwd()) { sel = [ fm.cwd().hash ]; } else { sel = void(0); } } return sel; }, tm; text.hide(); // set self button object to cmd object cmd.button = button; // if command has variants create menu if (Array.isArray(cmd.variants)) { button.addClass('elfinder-menubutton'); menu = jQuery('
      ') .hide() .appendTo(fm.getUI()) .on('mouseenter mouseleave', '.'+item, function() { jQuery(this).toggleClass(hover); }) .on('click', '.'+item, function(e) { var opts = jQuery(this).data('value'); e.preventDefault(); e.stopPropagation(); button.removeClass(hover); fm.toHide(menu); if (typeof opts === 'undefined') { opts = {}; } if (typeof opts === 'object') { opts._userAction = true; } fm.exec(cmd.name, getSelected(), opts); }) .on('close', hideMenu); fm.bind('disable select', hideMenu).getUI().on('click', hideMenu); cmd.change(function() { menu.html(''); jQuery.each(cmd.variants, function(i, variant) { menu.append(jQuery('
      '+variant[1]+'
      ').data('value', variant[0]).addClass(variant[0] == cmd.value ? selected : '')); }); }); } cmd.change(function() { var cName; tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { if (cmd.disabled()) { button.removeClass(active+' '+hover).addClass(disabled); } else { button.removeClass(disabled); button[cmd.active() ? 'addClass' : 'removeClass'](active); } if (cmd.syncTitleOnChange) { cName = cmd.className? cmd.className : cmd.name; if (prvCname !== cName) { button.children('.elfinder-button-icon').removeClass('elfinder-button-icon-' + prvCname).addClass('elfinder-button-icon-' + cName); if (menu) { menu.removeClass('elfinder-button-' + prvCname + '-menu').addClass('elfinder-button-' + cName + '-menu'); } prvCname = cName; } text.html(cmd.title); button.attr('title', cmd.title); } }); }) .change(); }); }; PK ZV}//js/ui/panel.jsnuW+AjQuery.fn.elfinderpanel = function(fm) { "use strict"; return this.each(function() { var panel = jQuery(this).addClass('elfinder-panel ui-state-default ui-corner-all'), margin = 'margin-'+(fm.direction == 'ltr' ? 'left' : 'right'); fm.one('load', function(e) { var navbar = fm.getUI('navbar'); panel.css(margin, parseInt(navbar.outerWidth(true))); navbar.on('resize', function(e) { e.preventDefault(); e.stopPropagation(); panel.is(':visible') && panel.css(margin, parseInt(navbar.outerWidth(true))); }); }); }); }; PK Zzzjs/ui/fullscreenbutton.jsnuW+A/** * @class elFinder toolbar button to switch full scrren mode. * * @author Naoki Sawada **/ jQuery.fn.elfinderfullscreenbutton = function(cmd) { "use strict"; return this.each(function() { var button = jQuery(this).elfinderbutton(cmd), icon = button.children('.elfinder-button-icon'), tm; cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var fullscreen = cmd.value; icon.addClass('elfinder-button-icon-fullscreen').toggleClass('elfinder-button-icon-unfullscreen', fullscreen); cmd.className = fullscreen? 'unfullscreen' : ''; }); }); }); }; PK ZqUUjs/ui/contextmenu.jsnuW+A/** * @class elFinder contextmenu * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfindercontextmenu = function(fm) { "use strict"; return this.each(function() { var self = jQuery(this), cmItem = 'elfinder-contextmenu-item', smItem = 'elfinder-contextsubmenu-item', exIcon = 'elfinder-contextmenu-extra-icon', cHover = fm.res('class', 'hover'), dragOpt = { distance: 8, start: function() { menu.data('drag', true).data('touching') && menu.find('.'+cHover).removeClass(cHover); }, stop: function() { menu.data('draged', true).removeData('drag'); } }, menu = jQuery(this).addClass('touch-punch ui-helper-reset ui-front ui-widget ui-state-default ui-corner-all elfinder-contextmenu elfinder-contextmenu-'+fm.direction) .hide() .on('touchstart', function(e) { menu.data('touching', true).children().removeClass(cHover); }) .on('touchend', function(e) { menu.removeData('touching'); }) .on('mouseenter mouseleave', '.'+cmItem, function(e) { jQuery(this).toggleClass(cHover, (e.type === 'mouseenter' || (! menu.data('draged') && menu.data('submenuKeep'))? true : false)); if (menu.data('draged') && menu.data('submenuKeep')) { menu.find('.elfinder-contextmenu-sub:visible').parent().addClass(cHover); } }) .on('mouseenter mouseleave', '.'+exIcon, function(e) { jQuery(this).parent().toggleClass(cHover, e.type === 'mouseleave'); }) .on('mouseenter mouseleave', '.'+cmItem+',.'+smItem, function(e) { var setIndex = function(target, sub) { jQuery.each(sub? subnodes : nodes, function(i, n) { if (target[0] === n) { (sub? subnodes : nodes)._cur = i; if (sub) { subselected = target; } else { selected = target; } return false; } }); }; if (e.originalEvent) { var target = jQuery(this), unHover = function() { if (selected && !selected.children('div.elfinder-contextmenu-sub:visible').length) { selected.removeClass(cHover); } }; if (e.type === 'mouseenter') { // mouseenter if (target.hasClass(smItem)) { // submenu if (subselected) { subselected.removeClass(cHover); } if (selected) { subnodes = selected.find('div.'+smItem); } setIndex(target, true); } else { // menu unHover(); setIndex(target); } } else { // mouseleave if (target.hasClass(smItem)) { //submenu subselected = null; subnodes = null; } else { // menu unHover(); (function(sel) { setTimeout(function() { if (sel === selected) { selected = null; } }, 250); })(selected); } } } }) .on('contextmenu', function(){return false;}) .on('mouseup', function() { setTimeout(function() { menu.removeData('draged'); }, 100); }) .draggable(dragOpt), ltr = fm.direction === 'ltr', subpos = ltr? 'left' : 'right', types = Object.assign({}, fm.options.contextmenu), tpl = '
      {label}
      ', item = function(label, icon, callback, opts) { var className = '', style = '', iconClass = '', v, pos; if (opts) { if (opts.className) { className = ' ' + opts.className; } if (opts.iconClass) { iconClass = opts.iconClass; icon = ''; } if (opts.iconImg) { v = opts.iconImg.split(/ +/); pos = v[1] && v[2]? fm.escape(v[1] + 'px ' + v[2] + 'px') : ''; style = ' style="background:url(\''+fm.escape(v[0])+'\') '+(pos? pos : '0 0')+' no-repeat;'+(pos? '' : 'posbackground-size:contain;')+'"'; } } return jQuery(tpl.replace('{icon}', icon ? 'elfinder-button-icon-'+icon : (iconClass? iconClass : '')) .replace('{label}', label) .replace('{style}', style) .replace('{className}', className)) .on('click', function(e) { e.stopPropagation(); e.preventDefault(); callback(); }); }, urlIcon = function(iconUrl) { var v = iconUrl.split(/ +/), pos = v[1] && v[2]? (v[1] + 'px ' + v[2] + 'px') : ''; return { backgroundImage: 'url("'+v[0]+'")', backgroundRepeat: 'no-repeat', backgroundPosition: pos? pos : '', backgroundSize: pos? '' : 'contain' }; }, base, cwd, nodes, selected, subnodes, subselected, autoSyncStop, subHoverTm, autoToggle = function() { var evTouchStart = 'touchstart.contextmenuAutoToggle'; menu.data('hideTm') && clearTimeout(menu.data('hideTm')); if (menu.is(':visible')) { menu.on('touchstart', function(e) { if (e.originalEvent.touches.length > 1) { return; } menu.stop(); fm.toFront(menu); menu.data('hideTm') && clearTimeout(menu.data('hideTm')); }) .data('hideTm', setTimeout(function() { if (menu.is(':visible')) { cwd.find('.elfinder-cwd-file').off(evTouchStart); cwd.find('.elfinder-cwd-file.ui-selected') .one(evTouchStart, function(e) { if (e.originalEvent.touches.length > 1) { return; } var tgt = jQuery(e.target); if (menu.first().length && !tgt.is('input:checkbox') && !tgt.hasClass('elfinder-cwd-select')) { e.stopPropagation(); //e.preventDefault(); open(e.originalEvent.touches[0].pageX, e.originalEvent.touches[0].pageY); cwd.data('longtap', true) tgt.one('touchend', function() { setTimeout(function() { cwd.removeData('longtap'); }, 80); }); return; } cwd.find('.elfinder-cwd-file').off(evTouchStart); }) .one('unselect.'+fm.namespace, function() { cwd.find('.elfinder-cwd-file').off(evTouchStart); }); menu.fadeOut({ duration: 300, fail: function() { menu.css('opacity', '1').show(); }, done: function() { fm.toHide(menu); } }); } }, 4500)); } }, keyEvts = function(e) { var code = e.keyCode, ESC = jQuery.ui.keyCode.ESCAPE, ENT = jQuery.ui.keyCode.ENTER, LEFT = jQuery.ui.keyCode.LEFT, RIGHT = jQuery.ui.keyCode.RIGHT, UP = jQuery.ui.keyCode.UP, DOWN = jQuery.ui.keyCode.DOWN, subent = fm.direction === 'ltr'? RIGHT : LEFT, sublev = subent === RIGHT? LEFT : RIGHT; if (jQuery.inArray(code, [ESC, ENT, LEFT, RIGHT, UP, DOWN]) !== -1) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); if (code == ESC || code === sublev) { if (selected && subnodes && subselected) { subselected.trigger('mouseleave').trigger('submenuclose'); selected.addClass(cHover); subnodes = null; subselected = null; } else { code == ESC && close(); fm.trigger('closecontextmenu'); } } else if (code == UP || code == DOWN) { if (subnodes) { if (subselected) { subselected.trigger('mouseleave'); } if (code == DOWN && (! subselected || subnodes.length <= ++subnodes._cur)) { subnodes._cur = 0; } else if (code == UP && (! subselected || --subnodes._cur < 0)) { subnodes._cur = subnodes.length - 1; } subselected = subnodes.eq(subnodes._cur).trigger('mouseenter'); } else { subnodes = null; if (selected) { selected.trigger('mouseleave'); } if (code == DOWN && (! selected || nodes.length <= ++nodes._cur)) { nodes._cur = 0; } else if (code == UP && (! selected || --nodes._cur < 0)) { nodes._cur = nodes.length - 1; } selected = nodes.eq(nodes._cur).addClass(cHover); } } else if (selected && (code == ENT || code === subent)) { if (selected.hasClass('elfinder-contextmenu-group')) { if (subselected) { code == ENT && subselected.click(); } else { selected.trigger('mouseenter'); subnodes = selected.find('div.'+smItem); subnodes._cur = 0; subselected = subnodes.first().addClass(cHover); } } else { code == ENT && selected.click(); } } } }, open = function(x, y, css) { var width = menu.outerWidth(), height = menu.outerHeight(), bstyle = base.attr('style'), bpos = base.offset(), bwidth = base.width(), bheight = base.height(), mw = fm.UA.Mobile? 40 : 2, mh = fm.UA.Mobile? 20 : 2, x = x - (bpos? bpos.left : 0), y = y - (bpos? bpos.top : 0), css = Object.assign(css || {}, { top : Math.max(0, y + mh + height < bheight ? y + mh : y - (y + height - bheight)), left : Math.max(0, (x < width + mw || x + mw + width < bwidth)? x + mw : x - mw - width), opacity : '1' }), evts; autoSyncStop = true; fm.autoSync('stop'); base.width(bwidth); menu.stop().removeAttr('style').css(css); fm.toFront(menu); menu.show(); base.attr('style', bstyle); css[subpos] = parseInt(menu.width()); menu.find('.elfinder-contextmenu-sub').css(css); if (fm.UA.iOS) { jQuery('div.elfinder div.overflow-scrolling-touch').css('-webkit-overflow-scrolling', 'auto'); } selected = null; subnodes = null; subselected = null; jQuery(document).on('keydown.' + fm.namespace, keyEvts); evts = jQuery._data(document).events; if (evts && evts.keydown) { evts.keydown.unshift(evts.keydown.pop()); } fm.UA.Mobile && autoToggle(); requestAnimationFrame(function() { fm.getUI().one('click.' + fm.namespace, close); }); }, close = function() { fm.getUI().off('click.' + fm.namespace, close); jQuery(document).off('keydown.' + fm.namespace, keyEvts); currentType = currentTargets = null; if (menu.is(':visible') || menu.children().length) { fm.toHide(menu.removeAttr('style').empty().removeData('submenuKeep')); try { if (! menu.draggable('instance')) { menu.draggable(dragOpt); } } catch(e) { if (! menu.hasClass('ui-draggable')) { menu.draggable(dragOpt); } } if (menu.data('prevNode')) { menu.data('prevNode').after(menu); menu.removeData('prevNode'); } fm.trigger('closecontextmenu'); if (fm.UA.iOS) { jQuery('div.elfinder div.overflow-scrolling-touch').css('-webkit-overflow-scrolling', 'touch'); } } autoSyncStop && fm.searchStatus.state < 1 && ! fm.searchStatus.ininc && fm.autoSync(); autoSyncStop = false; }, create = function(type, targets) { var sep = false, insSep = false, disabled = [], isCwd = type === 'cwd', selcnt = 0, cmdMap; currentType = type; currentTargets = targets; // get current uiCmdMap option if (!(cmdMap = fm.option('uiCmdMap', isCwd? void(0) : targets[0]))) { cmdMap = {}; } if (!isCwd) { disabled = fm.getDisabledCmds(targets); } selcnt = fm.selected().length; if (selcnt > 1) { menu.append('
      ' + fm.i18n('selectedItems', ''+selcnt) + '
      '); } nodes = jQuery(); jQuery.each(types[type]||[], function(i, name) { var cmd, cmdName, useMap, node, submenu, hover; if (name === '|') { if (sep) { insSep = true; } return; } if (cmdMap[name]) { cmdName = cmdMap[name]; useMap = true; } else { cmdName = name; } cmd = fm.getCommand(cmdName); if (cmd && !isCwd && (!fm.searchStatus.state || !cmd.disableOnSearch)) { cmd.__disabled = cmd._disabled; cmd._disabled = !(cmd.alwaysEnabled || (fm._commands[cmdName] ? jQuery.inArray(name, disabled) === -1 && (!useMap || !disabled[cmdName]) : false)); jQuery.each(cmd.linkedCmds, function(i, n) { var c; if (c = fm.getCommand(n)) { c.__disabled = c._disabled; c._disabled = !(c.alwaysEnabled || (fm._commands[n] ? !disabled[n] : false)); } }); } if (cmd && !cmd._disabled && cmd.getstate(targets) != -1) { if (cmd.variants) { if (!cmd.variants.length) { return; } node = item(cmd.title, cmd.className? cmd.className : cmd.name, function(){}, cmd.contextmenuOpts); submenu = jQuery('
      ') .hide() .css('max-height', fm.getUI().height() - 30) .appendTo(node.append('')); hover = function(show){ if (! show) { submenu.hide(); } else { var bstyle = base.attr('style'); base.width(base.width()); // top: '-1000px' to prevent visible scrollbar of window with the elFinder option `height: '100%'` submenu.css({ top: '-1000px', left: 'auto', right: 'auto' }); var nodeOffset = node.offset(), nodeleft = nodeOffset.left, nodetop = nodeOffset.top, nodewidth = node.outerWidth(), width = submenu.outerWidth(true), height = submenu.outerHeight(true), baseOffset = base.offset(), wwidth = baseOffset.left + base.width(), wheight = baseOffset.top + base.height(), cltr = ltr, x = nodewidth, y, over; if (ltr) { over = (nodeleft + nodewidth + width) - wwidth; if (over > 10) { if (nodeleft > width - 5) { x = x - 5; cltr = false; } else { if (!fm.UA.Mobile) { x = nodewidth - over; } } } } else { over = width - nodeleft; if (over > 0) { if ((nodeleft + nodewidth + width - 15) < wwidth) { x = x - 5; cltr = true; } else { if (!fm.UA.Mobile) { x = nodewidth - over; } } } } over = (nodetop + 5 + height) - wheight; y = (over > 0 && nodetop < wheight)? 5 - over : (over > 0? 30 - height : 5); menu.find('.elfinder-contextmenu-sub:visible').hide(); submenu.css({ top : y, left : cltr? x : 'auto', right: cltr? 'auto' : x, overflowY: 'auto' }).show(); base.attr('style', bstyle); } }; node.addClass('elfinder-contextmenu-group') .on('mouseleave', '.elfinder-contextmenu-sub', function(e) { if (! menu.data('draged')) { menu.removeData('submenuKeep'); } }) .on('submenuclose', '.elfinder-contextmenu-sub', function(e) { hover(false); }) .on('click', '.'+smItem, function(e){ var opts, $this; e.stopPropagation(); if (! menu.data('draged')) { $this = jQuery(this); if (!cmd.keepContextmenu) { menu.hide(); } else { $this.removeClass(cHover); node.addClass(cHover); } opts = $this.data('exec'); if (typeof opts === 'undefined') { opts = {}; } if (typeof opts === 'object') { opts._userAction = true; opts._currentType = type; opts._currentNode = $this; } !cmd.keepContextmenu && close(); fm.exec(cmd.name, targets, opts); } }) .on('touchend', function(e) { if (! menu.data('drag')) { hover(true); menu.data('submenuKeep', true); } }) .on('mouseenter mouseleave', function(e){ if (! menu.data('touching')) { if (node.data('timer')) { clearTimeout(node.data('timer')); node.removeData('timer'); } if (!jQuery(e.target).closest('.elfinder-contextmenu-sub', menu).length) { if (e.type === 'mouseleave') { if (! menu.data('submenuKeep')) { node.data('timer', setTimeout(function() { node.removeData('timer'); hover(false); }, 250)); } } else { node.data('timer', setTimeout(function() { node.removeData('timer'); hover(true); }, nodes.find('div.elfinder-contextmenu-sub:visible').length? 250 : 0)); } } } }); jQuery.each(cmd.variants, function(i, variant) { var item = variant === '|' ? '
      ' : jQuery('
      '+variant[1]+'
      ').data('exec', variant[0]), iconClass, icon; if (typeof variant[2] !== 'undefined') { icon = jQuery('').addClass('elfinder-button-icon elfinder-contextmenu-icon'); if (! /\//.test(variant[2])) { icon.addClass('elfinder-button-icon-'+variant[2]); } else { icon.css(urlIcon(variant[2])); } item.prepend(icon).addClass(smItem+'-icon'); } submenu.append(item); }); } else { node = item(cmd.title, cmd.className? cmd.className : cmd.name, function() { if (! menu.data('draged')) { !cmd.keepContextmenu && close(); fm.exec(cmd.name, targets, {_userAction: true, _currentType: type, _currentNode: node}); } }, cmd.contextmenuOpts); if (cmd.extra && cmd.extra.node) { jQuery('') .append(cmd.extra.node).appendTo(node); jQuery(cmd.extra.node).trigger('ready', {targets: targets}); } else { node.remove('.'+exIcon); } } if (cmd.extendsCmd) { node.children('span.elfinder-button-icon').addClass('elfinder-button-icon-' + cmd.extendsCmd); } if (insSep) { menu.append('
      '); } menu.append(node); sep = true; insSep = false; } if (cmd && typeof cmd.__disabled !== 'undefined') { cmd._disabled = cmd.__disabled; delete cmd.__disabled; jQuery.each(cmd.linkedCmds, function(i, n) { var c; if (c = fm.getCommand(n)) { c._disabled = c.__disabled; delete c.__disabled; } }); } }); nodes = menu.children('div.'+cmItem); }, createFromRaw = function(raw) { currentType = 'raw'; jQuery.each(raw, function(i, data) { var node; if (data === '|') { menu.append('
      '); } else if (data.label && typeof data.callback == 'function') { node = item(data.label, data.icon, function() { if (! menu.data('draged')) { !data.remain && close(); data.callback(); } }, data.options || null); menu.append(node); } }); nodes = menu.children('div.'+cmItem); }, currentType = null, currentTargets = null; fm.one('load', function() { base = fm.getUI(); cwd = fm.getUI('cwd'); fm.bind('contextmenu', function(e) { var data = e.data, css = {}, prevNode; if (data.type && data.type !== 'files') { cwd.trigger('unselectall'); } close(); if (data.type && data.targets) { fm.trigger('contextmenucreate', data); create(data.type, data.targets); fm.trigger('contextmenucreatedone', data); } else if (data.raw) { createFromRaw(data.raw); } if (menu.children().length) { prevNode = data.prevNode || null; if (prevNode) { menu.data('prevNode', menu.prev()); prevNode.after(menu); } if (data.fitHeight) { css = {maxHeight: Math.min(fm.getUI().height(), jQuery(window).height()), overflowY: 'auto'}; menu.draggable('destroy').removeClass('ui-draggable'); } open(data.x, data.y, css); // call opened callback function if (data.opened && typeof data.opened === 'function') { data.opened.call(menu); } } }) .one('destroy', function() { menu.remove(); }) .bind('disable', close) .bind('select', function(e){ (currentType === 'files' && (!e.data || e.data.selected.toString() !== currentTargets.toString())) && close(); }); }) .shortcut({ pattern : fm.OS === 'mac' ? 'ctrl+m' : 'contextmenu shift+f10', description : 'contextmenu', callback : function(e) { e.stopPropagation(); e.preventDefault(); jQuery(document).one('contextmenu.' + fm.namespace, function(e) { e.preventDefault(); e.stopPropagation(); }); var sel = fm.selected(), type, targets, pos, elm; if (sel.length) { type = 'files'; targets = sel; elm = fm.cwdHash2Elm(sel[0]); } else { type = 'cwd'; targets = [ fm.cwd().hash ]; pos = fm.getUI('workzone').offset(); } if (! elm || ! elm.length) { elm = fm.getUI('workzone'); } pos = elm.offset(); pos.top += (elm.height() / 2); pos.left += (elm.width() / 2); fm.trigger('contextmenu', { 'type' : type, 'targets' : targets, 'x' : pos.left, 'y' : pos.top }); } }); }); }; PK Z'Gjs/ui/sortbutton.jsnuW+A/** * @class elFinder toolbar button menu with sort variants. * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfindersortbutton = function(cmd) { "use strict"; return this.each(function() { var fm = cmd.fm, name = cmd.name, c = 'class', disabled = fm.res(c, 'disabled'), hover = fm.res(c, 'hover'), item = 'elfinder-button-menu-item', selected = item+'-selected', asc = selected+'-asc', desc = selected+'-desc', text = jQuery(''+cmd.title+''), button = jQuery(this).addClass('ui-state-default elfinder-button elfinder-menubutton elfiner-button-'+name) .attr('title', cmd.title) .append('', text) .on('mouseenter mouseleave', function(e) { !button.hasClass(disabled) && button.toggleClass(hover, e.type === 'mouseenter'); }) .on('click', function(e) { if (!button.hasClass(disabled)) { e.stopPropagation(); menu.is(':hidden') && fm.getUI().click(); menu.css(getMenuOffset()).slideToggle({ duration: 100, done: function(e) { fm[menu.is(':visible')? 'toFront' : 'toHide'](menu); } }); } }), hide = function() { fm.toHide(menu); }, menu = jQuery('
      ') .hide() .appendTo(fm.getUI()) .on('mouseenter mouseleave', '.'+item, function(e) { jQuery(this).toggleClass(hover, e.type === 'mouseenter'); }) .on('click', function(e) { e.preventDefault(); e.stopPropagation(); }) .on('close', hide), update = function() { menu.children('[rel]').removeClass(selected+' '+asc+' '+desc) .filter('[rel="'+fm.sortType+'"]') .addClass(selected+' '+(fm.sortOrder == 'asc' ? asc : desc)); menu.children('.elfinder-sort-stick').toggleClass(selected, fm.sortStickFolders); menu.children('.elfinder-sort-tree').toggleClass(selected, fm.sortAlsoTreeview); }, getMenuOffset = function() { var baseOffset = fm.getUI().offset(), buttonOffset = button.offset(); return { top : buttonOffset.top - baseOffset.top, left : buttonOffset.left - baseOffset.left }; }, tm; text.hide(); jQuery.each(fm.sortRules, function(name, value) { menu.append(jQuery('
      '+fm.i18n('sort'+name)+'
      ').data('type', name)); }); menu.children().on('click', function(e) { cmd.exec([], jQuery(this).removeClass(hover).attr('rel')); }); jQuery('
      '+fm.i18n('sortFoldersFirst')+'
      ') .appendTo(menu) .on('click', function() { cmd.exec([], 'stick'); }); fm.one('init', function() { if (fm.ui.tree && fm.options.sortAlsoTreeview !== null) { jQuery('
      '+fm.i18n('sortAlsoTreeview')+'
      ') .appendTo(menu) .on('click', function() { cmd.exec([], 'tree'); }); } }) .bind('disable select', hide) .bind('sortchange', update).getUI().on('click', hide); if (menu.children().length > 1) { cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { button.toggleClass(disabled, cmd.disabled()); update(); }); }) .change(); } else { button.addClass(disabled); } }); }; PK Z\Tr'r'js/ui/toolbar.jsnuW+A/** * @class elFinder toolbar * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfindertoolbar = function(fm, opts) { "use strict"; this.not('.elfinder-toolbar').each(function() { var commands = fm._commands, self = jQuery(this).addClass('ui-helper-clearfix ui-widget-header elfinder-toolbar'), options = { // default options displayTextLabel: false, labelExcludeUA: ['Mobile'], autoHideUA: ['Mobile'], showPreferenceButton: 'none' }, filter = function(opts) { return jQuery.grep(opts, function(v) { if (jQuery.isPlainObject(v)) { options = Object.assign(options, v); return false; } return true; }); }, render = function(disabled){ var name,cmdPref; jQuery.each(buttons, function(i, b) { b.detach(); }); self.empty(); l = panels.length; while (l--) { if (panels[l]) { panel = jQuery('
      '); i = panels[l].length; while (i--) { name = panels[l][i]; if ((!disabled || !disabled[name]) && (cmd = commands[name])) { button = 'elfinder'+cmd.options.ui; if (! buttons[name] && jQuery.fn[button]) { buttons[name] = jQuery('
      ')[button](cmd); } if (buttons[name]) { buttons[name].children('.elfinder-button-text')[textLabel? 'show' : 'hide'](); panel.prepend(buttons[name]); } } } panel.children().length && self.prepend(panel); panel.children(':gt(0)').before(''); } } if (cmdPref = commands['preference']) { //cmdPref.state = !self.children().length? 0 : -1; if (options.showPreferenceButton === 'always' || (!self.children().length && options.showPreferenceButton === 'auto')) { //cmdPref.state = 0; panel = jQuery('
      '); name = 'preference'; button = 'elfinder'+cmd.options.ui; buttons[name] = jQuery('
      ')[button](cmdPref); buttons[name].children('.elfinder-button-text')[textLabel? 'show' : 'hide'](); panel.prepend(buttons[name]); self.append(panel); } } (! self.data('swipeClose') && self.children().length)? self.show() : self.hide(); prevHeight = self[0].clientHeight; fm.trigger('toolbarload').trigger('uiresize'); }, buttons = {}, panels = filter(opts || []), dispre = null, uiCmdMapPrev = '', prevHeight = 0, contextRaw = [], l, i, cmd, panel, button, swipeHandle, autoHide, textLabel, resizeTm; // normalize options options.showPreferenceButton = options.showPreferenceButton.toLowerCase(); if (options.displayTextLabel !== 'none') { // correction of options.displayTextLabel textLabel = fm.storage('toolbarTextLabel'); if (textLabel === null) { textLabel = (options.displayTextLabel && (! options.labelExcludeUA || ! options.labelExcludeUA.length || ! jQuery.grep(options.labelExcludeUA, function(v){ return fm.UA[v]? true : false; }).length)); } else { textLabel = (textLabel == 1); } contextRaw.push({ label : fm.i18n('textLabel'), icon : 'text', callback : function() { textLabel = ! textLabel; self.css('height', '').find('.elfinder-button-text')[textLabel? 'show':'hide'](); fm.trigger('uiresize').storage('toolbarTextLabel', textLabel? '1' : '0'); }, }); } if (options.preferenceInContextmenu && commands['preference']) { contextRaw.push({ label : fm.i18n('toolbarPref'), icon : 'preference', callback : function() { fm.exec('preference', void(0), {tab: 'toolbar'}); } }); } // add contextmenu if (contextRaw.length) { self.on('contextmenu', function(e) { e.stopPropagation(); e.preventDefault(); fm.trigger('contextmenu', { raw: contextRaw, x: e.pageX, y: e.pageY }); }).on('touchstart', function(e) { if (e.originalEvent.touches.length > 1) { return; } self.data('tmlongtap') && clearTimeout(self.data('tmlongtap')); self.removeData('longtap') .data('longtap', {x: e.originalEvent.touches[0].pageX, y: e.originalEvent.touches[0].pageY}) .data('tmlongtap', setTimeout(function() { self.removeData('longtapTm') .trigger({ type: 'contextmenu', pageX: self.data('longtap').x, pageY: self.data('longtap').y }) .data('longtap', {longtap: true}); }, 500)); }).on('touchmove touchend', function(e) { if (self.data('tmlongtap')) { if (e.type === 'touchend' || ( Math.abs(self.data('longtap').x - e.originalEvent.touches[0].pageX) + Math.abs(self.data('longtap').y - e.originalEvent.touches[0].pageY)) > 4) clearTimeout(self.data('tmlongtap')); self.removeData('longtapTm'); } }).on('click', function(e) { if (self.data('longtap') && self.data('longtap').longtap) { e.stopImmediatePropagation(); e.preventDefault(); } }).on('touchend click', '.elfinder-button', function(e) { if (self.data('longtap') && self.data('longtap').longtap) { e.stopImmediatePropagation(); e.preventDefault(); } } ); } self.prev().length && self.parent().prepend(this); render(); fm.bind('open sync select toolbarpref', function() { var disabled = Object.assign({}, fm.option('disabledFlip')), userHides = fm.storage('toolbarhides'), doRender, sel, disabledKeys; if (! userHides && Array.isArray(options.defaultHides)) { userHides = {}; jQuery.each(options.defaultHides, function() { userHides[this] = true; }); fm.storage('toolbarhides', userHides); } if (this.type === 'select') { if (fm.searchStatus.state < 2) { return; } sel = fm.selected(); if (sel.length) { disabled = fm.getDisabledCmds(sel, true); } } jQuery.each(userHides, function(n) { if (!disabled[n]) { disabled[n] = true; } }); if (Object.keys(fm.commandMap).length) { jQuery.each(fm.commandMap, function(from, to){ if (to === 'hidden') { disabled[from] = true; } }); } disabledKeys = Object.keys(disabled); if (!dispre || dispre.toString() !== disabledKeys.sort().toString()) { render(disabledKeys.length? disabled : null); doRender = true; } dispre = disabledKeys.sort(); if (doRender || uiCmdMapPrev !== JSON.stringify(fm.commandMap)) { uiCmdMapPrev = JSON.stringify(fm.commandMap); if (! doRender) { // reset toolbar jQuery.each(jQuery('div.elfinder-button'), function(){ var origin = jQuery(this).data('origin'); if (origin) { jQuery(this).after(origin).detach(); } }); } if (Object.keys(fm.commandMap).length) { jQuery.each(fm.commandMap, function(from, to){ var cmd = fm._commands[to], button = cmd? 'elfinder'+cmd.options.ui : null, btn; if (button && jQuery.fn[button]) { btn = buttons[from]; if (btn) { if (! buttons[to] && jQuery.fn[button]) { buttons[to] = jQuery('
      ')[button](cmd); if (buttons[to]) { buttons[to].children('.elfinder-button-text')[textLabel? 'show' : 'hide'](); if (cmd.extendsCmd) { buttons[to].children('span.elfinder-button-icon').addClass('elfinder-button-icon-' + cmd.extendsCmd); } } } if (buttons[to]) { btn.after(buttons[to]); buttons[to].data('origin', btn.detach()); } } } }); } } }).bind('resize', function(e) { resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { var h = self[0].clientHeight; if (prevHeight !== h) { prevHeight = h; fm.trigger('uiresize'); } }); }); if (fm.UA.Touch) { autoHide = fm.storage('autoHide') || {}; if (typeof autoHide.toolbar === 'undefined') { autoHide.toolbar = (options.autoHideUA && options.autoHideUA.length > 0 && jQuery.grep(options.autoHideUA, function(v){ return fm.UA[v]? true : false; }).length); fm.storage('autoHide', autoHide); } if (autoHide.toolbar) { fm.one('init', function() { fm.uiAutoHide.push(function(){ self.stop(true, true).trigger('toggle', { duration: 500, init: true }); }); }); } fm.bind('load', function() { swipeHandle = jQuery('
      ').hide().appendTo(fm.getUI()); if (swipeHandle.css('pointer-events') !== 'none') { swipeHandle.remove(); swipeHandle = null; } }); self.on('toggle', function(e, data) { var wz = fm.getUI('workzone'), toshow= self.is(':hidden'), wzh = wz.height(), h = self.height(), tbh = self.outerHeight(true), delta = tbh - h, opt = Object.assign({ step: function(now) { wz.height(wzh + (toshow? (now + delta) * -1 : h - now)); fm.trigger('resize'); }, always: function() { requestAnimationFrame(function() { self.css('height', ''); fm.trigger('uiresize'); if (swipeHandle) { if (toshow) { swipeHandle.stop(true, true).hide(); } else { swipeHandle.height(data.handleH? data.handleH : ''); fm.resources.blink(swipeHandle, 'slowonce'); } } toshow && self.scrollTop('0px'); data.init && fm.trigger('uiautohide'); }); } }, data); self.data('swipeClose', ! toshow).stop(true, true).animate({height : 'toggle'}, opt); autoHide.toolbar = !toshow; fm.storage('autoHide', Object.assign(fm.storage('autoHide'), {toolbar: autoHide.toolbar})); }).on('touchstart', function(e) { if (self.scrollBottom() > 5) { e.originalEvent._preventSwipeY = true; } }); } }); return this; }; PK Zf'gg js/ui/tree.jsnuW+A/** * @class elFinder folders tree * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfindertree = function(fm, opts) { "use strict"; var treeclass = fm.res('class', 'tree'); this.not('.'+treeclass).each(function() { var c = 'class', mobile = fm.UA.Mobile, /** * Root directory class name * * @type String */ root = fm.res(c, 'treeroot'), /** * Open root dir if not opened yet * * @type Boolean */ openRoot = opts.openRootOnLoad, /** * Open current work dir if not opened yet * * @type Boolean */ openCwd = opts.openCwdOnOpen, /** * Auto loading current directory parents and do expand their node * * @type Boolean */ syncTree = openCwd || opts.syncTree, /** * Subtree class name * * @type String */ subtree = fm.res(c, 'navsubtree'), /** * Directory class name * * @type String */ navdir = fm.res(c, 'treedir'), /** * Directory CSS selector * * @type String */ selNavdir = 'span.' + navdir, /** * Collapsed arrow class name * * @type String */ collapsed = fm.res(c, 'navcollapse'), /** * Expanded arrow class name * * @type String */ expanded = fm.res(c, 'navexpand'), /** * Class name to mark arrow for directory with already loaded children * * @type String */ loaded = 'elfinder-subtree-loaded', /** * Class name to mark need subdirs request * * @type String */ chksubdir = 'elfinder-subtree-chksubdir', /** * Arraw class name * * @type String */ arrow = fm.res(c, 'navarrow'), /** * Current directory class name * * @type String */ active = fm.res(c, 'active'), /** * Droppable dirs dropover class * * @type String */ dropover = fm.res(c, 'adroppable'), /** * Hover class name * * @type String */ hover = fm.res(c, 'hover'), /** * Disabled dir class name * * @type String */ disabled = fm.res(c, 'disabled'), /** * Draggable dir class name * * @type String */ draggable = fm.res(c, 'draggable'), /** * Droppable dir class name * * @type String */ droppable = fm.res(c, 'droppable'), /** * root wrapper class * * @type String */ wrapperRoot = 'elfinder-navbar-wrapper-root', /** * Un-disabled cmd `paste` volume's root wrapper class * * @type String */ pastable = 'elfinder-navbar-wrapper-pastable', /** * Un-disabled cmd `upload` volume's root wrapper class * * @type String */ uploadable = 'elfinder-navbar-wrapper-uploadable', /** * Is position x inside Navbar * * @param x Numbar * * @return */ insideNavbar = function(x) { var left = navbar.offset().left; return left <= x && x <= left + navbar.width(); }, /** * To call subdirs elements queue * * @type Object */ subdirsQue = {}, /** * To exec subdirs elements ids * */ subdirsExecQue = [], /** * Request subdirs to backend * * @param id String * * @return Deferred */ subdirs = function(ids) { var targets = []; jQuery.each(ids, function(i, id) { subdirsQue[id] && targets.push(fm.navId2Hash(id)); delete subdirsQue[id]; }); if (targets.length) { return fm.request({ data: { cmd: 'subdirs', targets: targets, preventDefault : true } }).done(function(res) { if (res && res.subdirs) { jQuery.each(res.subdirs, function(hash, subdirs) { var elm = fm.navHash2Elm(hash); elm.removeClass(chksubdir); elm[subdirs? 'addClass' : 'removeClass'](collapsed); }); } }); } }, subdirsJobRes = null, /** * To check target element is in window of subdirs * * @return void */ checkSubdirs = function() { var ids = Object.keys(subdirsQue); if (ids.length) { subdirsJobRes && subdirsJobRes._abort(); execSubdirsTm && clearTimeout(execSubdirsTm); subdirsExecQue = []; subdirsJobRes = fm.asyncJob(function(id) { return fm.isInWindow(jQuery('#'+id))? id : null; }, ids, { numPerOnce: 200 }) .done(function(arr) { if (arr.length) { subdirsExecQue = arr; execSubdirs(); } }); } }, subdirsPending = 0, execSubdirsTm, /** * Exec subdirs as batch request * * @return void */ execSubdirs = function() { var cnt = opts.subdirsMaxConn - subdirsPending, atOnce = fm.maxTargets? Math.min(fm.maxTargets, opts.subdirsAtOnce) : opts.subdirsAtOnce, i, ids; execSubdirsTm && cancelAnimationFrame(execSubdirsTm); if (subdirsExecQue.length) { if (cnt > 0) { for (i = 0; i < cnt; i++) { if (subdirsExecQue.length) { subdirsPending++; subdirs(subdirsExecQue.splice(0, atOnce)).always(function() { subdirsPending--; execSubdirs(); }); } } } else { execSubdirsTm = requestAnimationFrame(function() { subdirsExecQue.length && execSubdirs(); }); } } }, drop = fm.droppable.drop, /** * Droppable options * * @type Object */ droppableopts = jQuery.extend(true, {}, fm.droppable, { // show subfolders on dropover over : function(e, ui) { var dst = jQuery(this), helper = ui.helper, cl = hover+' '+dropover, hash, status; e.stopPropagation(); helper.data('dropover', helper.data('dropover') + 1); dst.data('dropover', true); if (ui.helper.data('namespace') !== fm.namespace || ! fm.insideWorkzone(e.pageX, e.pageY)) { dst.removeClass(cl); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); return; } if (! insideNavbar(e.clientX)) { dst.removeClass(cl); return; } helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); dst.addClass(hover); if (dst.is('.'+collapsed+':not(.'+expanded+')')) { dst.data('expandTimer', setTimeout(function() { dst.is('.'+collapsed+'.'+hover) && dst.children('.'+arrow).trigger('click'); }, 500)); } if (dst.is('.elfinder-ro,.elfinder-na')) { dst.removeClass(dropover); //helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); return; } hash = fm.navId2Hash(dst.attr('id')); dst.data('dropover', hash); jQuery.each(ui.helper.data('files'), function(i, h) { if (h === hash || (fm.file(h).phash === hash && !ui.helper.hasClass('elfinder-drag-helper-plus'))) { dst.removeClass(cl); return false; // break jQuery.each } }); if (helper.data('locked')) { status = 'elfinder-drag-helper-plus'; } else { status = 'elfinder-drag-helper-move'; if (fm._commands.copy && (e.shiftKey || e.ctrlKey || e.metaKey)) { status += ' elfinder-drag-helper-plus'; } } dst.hasClass(dropover) && helper.addClass(status); requestAnimationFrame(function(){ dst.hasClass(dropover) && helper.addClass(status); }); }, out : function(e, ui) { var dst = jQuery(this), helper = ui.helper; e.stopPropagation(); if (insideNavbar(e.clientX)) { helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); } helper.data('dropover', Math.max(helper.data('dropover') - 1, 0)); dst.data('expandTimer') && clearTimeout(dst.data('expandTimer')); dst.removeData('dropover') .removeClass(hover+' '+dropover); }, deactivate : function() { jQuery(this).removeData('dropover') .removeClass(hover+' '+dropover); }, drop : function(e, ui) { insideNavbar(e.clientX) && drop.call(this, e, ui); } }), spinner = jQuery(fm.res('tpl', 'navspinner')), /** * Directory html template * * @type String */ tpl = fm.res('tpl', 'navdir'), /** * Permissions marker html template * * @type String */ ptpl = fm.res('tpl', 'perms'), /** * Lock marker html template * * @type String */ ltpl = fm.res('tpl', 'lock'), /** * Symlink marker html template * * @type String */ stpl = fm.res('tpl', 'symlink'), /** * Directory hashes that has more pages * * @type Object */ hasMoreDirs = {}, /** * Html template replacement methods * * @type Object */ replace = { id : function(dir) { return fm.navHash2Id(dir.hash); }, name : function(dir) { return fm.escape(dir.i18 || dir.name); }, cssclass : function(dir) { var cname = (dir.phash && ! dir.isroot ? '' : root)+' '+navdir+' '+fm.perms2class(dir); dir.dirs && !dir.link && (cname += ' ' + collapsed) && dir.dirs == -1 && (cname += ' ' + chksubdir); opts.getClass && (cname += ' ' + opts.getClass(dir)); dir.csscls && (cname += ' ' + fm.escape(dir.csscls)); return cname; }, title : function(dir) { return opts.attrTitle? (' title="' + fm.escape(fm.path(dir.hash, true) || dir.i18 || dir.name) + '"') : ''; }, root : function(dir) { var cls = ''; if (!dir.phash || dir.isroot) { cls += ' '+wrapperRoot; if (!dir.disabled || dir.disabled.length < 1) { cls += ' '+pastable+' '+uploadable; } else { if (jQuery.inArray('paste', dir.disabled) === -1) { cls += ' '+pastable; } if (jQuery.inArray('upload', dir.disabled) === -1) { cls += ' '+uploadable; } } return cls; } else { return ''; } }, permissions : function(dir) { return !dir.read || !dir.write ? ptpl : ''; }, symlink : function(dir) { return dir.alias ? stpl : ''; }, style : function(dir) { return dir.icon ? fm.getIconStyle(dir) : ''; } }, /** * Return html for given dir * * @param Object directory * @return String */ itemhtml = function(dir) { return tpl.replace(/(?:\{([a-z]+)\})/ig, function(m, key) { var res = replace[key] ? replace[key](dir) : (dir[key] || ''); if (key === 'id' && dir.dirs == -1) { subdirsQue[res] = res; } return res; }); }, /** * Return only dirs from files list * * @param Array files list * @param Boolean do check exists * @return Array */ filter = function(files, checkExists) { return jQuery.map(files || [], function(f) { return (f.mime === 'directory' && (!checkExists || fm.navHash2Elm(f.hash).length)) ? f : null; }); }, /** * Find parent subtree for required directory * * @param String dir hash * @return jQuery */ findSubtree = function(hash) { return hash ? fm.navHash2Elm(hash).next('.'+subtree) : tree; }, /** * Find directory (wrapper) in required node * before which we can insert new directory * * @param jQuery parent directory * @param Object new directory * @return jQuery */ findSibling = function(subtree, dir) { var node = subtree.children(':first'), info; while (node.length) { info = fm.file(fm.navId2Hash(node.children('[id]').attr('id'))); if ((info = fm.file(fm.navId2Hash(node.children('[id]').attr('id')))) && compare(dir, info) < 0) { return node; } node = node.next(); } return subtree.children('button.elfinder-navbar-pager-next'); }, /** * Add new dirs in tree * * @param Array dirs list * @return void */ updateTree = function(dirs) { var length = dirs.length, orphans = [], i = length, tgts = jQuery(), done = {}, cwd = fm.cwd(), append = function(parent, dirs, start, direction) { var hashes = {}, curStart = 0, max = fm.newAPI? Math.min(10000, Math.max(10, opts.subTreeMax)) : 10000, setHashes = function() { hashes = {}; jQuery.each(dirs, function(i, d) { hashes[d.hash] = i; }); }, change = function(mode) { if (mode === 'prepare') { jQuery.each(dirs, function(i, d) { d.node && parent.append(d.node.hide()); }); } else if (mode === 'done') { jQuery.each(dirs, function(i, d) { d.node && d.node.detach().show(); }); } }, update = function(e, data) { var i, changed; e.stopPropagation(); if (data.select) { render(getStart(data.select)); return; } if (data.change) { change(data.change); return; } if (data.removed && data.removed.length) { dirs = jQuery.grep(dirs, function(d) { if (data.removed.indexOf(d.hash) === -1) { return true; } else { !changed && (changed = true); return false; } }); } if (data.added && data.added.length) { dirs = dirs.concat(jQuery.grep(data.added, function(d) { if (hashes[d.hash] === void(0)) { !changed && (changed = true); return true; } else { return false; } })); } if (changed) { dirs.sort(compare); setHashes(); render(curStart); } }, getStart = function(target) { if (hashes[target] !== void(0)) { return Math.floor(hashes[target] / max) * max; } return void(0); }, target = fm.navId2Hash(parent.prev('[id]').attr('id')), render = function(start, direction) { var html = [], nodes = {}, total, page, s, parts, prev, next, prevBtn, nextBtn; delete hasMoreDirs[target]; curStart = start; parent.off('update.'+fm.namespace, update); if (dirs.length > max) { parent.on('update.'+fm.namespace, update); if (start === void(0)) { s = 0; setHashes(); start = getStart(cwd.hash); if (start === void(0)) { start = 0; } } parts = dirs.slice(start, start + max); hasMoreDirs[target] = parent; prev = start? Math.max(-1, start - max) : -1; next = (start + max >= dirs.length)? 0 : start + max; total = Math.ceil(dirs.length/max); page = Math.ceil(start/max); } jQuery.each(parts || dirs, function(i, d) { html.push(itemhtml(d)); if (d.node) { nodes[d.hash] = d.node; } }); if (prev > -1) { prevBtn = jQuery('') .text(fm.i18n('btnPrevious', page, total)) .button({ icons: { primary: "ui-icon-caret-1-n" } }) .on('click', function(e) { e.preventDefault(); e.stopPropagation(); render(prev, 'up'); }); } else { prevBtn = jQuery(); } if (next) { nextBtn = jQuery('') .text(fm.i18n('btnNext', page + 2, total)) .button({ icons: { primary: "ui-icon-caret-1-s" } }) .on('click', function(e) { e.preventDefault(); e.stopPropagation(); render(next, 'down'); }); } else { nextBtn = jQuery(); } detach(); parent.empty()[parts? 'addClass' : 'removeClass']('elfinder-navbar-hasmore').append(prevBtn, html.join(''), nextBtn); jQuery.each(nodes, function(h, n) { fm.navHash2Elm(h).parent().replaceWith(n); }); if (direction) { autoScroll(fm.navHash2Id(parts[direction === 'up'? parts.length - 1 : 0].hash)); } ! mobile && fm.lazy(function() { updateDroppable(null, parent); }); }, detach = function() { jQuery.each(parent.children('.elfinder-navbar-wrapper'), function(i, elm) { var n = jQuery(elm), ch = n.children('[id]:first'), h, c; if (ch.hasClass(loaded)) { h = fm.navId2Hash(ch.attr('id')); if (h && (c = hashes[h]) !== void(0)) { dirs[c].node = n.detach(); } } }); }; render(); }, dir, html, parent, sibling, init, atonce = {}, updates = [], base, node, lastKey, lastNodes = {}; while (i--) { dir = dirs[i]; if (done[dir.hash] || fm.navHash2Elm(dir.hash).length) { continue; } done[dir.hash] = true; if ((parent = findSubtree(dir.phash)).length) { lastKey = dir.phash || 'treeroot'; if (typeof lastNodes[lastKey] === 'undefined') { lastNodes[lastKey] = parent.children(':last'); } init = !lastNodes[lastKey].length; if (dir.phash && (init || parent.hasClass('elfinder-navbar-hasmore') || (sibling = findSibling(parent, dir)).length)) { if (init) { if (!atonce[dir.phash]) { atonce[dir.phash] = []; } atonce[dir.phash].push(dir); } else { if (sibling) { node = itemhtml(dir); sibling.before(node); ! mobile && (tgts = tgts.add(node)); } else { updates.push(dir); } } } else { node = itemhtml(dir); if (init) { parent.prepend(node); } else { lastNodes[lastKey].after(node); } if (!dir.phash || dir.isroot) { base = fm.navHash2Elm(dir.hash).parent(); } ! mobile && updateDroppable(null, base); } } else { orphans.push(dir); } } // When init, html append at once if (Object.keys(atonce).length){ jQuery.each(atonce, function(p, dirs){ var parent = findSubtree(p), html = []; dirs.sort(compare); append(parent, dirs); }); } if (updates.length) { parent.trigger('update.' + fm.namespace, { added : updates }); } if (orphans.length && orphans.length < length) { updateTree(orphans); return; } ! mobile && tgts.length && fm.lazy(function() { updateDroppable(tgts); }); }, /** * sort function by dir.name * */ compare = function(dir1, dir2) { if (! fm.sortAlsoTreeview) { return fm.sortRules.name(dir1, dir2); } else { var asc = fm.sortOrder == 'asc', type = fm.sortType, rules = fm.sortRules, res; res = asc? rules[fm.sortType](dir1, dir2) : rules[fm.sortType](dir2, dir1); return type !== 'name' && res === 0 ? res = asc ? rules.name(dir1, dir2) : rules.name(dir2, dir1) : res; } }, /** * Timer ID of autoScroll * * @type Integer */ autoScrTm, /** * Auto scroll to cwd * * @return Object jQuery Deferred */ autoScroll = function(target) { var dfrd = jQuery.Deferred(), current, parent, top, treeH, bottom, tgtTop; autoScrTm && clearTimeout(autoScrTm); autoScrTm = setTimeout(function() { current = jQuery(document.getElementById((target || fm.navHash2Id(fm.cwd().hash)))); if (current.length) { // expand parents directory (openCwd? current : current.parent()).parents('.elfinder-navbar-wrapper').children('.'+loaded).addClass(expanded).next('.'+subtree).show(); parent = tree.parent().stop(false, true); top = parent.offset().top; treeH = parent.height(); bottom = top + treeH - current.outerHeight(); tgtTop = current.offset().top; if (tgtTop < top || tgtTop > bottom) { parent.animate({ scrollTop : parent.scrollTop() + tgtTop - top - treeH / 3 }, { duration : opts.durations.autoScroll, complete : function() { dfrd.resolve(); } }); } else { dfrd.resolve(); } } else { dfrd.reject(); } }, 100); return dfrd; }, /** * Get hashes array of items of the bottom of the leaf root back from the target * * @param Object elFinder item(directory) object * @return Array hashes */ getEnds = function(d) { var cur = d || fm.cwd(), res = cur.hash? [ cur.hash ] : [], phash, root, dir; root = fm.root(cur.hash); dir = fm.file(root); while (dir && (phash = dir.phash)) { res.unshift(phash); root = fm.root(phash); dir = fm.file(root); if (fm.navHash2Elm(dir.hash).hasClass(loaded)) { break; } } return res; }, /** * Select pages back in order to display the target * * @param Object elFinder item(directory) object * @return Object jQuery node object of target node */ selectPages = function(current) { var cur = current || fm.cwd(), curHash = cur.hash, node = fm.navHash2Elm(curHash); if (!node.length) { while(cur && cur.phash) { if (hasMoreDirs[cur.phash] && !fm.navHash2Elm(cur.hash).length) { hasMoreDirs[cur.phash].trigger('update.'+fm.namespace, { select : cur.hash }); } cur = fm.file(cur.phash); } node = fm.navHash2Elm(curHash); } return node; }, /** * Flag indicating that synchronization is currently in progress * * @type Boolean */ syncing, /** * Mark current directory as active * If current directory is not in tree - load it and its parents * * @param Array directory objects of cwd * @param Boolean do auto scroll * @return Object jQuery Deferred */ sync = function(cwdDirs, aScr) { var cwd = fm.cwd(), cwdhash = cwd.hash, autoScr = aScr === void(0)? syncTree : aScr, loadParents = function(dir) { var dfd = jQuery.Deferred(), reqs = [], ends = getEnds(dir), makeReq = function(cmd, h, until) { var data = { cmd : cmd, target : h }; if (until) { data.until = until; } return fm.request({ data : data, preventFail : true }); }, baseHash, baseId; reqs = jQuery.map(ends, function(h) { var d = fm.file(h), isRoot = d? fm.isRoot(d) : false, node = fm.navHash2Elm(h), getPhash = function(h, dep) { var d, ph, depth = dep || 1; ph = (d = fm.file(h))? d.phash : false; if (ph && depth > 1) { return getPhash(ph, --depth); } return ph; }, until, closest = (function() { var phash = getPhash(h); until = phash; while (phash) { if (fm.navHash2Elm(phash).hasClass(loaded)) { break; } until = phash; phash = getPhash(phash); } if (!phash) { until = void(0); phash = fm.root(h); } return phash; })(), cmd; if (!node.hasClass(loaded) && (isRoot || !d || !fm.navHash2Elm(d.phash).hasClass(loaded))) { if (isRoot || closest === getPhash(h) || closest === getPhash(h, 2)) { until = void(0); cmd = 'tree'; if (!isRoot) { h = getPhash(h); } } else { cmd = 'parents'; } if (!baseHash) { baseHash = (cmd === 'tree')? h : closest; } return makeReq(cmd, h, until); } return null; }); if (reqs.length) { selectPages(fm.file(baseHash)); baseId = fm.navHash2Id(baseHash); autoScr && autoScroll(baseId); baseNode = jQuery('#'+baseId); spinner = jQuery(fm.res('tpl', 'navspinner')).insertBefore(baseNode.children('.'+arrow)); baseNode.removeClass(collapsed); jQuery.when.apply($, reqs) .done(function() { var res = {},data, treeDirs, dirs, argLen, i; argLen = arguments.length; if (argLen > 0) { for (i = 0; i < argLen; i++) { data = arguments[i].tree || []; res[ends[i]] = Object.assign([], filter(data)); } } dfd.resolve(res); }) .fail(function() { dfd.reject(); }); return dfd; } else { return dfd.resolve(); } }, done= function(res, dfrd) { var open = function() { if (openRoot && baseNode) { findSubtree(baseNode.hash).show().prev(selNavdir).addClass(expanded); openRoot = false; } if (autoScr) { autoScroll().done(checkSubdirs); } else { checkSubdirs(); } }, current; if (res) { jQuery.each(res, function(endHash, dirs) { dirs && updateTree(dirs); selectPages(fm.file(endHash)); dirs && updateArrows(dirs, loaded); }); } if (cwdDirs) { (fm.api < 2.1) && cwdDirs.push(cwd); updateTree(cwdDirs); } // set current node current = selectPages(); if (!current.hasClass(active)) { tree.find(selNavdir+'.'+active).removeClass(active); current.addClass(active); } // mark as loaded to cwd parents current.parents('.elfinder-navbar-wrapper').children('.'+navdir).addClass(loaded); if (res) { fm.lazy(open).done(function() { dfrd.resolve(); }); } else { open(); dfrd.resolve(); } }, rmSpinner = function(fail) { if (baseNode) { spinner.remove(); baseNode.addClass(collapsed + (fail? '' : (' ' + loaded))); } }, dfrd = jQuery.Deferred(), baseNode, spinner; if (!fm.navHash2Elm(cwdhash).length) { syncing = true; loadParents() .done(function(res) { done(res, dfrd); rmSpinner(); }) .fail(function() { rmSpinner(true); dfrd.reject(); }) .always(function() { syncing = false; }); } else { done(void(0), dfrd); } // trigger 'treesync' with my jQuery.Deferred fm.trigger('treesync', dfrd); return dfrd; }, /** * Make writable and not root dirs droppable * * @return void */ updateDroppable = function(target, node) { var limit = 100, next; if (!target) { if (!node || node.closest('div.'+wrapperRoot).hasClass(uploadable)) { (node || tree.find('div.'+uploadable)).find(selNavdir+':not(.elfinder-ro,.elfinder-na)').addClass('native-droppable'); } if (!node || node.closest('div.'+wrapperRoot).hasClass(pastable)) { target = (node || tree.find('div.'+pastable)).find(selNavdir+':not(.'+droppable+')'); } else { target = jQuery(); } if (node) { // check leaf roots node.children('div.'+wrapperRoot).each(function() { updateDroppable(null, jQuery(this)); }); } } // make droppable on async if (target.length) { fm.asyncJob(function(elm) { jQuery(elm).droppable(droppableopts); }, jQuery.makeArray(target), { interval : 20, numPerOnce : 100 }); } }, /** * Check required folders for subfolders and update arrow classes * * @param Array folders to check * @param String css class * @return void */ updateArrows = function(dirs, cls) { var sel = cls == loaded ? '.'+collapsed+':not(.'+loaded+')' : ':not(.'+collapsed+')'; jQuery.each(dirs, function(i, dir) { fm.navHash2Elm(dir.phash).filter(sel) .filter(function() { return jQuery.grep(jQuery(this).next('.'+subtree).children(), function(n) { return (jQuery(n).children().hasClass(root))? false : true; }).length > 0; }) .addClass(cls); }); }, /** * Navigation tree * * @type JQuery */ tree = jQuery(this).addClass(treeclass) // make dirs draggable and toggle hover class .on('mouseenter mouseleave', selNavdir, function(e) { var enter = (e.type === 'mouseenter'); if (enter && scrolling) { return; } var link = jQuery(this), hash, dir; if (!link.hasClass(dropover+' '+disabled)) { if (!mobile && enter && !link.data('dragRegisted') && !link.hasClass(root+' '+draggable+' elfinder-na elfinder-wo')) { link.data('dragRegisted', true); if (fm.isCommandEnabled('copy', (hash = fm.navId2Hash(link.attr('id'))))) { link.draggable(fm.draggable); } } link.toggleClass(hover, enter); } // update title attr if necessary if (enter && opts.attrTitle) { dir = fm.file(hash || fm.navId2Hash(link.attr('id'))); if (!dir.isroot && link.attr('title') === (dir.i18 || dir.name)) { link.attr('title', fm.path(hash, true)); } } }) // native drag enter .on('dragenter', selNavdir, function(e) { if (e.originalEvent.dataTransfer) { var dst = jQuery(this); dst.addClass(hover); if (dst.is('.'+collapsed+':not(.'+expanded+')')) { dst.data('expandTimer', setTimeout(function() { dst.is('.'+collapsed+'.'+hover) && dst.children('.'+arrow).trigger('click'); }, 500)); } } }) // native drag leave .on('dragleave', selNavdir, function(e) { if (e.originalEvent.dataTransfer) { var dst = jQuery(this); dst.data('expandTimer') && clearTimeout(dst.data('expandTimer')); dst.removeClass(hover); } }) // open dir or open subfolders in tree .on('click', selNavdir, function(e) { var link = jQuery(this), hash = fm.navId2Hash(link.attr('id')), file = fm.file(hash); if (link.data('longtap')) { link.removeData('longtap'); e.stopPropagation(); return; } if (!link.hasClass(active)) { tree.find(selNavdir+'.'+active).removeClass(active); link.addClass(active); } if (hash != fm.cwd().hash && !link.hasClass(disabled)) { fm.exec('open', hash).done(function() { fm.one('opendone', function() { fm.select({selected: [hash], origin: 'navbar'}); }); }); } else { if (link.hasClass(collapsed)) { link.children('.'+arrow).trigger('click'); } fm.select({selected: [hash], origin: 'navbar'}); } }) // for touch device .on('touchstart', selNavdir, function(e) { if (e.originalEvent.touches.length > 1) { return; } var evt = e.originalEvent, p; if (e.target.nodeName === 'INPUT') { e.stopPropagation(); return; } p = jQuery(this).addClass(hover) .removeData('longtap') .data('tmlongtap', setTimeout(function(e){ // long tap p.data('longtap', true); fm.trigger('contextmenu', { 'type' : 'navbar', 'targets' : [fm.navId2Hash(p.attr('id'))], 'x' : evt.touches[0].pageX, 'y' : evt.touches[0].pageY }); }, 500)); }) .on('touchmove touchend', selNavdir, function(e) { if (e.target.nodeName === 'INPUT') { e.stopPropagation(); return; } clearTimeout(jQuery(this).data('tmlongtap')); jQuery(this).removeData('tmlongtap'); if (e.type == 'touchmove') { jQuery(this).removeClass(hover); } }) // toggle subfolders in tree .on('click', selNavdir+'.'+collapsed+' .'+arrow, function(e) { var arrow = jQuery(this), link = arrow.parent(selNavdir), stree = link.next('.'+subtree), dfrd = jQuery.Deferred(), slideTH = 30, cnt; e.stopPropagation(); if (link.hasClass(loaded)) { link.toggleClass(expanded); fm.lazy(function() { cnt = link.hasClass(expanded)? stree.children().length + stree.find('div.elfinder-navbar-subtree[style*=block]').children().length : stree.find('div:visible').length; if (cnt > slideTH) { stree.toggle(); fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); } else { stree.stop(true, true)[link.hasClass(expanded)? 'slideDown' : 'slideUp'](opts.durations.slideUpDown, function(){ fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); }); } }).always(function() { dfrd.resolve(); }); } else { spinner.insertBefore(arrow); link.removeClass(collapsed); fm.request({cmd : 'tree', target : fm.navId2Hash(link.attr('id'))}) .done(function(data) { updateTree(Object.assign([], filter(data.tree))); if (stree.children().length) { link.addClass(collapsed+' '+expanded); if (stree.children().length > slideTH) { stree.show(); fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); } else { stree.stop(true, true).slideDown(opts.durations.slideUpDown, function(){ fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); }); } } }) .always(function(data) { spinner.remove(); link.addClass(loaded); fm.one('treedone', function() { dfrd.resolve(); }); }); } arrow.data('dfrd', dfrd); }) .on('contextmenu', selNavdir, function(e) { e.stopPropagation(); var self = jQuery(this); // now dirname editing if (self.find('input:text').length) { return; } e.preventDefault(); if (!self.data('tmlongtap')) { fm.trigger('contextmenu', { 'type' : 'navbar', 'targets' : [fm.navId2Hash(jQuery(this).attr('id'))], 'x' : e.pageX, 'y' : e.pageY }); } self.addClass('ui-state-hover'); fm.getUI('contextmenu').children().on('mouseenter', function() { self.addClass('ui-state-hover'); }); fm.bind('closecontextmenu', function() { self.removeClass('ui-state-hover'); }); }) .on('scrolltoview', selNavdir, function(e, data) { var self = jQuery(this); autoScroll(self.attr('id')).done(function() { if (!data || data.blink === 'undefined' || data.blink) { fm.resources.blink(self, 'lookme'); } }); }) // prepend fake dir .on('create.'+fm.namespace, function(e, item) { var pdir = findSubtree(item.phash), lock = item.move || false, dir = jQuery(itemhtml(item)).addClass('elfinder-navbar-wrapper-tmp'), selected = fm.selected(); lock && selected.length && fm.trigger('lockfiles', {files: selected}); pdir.prepend(dir); }), scrolling = false, navbarScrTm, // move tree into navbar navbar = fm.getUI('navbar').append(tree).show().on('scroll', function() { scrolling = true; navbarScrTm && cancelAnimationFrame(navbarScrTm); navbarScrTm = requestAnimationFrame(function() { scrolling = false; checkSubdirs(); }); }), prevSortTreeview = fm.sortAlsoTreeview; fm.open(function(e) { var data = e.data, dirs = filter(data.files), contextmenu = fm.getUI('contextmenu'); data.init && tree.empty(); if (fm.UA.iOS) { navbar.removeClass('overflow-scrolling-touch').addClass('overflow-scrolling-touch'); } if (dirs.length) { fm.lazy(function() { if (!contextmenu.data('cmdMaps')) { contextmenu.data('cmdMaps', {}); } updateTree(dirs); updateArrows(dirs, loaded); sync(dirs); }); } else { sync(); } }) // add new dirs .add(function(e) { var dirs = filter(e.data.added); if (dirs.length) { updateTree(dirs); updateArrows(dirs, collapsed); } }) // update changed dirs .change(function(e) { // do ot perfome while syncing if (syncing) { return; } var dirs = filter(e.data.changed, true), length = dirs.length, l = length, tgts = jQuery(), changed = {}, dir, phash, node, tmp, realParent, reqParent, realSibling, reqSibling, isExpanded, isLoaded, parent, subdirs; jQuery.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { change: 'prepare' }); }); while (l--) { dir = dirs[l]; phash = dir.phash; if ((node = fm.navHash2Elm(dir.hash)).length) { parent = node.parent(); if (phash) { realParent = node.closest('.'+subtree); reqParent = findSubtree(phash); realSibling = node.parent().next(); reqSibling = findSibling(reqParent, dir); if (!reqParent.length) { continue; } if (reqParent[0] !== realParent[0] || realSibling.get(0) !== reqSibling.get(0)) { reqSibling.length ? reqSibling.before(parent) : reqParent.append(parent); } } isExpanded = node.hasClass(expanded); isLoaded = node.hasClass(loaded); tmp = jQuery(itemhtml(dir)); node.replaceWith(tmp.children(selNavdir)); ! mobile && updateDroppable(null, parent); if (dir.dirs && (isExpanded || isLoaded) && (node = fm.navHash2Elm(dir.hash)) && node.next('.'+subtree).children().length) { isExpanded && node.addClass(expanded); isLoaded && node.addClass(loaded); } subdirs |= dir.dirs == -1; } } // to check subdirs if (subdirs) { checkSubdirs(); } jQuery.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { change: 'done' }); }); length && sync(void(0), false); }) // remove dirs .remove(function(e) { var dirs = e.data.removed, l = dirs.length, node, stree, removed; jQuery.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { removed : dirs }); node.trigger('update.'+fm.namespace, { change: 'prepare' }); }); while (l--) { if ((node = fm.navHash2Elm(dirs[l])).length) { removed = true; stree = node.closest('.'+subtree); node.parent().detach(); if (!stree.children().length) { stree.hide().prev(selNavdir).removeClass(collapsed+' '+expanded+' '+loaded); } } } removed && fm.getUI('navbar').children('.ui-resizable-handle').trigger('resize'); jQuery.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { change: 'done' }); }); }) // lock/unlock dirs while moving .bind('lockfiles unlockfiles', function(e) { var lock = e.type == 'lockfiles', helperLocked = e.data.helper? e.data.helper.data('locked') : false, act = (lock && !helperLocked) ? 'disable' : 'enable', dirs = jQuery.grep(e.data.files||[], function(h) { var dir = fm.file(h); return dir && dir.mime == 'directory' ? true : false; }); jQuery.each(dirs, function(i, hash) { var dir = fm.navHash2Elm(hash); if (dir.length && !helperLocked) { dir.hasClass(draggable) && dir.draggable(act); dir.hasClass(droppable) && dir.droppable(act); dir[lock ? 'addClass' : 'removeClass'](disabled); } }); }) .bind('sortchange', function() { if (fm.sortAlsoTreeview || prevSortTreeview !== fm.sortAlsoTreeview) { var dirs, ends = [], endsMap = {}, endsVid = {}, topVid = '', single = false, current; fm.lazy(function() { dirs = filter(fm.files()); prevSortTreeview = fm.sortAlsoTreeview; tree.empty(); // append volume roots at first updateTree(jQuery.map(fm.roots, function(h) { var dir = fm.file(h); return dir && !dir.phash? dir : null; })); if (!Object.keys(hasMoreDirs).length) { updateTree(dirs); current = selectPages(); updateArrows(dirs, loaded); } else { ends = getEnds(); if (ends.length > 1) { jQuery.each(ends, function(i, end) { var vid = fm.file(fm.root(end)).volumeid; if (i === 0) { topVid = vid; } endsVid[vid] = end; endsMap[end] = []; }); jQuery.each(dirs, function(i, d) { if (!d.volumeid) { single = true; return false; } endsMap[endsVid[d.volumeid] || endsVid[topVid]].push(d); }); } else { single = true; } if (single) { jQuery.each(ends, function(i, endHash) { updateTree(dirs); current = selectPages(fm.file(endHash)); updateArrows(dirs, loaded); }); } else { jQuery.each(endsMap, function(endHash, dirs) { updateTree(dirs); current = selectPages(fm.file(endHash)); updateArrows(dirs, loaded); }); } } sync(); }, 100); } }); }); return this; }; PK ZxWjs/ui/workzone.jsnuW+A/** * @class elfinderworkzone - elFinder container for nav and current directory * @author Dmitry (dio) Levashov **/ jQuery.fn.elfinderworkzone = function(fm) { "use strict"; var cl = 'elfinder-workzone'; this.not('.'+cl).each(function() { var wz = jQuery(this).addClass(cl), prevH = Math.round(wz.height()), parent = wz.parent(), setDelta = function() { wdelta = wz.outerHeight(true) - wz.height(); }, fitsize = function(e) { var height = parent.height() - wdelta, style = parent.attr('style'), curH = Math.round(wz.height()); if (e) { e.preventDefault(); e.stopPropagation(); } parent.css('overflow', 'hidden') .children(':visible:not(.'+cl+')').each(function() { var ch = jQuery(this); if (ch.css('position') != 'absolute' && ch.css('position') != 'fixed') { height -= ch.outerHeight(true); } }); parent.attr('style', style || ''); height = Math.max(0, Math.round(height)); if (prevH !== height || curH !== height) { prevH = Math.round(wz.height()); wz.height(height); fm.trigger('wzresize'); } }, cssloaded = function() { wdelta = wz.outerHeight(true) - wz.height(); fitsize(); }, wdelta; setDelta(); parent.on('resize.' + fm.namespace, fitsize); fm.one('cssloaded', cssloaded) .bind('uiresize', fitsize) .bind('themechange', setDelta); }); return this; }; PK ZjE@hhjs/ui/dialog.jsnuW+A/** * @class elFinder dialog * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfinderdialog = function(opts, fm) { "use strict"; var platformWin = (window.navigator.platform.indexOf('Win') != -1), delta = {}, syncSize = { enabled: false, width: false, height: false, defaultSize: null }, fitSize = function(dialog) { var opts, node; if (syncSize.enabled) { node = fm.options.dialogContained? elfNode : jQuery(window); opts = { maxWidth : syncSize.width? node.width() - delta.width : null, maxHeight: syncSize.height? node.height() - delta.height : null }; Object.assign(restoreStyle, opts); dialog.css(opts).trigger('resize'); if (dialog.data('hasResizable') && (dialog.resizable('option', 'maxWidth') < opts.maxWidth || dialog.resizable('option', 'maxHeight') < opts.maxHeight)) { dialog.resizable('option', opts); } } }, syncFunc = function(e) { var dialog = e.data; syncTm && cancelAnimationFrame(syncTm); syncTm = requestAnimationFrame(function() { var opts, offset; if (syncSize.enabled) { fitSize(dialog); } }); }, checkEditing = function() { var cldialog = 'elfinder-dialog', dialogs = elfNode.children('.' + cldialog + '.' + fm.res('class', 'editing') + ':visible'); fm[dialogs.length? 'disable' : 'enable'](); }, propagationEvents = {}, syncTm, dialog, elfNode, restoreStyle; if (fm && fm.ui) { elfNode = fm.getUI(); } else { elfNode = this.closest('.elfinder'); if (! fm) { fm = elfNode.elfinder('instance'); } } if (typeof opts === 'string') { if ((dialog = this.closest('.ui-dialog')).length) { if (opts === 'open') { if (dialog.css('display') === 'none') { // Need dialog.show() and hide() to detect elements size in open() callbacks dialog.trigger('posinit').show().trigger('open').hide(); dialog.fadeIn(120, function() { fm.trigger('dialogopened', {dialog: dialog}); }); } } else if (opts === 'close' || opts === 'destroy') { dialog.stop(true); if (dialog.is(':visible') || elfNode.is(':hidden')) { dialog.trigger('close'); fm.trigger('dialogclosed', {dialog: dialog}); } if (opts === 'destroy') { dialog.remove(); fm.trigger('dialogremoved', {dialog: dialog}); } else if (dialog.data('minimized')) { dialog.data('minimized').close(); } } else if (opts === 'toTop') { dialog.trigger('totop'); fm.trigger('dialogtotoped', {dialog: dialog}); } else if (opts === 'posInit') { dialog.trigger('posinit'); fm.trigger('dialogposinited', {dialog: dialog}); } else if (opts === 'tabstopsInit') { dialog.trigger('tabstopsInit'); fm.trigger('dialogtabstopsinited', {dialog: dialog}); } else if (opts === 'checkEditing') { checkEditing(); } } return this; } opts = Object.assign({}, jQuery.fn.elfinderdialog.defaults, opts); if (opts.allowMinimize && opts.allowMinimize === 'auto') { opts.allowMinimize = this.find('textarea,input').length? true : false; } opts.openMaximized = opts.allowMinimize && opts.openMaximized; if (opts.headerBtnPos && opts.headerBtnPos === 'auto') { opts.headerBtnPos = platformWin? 'right' : 'left'; } if (opts.headerBtnOrder && opts.headerBtnOrder === 'auto') { opts.headerBtnOrder = platformWin? 'close:maximize:minimize' : 'close:minimize:maximize'; } if (opts.modal && opts.allowMinimize) { opts.allowMinimize = false; } if (fm.options.dialogContained) { syncSize.width = syncSize.height = syncSize.enabled = true; } else { syncSize.width = (opts.maxWidth === 'window'); syncSize.height = (opts.maxHeight === 'window'); if (syncSize.width || syncSize.height) { syncSize.enabled = true; } } propagationEvents = fm.arrayFlip(opts.propagationEvents, true); this.filter(':not(.ui-dialog-content)').each(function() { var self = jQuery(this).addClass('ui-dialog-content ui-widget-content'), clactive = 'elfinder-dialog-active', cldialog = 'elfinder-dialog', clnotify = 'elfinder-dialog-notify', clhover = 'ui-state-hover', cltabstop = 'elfinder-tabstop', cl1stfocus = 'elfinder-focus', clmodal = 'elfinder-dialog-modal', id = parseInt(Math.random()*1000000), titlebar = jQuery('
      '+opts.title+'
      '), buttonset = jQuery('
      '), buttonpane = jQuery('
      ') .append(buttonset), btnWidth = 0, btnCnt = 0, tabstops = jQuery(), evCover = jQuery('
      ').hide(), numberToTel = function() { if (opts.optimizeNumber) { dialog.find('input[type=number]').each(function() { jQuery(this).attr('inputmode', 'numeric'); jQuery(this).attr('pattern', '[0-9]*'); }); } }, tabstopsInit = function() { tabstops = dialog.find('.'+cltabstop); if (tabstops.length) { tabstops.attr('tabindex', '-1'); if (! tabstops.filter('.'+cl1stfocus).length) { buttonset.children('.'+cltabstop+':'+(platformWin? 'first' : 'last')).addClass(cl1stfocus); } } }, tabstopNext = function(cur) { var elms = tabstops.filter(':visible:enabled'), node = cur? null : elms.filter('.'+cl1stfocus+':first'); if (! node || ! node.length) { node = elms.first(); } if (cur) { jQuery.each(elms, function(i, elm) { if (elm === cur && elms[i+1]) { node = elms.eq(i+1); return false; } }); } return node; }, tabstopPrev = function(cur) { var elms = tabstops.filter(':visible:enabled'), node = elms.last(); jQuery.each(elms, function(i, elm) { if (elm === cur && elms[i-1]) { node = elms.eq(i-1); return false; } }); return node; }, makeHeaderBtn = function() { jQuery.each(opts.headerBtnOrder.split(':').reverse(), function(i, v) { headerBtns[v] && headerBtns[v](); }); if (platformWin) { titlebar.children('.elfinder-titlebar-button').addClass('elfinder-titlebar-button-right'); } }, headerBtns = { close: function() { titlebar.prepend(jQuery('') .on('mousedown touchstart', function(e) { e.preventDefault(); e.stopPropagation(); self.elfinderdialog('close'); }) ); }, maximize: function() { if (opts.allowMaximize) { dialog.on('resize', function(e, data) { var full, elm; e.preventDefault(); e.stopPropagation(); if (data && data.maximize) { elm = titlebar.find('.elfinder-titlebar-full'); full = (data.maximize === 'on'); elm.children('span.ui-icon') .toggleClass('ui-icon-plusthick', ! full) .toggleClass('ui-icon-arrowreturnthick-1-s', full); if (full) { try { dialog.hasClass('ui-draggable') && dialog.draggable('disable'); dialog.hasClass('ui-resizable') && dialog.resizable('disable'); } catch(e) {} self.css('width', '100%').css('height', dialog.height() - dialog.children('.ui-dialog-titlebar').outerHeight(true) - buttonpane.outerHeight(true)); } else { self.attr('style', elm.data('style')); elm.removeData('style'); posCheck(); try { dialog.hasClass('ui-draggable') && dialog.draggable('enable'); dialog.hasClass('ui-resizable') && dialog.resizable('enable'); } catch(e) {} } dialog.trigger('resize', {init: true}); } }); } }, minimize: function() { var btn, mnode, doffset; if (opts.allowMinimize) { btn = jQuery('') .on('mousedown touchstart', function(e) { var $this = jQuery(this), tray = fm.getUI('bottomtray'), dumStyle = { width: 70, height: 24 }, dum = jQuery('
      ').css(dumStyle).addClass(dialog.get(0).className + ' elfinder-dialog-minimized'), close = function() { mnode.remove(); dialog.removeData('minimized').show(); self.elfinderdialog('close'); }, pos = {}; e.preventDefault(); e.stopPropagation(); if (!dialog.data('minimized')) { // minimize doffset = dialog.data('minimized', { dialog : function() { return mnode; }, show : function() { mnode.show(); }, hide : function() { mnode.hide(); }, close : close, title : function(v) { mnode.children('.ui-dialog-titlebar').children('.elfinder-dialog-title').text(v); } }).position(); mnode = dialog.clone().on('mousedown', function() { $this.trigger('mousedown'); }).removeClass('ui-draggable ui-resizable elfinder-frontmost'); tray.append(dum); Object.assign(pos, dum.offset(), dumStyle); dum.remove(); mnode.height(dialog.height()).children('.ui-dialog-content:first').empty(); fm.toHide(dialog.before(mnode)); mnode.children('.ui-dialog-content:first,.ui-dialog-buttonpane,.ui-resizable-handle').remove(); mnode.find('.elfinder-titlebar-minimize,.elfinder-titlebar-full').remove(); mnode.find('.ui-dialog-titlebar-close').on('mousedown', function(e) { e.stopPropagation(); e.preventDefault(); close(); }); mnode.animate(pos, function() { mnode.attr('style', '') .css({ maxWidth: dialog.width() }) .addClass('elfinder-dialog-minimized') .appendTo(tray); checkEditing(); typeof(opts.minimize) === 'function' && opts.minimize.call(self[0]); }); } else { //restore dialog.removeData('minimized').before(mnode.css(Object.assign({'position': 'absolute'}, mnode.offset()))); fm.toFront(mnode); mnode.animate(Object.assign({ width: dialog.width(), height: dialog.height() }, doffset), function() { dialog.show(); fm.toFront(dialog); mnode.remove(); posCheck(); checkEditing(); dialog.trigger('resize', {init: true}); typeof(opts.minimize) === 'function' && opts.minimize.call(self[0]); }); } }); titlebar.on('dblclick', function(e) { jQuery(this).children('.elfinder-titlebar-minimize').trigger('mousedown'); }).prepend(btn); dialog.on('togleminimize', function() { btn.trigger('mousedown'); }); } } }, dialog = jQuery('
      ') .hide() .append(self) .appendTo(elfNode) .draggable({ containment : fm.options.dialogContained? elfNode : null, handle : '.ui-dialog-titlebar', start : function() { evCover.show(); }, drag : function(e, ui) { var top = ui.offset.top, left = ui.offset.left; if (top < 0) { ui.position.top = ui.position.top - top; } if (left < 0) { ui.position.left = ui.position.left - left; } if (fm.options.dialogContained) { ui.position.top < 0 && (ui.position.top = 0); ui.position.left < 0 && (ui.position.left = 0); } }, stop : function(e, ui) { evCover.hide(); dialog.css({height : opts.height}); self.data('draged', true); } }) .css({ width : opts.width, height : opts.height, minWidth : opts.minWidth, minHeight : opts.minHeight, maxWidth : opts.maxWidth, maxHeight : opts.maxHeight }) .on('touchstart touchmove touchend click dblclick mouseup mouseenter mouseleave mouseout mouseover mousemove', function(e) { // stopPropagation of user action events !propagationEvents[e.type] && e.stopPropagation(); }) .on('mousedown', function(e) { !propagationEvents[e.type] && e.stopPropagation(); requestAnimationFrame(function() { if (dialog.is(':visible') && !dialog.hasClass('elfinder-frontmost')) { toFocusNode = jQuery(':focus'); if (!toFocusNode.length) { toFocusNode = void(0); } dialog.trigger('totop'); } }); }) .on('open', function() { dialog.data('margin-y', self.outerHeight(true) - self.height()); if (syncSize.enabled) { if (opts.height && opts.height !== 'auto') { dialog.trigger('resize', {init: true}); } if (!syncSize.defaultSize) { syncSize.defaultSize = { width: self.width(), height: self.height() }; } fitSize(dialog); dialog.trigger('resize').trigger('posinit'); elfNode.on('resize.'+fm.namespace, dialog, syncFunc); } if (!dialog.hasClass(clnotify)) { elfNode.children('.'+cldialog+':visible:not(.'+clnotify+')').each(function() { var d = jQuery(this), top = parseInt(d.css('top')), left = parseInt(d.css('left')), _top = parseInt(dialog.css('top')), _left = parseInt(dialog.css('left')), ct = Math.abs(top - _top) < 10, cl = Math.abs(left - _left) < 10; if (d[0] != dialog[0] && (ct || cl)) { dialog.css({ top : ct ? (top + 10) : _top, left : cl ? (left + 10) : _left }); } }); } if (dialog.data('modal')) { dialog.addClass(clmodal); fm.getUI('overlay').elfinderoverlay('show'); } dialog.trigger('totop'); opts.openMaximized && fm.toggleMaximize(dialog); fm.trigger('dialogopen', {dialog: dialog}); typeof(opts.open) == 'function' && jQuery.proxy(opts.open, self[0])(); if (opts.closeOnEscape) { jQuery(document).on('keydown.'+id, function(e) { if (e.keyCode == jQuery.ui.keyCode.ESCAPE && dialog.hasClass('elfinder-frontmost')) { self.elfinderdialog('close'); } }); } dialog.hasClass(fm.res('class', 'editing')) && checkEditing(); }) .on('close', function(e) { var dialogs, dfd; if (opts.beforeclose && typeof opts.beforeclose === 'function') { dfd = opts.beforeclose(); if (!dfd || !dfd.promise) { dfd = !dfd? jQuery.Deferred().reject() : jQuery.Deferred().resolve(); } } else { dfd = jQuery.Deferred().resolve(); } dfd.done(function() { syncSize.enabled && elfNode.off('resize.'+fm.namespace, syncFunc); if (opts.closeOnEscape) { jQuery(document).off('keyup.'+id); } if (opts.allowMaximize) { fm.toggleMaximize(dialog, false); } fm.toHide(dialog); dialog.data('modal') && fm.getUI('overlay').elfinderoverlay('hide'); if (typeof(opts.close) == 'function') { jQuery.proxy(opts.close, self[0])(); } if (opts.destroyOnClose && dialog.parent().length) { dialog.hide().remove(); } // get focus to next dialog dialogs = elfNode.children('.'+cldialog+':visible'); dialog.hasClass(fm.res('class', 'editing')) && checkEditing(); }); }) .on('totop frontmost', function() { var s = fm.storage('autoFocusDialog'); dialog.data('focusOnMouseOver', s? (s > 0) : fm.options.uiOptions.dialog.focusOnMouseOver); if (dialog.data('minimized')) { titlebar.children('.elfinder-titlebar-minimize').trigger('mousedown'); } if (!dialog.data('modal') && fm.getUI('overlay').is(':visible')) { fm.getUI('overlay').before(dialog); } else { fm.toFront(dialog); } elfNode.children('.'+cldialog+':not(.'+clmodal+')').removeClass(clactive); dialog.addClass(clactive); ! fm.UA.Mobile && (toFocusNode || tabstopNext()).trigger('focus'); toFocusNode = void(0); }) .on('posinit', function() { var css = opts.position, nodeOffset, minTop, minLeft, outerSize, win, winSize, nodeFull; if (dialog.hasClass('elfinder-maximized')) { return; } if (! css && ! dialog.data('resizing')) { nodeFull = elfNode.hasClass('elfinder-fullscreen') || fm.options.enableAlways; dialog.css(nodeFull? { maxWidth : '100%', maxHeight : '100%', overflow : 'auto' } : restoreStyle); if (fm.UA.Mobile && !nodeFull && dialog.data('rotated') === fm.UA.Rotated) { return; } dialog.data('rotated', fm.UA.Rotated); win = jQuery(window); nodeOffset = elfNode.offset(); outerSize = { width : dialog.outerWidth(true), height: dialog.outerHeight(true) }; outerSize.right = nodeOffset.left + outerSize.width; outerSize.bottom = nodeOffset.top + outerSize.height; winSize = { scrLeft: win.scrollLeft(), scrTop : win.scrollTop(), width : win.width(), height : win.height() }; winSize.right = winSize.scrLeft + winSize.width; winSize.bottom = winSize.scrTop + winSize.height; if (fm.options.dialogContained || nodeFull) { minTop = 0; minLeft = 0; } else { minTop = nodeOffset.top * -1 + winSize.scrTop; minLeft = nodeOffset.left * -1 + winSize.scrLeft; } css = { top : outerSize.height >= winSize.height? minTop : Math.max(minTop, parseInt((elfNode.height() - outerSize.height)/2 - 42)), left : outerSize.width >= winSize.width ? minLeft : Math.max(minLeft, parseInt((elfNode.width() - outerSize.width)/2)) }; if (outerSize.right + css.left > winSize.right) { css.left = Math.max(minLeft, winSize.right - outerSize.right); } if (outerSize.bottom + css.top > winSize.bottom) { css.top = Math.max(minTop, winSize.bottom - outerSize.bottom); } } if (opts.absolute) { css.position = 'absolute'; } css && dialog.css(css); }) .on('resize', function(e, data) { var oh = 0, init = data && data.init, h, minH, maxH, autoH; if ((data && (data.minimize || data.maxmize)) || dialog.data('minimized')) { return; } e.stopPropagation(); e.preventDefault(); dialog.children('.ui-widget-header,.ui-dialog-buttonpane').each(function() { oh += jQuery(this).outerHeight(true); }); autoH = (opts.height === 'auto')? true : false; if (autoH) { self.css({'max-height': '', 'height': 'auto'}); } if (!init && syncSize.enabled && !e.originalEvent && !dialog.hasClass('elfinder-maximized')) { h = dialog.height(); minH = dialog.css('min-height') || h; maxH = dialog.css('max-height') || h; if (minH.match(/%/)) { minH = Math.floor((parseInt(minH) / 100) * dialog.parent().height()); } else { minH = parseInt(minH); } if (maxH.match(/%/)) { maxH = Math.floor((parseInt(maxH) / 100) * dialog.parent().height()); } else { maxH = parseInt(maxH); } h = Math.min((autoH? dialog.height() : syncSize.defaultSize.height), Math.max(maxH, minH) - oh - dialog.data('margin-y')); } else { h = dialog.height() - oh - dialog.data('margin-y'); } self.css(autoH? 'max-height' : 'height', h); if (init) { return; } posCheck(); minH = self.height(); minH = (h < minH)? (minH + oh + dialog.data('margin-y')) : opts.minHeight; dialog.css('min-height', minH); dialog.data('hasResizable') && dialog.resizable('option', { minHeight: minH }); if (typeof(opts.resize) === 'function') { jQuery.proxy(opts.resize, self[0])(e, data); } }) .on('tabstopsInit', tabstopsInit) .on('focus', '.'+cltabstop, function() { jQuery(this).addClass(clhover).parent('label').addClass(clhover); this.id && jQuery(this).parent().find('label[for='+this.id+']').addClass(clhover); }) .on('click', 'select.'+cltabstop, function() { var node = jQuery(this); node.data('keepFocus')? node.removeData('keepFocus') : node.data('keepFocus', true); }) .on('blur', '.'+cltabstop, function() { jQuery(this).removeClass(clhover).removeData('keepFocus').parent('label').removeClass(clhover); this.id && jQuery(this).parent().find('label[for='+this.id+']').removeClass(clhover); }) .on('mouseenter mouseleave', '.'+cltabstop+',label', function(e) { var $this = jQuery(this), labelfor; if (this.nodeName === 'LABEL') { if (!$this.children('.'+cltabstop).length && (!(labelfor = $this.attr('for')) || !jQuery('#'+labelfor).hasClass(cltabstop))) { return; } } if (opts.btnHoverFocus && dialog.data('focusOnMouseOver')) { if (e.type === 'mouseenter' && ! jQuery(':focus').data('keepFocus')) { $this.trigger('focus'); } } else { $this.toggleClass(clhover, e.type == 'mouseenter'); } }) .on('keydown', '.'+cltabstop, function(e) { var $this = jQuery(this), esc, move, moveTo; if ($this.is(':focus')) { esc = e.keyCode === jQuery.ui.keyCode.ESCAPE; if (e.keyCode === jQuery.ui.keyCode.ENTER) { e.preventDefault(); $this.trigger('click'); } else if (((e.keyCode === jQuery.ui.keyCode.TAB) && e.shiftKey) || e.keyCode === jQuery.ui.keyCode.LEFT || e.keyCode == jQuery.ui.keyCode.UP) { move = 'prev'; } else if (e.keyCode === jQuery.ui.keyCode.TAB || e.keyCode == jQuery.ui.keyCode.RIGHT || e.keyCode == jQuery.ui.keyCode.DOWN) { move = 'next'; } if (move && ( ($this.is('textarea') && !(e.ctrlKey || e.metaKey)) || ($this.is('select,span.ui-slider-handle') && e.keyCode !== jQuery.ui.keyCode.TAB) || ($this.is('input:not(:checkbox,:radio)') && (!(e.ctrlKey || e.metaKey) && e.keyCode === jQuery.ui.keyCode[move === 'prev'? 'LEFT':'RIGHT'])) ) ) { e.stopPropagation(); return; } if (!esc) { e.stopPropagation(); } else if ($this.is('input:not(:checkbox,:radio),textarea')) { if ($this.val() !== '') { $this.val(''); e.stopPropagation(); } } if (move) { e.preventDefault(); (move === 'prev'? tabstopPrev : tabstopNext)(this).trigger('focus'); } } }) .data({modal: opts.modal}), posCheck = function() { var node = fm.getUI(), pos; if (node.hasClass('elfinder-fullscreen')) { pos = dialog.position(); dialog.css('top', Math.max(Math.min(Math.max(pos.top, 0), node.height() - 100), 0)); dialog.css('left', Math.max(Math.min(Math.max(pos.left, 0), node.width() - 200), 0)); } }, maxSize, toFocusNode; dialog.prepend(titlebar); makeHeaderBtn(); jQuery.each(opts.buttons, function(name, cb) { var button = jQuery('') .on('click', jQuery.proxy(cb, self[0])); if (cb._cssClass) { button.addClass(cb._cssClass); } if (platformWin) { buttonset.append(button); } else { buttonset.prepend(button); } }); if (buttonset.children().length) { dialog.append(buttonpane); dialog.show(); buttonpane.find('button').each(function(i, btn) { btnWidth += jQuery(btn).outerWidth(true); }); dialog.hide(); btnWidth += 20; if (dialog.width() < btnWidth) { dialog.width(btnWidth); } } dialog.append(evCover); if (syncSize.enabled) { delta.width = dialog.outerWidth(true) - dialog.width() + ((dialog.outerWidth() - dialog.width()) / 2); delta.height = dialog.outerHeight(true) - dialog.height() + ((dialog.outerHeight() - dialog.height()) / 2); } if (fm.options.dialogContained) { maxSize = { maxWidth: elfNode.width() - delta.width, maxHeight: elfNode.height() - delta.height }; opts.maxWidth = opts.maxWidth? Math.min(maxSize.maxWidth, opts.maxWidth) : maxSize.maxWidth; opts.maxHeight = opts.maxHeight? Math.min(maxSize.maxHeight, opts.maxHeight) : maxSize.maxHeight; dialog.css(maxSize); } restoreStyle = { maxWidth : dialog.css('max-width'), maxHeight : dialog.css('max-height'), overflow : dialog.css('overflow') }; if (opts.resizable) { dialog.resizable({ minWidth : opts.minWidth, minHeight : opts.minHeight, maxWidth : opts.maxWidth, maxHeight : opts.maxHeight, start : function() { evCover.show(); if (dialog.data('resizing') !== true && dialog.data('resizing')) { clearTimeout(dialog.data('resizing')); } dialog.data('resizing', true); }, stop : function(e, ui) { evCover.hide(); dialog.data('resizing', setTimeout(function() { dialog.data('resizing', false); }, 200)); if (syncSize.enabled) { syncSize.defaultSize = { width: self.width(), height: self.height() }; } } }).data('hasResizable', true); } numberToTel(); tabstopsInit(); typeof(opts.create) == 'function' && jQuery.proxy(opts.create, this)(); if (opts.autoOpen) { if (opts.open) { requestAnimationFrame(function() { self.elfinderdialog('open'); }); } else { self.elfinderdialog('open'); } } if (opts.resize) { fm.bind('themechange', function() { setTimeout(function() { dialog.data('margin-y', self.outerHeight(true) - self.height()); dialog.trigger('resize', {init: true}); }, 300); }); } }); return this; }; jQuery.fn.elfinderdialog.defaults = { cssClass : '', title : '', modal : false, resizable : true, autoOpen : true, closeOnEscape : true, destroyOnClose : false, buttons : {}, btnHoverFocus : true, position : null, absolute : false, width : 320, height : 'auto', minWidth : 200, minHeight : 70, maxWidth : null, maxHeight : null, allowMinimize : 'auto', allowMaximize : false, openMaximized : false, headerBtnPos : 'auto', headerBtnOrder : 'auto', optimizeNumber : true, propagationEvents : ['mousemove', 'mouseup'] };PK Z~# js/ui/toast.jsnuW+A/** * @class elFinder toast * * This was created inspired by the toastr. Thanks to developers of toastr. * CodeSeven/toastr: http://johnpapa.net * * @author Naoki Sawada **/ jQuery.fn.elfindertoast = function(opts, fm) { "use strict"; var defOpts = Object.assign({ mode: 'success', // or 'info', 'warning' and 'error' msg: '', showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery showDuration: 300, showEasing: 'swing', //swing and linear are built into jQuery onShown: undefined, hideMethod: 'fadeOut', hideDuration: 1500, hideEasing: 'swing', onHidden: undefined, timeOut: 3000, extNode: undefined, button: undefined, width: undefined }, jQuery.isPlainObject(fm.options.uiOptions.toast.defaults)? fm.options.uiOptions.toast.defaults : {}); return this.each(function() { opts = Object.assign({}, defOpts, opts || {}); var self = jQuery(this), show = function(notm) { self.stop(); fm.toFront(self); self[opts.showMethod]({ duration: opts.showDuration, easing: opts.showEasing, complete: function() { opts.onShown && opts.onShown(); if (!notm && opts.timeOut) { rmTm = setTimeout(rm, opts.timeOut); } } }); }, rm = function() { self[opts.hideMethod]({ duration: opts.hideDuration, easing: opts.hideEasing, complete: function() { opts.onHidden && opts.onHidden(); self.remove(); } }); }, rmTm; self.on('click', function(e) { e.stopPropagation(); e.preventDefault(); rmTm && clearTimeout(rmTm); opts.onHidden && opts.onHidden(); self.stop().remove(); }).on('mouseenter mouseleave', function(e) { if (opts.timeOut) { rmTm && clearTimeout(rmTm); rmTm = null; if (e.type === 'mouseenter') { show(true); } else { rmTm = setTimeout(rm, opts.timeOut); } } }).hide().addClass('toast-' + opts.mode).append(jQuery('
      ').html(opts.msg.replace(/%([a-zA-Z0-9]+)%/g, function(m, m1) { return fm.i18n(m1); }))); if (opts.extNode) { self.append(opts.extNode); } if (opts.button) { self.append( jQuery('') .append(jQuery('').text(fm.i18n(opts.button.text))) .on('mouseenter mouseleave', function(e) { jQuery(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); }) .on('click', opts.button.click || function(){}) ); } if (opts.width) { self.css('max-width', opts.width); } show(); }); };PK Z[%㳛^^ js/ui/cwd.jsnuW+A/** * elFinder current working directory ui. * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfindercwd = function(fm, options) { "use strict"; this.not('.elfinder-cwd').each(function() { // fm.time('cwdLoad'); var mobile = fm.UA.Mobile, list = fm.viewType == 'list', undef = 'undefined', /** * Select event full name * * @type String **/ evtSelect = 'select.'+fm.namespace, /** * Unselect event full name * * @type String **/ evtUnselect = 'unselect.'+fm.namespace, /** * Disable event full name * * @type String **/ evtDisable = 'disable.'+fm.namespace, /** * Disable event full name * * @type String **/ evtEnable = 'enable.'+fm.namespace, c = 'class', /** * File css class * * @type String **/ clFile = fm.res(c, 'cwdfile'), /** * Selected css class * * @type String **/ fileSelector = '.'+clFile, /** * Selected css class * * @type String **/ clSelected = 'ui-selected', /** * Disabled css class * * @type String **/ clDisabled = fm.res(c, 'disabled'), /** * Draggable css class * * @type String **/ clDraggable = fm.res(c, 'draggable'), /** * Droppable css class * * @type String **/ clDroppable = fm.res(c, 'droppable'), /** * Hover css class * * @type String **/ clHover = fm.res(c, 'hover'), /** * Active css class * * @type String **/ clActive = fm.res(c, 'active'), /** * Hover css class * * @type String **/ clDropActive = fm.res(c, 'adroppable'), /** * Css class for temporary nodes (for mkdir/mkfile) commands * * @type String **/ clTmp = clFile+'-tmp', /** * Select checkbox css class * * @type String */ clSelChk = 'elfinder-cwd-selectchk', /** * Number of thumbnails to load in one request (new api only) * * @type Number **/ tmbNum = fm.options.loadTmbs > 0 ? fm.options.loadTmbs : 5, /** * Current search query. * * @type String */ query = '', /** * Currect clipboard(cut) hashes as object key * * @type Object */ clipCuts = {}, /** * Parents hashes of cwd * * @type Array */ cwdParents = [], /** * cwd current hashes * * @type Array */ cwdHashes = [], /** * incsearch current hashes * * @type Array */ incHashes = void 0, /** * Custom columns name and order * * @type Array */ customCols = [], /** * Current clicked element id of first time for dblclick * * @type String */ curClickId = '', /** * Custom columns builder * * @type Function */ customColsBuild = function() { var cols = ''; for (var i = 0; i < customCols.length; i++) { cols += '{' + customCols[i] + '}'; } return cols; }, /** * Make template.row from customCols * * @type Function */ makeTemplateRow = function() { return '
      {marker}{name}
      '+selectCheckbox+''+customColsBuild()+''; }, selectCheckbox = (jQuery.map(options.showSelectCheckboxUA, function(t) {return (fm.UA[t] || t.match(/^all$/i))? true : null;}).length)? '
      ' : '', colResizing = false, colWidth = null, /** * Table header height */ thHeight, /** * File templates * * @type Object **/ templates = { icon : '
      {marker}
      {name}
      '+selectCheckbox+'
      ', row : '' }, permsTpl = fm.res('tpl', 'perms'), lockTpl = fm.res('tpl', 'lock'), symlinkTpl = fm.res('tpl', 'symlink'), /** * Template placeholders replacement rules * * @type Object **/ replacement = { id : function(f) { return fm.cwdHash2Id(f.hash); }, name : function(f) { var name = fm.escape(f.i18 || f.name); !list && (name = name.replace(/([_.])/g, '​$1')); return name; }, nametitle : function(f) { return fm.escape(f.i18 || f.name); }, permsclass : function(f) { return fm.perms2class(f); }, perm : function(f) { return fm.formatPermissions(f); }, dirclass : function(f) { var cName = f.mime == 'directory' ? 'directory' : ''; f.isroot && (cName += ' isroot'); f.csscls && (cName += ' ' + fm.escape(f.csscls)); options.getClass && (cName += ' ' + options.getClass(f)); return cName; }, style : function(f) { return f.icon? fm.getIconStyle(f) : ''; }, mime : function(f) { var cName = fm.mime2class(f.mime); f.icon && (cName += ' elfinder-cwd-bgurl'); return cName; }, size : function(f) { return (f.mime === 'directory' && !f.size)? '-' : fm.formatSize(f.size); }, date : function(f) { return fm.formatDate(f); }, kind : function(f) { return fm.mime2kind(f); }, mode : function(f) { return f.perm? fm.formatFileMode(f.perm) : ''; }, modestr : function(f) { return f.perm? fm.formatFileMode(f.perm, 'string') : ''; }, modeoct : function(f) { return f.perm? fm.formatFileMode(f.perm, 'octal') : ''; }, modeboth : function(f) { return f.perm? fm.formatFileMode(f.perm, 'both') : ''; }, marker : function(f) { return (f.alias || f.mime == 'symlink-broken' ? symlinkTpl : '')+(!f.read || !f.write ? permsTpl : '')+(f.locked ? lockTpl : ''); }, tooltip : function(f) { var title = fm.formatDate(f) + (f.size > 0 ? ' ('+fm.formatSize(f.size)+')' : ''), info = ''; if (query && f.path) { info = fm.escape(f.path.replace(/\/[^\/]*$/, '')); } else { info = f.tooltip? fm.escape(f.tooltip).replace(/\r/g, ' ') : ''; } if (list) { info += (info? ' ' : '') + fm.escape(f.i18 || f.name); } return info? info + ' ' + title : title; } }, /** * Type badge CSS added flag * * @type Object */ addedBadges = {}, /** * Type badge style sheet element * * @type Object */ addBadgeStyleSheet, /** * Add type badge CSS into 'head' * * @type Fundtion */ addBadgeStyle = function(mime, name) { var sel, ext, type; if (mime && ! addedBadges[mime]) { if (typeof addBadgeStyleSheet === 'undefined') { if (jQuery('#elfinderAddBadgeStyle'+fm.namespace).length) { jQuery('#elfinderAddBadgeStyle'+fm.namespace).remove(); } addBadgeStyleSheet = jQuery('').insertBefore(jQuery('head').children(':first')).get(0).sheet || null; } if (addBadgeStyleSheet) { mime = mime.toLowerCase(); type = mime.split('/'); ext = fm.escape(fm.mimeTypes[mime] || (name.replace(/.bac?k$/i, '').match(/\.([^.]+)$/) || ['',''])[1]); if (ext) { sel = '.elfinder-cwd-icon-' + type[0].replace(/(\.|\+)/g, '-'); if (typeof type[1] !== 'undefined') { sel += '.elfinder-cwd-icon-' + type[1].replace(/(\.|\+)/g, '-'); } try { addBadgeStyleSheet.insertRule(sel + ':before{content:"' + ext.toLowerCase() + '"}', 0); } catch(e) {} } addedBadges[mime] = true; } } }, /** * Return file html * * @param Object file info * @return String **/ itemhtml = function(f) { f.mime && f.mime !== 'directory' && !addedBadges[f.mime] && addBadgeStyle(f.mime, f.name); return templates[list ? 'row' : 'icon'] .replace(/\{([a-z0-9_]+)\}/g, function(s, e) { return replacement[e] ? replacement[e](f, fm) : (f[e] ? f[e] : ''); }); }, /** * jQueery node that will be selected next * * @type Object jQuery node */ selectedNext = jQuery(), /** * Flag. Required for msie to avoid unselect files on dragstart * * @type Boolean **/ selectLock = false, /** * Move selection to prev/next file * * @param String move direction * @param Boolean append to current selection * @return void * @rise select */ select = function(keyCode, append) { var code = jQuery.ui.keyCode, prev = keyCode == code.LEFT || keyCode == code.UP, sel = cwd.find('[id].'+clSelected), selector = prev ? 'first:' : 'last', s, n, sib, top, left; function sibling(n, direction) { return n[direction+'All']('[id]:not(.'+clDisabled+'):not(.elfinder-cwd-parent):first'); } if (sel.length) { s = sel.filter(prev ? ':first' : ':last'); sib = sibling(s, prev ? 'prev' : 'next'); if (!sib.length) { // there is no sibling on required side - do not move selection n = s; } else if (list || keyCode == code.LEFT || keyCode == code.RIGHT) { // find real prevoius file n = sib; } else { // find up/down side file in icons view top = s.position().top; left = s.position().left; n = s; if (prev) { do { n = n.prev('[id]'); } while (n.length && !(n.position().top < top && n.position().left <= left)); if (n.hasClass(clDisabled)) { n = sibling(n, 'next'); } } else { do { n = n.next('[id]'); } while (n.length && !(n.position().top > top && n.position().left >= left)); if (n.hasClass(clDisabled)) { n = sibling(n, 'prev'); } // there is row before last one - select last file if (!n.length) { sib = cwd.find('[id]:not(.'+clDisabled+'):last'); if (sib.position().top > top) { n = sib; } } } } // !append && unselectAll(); } else { if (selectedNext.length) { n = prev? selectedNext.prev() : selectedNext; } else { // there are no selected file - select first/last one n = cwd.find('[id]:not(.'+clDisabled+'):not(.elfinder-cwd-parent):'+(prev ? 'last' : 'first')); } } if (n && n.length && !n.hasClass('elfinder-cwd-parent')) { if (s && append) { // append new files to selected n = s.add(s[prev ? 'prevUntil' : 'nextUntil']('#'+n.attr('id'))).add(n); } else { // unselect selected files sel.trigger(evtUnselect); } // select file(s) n.trigger(evtSelect); // set its visible scrollToView(n.filter(prev ? ':first' : ':last')); // update cache/view trigger(); } }, selectedFiles = {}, selectFile = function(hash) { fm.cwdHash2Elm(hash).trigger(evtSelect); }, allSelected = false, selectAll = function() { var phash = fm.cwd().hash; selectCheckbox && selectAllCheckbox.find('input').prop('checked', true); fm.lazy(function() { var files; if (fm.maxTargets && (incHashes || cwdHashes).length > fm.maxTargets) { unselectAll({ notrigger: true }); files = jQuery.map(incHashes || cwdHashes, function(hash) { return fm.file(hash) || null; }); files = files.slice(0, fm.maxTargets); selectedFiles = {}; jQuery.each(files, function(i, v) { selectedFiles[v.hash] = true; fm.cwdHash2Elm(v.hash).trigger(evtSelect); }); fm.toast({mode: 'warning', msg: fm.i18n(['errMaxTargets', fm.maxTargets])}); } else { cwd.find('[id]:not(.'+clSelected+'):not(.elfinder-cwd-parent)').trigger(evtSelect); selectedFiles = fm.arrayFlip(incHashes || cwdHashes, true); } trigger(); selectCheckbox && selectAllCheckbox.data('pending', false); }, 0, {repaint: true}); }, /** * Unselect all files * * @param Object options * @return void */ unselectAll = function(opts) { var o = opts || {}; selectCheckbox && selectAllCheckbox.find('input').prop('checked', false); if (Object.keys(selectedFiles).length) { selectLock = false; selectedFiles = {}; cwd.find('[id].'+clSelected).trigger(evtUnselect); selectCheckbox && cwd.find('input:checkbox.'+clSelChk).prop('checked', false); } !o.notrigger && trigger(); selectCheckbox && selectAllCheckbox.data('pending', false); cwd.removeClass('elfinder-cwd-allselected'); }, selectInvert = function() { var invHashes = {}; if (allSelected) { unselectAll(); } else if (! Object.keys(selectedFiles).length) { selectAll(); } else { jQuery.each((incHashes || cwdHashes), function(i, h) { var itemNode = fm.cwdHash2Elm(h); if (! selectedFiles[h]) { invHashes[h] = true; itemNode.length && itemNode.trigger(evtSelect); } else { itemNode.length && itemNode.trigger(evtUnselect); } }); selectedFiles = invHashes; trigger(); } }, /** * Return selected files hashes list * * @return Array */ selected = function() { return Object.keys(selectedFiles); }, /** * Last selected node id * * @type String|Void */ lastSelect = void 0, /** * Fire elfinder "select" event and pass selected files to it * * @return void */ trigger = function() { var selected = Object.keys(selectedFiles), opts = { selected : selected, origin : 'cwd' }; if (oldSchoolItem && (selected.length > 1 || selected[0] !== fm.cwdId2Hash( oldSchoolItem.attr('id'))) && oldSchoolItem.hasClass(clSelected)) { oldSchoolItem.trigger(evtUnselect); } allSelected = selected.length && (selected.length === (incHashes || cwdHashes).length) && (!fm.maxTargets || selected.length <= fm.maxTargets); if (selectCheckbox) { selectAllCheckbox.find('input').prop('checked', allSelected); cwd[allSelected? 'addClass' : 'removeClass']('elfinder-cwd-allselected'); } if (allSelected) { opts.selectall = true; } else if (! selected.length) { opts.unselectall = true; } fm.trigger('select', opts); }, /** * Scroll file to set it visible * * @param DOMElement file/dir node * @return void */ scrollToView = function(o, blink) { if (! o.length) { return; } var ftop = o.position().top, fheight = o.outerHeight(true), wtop = wrapper.scrollTop(), wheight = wrapper.get(0).clientHeight, thheight = tableHeader? tableHeader.outerHeight(true) : 0; if (ftop + thheight + fheight > wtop + wheight) { wrapper.scrollTop(parseInt(ftop + thheight + fheight - wheight)); } else if (ftop < wtop) { wrapper.scrollTop(ftop); } list && wrapper.scrollLeft(0); !!blink && fm.resources.blink(o, 'lookme'); }, /** * Files we get from server but not show yet * * @type Array **/ buffer = [], /** * Extra data of buffer * * @type Object **/ bufferExt = {}, /** * Return index of elements with required hash in buffer * * @param String file hash * @return Number */ index = function(hash) { var l = buffer.length; while (l--) { if (buffer[l].hash == hash) { return l; } } return -1; }, /** * Scroll start event name * * @type String **/ scrollStartEvent = 'elfscrstart', /** * Scroll stop event name * * @type String **/ scrollEvent = 'elfscrstop', scrolling = false, /** * jQuery UI selectable option * * @type Object */ selectableOption = { disabled : true, filter : '[id]:first', stop : trigger, delay : 250, appendTo : 'body', autoRefresh: false, selected : function(e, ui) { jQuery(ui.selected).trigger(evtSelect); }, unselected : function(e, ui) { jQuery(ui.unselected).trigger(evtUnselect); } }, /** * hashes of items displayed in current view * * @type Object ItemHash => DomId */ inViewHashes = {}, /** * Processing when the current view is changed (On open, search, scroll, resize etc.) * * @return void */ wrapperRepaint = function(init, recnt) { if (!bufferExt.renderd) { return; } var firstNode = (list? cwd.find('tbody:first') : cwd).children('[id]'+(options.oldSchool? ':not(.elfinder-cwd-parent)' : '')+':first'); if (!firstNode.length) { return; } var selectable = cwd.data('selectable'), rec = (function() { var wos = wrapper.offset(), ww = wrapper.width(), w = jQuery(window), x = firstNode.width() / 2, l = Math.min(wos.left - w.scrollLeft() + (fm.direction === 'ltr'? x : ww - x), wos.left + ww - 10), t = wos.top - w.scrollTop() + 10 + (list? thHeight : 0); return {left: Math.max(0, Math.round(l)), top: Math.max(0, Math.round(t))}; })(), tgt = init? firstNode : jQuery(document.elementFromPoint(rec.left , rec.top)), ids = {}, tmbs = {}, multi = 5, cnt = Math.ceil((bufferExt.hpi? Math.ceil((wz.data('rectangle').height / bufferExt.hpi) * 1.5) : showFiles) / multi), chk = function() { var id, hash, file, i; for (i = 0; i < multi; i++) { id = tgt.attr('id'); if (id) { bufferExt.getTmbs = []; hash = fm.cwdId2Hash(id); inViewHashes[hash] = id; // for tmbs if (bufferExt.attachTmbs[hash]) { tmbs[hash] = bufferExt.attachTmbs[hash]; } // for selectable selectable && (ids[id] = true); } // next node tgt = tgt.next(); if (!tgt.length) { break; } } }, done = function() { var idsArr; if (cwd.data('selectable')) { Object.assign(ids, selectedFiles); idsArr = Object.keys(ids); if (idsArr.length) { selectableOption.filter = '#'+idsArr.join(', #'); cwd.selectable('enable').selectable('option', {filter : selectableOption.filter}).selectable('refresh'); } } if (Object.keys(tmbs).length) { bufferExt.getTmbs = []; attachThumbnails(tmbs); } }, setTarget = function() { if (!tgt.hasClass(clFile)) { tgt = tgt.closest(fileSelector); } }, arr, widget; inViewHashes = {}; selectable && cwd.selectable('option', 'disabled'); if (tgt.length) { if (!tgt.hasClass(clFile) && !tgt.closest(fileSelector).length) { // dialog, serach button etc. widget = fm.getUI().find('.ui-dialog:visible,.ui-widget:visible'); if (widget.length) { widget.hide(); tgt = jQuery(document.elementFromPoint(rec.left , rec.top)); widget.show(); } else { widget = null; } } setTarget(); if (!tgt.length) { // try search 5px down widget && widget.hide(); tgt = jQuery(document.elementFromPoint(rec.left , rec.top + 5)); widget && widget.show(); setTarget(); } } if (tgt.length) { if (tgt.attr('id')) { if (init) { for (var i = 0; i < cnt; i++) { chk(); if (! tgt.length) { break; } } done(); } else { bufferExt.repaintJob && bufferExt.repaintJob.state() === 'pending' && bufferExt.repaintJob.reject(); arr = new Array(cnt); bufferExt.repaintJob = fm.asyncJob(function() { chk(); if (! tgt.length) { done(); bufferExt.repaintJob && bufferExt.repaintJob.state() === 'pending' && bufferExt.repaintJob.reject(); } }, arr).done(done); } } } else if (init && bufferExt.renderd) { // In initial request, cwd DOM not renderd so doing lazy check recnt = recnt || 0; if (recnt < 10) { // Prevent infinite loop requestAnimationFrame(function() { wrapperRepaint(init, ++recnt); }); } } }, /** * Item node of oldScholl ".." */ oldSchoolItem = null, /** * display parent folder with ".." name * * @param String phash * @return void */ oldSchool = function(p) { var phash = fm.cwd().phash, pdir = fm.file(phash) || null, set = function(pdir) { if (pdir) { oldSchoolItem = jQuery(itemhtml(jQuery.extend(true, {}, pdir, {name : '..', i18 : '..', mime : 'directory'}))) .addClass('elfinder-cwd-parent') .on('dblclick', function() { fm.trigger('select', {selected : [phash]}).exec('open', phash); }); (list ? oldSchoolItem.children('td:first') : oldSchoolItem).children('.elfinder-cwd-select').remove(); if (fm.cwdHash2Elm(phash).length) { fm.cwdHash2Elm(phash).replaceWith(oldSchoolItem); } else { (list ? cwd.find('tbody') : cwd).prepend(oldSchoolItem); } fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); } }; if (pdir) { set(pdir); } else { set({hash: phash, read: true, write: true}); if (fm.getUI('tree').length) { fm.one('parents', function() { set(fm.file(phash) || null); wrapper.trigger(scrollEvent); }); } else { fm.request({ data : {cmd : 'parents', target : fm.cwd().hash}, preventFail : true }) .done(function(data) { set(fm.file(phash) || null); wrapper.trigger(scrollEvent); }); } } }, showFiles = fm.options.showFiles, /** * Cwd scroll event handler. * Lazy load - append to cwd not shown files * * @return void */ render = function() { if (bufferExt.rendering || (bufferExt.renderd && ! buffer.length)) { return; } var place = (list ? cwd.children('table').children('tbody') : cwd), phash, chk, // created document fragment for jQuery >= 1.12, 2.2, 3.0 // see Studio-42/elFinder#1544 @ github docFlag = jQuery.htmlPrefilter? true : false, tempDom = docFlag? jQuery(document.createDocumentFragment()) : jQuery('
      '), go = function(o){ var over = o || null, html = [], dirs = false, atmb = {}, stmb = (fm.option('tmbUrl') === 'self'), init = bufferExt.renderd? false : true, files, locks, selected; files = buffer.splice(0, showFiles + (over || 0) / (bufferExt.hpi || 1)); bufferExt.renderd += files.length; if (! buffer.length) { bottomMarker.hide(); wrapper.off(scrollEvent, render); } locks = []; html = jQuery.map(files, function(f) { if (f.hash && f.name) { if (f.mime == 'directory') { dirs = true; } if ((f.tmb && (f.tmb != 1 || f.size > 0)) || (stmb && f.mime.indexOf('image/') === 0)) { atmb[f.hash] = f.tmb || 'self'; } clipCuts[f.hash] && locks.push(f.hash); return itemhtml(f); } return null; }); // html into temp node tempDom.empty().append(html.join('')); // make directory droppable dirs && !mobile && makeDroppable(tempDom); // check selected items selected = []; if (Object.keys(selectedFiles).length) { tempDom.find('[id]:not(.'+clSelected+'):not(.elfinder-cwd-parent)').each(function() { selectedFiles[fm.cwdId2Hash(this.id)] && selected.push(jQuery(this)); }); } // append to cwd place.append(docFlag? tempDom : tempDom.children()); // trigger select if (selected.length) { jQuery.each(selected, function(i, n) { n.trigger(evtSelect); }); trigger(); } locks.length && fm.trigger('lockfiles', {files: locks}); !bufferExt.hpi && bottomMarkerShow(place, files.length); if (list) { // show thead cwd.find('thead').show(); // fixed table header fixTableHeader({fitWidth: ! colWidth}); } if (Object.keys(atmb).length) { Object.assign(bufferExt.attachTmbs, atmb); } if (init) { if (! mobile && ! cwd.data('selectable')) { // make files selectable cwd.selectable(selectableOption).data('selectable', true); } } ! scrolling && wrapper.trigger(scrollEvent); }; if (! bufferExt.renderd) { // first time to go() bufferExt.rendering = true; // scroll top on dir load to avoid scroll after page reload wrapper.scrollTop(0); phash = fm.cwd().phash; go(); if (options.oldSchool) { if (phash && !query) { oldSchool(phash); } else { oldSchoolItem = jQuery(); } } if (list) { colWidth && setColwidth(); fixTableHeader({fitWidth: true}); } bufferExt.itemH = (list? place.find('tr:first') : place.find('[id]:first')).outerHeight(true); fm.trigger('cwdrender'); bufferExt.rendering = false; wrapperRepaint(true); } if (! bufferExt.rendering && buffer.length) { // next go() if ((chk = (wrapper.height() + wrapper.scrollTop() + fm.options.showThreshold + bufferExt.row) - (bufferExt.renderd * bufferExt.hpi)) > 0) { bufferExt.rendering = true; fm.lazy(function() { go(chk); bufferExt.rendering = false; }); } else { !fm.enabled() && resize(); } } else { resize(); } }, // fixed table header jQuery object tableHeader = null, // Is UA support CSS sticky cssSticky = fm.UA.CSS.positionSticky && fm.UA.CSS.widthMaxContent, // To fixed table header colmun fixTableHeader = function(optsArg) { thHeight = 0; if (! options.listView.fixedHeader) { return; } var setPos = function() { var val, pos; pos = (fm.direction === 'ltr')? 'left' : 'right'; val = ((fm.direction === 'ltr')? wrapper.scrollLeft() : table.outerWidth(true) - wrapper.width() - wrapper.scrollLeft()) * -1; if (base.css(pos) !== val) { base.css(pos, val); } }, opts = optsArg || {}, cnt, base, table, htable, thead, tbody, hheight, htr, btr, htd, btd, htw, btw, init; tbody = cwd.find('tbody'); btr = tbody.children('tr:first'); if (btr.length && btr.is(':visible')) { table = tbody.parent(); if (! tableHeader) { init = true; tbody.addClass('elfinder-cwd-fixheader'); thead = cwd.find('thead').attr('id', fm.namespace+'-cwd-thead'); htr = thead.children('tr:first'); hheight = htr.outerHeight(true); cwd.css('margin-top', hheight - parseInt(table.css('padding-top'))); if (cssSticky) { tableHeader = jQuery('
      ').addClass(cwd.attr('class')).append(jQuery('
      ').append(thead)); cwd.after(tableHeader); wrapper.on('resize.fixheader', function(e) { e.stopPropagation(); fixTableHeader({fitWidth: true}); }); } else { base = jQuery('
      ').addClass(cwd.attr('class')).append(jQuery('
      ').append(thead)); tableHeader = jQuery('
      ').addClass(wrapper.attr('class') + ' elfinder-cwd-fixheader') .removeClass('ui-droppable native-droppable') .css(wrapper.position()) .css({ height: hheight, width: cwd.outerWidth() }) .append(base); if (fm.direction === 'rtl') { tableHeader.css('left', (wrapper.data('width') - wrapper.width()) + 'px'); } setPos(); wrapper.after(tableHeader) .on('scroll.fixheader resize.fixheader', function(e) { setPos(); if (e.type === 'resize') { e.stopPropagation(); tableHeader.css(wrapper.position()); wrapper.data('width', wrapper.css('overflow', 'hidden').width()); wrapper.css('overflow', 'auto'); fixTableHeader(); } }); } } else { thead = jQuery('#'+fm.namespace+'-cwd-thead'); htr = thead.children('tr:first'); } if (init || opts.fitWidth || Math.abs(btr.outerWidth() - htr.outerWidth()) > 2) { cnt = customCols.length + 1; for (var i = 0; i < cnt; i++) { htd = htr.children('td:eq('+i+')'); btd = btr.children('td:eq('+i+')'); htw = htd.width(); btw = btd.width(); if (typeof htd.data('delta') === 'undefined') { htd.data('delta', (htd.outerWidth() - htw) - (btd.outerWidth() - btw)); } btw -= htd.data('delta'); if (! init && ! opts.fitWidth && htw === btw) { break; } htd.css('width', btw + 'px'); } } if (!cssSticky) { tableHeader.data('widthTimer') && cancelAnimationFrame(tableHeader.data('widthTimer')); tableHeader.data('widthTimer', requestAnimationFrame(function() { if (tableHeader) { tableHeader.css('width', mBoard.width() + 'px'); if (fm.direction === 'rtl') { tableHeader.css('left', (wrapper.data('width') - wrapper.width()) + 'px'); } } })); } thHeight = thead.height(); } }, // Set colmun width setColwidth = function() { if (list && colWidth) { var cl = 'elfinder-cwd-colwidth', first = cwd.find('tr[id]:first'), former; if (! first.hasClass(cl)) { former = cwd.find('tr.'+cl); former.removeClass(cl).find('td').css('width', ''); first.addClass(cl); cwd.find('table:first').css('table-layout', 'fixed'); jQuery.each(jQuery.merge(['name'], customCols), function(i, k) { var w = colWidth[k] || first.find('td.elfinder-col-'+k).width(); first.find('td.elfinder-col-'+k).width(w); }); } } }, /** * Droppable options for cwd. * Drop target is `wrapper` * Do not add class on childs file over * * @type Object */ droppable = Object.assign({}, fm.droppable, { over : function(e, ui) { var dst = jQuery(this), helper = ui.helper, ctr = fm._commands.copy && (e.shiftKey || e.ctrlKey || e.metaKey), hash, status, inParent; e.stopPropagation(); helper.data('dropover', helper.data('dropover') + 1); dst.data('dropover', true); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); if (helper.data('namespace') !== fm.namespace || ! fm.insideWorkzone(e.pageX, e.pageY)) { dst.removeClass(clDropActive); //helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); return; } if (dst.hasClass(fm.res(c, 'cwdfile'))) { hash = fm.cwdId2Hash(dst.attr('id')); dst.data('dropover', hash); } else { hash = fm.cwd().hash; fm.cwd().write && dst.data('dropover', hash); } inParent = (fm.file(helper.data('files')[0]).phash === hash); if (dst.data('dropover') === hash) { jQuery.each(helper.data('files'), function(i, h) { if (h === hash || (inParent && !ctr && !helper.hasClass('elfinder-drag-helper-plus'))) { dst.removeClass(clDropActive); return false; // break jQuery.each } }); } else { dst.removeClass(clDropActive); } if (helper.data('locked') || inParent) { status = 'elfinder-drag-helper-plus'; } else { status = 'elfinder-drag-helper-move'; if (ctr) { status += ' elfinder-drag-helper-plus'; } } dst.hasClass(clDropActive) && helper.addClass(status); requestAnimationFrame(function(){ dst.hasClass(clDropActive) && helper.addClass(status); }); }, out : function(e, ui) { var helper = ui.helper; e.stopPropagation(); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus').data('dropover', Math.max(helper.data('dropover') - 1, 0)); jQuery(this).removeData('dropover') .removeClass(clDropActive); }, deactivate : function() { jQuery(this).removeData('dropover') .removeClass(clDropActive); }, drop : function(e, ui) { unselectAll({ notrigger: true }); fm.droppable.drop.call(this, e, ui); } }), /** * Make directory droppable * * @return void */ makeDroppable = function(place) { place = place? place : (list ? cwd.find('tbody') : cwd); var targets = place.children('.directory:not(.'+clDroppable+',.elfinder-na,.elfinder-ro)'); if (fm.isCommandEnabled('paste')) { targets.droppable(droppable); } if (fm.isCommandEnabled('upload')) { targets.addClass('native-droppable'); } place.children('.isroot').each(function(i, n) { var $n = jQuery(n), hash = fm.cwdId2Hash(n.id); if (fm.isCommandEnabled('paste', hash)) { if (! $n.hasClass(clDroppable+',elfinder-na,elfinder-ro')) { $n.droppable(droppable); } } else { if ($n.hasClass(clDroppable)) { $n.droppable('destroy'); } } if (fm.isCommandEnabled('upload', hash)) { if (! $n.hasClass('native-droppable,elfinder-na,elfinder-ro')) { $n.addClass('native-droppable'); } } else { if ($n.hasClass('native-droppable')) { $n.removeClass('native-droppable'); } } }); }, /** * Preload required thumbnails and on load add css to files. * Return false if required file is not visible yet (in buffer) - * required for old api to stop loading thumbnails. * * @param Object file hash -> thumbnail map * @param Bool reload * @return void */ attachThumbnails = function(tmbs, reload) { var attach = function(node, tmb) { jQuery('') .on('load', function() { node.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); }) .attr('src', tmb.url); }, chk = function(hash, tmb) { var node = fm.cwdHash2Elm(hash), file, tmbObj, reloads = []; if (node.length) { if (tmb != '1') { file = fm.file(hash); if (file.tmb !== tmb) { file.tmb = tmb; } tmbObj = fm.tmb(file); if (reload) { node.find('.elfinder-cwd-icon').addClass(tmbObj.className).css('background-image', "url('"+tmbObj.url+"')"); } else { attach(node, tmbObj); } delete bufferExt.attachTmbs[hash]; } else { if (reload) { loadThumbnails([hash]); } else if (! bufferExt.tmbLoading[hash]) { bufferExt.getTmbs.push(hash); } } } }; if (jQuery.isPlainObject(tmbs) && Object.keys(tmbs).length) { Object.assign(bufferExt.attachTmbs, tmbs); jQuery.each(tmbs, chk); if (! reload && bufferExt.getTmbs.length && ! Object.keys(bufferExt.tmbLoading).length) { loadThumbnails(); } } }, /** * Load thumbnails from backend. * * @param Array|void reloads hashes list for reload thumbnail items * @return void */ loadThumbnails = function(reloads) { var tmbs = [], reload = false; if (fm.oldAPI) { fm.request({ data : {cmd : 'tmb', current : fm.cwd().hash}, preventFail : true }) .done(function(data) { if (data.images && Object.keys(data.images).length) { attachThumbnails(data.images); } if (data.tmb) { loadThumbnails(); } }); return; } if (reloads) { reload = true; tmbs = reloads.splice(0, tmbNum); } else { tmbs = bufferExt.getTmbs.splice(0, tmbNum); } if (tmbs.length) { if (reload || inViewHashes[tmbs[0]] || inViewHashes[tmbs[tmbs.length-1]]) { jQuery.each(tmbs, function(i, h) { bufferExt.tmbLoading[h] = true; }); fm.request({ data : {cmd : 'tmb', targets : tmbs}, preventFail : true }) .done(function(data) { var errs = [], resLen; if (data.images) { if (resLen = Object.keys(data.images).length) { if (resLen < tmbs.length) { jQuery.each(tmbs, function(i, h) { if (! data.images[h]) { errs.push(h); } }); } attachThumbnails(data.images, reload); } else { errs = tmbs; } // unset error items from bufferExt.attachTmbs if (errs.length) { jQuery.each(errs, function(i, h) { delete bufferExt.attachTmbs[h]; }); } } if (reload) { if (reloads.length) { loadThumbnails(reloads); } } }) .always(function() { bufferExt.tmbLoading = {}; if (! reload && bufferExt.getTmbs.length) { loadThumbnails(); } }); } } }, /** * Add new files to cwd/buffer * * @param Array new files * @return void */ add = function(files, mode) { var place = list ? cwd.find('tbody') : cwd, l = files.length, atmb = {}, findNode = function(file) { var pointer = cwd.find('[id]:first'), file2; while (pointer.length) { file2 = fm.file(fm.cwdId2Hash(pointer.attr('id'))); if (!pointer.hasClass('elfinder-cwd-parent') && file2 && fm.compare(file, file2) < 0) { return pointer; } pointer = pointer.next('[id]'); } }, findIndex = function(file) { var l = buffer.length, i; for (i =0; i < l; i++) { if (fm.compare(file, buffer[i]) < 0) { return i; } } return l || -1; }, // created document fragment for jQuery >= 1.12, 2.2, 3.0 // see Studio-42/elFinder#1544 @ github docFlag = jQuery.htmlPrefilter? true : false, tempDom = docFlag? jQuery(document.createDocumentFragment()) : jQuery('
      '), file, hash, node, nodes, ndx, stmb; if (l > showFiles) { // re-render for performance tune content(); selectedFiles = fm.arrayFlip(jQuery.map(files, function(f) { return f.hash; }), true); trigger(); } else { // add the item immediately l && wz.removeClass('elfinder-cwd-wrapper-empty'); // Self thumbnail stmb = (fm.option('tmbUrl') === 'self'); while (l--) { file = files[l]; hash = file.hash; if (fm.cwdHash2Elm(hash).length) { continue; } if ((node = findNode(file)) && ! node.length) { node = null; } if (! node && (ndx = findIndex(file)) >= 0) { buffer.splice(ndx, 0, file); } else { tempDom.empty().append(itemhtml(file)); (file.mime === 'directory') && !mobile && makeDroppable(tempDom); nodes = docFlag? tempDom : tempDom.children(); if (node) { node.before(nodes); } else { place.append(nodes); } ++bufferExt.renderd; } if (fm.cwdHash2Elm(hash).length) { if ((file.tmb && (file.tmb != 1 || file.size > 0)) || (stmb && file.mime.indexOf('image/') === 0)) { atmb[hash] = file.tmb || 'self'; } } } if (list) { setColwidth(); fixTableHeader({fitWidth: ! colWidth}); } bottomMarkerShow(place); if (Object.keys(atmb).length) { Object.assign(bufferExt.attachTmbs, atmb); if (buffer.length < 1) { loadThumbnails(); } } } }, /** * Remove files from cwd/buffer * * @param Array files hashes * @return void */ remove = function(files) { var l = files.length, inSearch = fm.searchStatus.state > 1, curCmd = fm.getCommand(fm.currentReqCmd) || {}, hash, n, ndx, found; // removed cwd if (!fm.cwd().hash && !curCmd.noChangeDirOnRemovedCwd) { jQuery.each(cwdParents.reverse(), function(i, h) { if (fm.file(h)) { found = true; fm.one(fm.currentReqCmd + 'done', function() { !fm.cwd().hash && fm.exec('open', h); }); return false; } }); // fallback to fm.roots[0] !found && !fm.cwd().hash && fm.exec('open', fm.roots[Object.keys(fm.roots)[0]]); return; } while (l--) { hash = files[l]; if ((n = fm.cwdHash2Elm(hash)).length) { try { n.remove(); --bufferExt.renderd; } catch(e) { fm.debug('error', e); } } else if ((ndx = index(hash)) !== -1) { buffer.splice(ndx, 1); } selectedFiles[hash] && delete selectedFiles[hash]; if (inSearch) { if ((ndx = jQuery.inArray(hash, cwdHashes)) !== -1) { cwdHashes.splice(ndx, 1); } } } inSearch && fm.trigger('cwdhasheschange', cwdHashes); if (list) { setColwidth(); fixTableHeader({fitWidth: ! colWidth}); } }, customColsNameBuild = function() { var name = '', customColsName = ''; for (var i = 0; i < customCols.length; i++) { name = fm.getColumnName(customCols[i]); customColsName +=''+name+''; } return customColsName; }, setItemBoxSize = function(boxSize) { var place, elm; if (!boxSize.height) { place = (list ? cwd.find('tbody') : cwd); elm = place.find(list? 'tr:first' : '[id]:first'); boxSize.height = elm.outerHeight(true); if (!list) { boxSize.width = elm.outerWidth(true); } } }, bottomMarkerShow = function(cur, cnt) { var place = cur || (list ? cwd.find('tbody') : cwd), boxSize = itemBoxSize[fm.viewType], col = 1, row; if (buffer.length > 0) { if (!bufferExt.hpi) { setItemBoxSize(boxSize); if (! list) { col = Math.floor(place.width() / boxSize.width); bufferExt.row = boxSize.height; bufferExt.hpi = bufferExt.row / col; } else { bufferExt.row = bufferExt.hpi = boxSize.height; } } else if (!list) { col = Math.floor(place.width() / boxSize.width); } row = Math.ceil((buffer.length + (cnt || 0)) / col); if (list && tableHeader) { ++row; } bottomMarker.css({top: (bufferExt.row * row) + 'px'}).show(); } }, wrapperContextMenu = { contextmenu : function(e) { e.preventDefault(); if (cwd.data('longtap') !== void(0)) { e.stopPropagation(); return; } fm.trigger('contextmenu', { 'type' : 'cwd', 'targets' : [fm.cwd().hash], 'x' : e.pageX, 'y' : e.pageY }); }, touchstart : function(e) { if (e.originalEvent.touches.length > 1) { return; } if (cwd.data('longtap') !== false) { wrapper.data('touching', {x: e.originalEvent.touches[0].pageX, y: e.originalEvent.touches[0].pageY}); cwd.data('tmlongtap', setTimeout(function(){ // long tap cwd.data('longtap', true); fm.trigger('contextmenu', { 'type' : 'cwd', 'targets' : [fm.cwd().hash], 'x' : wrapper.data('touching').x, 'y' : wrapper.data('touching').y }); }, 500)); } cwd.data('longtap', null); }, touchend : function(e) { if (e.type === 'touchmove') { if (! wrapper.data('touching') || ( Math.abs(wrapper.data('touching').x - e.originalEvent.touches[0].pageX) + Math.abs(wrapper.data('touching').y - e.originalEvent.touches[0].pageY)) > 4) { wrapper.data('touching', null); } } else { setTimeout(function() { cwd.removeData('longtap'); }, 80); } clearTimeout(cwd.data('tmlongtap')); }, click : function(e) { if (cwd.data('longtap')) { e.preventDefault(); e.stopPropagation(); } } }, /** * Update directory content * * @return void */ content = function() { fm.lazy(function() { var phash, emptyMethod, thtr; wz.append(selectAllCheckbox).removeClass('elfinder-cwd-wrapper-empty elfinder-search-result elfinder-incsearch-result elfinder-letsearch-result'); if (fm.searchStatus.state > 1 || fm.searchStatus.ininc) { wz.addClass('elfinder-search-result' + (fm.searchStatus.ininc? ' elfinder-'+(query.substr(0,1) === '/' ? 'let':'inc')+'search-result' : '')); } // abort attachThumbJob bufferExt.attachThumbJob && bufferExt.attachThumbJob._abort(); // destroy selectable for GC cwd.data('selectable') && cwd.selectable('disable').selectable('destroy').removeData('selectable'); // notify cwd init fm.trigger('cwdinit'); selectedNext = jQuery(); try { // to avoid problem with draggable cwd.empty(); } catch (e) { cwd.html(''); } if (tableHeader) { wrapper.off('scroll.fixheader resize.fixheader'); tableHeader.remove(); tableHeader = null; } cwd.removeClass('elfinder-cwd-view-icons elfinder-cwd-view-list') .addClass('elfinder-cwd-view-'+(list ? 'list' :'icons')) .attr('style', '') .css('height', 'auto'); bottomMarker.hide(); wrapper[list ? 'addClass' : 'removeClass']('elfinder-cwd-wrapper-list')._padding = parseInt(wrapper.css('padding-top')) + parseInt(wrapper.css('padding-bottom')); if (fm.UA.iOS) { wrapper.removeClass('overflow-scrolling-touch').addClass('overflow-scrolling-touch'); } if (list) { cwd.html('
      '); thtr = jQuery(''+fm.getColumnName('name')+''+customColsNameBuild()+''); cwd.find('thead').hide().append(thtr).find('td:first').append(selectAllCheckbox); if (jQuery.fn.sortable) { thtr.addClass('touch-punch touch-punch-keep-default') .sortable({ axis: 'x', distance: 8, items: '> .sortable-item', start: function(e, ui) { jQuery(ui.item[0]).data('dragging', true); ui.placeholder .width(ui.helper.removeClass('ui-state-hover').width()) .removeClass('ui-state-active') .addClass('ui-state-hover') .css('visibility', 'visible'); }, update: function(e, ui){ var target = jQuery(ui.item[0]).attr('class').split(' ')[0].replace('elfinder-cwd-view-th-', ''), prev, done; customCols = jQuery.map(jQuery(this).children(), function(n) { var name = jQuery(n).attr('class').split(' ')[0].replace('elfinder-cwd-view-th-', ''); if (! done) { if (target === name) { done = true; } else { prev = name; } } return (name === 'name')? null : name; }); templates.row = makeTemplateRow(); fm.storage('cwdCols', customCols); prev = '.elfinder-col-'+prev+':first'; target = '.elfinder-col-'+target+':first'; fm.lazy(function() { cwd.find('tbody tr').each(function() { var $this = jQuery(this); $this.children(prev).after($this.children(target)); }); }); }, stop: function(e, ui) { setTimeout(function() { jQuery(ui.item[0]).removeData('dragging'); }, 100); } }); } thtr.find('td').addClass('touch-punch').resizable({ handles: fm.direction === 'ltr'? 'e' : 'w', start: function(e, ui) { var target = cwd.find('td.elfinder-col-' + ui.element.attr('class').split(' ')[0].replace('elfinder-cwd-view-th-', '') + ':first'); ui.element .data('dragging', true) .data('resizeTarget', target) .data('targetWidth', target.width()); colResizing = true; if (cwd.find('table').css('table-layout') !== 'fixed') { cwd.find('tbody tr:first td').each(function() { jQuery(this).width(jQuery(this).width()); }); cwd.find('table').css('table-layout', 'fixed'); } }, resize: function(e, ui) { ui.element.data('resizeTarget').width(ui.element.data('targetWidth') - (ui.originalSize.width - ui.size.width)); }, stop : function(e, ui) { colResizing = false; fixTableHeader({fitWidth: true}); colWidth = {}; cwd.find('tbody tr:first td').each(function() { var name = jQuery(this).attr('class').split(' ')[0].replace('elfinder-col-', ''); colWidth[name] = jQuery(this).width(); }); fm.storage('cwdColWidth', colWidth); setTimeout(function() { ui.element.removeData('dragging'); }, 100); } }) .find('.ui-resizable-handle').addClass('ui-icon ui-icon-grip-dotted-vertical'); } buffer = jQuery.map(incHashes || cwdHashes, function(hash) { return fm.file(hash) || null; }); buffer = fm.sortFiles(buffer); if (incHashes) { incHashes = jQuery.map(buffer, function(f) { return f.hash; }); } else { cwdHashes = jQuery.map(buffer, function(f) { return f.hash; }); } bufferExt = { renderd: 0, attachTmbs: {}, getTmbs: [], tmbLoading: {}, lazyOpts: { tm : 0 } }; wz[(buffer.length < 1) ? 'addClass' : 'removeClass']('elfinder-cwd-wrapper-empty'); wrapper.off(scrollEvent, render).on(scrollEvent, render).trigger(scrollEvent); // set droppable if (!fm.cwd().write) { wrapper.removeClass('native-droppable') .droppable('disable') .removeClass('ui-state-disabled'); // for old jQueryUI see https://bugs.jqueryui.com/ticket/5974 } else { wrapper[fm.isCommandEnabled('upload')? 'addClass' : 'removeClass']('native-droppable'); wrapper.droppable(fm.isCommandEnabled('paste')? 'enable' : 'disable'); } }); }, /** * CWD node itself * * @type JQuery **/ cwd = jQuery(this) .addClass('ui-helper-clearfix elfinder-cwd') .attr('unselectable', 'on') // fix ui.selectable bugs and add shift+click support .on('click.'+fm.namespace, fileSelector, function(e) { var p = this.id ? jQuery(this) : jQuery(this).parents('[id]:first'), tgt = jQuery(e.target), prev, next, pl, nl, sib; if (selectCheckbox && (tgt.is('input:checkbox.'+clSelChk) || tgt.hasClass('elfinder-cwd-select'))) { e.stopPropagation(); e.preventDefault(); p.trigger(p.hasClass(clSelected) ? evtUnselect : evtSelect); trigger(); requestAnimationFrame(function() { tgt.prop('checked', p.hasClass(clSelected)); }); return; } if (cwd.data('longtap') || tgt.hasClass('elfinder-cwd-nonselect')) { e.stopPropagation(); return; } if (!curClickId) { curClickId = p.attr('id'); setTimeout(function() { curClickId = ''; }, 500); } if (e.shiftKey) { prev = p.prevAll(lastSelect || '.'+clSelected+':first'); next = p.nextAll(lastSelect || '.'+clSelected+':first'); pl = prev.length; nl = next.length; } if (e.shiftKey && (pl || nl)) { sib = pl ? p.prevUntil('#'+prev.attr('id')) : p.nextUntil('#'+next.attr('id')); sib = sib.add(p); if (!pl) { sib = jQuery(sib.get().reverse()); } sib.trigger(evtSelect); } else if (e.ctrlKey || e.metaKey) { p.trigger(p.hasClass(clSelected) ? evtUnselect : evtSelect); } else { if (wrapper.data('touching') && p.hasClass(clSelected)) { wrapper.data('touching', null); fm.dblclick({file : fm.cwdId2Hash(this.id)}); return; } else { unselectAll({ notrigger: true }); p.trigger(evtSelect); } } trigger(); }) // call fm.open() .on('dblclick.'+fm.namespace, fileSelector, function(e) { if (curClickId) { var hash = fm.cwdId2Hash(curClickId); e.stopPropagation(); if (this.id !== curClickId) { jQuery(this).trigger(evtUnselect); jQuery('#'+curClickId).trigger(evtSelect); trigger(); } fm.dblclick({file : hash}); } }) // for touch device .on('touchstart.'+fm.namespace, fileSelector, function(e) { if (e.originalEvent.touches.length > 1) { return; } var p = this.id ? jQuery(this) : jQuery(this).parents('[id]:first'), tgt = jQuery(e.target), nodeName = e.target.nodeName, sel; if ((nodeName === 'INPUT' && e.target.type === 'text') || nodeName === 'TEXTAREA' || tgt.hasClass('elfinder-cwd-nonselect')) { e.stopPropagation(); return; } // now name editing if (p.find('input:text,textarea').length) { e.stopPropagation(); e.preventDefault(); return; } wrapper.data('touching', {x: e.originalEvent.touches[0].pageX, y: e.originalEvent.touches[0].pageY}); if (selectCheckbox && (tgt.is('input:checkbox.'+clSelChk) || tgt.hasClass('elfinder-cwd-select'))) { return; } sel = p.prevAll('.'+clSelected+':first').length + p.nextAll('.'+clSelected+':first').length; cwd.data('longtap', null); if (Object.keys(selectedFiles).length || (list && e.target.nodeName !== 'TD') || (!list && this !== e.target) ) { cwd.data('longtap', false); p.addClass(clHover); p.data('tmlongtap', setTimeout(function(){ // long tap cwd.data('longtap', true); p.trigger(evtSelect); trigger(); fm.trigger('contextmenu', { 'type' : 'files', 'targets' : fm.selected(), 'x' : e.originalEvent.touches[0].pageX, 'y' : e.originalEvent.touches[0].pageY }); }, 500)); } }) .on('touchmove.'+fm.namespace+' touchend.'+fm.namespace, fileSelector, function(e) { var tgt = jQuery(e.target), p; if (selectCheckbox && (tgt.is('input:checkbox.'+clSelChk) || tgt.hasClass('elfinder-cwd-select'))) { return; } if (e.target.nodeName == 'INPUT' || e.target.nodeName == 'TEXTAREA') { e.stopPropagation(); return; } p = this.id ? jQuery(this) : jQuery(this).parents('[id]:first'); clearTimeout(p.data('tmlongtap')); if (e.type === 'touchmove') { wrapper.data('touching', null); p.removeClass(clHover); } else { if (wrapper.data('touching') && !cwd.data('longtap') && p.hasClass(clSelected)) { e.preventDefault(); wrapper.data('touching', null); fm.dblclick({file : fm.cwdId2Hash(this.id)}); } setTimeout(function() { cwd.removeData('longtap'); }, 80); } }) // attach draggable .on('mouseenter.'+fm.namespace, fileSelector, function(e) { if (scrolling) { return; } var $this = jQuery(this), helper = null; if (!mobile && !$this.data('dragRegisted') && !$this.hasClass(clTmp) && !$this.hasClass(clDraggable) && !$this.hasClass(clDisabled)) { $this.data('dragRegisted', true); if (!fm.isCommandEnabled('copy', fm.searchStatus.state > 1 || $this.hasClass('isroot')? fm.cwdId2Hash($this.attr('id')) : void 0) && !fm.isCommandEnabled('cut', fm.searchStatus.state > 1 || $this.hasClass('isroot')? fm.cwdId2Hash($this.attr('id')) : void 0)) { return; } $this.on('mousedown', function(e) { // shiftKey or altKey + drag start for HTML5 native drag function // Note: can no use shiftKey with the Google Chrome var metaKey = options.metakeyDragout && !fm.UA.IE && (e.shiftKey || e.altKey), disable = false; if (metaKey && cwd.data('selectable')) { // destroy jQuery-ui selectable while trigger native drag cwd.selectable('disable').selectable('destroy').removeData('selectable'); requestAnimationFrame(function(){ cwd.selectable(selectableOption).selectable('option', {disabled: false}).selectable('refresh').data('selectable', true); }); } $this.removeClass('ui-state-disabled'); if (metaKey) { $this.draggable('option', 'disabled', true).attr('draggable', 'true'); } else { if (!$this.hasClass(clSelected)) { if (list) { disable = jQuery(e.target).closest('span,tr').is('tr'); } else { disable = jQuery(e.target).hasClass('elfinder-cwd-file'); } } if (disable) { // removeClass('ui-state-disabled') for old version of jQueryUI $this.draggable('option', 'disabled', true).removeClass('ui-state-disabled'); } else { $this.draggable('option', 'disabled', false) .removeAttr('draggable') .draggable('option', 'cursorAt', {left: 50 - parseInt(jQuery(e.currentTarget).css('margin-left')), top: 47}); } } }) .on('dragstart', function(e) { var dt = e.dataTransfer || e.originalEvent.dataTransfer || null; helper = null; if (dt && !fm.UA.IE) { var p = this.id ? jQuery(this) : jQuery(this).parents('[id]:first'), elm = jQuery(''), url = '', durl = null, murl = null, files = [], icon = function(f) { var mime = f.mime, i, tmb = fm.tmb(f); i = '
      '; if (tmb) { i = jQuery(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML; } return i; }, l, geturl = []; p.trigger(evtSelect); trigger(); jQuery.each(selectedFiles, function(v){ var file = fm.file(v), furl = file.url; if (file && file.mime !== 'directory') { if (!furl) { furl = fm.url(file.hash); } else if (furl == '1') { geturl.push(v); return true; } if (furl) { furl = fm.convAbsUrl(furl); files.push(v); jQuery('').attr('href', furl).text(furl).appendTo(elm); url += furl + "\n"; if (!durl) { durl = file.mime + ':' + file.name + ':' + furl; } if (!murl) { murl = furl + "\n" + file.name; } } } }); if (geturl.length) { jQuery.each(geturl, function(i, v){ var rfile = fm.file(v); rfile.url = ''; fm.request({ data : {cmd : 'url', target : v}, notify : {type : 'url', cnt : 1}, preventDefault : true }) .always(function(data) { rfile.url = data.url? data.url : '1'; }); }); return false; } else if (url) { if (dt.setDragImage) { helper = jQuery('
      ').append(icon(fm.file(files[0]))).appendTo(jQuery(document.body)); if ((l = files.length) > 1) { helper.append(icon(fm.file(files[l-1])) + ''+l+''); } dt.setDragImage(helper.get(0), 50, 47); } dt.effectAllowed = 'copyLink'; dt.setData('DownloadURL', durl); dt.setData('text/x-moz-url', murl); dt.setData('text/uri-list', url); dt.setData('text/plain', url); dt.setData('text/html', elm.html()); dt.setData('elfinderfrom', window.location.href + fm.cwd().hash); dt.setData('elfinderfrom:' + dt.getData('elfinderfrom'), ''); } else { return false; } } }) .on('dragend', function(e){ unselectAll({ notrigger: true }); helper && helper.remove(); }) .draggable(fm.draggable); } }) // add hover class to selected file .on(evtSelect, fileSelector, function(e) { var $this = jQuery(this), id = fm.cwdId2Hash($this.attr('id')); if (!selectLock && !$this.hasClass(clDisabled)) { lastSelect = '#'+ this.id; $this.addClass(clSelected).children().addClass(clHover).find('input:checkbox.'+clSelChk).prop('checked', true); if (! selectedFiles[id]) { selectedFiles[id] = true; } // will be selected next selectedNext = cwd.find('[id].'+clSelected+':last').next(); } }) // remove hover class from unselected file .on(evtUnselect, fileSelector, function(e) { var $this = jQuery(this), id = fm.cwdId2Hash($this.attr('id')); if (!selectLock) { $this.removeClass(clSelected).children().removeClass(clHover).find('input:checkbox.'+clSelChk).prop('checked', false); if (cwd.hasClass('elfinder-cwd-allselected')) { selectCheckbox && selectAllCheckbox.children('input').prop('checked', false); cwd.removeClass('elfinder-cwd-allselected'); } selectedFiles[id] && delete selectedFiles[id]; } }) // disable files wich removing or moving .on(evtDisable, fileSelector, function() { var $this = jQuery(this).removeClass(clHover+' '+clSelected).addClass(clDisabled), child = $this.children(), target = (list ? $this : child.find('div.elfinder-cwd-file-wrapper,div.elfinder-cwd-filename')); child.removeClass(clHover+' '+clSelected); $this.hasClass(clDroppable) && $this.droppable('disable'); target.hasClass(clDraggable) && target.draggable('disable'); }) // if any files was not removed/moved - unlock its .on(evtEnable, fileSelector, function() { var $this = jQuery(this).removeClass(clDisabled), target = list ? $this : $this.children('div.elfinder-cwd-file-wrapper,div.elfinder-cwd-filename'); $this.hasClass(clDroppable) && $this.droppable('enable'); target.hasClass(clDraggable) && target.draggable('enable'); }) .on('scrolltoview', fileSelector, function(e, data) { scrollToView(jQuery(this), (data && typeof data.blink !== 'undefined')? data.blink : true); }) .on('mouseenter.'+fm.namespace+' mouseleave.'+fm.namespace, fileSelector, function(e) { var enter = (e.type === 'mouseenter'); if (enter && (scrolling || fm.UA.Mobile)) { return; } fm.trigger('hover', {hash : fm.cwdId2Hash(jQuery(this).attr('id')), type : e.type}); jQuery(this).toggleClass(clHover, (e.type == 'mouseenter')); }) // for file contextmenu .on('mouseenter.'+fm.namespace+' mouseleave.'+fm.namespace, '.elfinder-cwd-file-wrapper,.elfinder-cwd-filename', function(e) { var enter = (e.type === 'mouseenter'); if (enter && scrolling) { return; } jQuery(this).closest(fileSelector).children('.elfinder-cwd-file-wrapper,.elfinder-cwd-filename').toggleClass(clActive, (e.type == 'mouseenter')); }) .on('contextmenu.'+fm.namespace, function(e) { var file = jQuery(e.target).closest(fileSelector); if (file.get(0) === e.target && !selectedFiles[fm.cwdId2Hash(file.get(0).id)]) { return; } // now filename editing if (file.find('input:text,textarea').length) { e.stopPropagation(); return; } if (file.length && (e.target.nodeName != 'TD' || selectedFiles[fm.cwdId2Hash(file.get(0).id)])) { e.stopPropagation(); e.preventDefault(); if (!file.hasClass(clDisabled) && !wrapper.data('touching')) { if (!file.hasClass(clSelected)) { unselectAll({ notrigger: true }); file.trigger(evtSelect); trigger(); } fm.trigger('contextmenu', { 'type' : 'files', 'targets' : fm.selected(), 'x' : e.pageX, 'y' : e.pageY }); } } }) // unselect all on cwd click .on('click.'+fm.namespace, function(e) { if (e.target === this && ! cwd.data('longtap')) { !e.shiftKey && !e.ctrlKey && !e.metaKey && unselectAll(); } }) // prepend fake file/dir .on('create.'+fm.namespace, function(e, f) { var parent = list ? cwd.find('tbody') : cwd, p = parent.find('.elfinder-cwd-parent'), lock = f.move || false, file = jQuery(itemhtml(f)).addClass(clTmp), selected = fm.selected(); if (selected.length) { lock && fm.trigger('lockfiles', {files: selected}); } else { unselectAll(); } if (p.length) { p.after(file); } else { parent.prepend(file); } setColwidth(); wrapper.scrollTop(0).scrollLeft(0); }) // unselect all selected files .on('unselectall', unselectAll) .on('selectfile', function(e, id) { fm.cwdHash2Elm(id).trigger(evtSelect); trigger(); }) .on('colwidth', function() { if (list) { cwd.find('table').css('table-layout', '') .find('td').css('width', ''); fixTableHeader({fitWidth: true}); fm.storage('cwdColWidth', colWidth = null); } }) .on('iconpref', function(e, data) { cwd.removeClass(function(i, cName) { return (cName.match(/\belfinder-cwd-size\S+/g) || []).join(' '); }); iconSize = data? (parseInt(data.size) || 0) : 0; if (!list) { if (iconSize > 0) { cwd.addClass('elfinder-cwd-size' + iconSize); } if (bufferExt.renderd) { requestAnimationFrame(function() { itemBoxSize.icons = {}; bufferExt.hpi = null; bottomMarkerShow(cwd, bufferExt.renderd); wrapperRepaint(); }); } } }) // Change icon size with mouse wheel event .on('onwheel' in document ? 'wheel' : 'mousewheel', function(e) { var tm, size, delta; if (!list && ((e.ctrlKey && !e.metaKey) || (!e.ctrlKey && e.metaKey))) { e.stopPropagation(); e.preventDefault(); tm = cwd.data('wheelTm'); if (typeof tm !== 'undefined') { clearTimeout(tm); cwd.data('wheelTm', setTimeout(function() { cwd.removeData('wheelTm'); }, 200)); } else { cwd.data('wheelTm', false); size = iconSize || 0; delta = e.originalEvent.deltaY ? e.originalEvent.deltaY : -(e.originalEvent.wheelDelta); if (delta > 0) { if (iconSize > 0) { size = iconSize - 1; } } else { if (iconSize < options.iconsView.sizeMax) { size = iconSize + 1; } } if (size !== iconSize) { fm.storage('iconsize', size); cwd.trigger('iconpref', {size: size}); } } } }), wrapper = jQuery('
      ') // make cwd itself droppable for folders from nav panel .droppable(Object.assign({}, droppable, {autoDisable: false})) .on('contextmenu.'+fm.namespace, wrapperContextMenu.contextmenu) .on('touchstart.'+fm.namespace, wrapperContextMenu.touchstart) .on('touchmove.'+fm.namespace+' touchend.'+fm.namespace, wrapperContextMenu.touchend) .on('click.'+fm.namespace, wrapperContextMenu.click) .on('scroll.'+fm.namespace, function() { if (! scrolling) { cwd.data('selectable') && cwd.selectable('disable'); wrapper.trigger(scrollStartEvent); } scrolling = true; bufferExt.scrtm && cancelAnimationFrame(bufferExt.scrtm); if (bufferExt.scrtm && Math.abs((bufferExt.scrolltop || 0) - (bufferExt.scrolltop = (this.scrollTop || jQuery(this).scrollTop()))) < 5) { bufferExt.scrtm = 0; wrapper.trigger(scrollEvent); } bufferExt.scrtm = requestAnimationFrame(function() { bufferExt.scrtm = 0; wrapper.trigger(scrollEvent); }); }) .on(scrollEvent, function() { scrolling = false; wrapperRepaint(); }), bottomMarker = jQuery('
       
      ') .css({position: 'absolute', width: '1px', height: '1px'}) .hide(), selectAllCheckbox = selectCheckbox? jQuery('
      ') .attr('title', fm.i18n('selectall')) .on('click', function(e) { e.stopPropagation(); e.preventDefault(); if (jQuery(this).data('pending')) { return false; } selectAllCheckbox.data('pending', true); if (cwd.hasClass('elfinder-cwd-allselected')) { selectAllCheckbox.find('input').prop('checked', false); requestAnimationFrame(function() { unselectAll(); }); } else { selectAll(); } }) : jQuery(), restm = null, resize = function(init) { var initHeight = function() { if (typeof bufferExt.renderd !== 'undefined') { var h = 0; wrapper.siblings('div.elfinder-panel:visible').each(function() { h += jQuery(this).outerHeight(true); }); wrapper.height(wz.height() - h - wrapper._padding); } }; init && initHeight(); restm && cancelAnimationFrame(restm); restm = requestAnimationFrame(function(){ !init && initHeight(); var wph, cwdoh; // fix cwd height if it less then wrapper cwd.css('height', 'auto'); wph = wrapper[0].clientHeight - parseInt(wrapper.css('padding-top')) - parseInt(wrapper.css('padding-bottom')) - parseInt(cwd.css('margin-top')), cwdoh = cwd.outerHeight(true); if (cwdoh < wph) { cwd.height(wph); } }); list && ! colResizing && (init? wrapper.trigger('resize.fixheader') : fixTableHeader()); wrapperRepaint(); }, // elfinder node parent = jQuery(this).parent().on('resize', resize), // workzone node wz = parent.children('.elfinder-workzone').append(wrapper.append(this).append(bottomMarker)), // message board mBoard = jQuery('
      ').insertAfter(cwd), // Volume expires vExpires = jQuery('
      '), vExpiresTm, showVolumeExpires = function() { var remain, sec, int; vExpiresTm && clearTimeout(vExpiresTm); if (curVolId && fm.volumeExpires[curVolId]) { sec = fm.volumeExpires[curVolId] - ((+new Date()) / 1000); int = (sec % 60) + 0.1; remain = Math.floor(sec / 60); vExpires.html(fm.i18n(['minsLeft', remain])).show(); if (remain) { vExpiresTm = setTimeout(showVolumeExpires, int * 1000); } } }, // each item box size itemBoxSize = { icons : {}, list : {} }, // has UI tree hasUiTree, // Icon size of icons view iconSize, // Current volume id curVolId, winScrTm; // IE < 11 not support CSS `pointer-events: none` if (!fm.UA.ltIE10) { mBoard.append(jQuery('
      ').html(fm.i18n('volume_Trash'))) .append(vExpires); } // setup by options replacement = Object.assign(replacement, options.replacement || {}); try { colWidth = fm.storage('cwdColWidth')? fm.storage('cwdColWidth') : null; } catch(e) { colWidth = null; } // setup costomCols fm.bind('columnpref', function(e) { var opts = e.data || {}; if (customCols = fm.storage('cwdCols')) { customCols = jQuery.grep(customCols, function(n) { return (options.listView.columns.indexOf(n) !== -1)? true : false; }); if (options.listView.columns.length > customCols.length) { jQuery.each(options.listView.columns, function(i, n) { if (customCols.indexOf(n) === -1) { customCols.push(n); } }); } } else { customCols = options.listView.columns; } // column names array that hidden var columnhides = fm.storage('columnhides') || null; if (columnhides && Object.keys(columnhides).length) customCols = jQuery.grep(customCols, function(n) { return columnhides[n]? false : true; }); // make template with customCols templates.row = makeTemplateRow(); // repaint if need it list && opts.repaint && content(); }).trigger('columnpref'); if (mobile) { // for iOS5 bug jQuery('body').on('touchstart touchmove touchend', function(e){}); } selectCheckbox && cwd.addClass('elfinder-has-checkbox'); jQuery(window).on('scroll.'+fm.namespace, function() { winScrTm && cancelAnimationFrame(winScrTm); winScrTm = requestAnimationFrame(function() { wrapper.trigger(scrollEvent); }); }); jQuery(document).on('keydown.'+fm.namespace, function(e) { if (e.keyCode == jQuery.ui.keyCode.ESCAPE) { if (! fm.getUI().find('.ui-widget:visible').length) { unselectAll(); } } }); fm .one('init', function(){ var style = document.createElement('style'), sheet, node, base, resizeTm, iconSize, i = 0; if (document.head) { document.head.appendChild(style); sheet = style.sheet; sheet.insertRule('.elfinder-cwd-wrapper-empty .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyFolder')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty .native-droppable .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyFolder'+(mobile? 'LTap' : 'Drop'))+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty .ui-droppable-disabled .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyFolder')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptySearch')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-incsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyIncSearch')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-letsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyLetSearch')+'" }', i++); } if (iconSize = (fm.storage('iconsize') || options.iconsView.size || 0)) { iconSize = Math.min(iconSize, options.iconsView.sizeMax); cwd.trigger('iconpref', {size: iconSize}); } if (! mobile) { fm.one('open', function() { sheet && fm.zIndex && sheet.insertRule('.ui-selectable-helper{z-index:'+fm.zIndex+';}', i++); }); base = jQuery('
      '); node = fm.getUI(); node.on('resize', function(e, data) { var offset; e.preventDefault(); e.stopPropagation(); if (data && data.fullscreen) { offset = node.offset(); if (data.fullscreen === 'on') { base.css({top:offset.top * -1 , left:offset.left * -1 }).appendTo(node); selectableOption.appendTo = base; } else { base.detach(); selectableOption.appendTo = 'body'; } cwd.data('selectable') && cwd.selectable('option', {appendTo : selectableOption.appendTo}); } }); } hasUiTree = fm.getUI('tree').length; }) .bind('enable', function() { resize(); }) .bind('request.open', function() { bufferExt.getTmbs = []; }) .one('open', function() { if (fm.maxTargets) { tmbNum = Math.min(fm.maxTargets, tmbNum); } }) .bind('open add remove searchend', function() { var phash = fm.cwd().hash, type = this.type; if (type === 'open' || type === 'searchend' || fm.searchStatus.state < 2) { cwdHashes = jQuery.map(fm.files(phash), function(f) { return f.hash; }); fm.trigger('cwdhasheschange', cwdHashes); } if (type === 'open') { var inTrash = function() { var isIn = false; jQuery.each(cwdParents, function(i, h) { if (fm.trashes[h]) { isIn = true; return false; } }); return isIn; }, req = phash? (! fm.file(phash) || hasUiTree? (! hasUiTree? fm.request({ data: { cmd : 'parents', target : fm.cwd().hash }, preventFail : true }) : (function() { var dfd = jQuery.Deferred(); fm.one('treesync', function(e) { e.data.always(function() { dfd.resolve(); }); }); return dfd; })() ) : null ) : null, cwdObj = fm.cwd(); // add/remove volume id class if (cwdObj.volumeid !== curVolId) { vExpires.empty().hide(); if (curVolId) { wrapper.removeClass('elfinder-cwd-wrapper-' + curVolId); } curVolId = cwdObj.volumeid; showVolumeExpires(); wrapper.addClass('elfinder-cwd-wrapper-' + curVolId); } // add/remove trash class jQuery.when(req).done(function() { cwdParents = fm.parents(cwdObj.hash); wrapper[inTrash()? 'addClass':'removeClass']('elfinder-cwd-wrapper-trash'); }); incHashes = void 0; unselectAll({ notrigger: true }); content(); } }) .bind('search', function(e) { cwdHashes = jQuery.map(e.data.files, function(f) { return f.hash; }); fm.trigger('cwdhasheschange', cwdHashes); incHashes = void 0; fm.searchStatus.ininc = false; content(); fm.autoSync('stop'); }) .bind('searchend', function(e) { if (query || incHashes) { query = ''; if (incHashes) { fm.trigger('incsearchend', e.data); } else { if (!e.data || !e.data.noupdate) { content(); } } } fm.autoSync(); }) .bind('searchstart', function(e) { unselectAll(); query = e.data.query; }) .bind('incsearchstart', function(e) { var q = e.data.query || '', type = e.data.type || 'SearchName', searchTypes = fm.options.commandsOptions.search.searchTypes || {}; if ((searchTypes[type] && searchTypes[type].incsearch) || type === 'SearchName') { selectedFiles = {}; fm.lazy(function() { // incremental search var regex, incSearch, fst = ''; query = q; if (q) { if (q.substr(0,1) === '/') { q = q.substr(1); fst = '^'; } regex = new RegExp(fst + q.replace(/([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g, '\\$1'), 'i'); if (type === 'SearchName') { incHashes = jQuery.grep(cwdHashes, function(hash) { var file = fm.file(hash); return (file && (file.name.match(regex) || (file.i18 && file.i18.match(regex))))? true : false; }); } else { incSearch = searchTypes[type].incsearch; if (typeof incSearch === 'string') { incHashes = jQuery.grep(cwdHashes, function(hash) { var file = fm.file(hash); return (file && file[incSearch] && (file[incSearch] + '').match(regex))? true : false; }); } else if (typeof incSearch === 'function') { try { incHashes = jQuery.grep(incSearch({val: q, regex: regex}, cwdHashes, fm), function(hash) { return fm.file(hash)? true : false; }); } catch(e) { incHashes = []; } } } fm.trigger('incsearch', { hashes: incHashes, query: q }) .searchStatus.ininc = true; content(); fm.autoSync('stop'); } else { fm.trigger('incsearchend'); } }); } }) .bind('incsearchend', function(e) { query = ''; fm.searchStatus.ininc = false; incHashes = void 0; if (!e.data || !e.data.noupdate) { content(); } fm.autoSync(); }) .bind('sortchange', function() { var lastScrollLeft = wrapper.scrollLeft(), allsel = cwd.hasClass('elfinder-cwd-allselected'); content(); fm.one('cwdrender', function() { wrapper.scrollLeft(lastScrollLeft); if (allsel) { selectedFiles = fm.arrayFlip(incHashes || cwdHashes, true); } (allsel || Object.keys(selectedFiles).length) && trigger(); }); }) .bind('viewchange', function() { var l = fm.viewType != 'list', allsel = cwd.hasClass('elfinder-cwd-allselected'); if (l != list) { list = l; fm.viewType = list? 'list' : 'icons'; if (iconSize) { fm.one('cwdinit', function() { cwd.trigger('iconpref', {size: iconSize}); }); } content(); resize(); if (allsel) { cwd.addClass('elfinder-cwd-allselected'); selectAllCheckbox.find('input').prop('checked', true); } Object.keys(selectedFiles).length && trigger(); } }) .bind('wzresize', function() { var place = list ? cwd.find('tbody') : cwd, cwdOffset; resize(true); if (bufferExt.hpi) { bottomMarkerShow(place, place.find('[id]').length); } cwdOffset = cwd.offset(); wz.data('rectangle', Object.assign( { width: wz.width(), height: wz.height(), cwdEdge: (fm.direction === 'ltr')? cwdOffset.left : cwdOffset.left + cwd.width() }, wz.offset()) ); bufferExt.itemH = (list? place.find('tr:first') : place.find('[id]:first')).outerHeight(true); }) .bind('changeclipboard', function(e) { clipCuts = {}; if (e.data && e.data.clipboard && e.data.clipboard.length) { jQuery.each(e.data.clipboard, function(i, f) { if (f.cut) { clipCuts[f.hash] = true; } }); } }) .bind('resMixinMake', function() { setColwidth(); }) .bind('tmbreload', function(e) { var imgs = {}, files = (e.data && e.data.files)? e.data.files : null; jQuery.each(files, function(i, f) { if (f.tmb && f.tmb != '1') { imgs[f.hash] = f.tmb; } }); if (Object.keys(imgs).length) { attachThumbnails(imgs, true); } }) .add(function(e) { var regex = query? new RegExp(query.replace(/([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g, '\\$1'), 'i') : null, mime = fm.searchStatus.mime, inSearch = fm.searchStatus.state > 1, phash = inSearch && fm.searchStatus.target? fm.searchStatus.target : fm.cwd().hash, curPath = fm.path(phash), inTarget = function(f) { var res, parents, path; res = (f.phash === phash); if (!res && inSearch) { path = f.path || fm.path(f.hash); res = (curPath && path.indexOf(curPath) === 0); if (! res && fm.searchStatus.mixed) { res = jQuery.grep(fm.searchStatus.mixed, function(vid) { return f.hash.indexOf(vid) === 0? true : false; }).length? true : false; } } if (res && inSearch) { if (mime) { res = (f.mime.indexOf(mime) === 0); } else { res = (f.name.match(regex) || (f.i18 && f.i18.match(regex)))? true : false; } } return res; }, files = jQuery.grep(e.data.added || [], function(f) { return inTarget(f)? true : false ;}); add(files); if (fm.searchStatus.state === 2) { jQuery.each(files, function(i, f) { if (jQuery.inArray(f.hash, cwdHashes) === -1) { cwdHashes.push(f.hash); } }); fm.trigger('cwdhasheschange', cwdHashes); } list && resize(); wrapper.trigger(scrollEvent); }) .change(function(e) { var phash = fm.cwd().hash, sel = fm.selected(), files, added; if (query) { jQuery.each(e.data.changed || [], function(i, file) { if (fm.cwdHash2Elm(file.hash).length) { remove([file.hash]); add([file], 'change'); jQuery.inArray(file.hash, sel) !== -1 && selectFile(file.hash); added = true; } }); } else { jQuery.each(jQuery.grep(e.data.changed || [], function(f) { return f.phash == phash ? true : false; }), function(i, file) { if (fm.cwdHash2Elm(file.hash).length) { remove([file.hash]); add([file], 'change'); jQuery.inArray(file.hash, sel) !== -1 && selectFile(file.hash); added = true; } }); } if (added) { fm.trigger('cwdhasheschange', cwdHashes); list && resize(); wrapper.trigger(scrollEvent); } trigger(); }) .remove(function(e) { var place = list ? cwd.find('tbody') : cwd; remove(e.data.removed || []); trigger(); if (buffer.length < 1 && place.children(fileSelector + (options.oldSchool? ':not(.elfinder-cwd-parent)' : '')).length < 1) { wz.addClass('elfinder-cwd-wrapper-empty'); selectCheckbox && selectAllCheckbox.find('input').prop('checked', false); bottomMarker.hide(); wrapper.off(scrollEvent, render); resize(); } else { bottomMarkerShow(place); wrapper.trigger(scrollEvent); } }) // select dragged file if no selected, disable selectable .dragstart(function(e) { var target = jQuery(e.data.target), oe = e.data.originalEvent; if (target.hasClass(clFile)) { if (!target.hasClass(clSelected)) { !(oe.ctrlKey || oe.metaKey || oe.shiftKey) && unselectAll({ notrigger: true }); target.trigger(evtSelect); trigger(); } } cwd.removeClass(clDisabled).data('selectable') && cwd.selectable('disable'); selectLock = true; }) // enable selectable .dragstop(function() { cwd.data('selectable') && cwd.selectable('enable'); selectLock = false; }) .bind('lockfiles unlockfiles selectfiles unselectfiles', function(e) { var events = { lockfiles : evtDisable , unlockfiles : evtEnable , selectfiles : evtSelect, unselectfiles : evtUnselect }, event = events[e.type], files = e.data.files || [], l = files.length, helper = e.data.helper || jQuery(), parents, ctr, add; if (l > 0) { parents = fm.parents(files[0]); } if (event === evtSelect || event === evtUnselect) { add = (event === evtSelect), jQuery.each(files, function(i, hash) { var all = cwd.hasClass('elfinder-cwd-allselected'); if (! selectedFiles[hash]) { add && (selectedFiles[hash] = true); } else { if (all) { selectCheckbox && selectAllCheckbox.children('input').prop('checked', false); cwd.removeClass('elfinder-cwd-allselected'); all = false; } ! add && delete selectedFiles[hash]; } }); } if (!helper.data('locked')) { while (l--) { try { fm.cwdHash2Elm(files[l]).trigger(event); } catch(e) {} } ! e.data.inselect && trigger(); } if (wrapper.data('dropover') && parents.indexOf(wrapper.data('dropover')) !== -1) { ctr = e.type !== 'lockfiles'; helper.toggleClass('elfinder-drag-helper-plus', ctr); wrapper.toggleClass(clDropActive, ctr); } }) // select new files after some actions .bind('mkdir mkfile duplicate upload rename archive extract paste multiupload', function(e) { if (e.type == 'upload' && e.data._multiupload) return; var phash = fm.cwd().hash, files; unselectAll({ notrigger: true }); jQuery.each((e.data.added || []).concat(e.data.changed || []), function(i, file) { file && file.phash == phash && selectFile(file.hash); }); trigger(); }) .shortcut({ pattern :'ctrl+a', description : 'selectall', callback : selectAll }) .shortcut({ pattern :'ctrl+shift+i', description : 'selectinvert', callback : selectInvert }) .shortcut({ pattern : 'left right up down shift+left shift+right shift+up shift+down', description : 'selectfiles', type : 'keydown' , //fm.UA.Firefox || fm.UA.Opera ? 'keypress' : 'keydown', callback : function(e) { select(e.keyCode, e.shiftKey); } }) .shortcut({ pattern : 'home', description : 'selectffile', callback : function(e) { unselectAll({ notrigger: true }); scrollToView(cwd.find('[id]:first').trigger(evtSelect)); trigger(); } }) .shortcut({ pattern : 'end', description : 'selectlfile', callback : function(e) { unselectAll({ notrigger: true }); scrollToView(cwd.find('[id]:last').trigger(evtSelect)) ; trigger(); } }) .shortcut({ pattern : 'page_up', description : 'pageTurning', callback : function(e) { if (bufferExt.itemH) { wrapper.scrollTop( Math.round( wrapper.scrollTop() - (Math.floor((wrapper.height() + (list? bufferExt.itemH * -1 : 16)) / bufferExt.itemH)) * bufferExt.itemH ) ); } } }).shortcut({ pattern : 'page_down', description : 'pageTurning', callback : function(e) { if (bufferExt.itemH) { wrapper.scrollTop( Math.round( wrapper.scrollTop() + (Math.floor((wrapper.height() + (list? bufferExt.itemH * -1 : 16)) / bufferExt.itemH)) * bufferExt.itemH ) ); } } }); }); // fm.timeEnd('cwdLoad') return this; }; PK ZbSa00js/ui/uploadButton.jsnuW+A/** * @class elFinder toolbar's button tor upload file * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfinderuploadbutton = function(cmd) { "use strict"; return this.each(function() { var fm = cmd.fm, button = jQuery(this).elfinderbutton(cmd) .off('click'), form = jQuery('
      ').appendTo(button), input = jQuery('') .on('change', function() { var _input = jQuery(this); if (_input.val()) { fm.exec('upload', {input : _input.remove()[0]}, void(0), fm.cwd().hash); input.clone(true).appendTo(form); } }) .on('dragover', function(e) { e.originalEvent.dataTransfer.dropEffect = 'copy'; }), tm; form.append(input.clone(true)); cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var toShow = cmd.disabled(); if (form.is('visible')) { !toShow && form.hide(); } else { toShow && form.show(); } }); }) .change(); }); }; PK Zވjs/ui/viewbutton.jsnuW+A/** * @class elFinder toolbar button to switch current directory view. * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfinderviewbutton = function(cmd) { "use strict"; return this.each(function() { var button = jQuery(this).elfinderbutton(cmd), icon = button.children('.elfinder-button-icon'), text = button.children('.elfinder-button-text'), tm; cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var icons = cmd.value == 'icons'; icon.toggleClass('elfinder-button-icon-view-list', icons); cmd.className = icons? 'view-list' : ''; cmd.title = cmd.fm.i18n(icons ? 'viewlist' : 'viewicons'); button.attr('title', cmd.title); text.html(cmd.title); }); }); }); }; PK ZKtvvjs/ui/navdock.jsnuW+A/** * @class elfindernavdock - elFinder container for preview etc at below the navbar * * @author Naoki Sawada **/ jQuery.fn.elfindernavdock = function(fm, opts) { "use strict"; this.not('.elfinder-navdock').each(function() { var self = jQuery(this).hide().addClass('ui-state-default elfinder-navdock touch-punch'), node = self.parent(), wz = node.children('.elfinder-workzone').append(self), resize = function(to, h) { var curH = h || self.height(), diff = to - curH, len = Object.keys(sizeSyncs).length, calc = len? diff / len : 0, ovf; if (diff) { ovf = self.css('overflow'); self.css('overflow', 'hidden'); self.height(to); jQuery.each(sizeSyncs, function(id, n) { n.height(n.height() + calc).trigger('resize.' + fm.namespace); }); fm.trigger('wzresize'); self.css('overflow', ovf); } }, handle = jQuery('
      ').appendTo(self), sizeSyncs = {}, resizeFn = [], initMaxHeight = (parseInt(opts.initMaxHeight) || 50) / 100, maxHeight = (parseInt(opts.maxHeight) || 90) / 100, basicHeight, hasNode; self.data('addNode', function(cNode, opts) { var wzH = fm.getUI('workzone').height(), imaxH = wzH * initMaxHeight, curH, tH, mH; opts = Object.assign({ first: false, sizeSync: true, init: false }, opts); if (!cNode.attr('id')) { cNode.attr('id', fm.namespace+'-navdock-' + (+new Date())); } opts.sizeSync && (sizeSyncs[cNode.attr('id')] = cNode); curH = self.height(); tH = curH + cNode.outerHeight(true); if (opts.first) { handle.after(cNode); } else { self.append(cNode); } hasNode = true; self.resizable('enable').height(tH).show(); fm.trigger('wzresize'); if (opts.init) { mH = fm.storage('navdockHeight'); if (mH) { tH = mH; } else { tH = tH > imaxH? imaxH : tH; } basicHeight = tH; } resize(Math.min(tH, wzH * maxHeight)); return self; }).data('removeNode', function(nodeId, appendTo) { var cNode = jQuery('#'+nodeId); delete sizeSyncs[nodeId]; self.height(self.height() - jQuery('#'+nodeId).outerHeight(true)); if (appendTo) { if (appendTo === 'detach') { cNode = cNode.detach(); } else { appendTo.append(cNode); } } else { cNode.remove(); } if (self.children().length <= 1) { hasNode = false; self.resizable('disable').height(0).hide(); } fm.trigger('wzresize'); return cNode; }); if (! opts.disabled) { fm.one('init', function() { var ovf; if (fm.getUI('navbar').children().not('.ui-resizable-handle').length) { self.data('dockEnabled', true); self.resizable({ maxHeight: fm.getUI('workzone').height() * maxHeight, handles: { n: handle }, start: function(e, ui) { ovf = self.css('overflow'); self.css('overflow', 'hidden'); fm.trigger('navdockresizestart', {event: e, ui: ui}, true); }, resize: function(e, ui) { self.css('top', ''); fm.trigger('wzresize', { inNavdockResize : true }); }, stop: function(e, ui) { fm.trigger('navdockresizestop', {event: e, ui: ui}, true); self.css('top', ''); basicHeight = ui.size.height; fm.storage('navdockHeight', basicHeight); resize(basicHeight, ui.originalSize.height); self.css('overflow', ovf); } }); fm.bind('wzresize', function(e) { var minH, maxH, h; if (self.is(':visible')) { maxH = fm.getUI('workzone').height() * maxHeight; if (! e.data || ! e.data.inNavdockResize) { h = self.height(); if (maxH < basicHeight) { if (Math.abs(h - maxH) > 1) { resize(maxH); } } else { if (Math.abs(h - basicHeight) > 1) { resize(basicHeight); } } } self.resizable('option', 'maxHeight', maxH); } }).bind('themechange', function() { var oldH = Math.round(self.height()); requestAnimationFrame(function() { var curH = Math.round(self.height()), diff = oldH - curH; if (diff !== 0) { resize(self.height(), curH - diff); } }); }); } fm.bind('navbarshow navbarhide', function(e) { self[hasNode && e.type === 'navbarshow'? 'show' : 'hide'](); }); }); } }); return this; };PK Z9X@@js/ui/places.jsnuW+A/** * @class elFinder places/favorites ui * * @author Dmitry (dio) Levashov * @author Naoki Sawada **/ jQuery.fn.elfinderplaces = function(fm, opts) { "use strict"; return this.each(function() { var dirs = {}, c = 'class', navdir = fm.res(c, 'navdir'), collapsed = fm.res(c, 'navcollapse'), expanded = fm.res(c, 'navexpand'), hover = fm.res(c, 'hover'), clroot = fm.res(c, 'treeroot'), dropover = fm.res(c, 'adroppable'), tpl = fm.res('tpl', 'placedir'), ptpl = fm.res('tpl', 'perms'), spinner = jQuery(fm.res('tpl', 'navspinner')), suffix = opts.suffix? opts.suffix : '', key = 'places' + suffix, menuTimer = null, /** * Convert places dir node into dir hash * * @param String directory id * @return String **/ id2hash = function(id) { return id.substr(6); }, /** * Convert places dir hash into dir node id * * @param String directory id * @return String **/ hash2id = function(hash) { return 'place-'+hash; }, /** * Convert places dir hash into dir node elment (jQuery object) * * @param String directory id * @return Object **/ hash2elm = function(hash) { return jQuery(document.getElementById(hash2id(hash))); }, /** * Save current places state * * @return void **/ save = function() { var hashes = [], data = {}; hashes = jQuery.map(subtree.children().find('[id]'), function(n) { return id2hash(n.id); }); if (hashes.length) { jQuery.each(hashes.reverse(), function(i, h) { data[h] = dirs[h]; }); } else { data = null; } fm.storage(key, data); }, /** * Init dir at places * * @return void **/ init = function() { var dat, hashes; key = 'places'+(opts.suffix? opts.suffix : ''), dirs = {}; dat = fm.storage(key); if (typeof dat === 'string') { // old data type elFinder <= 2.1.12 dat = jQuery.grep(dat.split(','), function(hash) { return hash? true : false;}); jQuery.each(dat, function(i, d) { var dir = d.split('#'); dirs[dir[0]] = dir[1]? dir[1] : dir[0]; }); } else if (jQuery.isPlainObject(dat)) { dirs = dat; } // allow modify `dirs` /** * example for preset places * * elfinderInstance.bind('placesload', function(e, fm) { * //if (fm.storage(e.data.storageKey) === null) { // for first time only * if (!fm.storage(e.data.storageKey)) { // for empty places * e.data.dirs[targetHash] = fallbackName; // preset folder * } * } **/ fm.trigger('placesload', {dirs: dirs, storageKey: key}, true); hashes = Object.keys(dirs); if (hashes.length) { root.prepend(spinner); fm.request({ data : {cmd : 'info', targets : hashes}, preventDefault : true }) .done(function(data) { var exists = {}; data.files && data.files.length && fm.cache(data.files); jQuery.each(data.files, function(i, f) { var hash = f.hash; exists[hash] = f; }); jQuery.each(dirs, function(h, f) { add(exists[h] || Object.assign({notfound: true}, f)); }); if (fm.storage('placesState') > 0) { root.trigger('click'); } }) .always(function() { spinner.remove(); }); } }, /** * Return node for given dir object * * @param Object directory object * @return jQuery **/ create = function(dir, hash) { return jQuery(tpl.replace(/\{id\}/, hash2id(dir? dir.hash : hash)) .replace(/\{name\}/, fm.escape(dir? dir.i18 || dir.name : hash)) .replace(/\{cssclass\}/, dir? (fm.perms2class(dir) + (dir.notfound? ' elfinder-na' : '') + (dir.csscls? ' '+dir.csscls : '')) : '') .replace(/\{permissions\}/, (dir && (!dir.read || !dir.write || dir.notfound))? ptpl : '') .replace(/\{title\}/, dir? (' title="' + fm.escape(fm.path(dir.hash, true) || dir.i18 || dir.name) + '"') : '') .replace(/\{symlink\}/, '') .replace(/\{style\}/, (dir && dir.icon)? fm.getIconStyle(dir) : '')); }, /** * Add new node into places * * @param Object directory object * @return void **/ add = function(dir) { var node, hash; if (dir.mime !== 'directory') { return false; } hash = dir.hash; if (!fm.files().hasOwnProperty(hash)) { // update cache fm.trigger('tree', {tree: [dir]}); } node = create(dir, hash); dirs[hash] = dir; subtree.prepend(node); root.addClass(collapsed); sortBtn.toggle(subtree.children().length > 1); return true; }, /** * Remove dir from places * * @param String directory hash * @return String removed name **/ remove = function(hash) { var name = null, tgt, cnt; if (dirs[hash]) { delete dirs[hash]; tgt = hash2elm(hash); if (tgt.length) { name = tgt.text(); tgt.parent().remove(); cnt = subtree.children().length; sortBtn.toggle(cnt > 1); if (! cnt) { root.removeClass(collapsed); places.removeClass(expanded); subtree.slideToggle(false); } } } return name; }, /** * Move up dir on places * * @param String directory hash * @return void **/ moveup = function(hash) { var self = hash2elm(hash), tgt = self.parent(), prev = tgt.prev('div'), cls = 'ui-state-hover', ctm = fm.getUI('contextmenu'); menuTimer && clearTimeout(menuTimer); if (prev.length) { ctm.find(':first').data('placesHash', hash); self.addClass(cls); tgt.insertBefore(prev); prev = tgt.prev('div'); menuTimer = setTimeout(function() { self.removeClass(cls); if (ctm.find(':first').data('placesHash') === hash) { ctm.hide().empty(); } }, 1500); } if(!prev.length) { self.removeClass(cls); ctm.hide().empty(); } }, /** * Update dir at places * * @param Object directory * @param String previous hash * @return Boolean **/ update = function(dir, preHash) { var hash = dir.hash, tgt = hash2elm(preHash || hash), node = create(dir, hash); if (tgt.length > 0) { tgt.parent().replaceWith(node); dirs[hash] = dir; return true; } else { return false; } }, /** * Remove all dir from places * * @return void **/ clear = function() { subtree.empty(); root.removeClass(collapsed); places.removeClass(expanded); subtree.slideToggle(false); }, /** * Sort places dirs A-Z * * @return void **/ sort = function() { jQuery.each(dirs, function(h, f) { var dir = fm.file(h) || f, node = create(dir, h), ret = null; if (!dir) { node.hide(); } if (subtree.children().length) { jQuery.each(subtree.children(), function() { var current = jQuery(this); if ((dir.i18 || dir.name).localeCompare(current.children('.'+navdir).text()) < 0) { ret = !node.insertBefore(current); return ret; } }); if (ret !== null) { return true; } } !hash2elm(h).length && subtree.append(node); }); save(); }, // sort button sortBtn = jQuery('') .hide() .on('click', function(e) { e.stopPropagation(); subtree.empty(); sort(); } ), /** * Node - wrapper for places root * * @type jQuery **/ wrapper = create({ hash : 'root-'+fm.namespace, name : fm.i18n(opts.name, 'places'), read : true, write : true }), /** * Places root node * * @type jQuery **/ root = wrapper.children('.'+navdir) .addClass(clroot) .on('click', function(e) { e.stopPropagation(); if (root.hasClass(collapsed)) { places.toggleClass(expanded); subtree.slideToggle(); fm.storage('placesState', places.hasClass(expanded)? 1 : 0); } }) .append(sortBtn), /** * Container for dirs * * @type jQuery **/ subtree = wrapper.children('.'+fm.res(c, 'navsubtree')), /** * Main places container * * @type jQuery **/ places = jQuery(this).addClass(fm.res(c, 'tree')+' elfinder-places ui-corner-all') .hide() .append(wrapper) .appendTo(fm.getUI('navbar')) .on('mouseenter mouseleave', '.'+navdir, function(e) { jQuery(this).toggleClass('ui-state-hover', (e.type == 'mouseenter')); }) .on('click', '.'+navdir, function(e) { var p = jQuery(this); if (p.data('longtap')) { e.stopPropagation(); return; } ! p.hasClass('elfinder-na') && fm.exec('open', p.attr('id').substr(6)); }) .on('contextmenu', '.'+navdir+':not(.'+clroot+')', function(e) { var self = jQuery(this), hash = self.attr('id').substr(6); e.preventDefault(); fm.trigger('contextmenu', { raw : [{ label : fm.i18n('moveUp'), icon : 'up', remain : true, callback : function() { moveup(hash); save(); } },'|',{ label : fm.i18n('rmFromPlaces'), icon : 'rm', callback : function() { remove(hash); save(); } }], 'x' : e.pageX, 'y' : e.pageY }); self.addClass('ui-state-hover'); fm.getUI('contextmenu').children().on('mouseenter', function() { self.addClass('ui-state-hover'); }); fm.bind('closecontextmenu', function() { self.removeClass('ui-state-hover'); }); }) .droppable({ tolerance : 'pointer', accept : '.elfinder-cwd-file-wrapper,.elfinder-tree-dir,.elfinder-cwd-file', hoverClass : fm.res('class', 'adroppable'), classes : { // Deprecated hoverClass jQueryUI>=1.12.0 'ui-droppable-hover': fm.res('class', 'adroppable') }, over : function(e, ui) { var helper = ui.helper, dir = jQuery.grep(helper.data('files'), function(h) { return (fm.file(h).mime === 'directory' && !dirs[h])? true : false; }); e.stopPropagation(); helper.data('dropover', helper.data('dropover') + 1); if (fm.insideWorkzone(e.pageX, e.pageY)) { if (dir.length > 0) { helper.addClass('elfinder-drag-helper-plus'); fm.trigger('unlockfiles', {files : helper.data('files'), helper: helper}); } else { jQuery(this).removeClass(dropover); } } }, out : function(e, ui) { var helper = ui.helper; e.stopPropagation(); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus').data('dropover', Math.max(helper.data('dropover') - 1, 0)); jQuery(this).removeData('dropover') .removeClass(dropover); }, drop : function(e, ui) { var helper = ui.helper, resolve = true; jQuery.each(helper.data('files'), function(i, hash) { var dir = fm.file(hash); if (dir && dir.mime == 'directory' && !dirs[dir.hash]) { add(dir); } else { resolve = false; } }); save(); resolve && helper.hide(); } }) // for touch device .on('touchstart', '.'+navdir+':not(.'+clroot+')', function(e) { if (e.originalEvent.touches.length > 1) { return; } var hash = jQuery(this).attr('id').substr(6), p = jQuery(this) .addClass(hover) .data('longtap', null) .data('tmlongtap', setTimeout(function(){ // long tap p.data('longtap', true); fm.trigger('contextmenu', { raw : [{ label : fm.i18n('rmFromPlaces'), icon : 'rm', callback : function() { remove(hash); save(); } }], 'x' : e.originalEvent.touches[0].pageX, 'y' : e.originalEvent.touches[0].pageY }); }, 500)); }) .on('touchmove touchend', '.'+navdir+':not(.'+clroot+')', function(e) { clearTimeout(jQuery(this).data('tmlongtap')); if (e.type == 'touchmove') { jQuery(this).removeClass(hover); } }); if (jQuery.fn.sortable) { subtree.addClass('touch-punch') .sortable({ appendTo : fm.getUI(), revert : false, helper : function(e) { var dir = jQuery(e.target).parent(); dir.children().removeClass('ui-state-hover'); return jQuery('
      ') .append(jQuery('
      ').show().append(dir.clone())); }, stop : function(e, ui) { var target = jQuery(ui.item[0]), top = places.offset().top, left = places.offset().left, width = places.width(), height = places.height(), x = e.pageX, y = e.pageY; if (!(x > left && x < left+width && y > top && y < y+height)) { remove(id2hash(target.children(':first').attr('id'))); save(); } }, update : function(e, ui) { save(); } }); } // "on regist" for command exec jQuery(this).on('regist', function(e, files){ var added = false; jQuery.each(files, function(i, dir) { if (dir && dir.mime == 'directory' && !dirs[dir.hash]) { if (add(dir)) { added = true; } } }); added && save(); }); // on fm load - show places and load files from backend fm.one('load', function() { var dat, hashes; if (fm.oldAPI) { return; } places.show().parent().show(); init(); fm.change(function(e) { var changed = false; jQuery.each(e.data.changed, function(i, file) { if (dirs[file.hash]) { if (file.mime !== 'directory') { if (remove(file.hash)) { changed = true; } } else { if (update(file)) { changed = true; } } } }); changed && save(); }) .bind('rename', function(e) { var changed = false; if (e.data.removed) { jQuery.each(e.data.removed, function(i, hash) { if (e.data.added[i]) { if (update(e.data.added[i], hash)) { changed = true; } } }); } changed && save(); }) .bind('rm paste', function(e) { var names = [], changed = false; if (e.data.removed) { jQuery.each(e.data.removed, function(i, hash) { var name = remove(hash); name && names.push(name); }); } if (names.length) { changed = true; } if (e.data.added && names.length) { jQuery.each(e.data.added, function(i, file) { if (jQuery.inArray(file.name, names) !== 1) { file.mime == 'directory' && add(file); } }); } changed && save(); }) .bind('sync netmount', function() { var ev = this, opSuffix = opts.suffix? opts.suffix : '', hashes; if (ev.type === 'sync') { // check is change of opts.suffix if (suffix !== opSuffix) { suffix = opSuffix; clear(); init(); return; } } hashes = Object.keys(dirs); if (hashes.length) { root.prepend(spinner); fm.request({ data : {cmd : 'info', targets : hashes}, preventDefault : true }) .done(function(data) { var exists = {}, updated = false, cwd = fm.cwd().hash; jQuery.each(data.files || [], function(i, file) { var hash = file.hash; exists[hash] = file; if (!fm.files().hasOwnProperty(file.hash)) { // update cache fm.updateCache({tree: [file]}); } }); jQuery.each(dirs, function(h, f) { if (Boolean(f.notfound) === Boolean(exists[h])) { if ((f.phash === cwd && ev.type !== 'netmount') || (exists[h] && exists[h].mime !== 'directory')) { if (remove(h)) { updated = true; } } else { if (update(exists[h] || Object.assign({notfound: true}, f))) { updated = true; } } } else if (exists[h] && exists[h].phash != cwd) { // update permission of except cwd update(exists[h]); } }); updated && save(); }) .always(function() { spinner.remove(); }); } }); }); }); }; PK Z"{/(/(js/ui/searchbutton.jsnuW+A/** * @class elFinder toolbar search button widget. * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfindersearchbutton = function(cmd) { "use strict"; return this.each(function() { var result = false, fm = cmd.fm, disabled = fm.res('class', 'disabled'), isopts = cmd.options.incsearch || { enable: false }, sTypes = cmd.options.searchTypes, id = function(name){return fm.namespace + fm.escape(name);}, toolbar= fm.getUI('toolbar'), btnCls = fm.res('class', 'searchbtn'), button = jQuery(this) .hide() .addClass('ui-widget-content elfinder-button '+btnCls) .on('click', function(e) { e.stopPropagation(); }), getMenuOffset = function() { var fmNode = fm.getUI(), baseOffset = fmNode.offset(), buttonOffset = button.offset(); return { top : buttonOffset.top - baseOffset.top, maxHeight : fmNode.height() - 40 }; }, search = function() { input.data('inctm') && clearTimeout(input.data('inctm')); var val = jQuery.trim(input.val()), from = !jQuery('#' + id('SearchFromAll')).prop('checked'), mime = jQuery('#' + id('SearchMime')).prop('checked'), type = ''; if (from) { if (jQuery('#' + id('SearchFromVol')).prop('checked')) { from = fm.root(fm.cwd().hash); } else { from = fm.cwd().hash; } } if (mime) { mime = val; val = '.'; } if (typeSet) { type = typeSet.children('input:checked').val(); } if (val) { input.trigger('focus'); cmd.exec(val, from, mime, type).done(function() { result = true; }).fail(function() { abort(); }); } else { fm.trigger('searchend'); } }, abort = function() { input.data('inctm') && clearTimeout(input.data('inctm')); input.val('').trigger('blur'); if (result || incVal) { result = false; incVal = ''; fm.lazy(function() { fm.trigger('searchend'); }); } }, incVal = '', input = jQuery('') .on('focus', function() { // close other menus !button.hasClass('ui-state-active') && fm.getUI().click(); inFocus = true; incVal = ''; button.addClass('ui-state-active'); fm.trigger('uiresize'); opts && opts.css(getMenuOffset()).slideDown(function() { // Care for on browser window re-active button.addClass('ui-state-active'); fm.toFront(opts); }); }) .on('blur', function() { inFocus = false; if (opts) { if (!opts.data('infocus')) { opts.slideUp(function() { button.removeClass('ui-state-active'); fm.trigger('uiresize'); fm.toHide(opts); }); } else { opts.data('infocus', false); } } else { button.removeClass('ui-state-active'); } }) .appendTo(button) // to avoid fm shortcuts on arrows .on('keypress', function(e) { e.stopPropagation(); }) .on('keydown', function(e) { e.stopPropagation(); if (e.keyCode === jQuery.ui.keyCode.ENTER) { search(); } else if (e.keyCode === jQuery.ui.keyCode.ESCAPE) { e.preventDefault(); abort(); } }), opts, typeSet, cwdReady, inFocus; if (isopts.enable) { isopts.minlen = isopts.minlen || 2; isopts.wait = isopts.wait || 500; input .attr('title', fm.i18n('incSearchOnly')) .on('compositionstart', function() { input.data('composing', true); }) .on('compositionend', function() { input.removeData('composing'); input.trigger('input'); // for IE, edge }) .on('input', function() { if (! input.data('composing')) { input.data('inctm') && clearTimeout(input.data('inctm')); input.data('inctm', setTimeout(function() { var val = input.val(); if (val.length === 0 || val.length >= isopts.minlen) { (incVal !== val) && fm.trigger('incsearchstart', { query: val, type: typeSet? typeSet.children('input:checked').val() : 'searchName' }); incVal = val; if (val === '' && fm.searchStatus.state > 1 && fm.searchStatus.query) { input.val(fm.searchStatus.query).trigger('select'); } } }, isopts.wait)); } }); if (fm.UA.ltIE8) { input.on('keydown', function(e) { if (e.keyCode === 229) { input.data('imetm') && clearTimeout(input.data('imetm')); input.data('composing', true); input.data('imetm', setTimeout(function() { input.removeData('composing'); }, 100)); } }) .on('keyup', function(e) { input.data('imetm') && clearTimeout(input.data('imetm')); if (input.data('composing')) { e.keyCode === jQuery.ui.keyCode.ENTER && input.trigger('compositionend'); } else { input.trigger('input'); } }); } } jQuery('') .appendTo(button) .on('mousedown', function(e) { e.stopPropagation(); e.preventDefault(); if (button.hasClass('ui-state-active')) { search(); } else { input.trigger('focus'); } }); jQuery('') .appendTo(button) .on('mousedown', function(e) { e.stopPropagation(); e.preventDefault(); if (input.val() === '' && !button.hasClass('ui-state-active')) { input.trigger('focus'); } else { abort(); } }); // wait when button will be added to DOM fm.bind('toolbarload', function(){ var parent = button.parent(); if (parent.length) { toolbar.prepend(button.show()); parent.remove(); // position icons for ie7 if (fm.UA.ltIE7) { var icon = button.children(fm.direction == 'ltr' ? '.ui-icon-close' : '.ui-icon-search'); icon.css({ right : '', left : parseInt(button.width())-icon.outerWidth(true) }); } } }); fm .one('init', function() { fm.getUI('cwd').on('touchstart click', function() { inFocus && input.trigger('blur'); }); }) .one('open', function() { opts = (fm.api < 2.1)? null : jQuery('
      ') .append( jQuery('
      ') .append( jQuery(''), jQuery(''), jQuery('') ), jQuery('
      ') .append( jQuery('') ) ) .hide() .appendTo(fm.getUI()); if (opts) { if (sTypes) { typeSet = opts.find('.elfinder-search-type'); jQuery.each(cmd.options.searchTypes, function(i, v) { typeSet.append(jQuery('')); }); } opts.find('div.buttonset').buttonset(); jQuery('#'+id('SearchFromAll')).next('label').attr('title', fm.i18n('searchTarget', fm.i18n('btnAll'))); if (sTypes) { jQuery.each(sTypes, function(i, v) { if (v.title) { jQuery('#'+id(i)).next('label').attr('title', fm.i18n(v.title)); } }); } opts.on('mousedown', 'div.buttonset', function(e){ e.stopPropagation(); opts.data('infocus', true); }) .on('click', 'input', function(e) { e.stopPropagation(); jQuery.trim(input.val())? search() : input.trigger('focus'); }) .on('close', function() { input.trigger('blur'); }); } }) .bind('searchend', function() { input.val(''); }) .bind('open parents', function() { var dirs = [], volroot = fm.file(fm.root(fm.cwd().hash)); if (volroot) { jQuery.each(fm.parents(fm.cwd().hash), function(i, hash) { dirs.push(fm.file(hash).name); }); jQuery('#'+id('SearchFromCwd')).next('label').attr('title', fm.i18n('searchTarget', dirs.join(fm.option('separator')))); jQuery('#'+id('SearchFromVol')).next('label').attr('title', fm.i18n('searchTarget', volroot.name)); } }) .bind('open', function() { incVal && abort(); }) .bind('cwdinit', function() { cwdReady = false; }) .bind('cwdrender',function() { cwdReady = true; }) .bind('keydownEsc', function() { if (incVal && incVal.substr(0, 1) === '/') { incVal = ''; input.val(''); fm.trigger('searchend'); } }) .shortcut({ pattern : 'ctrl+f f3', description : cmd.title, callback : function() { input.trigger('select').trigger('focus'); } }) .shortcut({ pattern : 'a b c d e f g h i j k l m n o p q r s t u v w x y z dig0 dig1 dig2 dig3 dig4 dig5 dig6 dig7 dig8 dig9 num0 num1 num2 num3 num4 num5 num6 num7 num8 num9', description : fm.i18n('firstLetterSearch'), callback : function(e) { if (! cwdReady) { return; } var code = e.originalEvent.keyCode, next = function() { var sel = fm.selected(), key = jQuery.ui.keyCode[(!sel.length || fm.cwdHash2Elm(sel[0]).next('[id]').length)? 'RIGHT' : 'HOME']; jQuery(document).trigger(jQuery.Event('keydown', { keyCode: key, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); }, val; if (code >= 96 && code <= 105) { code -= 48; } val = '/' + String.fromCharCode(code); if (incVal !== val) { input.val(val); incVal = val; fm .trigger('incsearchstart', { query: val }) .one('cwdrender', next); } else{ next(); } } }); }); }; PK Zx js/ui/stat.jsnuW+A/** * @class elFinder ui * Display number of files/selected files and its size in statusbar * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfinderstat = function(fm) { "use strict"; return this.each(function() { var size = jQuery(this).addClass('elfinder-stat-size'), sel = jQuery('
      ') .on('click', 'a', function(e) { var hash = jQuery(this).data('hash'); e.preventDefault(); fm.exec('opendir', [ hash ]); }), titleitems = fm.i18n('items'), titlesel = fm.i18n('selected'), titlesize = fm.i18n('size'), setstat = function(files) { var c = 0, s = 0, cwd = fm.cwd(), calc = true, hasSize = true; if (cwd.sizeInfo || cwd.size) { s = cwd.size; calc = false; } jQuery.each(files, function(i, file) { c++; if (calc) { s += parseInt(file.size) || 0; if (hasSize === true && file.mime === 'directory' && !file.sizeInfo) { hasSize = false; } } }); size.html(titleitems+': '+c+', '+fm.i18n(hasSize? 'sum' : 'size')+': '+fm.formatSize(s)+'') .attr('title', size.text()); fm.trigger('uistatchange'); }, setIncsearchStat = function(data) { size.find('span.elfinder-stat-incsearch').html(data? data.hashes.length + ' / ' : ''); size.attr('title', size.text()); fm.trigger('uistatchange'); }, setSelect = function(files) { var s = 0, c = 0, dirs = [], path, file; if (files.length === 1) { file = files[0]; s = file.size; if (fm.searchStatus.state === 2) { path = fm.escape(file.path? file.path.replace(/\/[^\/]*$/, '') : '..'); dirs.push('
      '+path+''); } dirs.push(fm.escape(file.i18 || file.name)); sel.html(dirs.join('/') + (s > 0 ? ', '+fm.formatSize(s) : '')); } else if (files.length) { jQuery.each(files, function(i, file) { c++; s += parseInt(file.size)||0; }); sel.html(c ? titlesel+': '+c+', '+titlesize+': '+fm.formatSize(s) : ' '); } else { sel.html(''); } sel.attr('title', sel.text()); fm.trigger('uistatchange'); }; fm.getUI('statusbar').prepend(size).append(sel).show(); if (fm.UA.Mobile && jQuery.fn.tooltip) { fm.getUI('statusbar').tooltip({ classes: { 'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow' }, tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow', track: true }); } fm .bind('cwdhasheschange', function(e) { setstat(jQuery.map(e.data, function(h) { return fm.file(h); })); }) .change(function(e) { var files = e.data.changed || [], cwdHash = fm.cwd().hash; jQuery.each(files, function() { if (this.hash === cwdHash) { if (this.size) { size.children('.elfinder-stat-size').addClass('elfinder-stat-size-recursive').html(fm.i18n('sum')+': '+fm.formatSize(this.size)); size.attr('title', size.text()); } return false; } }); }) .select(function() { setSelect(fm.selectedFiles()); }) .bind('open', function() { setSelect([]); }) .bind('incsearch', function(e) { setIncsearchStat(e.data); }) .bind('incsearchend', function() { setIncsearchStat(); }) ; }); }; PK Z js/ui/navbar.jsnuW+A/** * @class elfindernav - elFinder container for diretories tree and places * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfindernavbar = function(fm, opts) { "use strict"; this.not('.elfinder-navbar').each(function() { var nav = jQuery(this).hide().addClass('ui-state-default elfinder-navbar'), parent = nav.css('overflow', 'hidden').parent(), wz = parent.children('.elfinder-workzone').append(nav), ltr = fm.direction == 'ltr', delta, deltaW, handle, swipeHandle, autoHide, setWidth, navdock, setWzRect = function() { var cwd = fm.getUI('cwd'), wz = fm.getUI('workzone'), wzRect = wz.data('rectangle'), cwdOffset = cwd.offset(); wz.data('rectangle', Object.assign(wzRect, { cwdEdge: (fm.direction === 'ltr')? cwdOffset.left : cwdOffset.left + cwd.width() })); }, setDelta = function() { nav.css('overflow', 'hidden'); delta = Math.round(nav.outerHeight() - nav.height()); deltaW = Math.round(navdock.outerWidth() - navdock.innerWidth()); nav.css('overflow', 'auto'); }; fm.one('init', function() { navdock = fm.getUI('navdock'); var set = function() { setDelta(); fm.bind('wzresize', function() { var navdockH = 0; navdock.width(nav.outerWidth() - deltaW); if (navdock.children().length > 1) { navdockH = navdock.outerHeight(true); } nav.height(wz.height() - navdockH - delta); }).trigger('wzresize'); }; if (fm.cssloaded) { set(); } else { fm.one('cssloaded', set); } }) .one('opendone',function() { handle && handle.trigger('resize'); nav.css('overflow', 'auto'); }).bind('themechange', setDelta); if (fm.UA.Touch) { autoHide = fm.storage('autoHide') || {}; if (typeof autoHide.navbar === 'undefined') { autoHide.navbar = (opts.autoHideUA && opts.autoHideUA.length > 0 && jQuery.grep(opts.autoHideUA, function(v){ return fm.UA[v]? true : false; }).length); fm.storage('autoHide', autoHide); } if (autoHide.navbar) { fm.one('init', function() { if (nav.children().length) { fm.uiAutoHide.push(function(){ nav.stop(true, true).trigger('navhide', { duration: 'slow', init: true }); }); } }); } fm.bind('load', function() { if (nav.children().length) { swipeHandle = jQuery('
      ').hide().appendTo(wz); if (swipeHandle.css('pointer-events') !== 'none') { swipeHandle.remove(); swipeHandle = null; } } }); nav.on('navshow navhide', function(e, data) { var mode = (e.type === 'navshow')? 'show' : 'hide', duration = (data && data.duration)? data.duration : 'fast', handleW = (data && data.handleW)? data.handleW : Math.max(50, fm.getUI().width() / 10); nav.stop(true, true)[mode]({ duration: duration, step : function() { fm.trigger('wzresize'); }, complete: function() { if (swipeHandle) { if (mode === 'show') { swipeHandle.stop(true, true).hide(); } else { swipeHandle.width(handleW? handleW : ''); fm.resources.blink(swipeHandle, 'slowonce'); } } fm.trigger('navbar'+ mode); data.init && fm.trigger('uiautohide'); setWzRect(); } }); autoHide.navbar = (mode !== 'show'); fm.storage('autoHide', Object.assign(fm.storage('autoHide'), {navbar: autoHide.navbar})); }).on('touchstart', function(e) { if (jQuery(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) { e.originalEvent._preventSwipeX = true; } }); } if (! fm.UA.Mobile) { handle = nav.resizable({ handles : ltr ? 'e' : 'w', minWidth : opts.minWidth || 150, maxWidth : opts.maxWidth || 500, resize : function() { fm.trigger('wzresize'); }, stop : function(e, ui) { fm.storage('navbarWidth', ui.size.width); setWzRect(); } }) .on('resize scroll', function(e) { var $this = jQuery(this), tm = $this.data('posinit'); e.preventDefault(); e.stopPropagation(); if (! ltr && e.type === 'resize') { nav.css('left', 0); } tm && cancelAnimationFrame(tm); $this.data('posinit', requestAnimationFrame(function() { var offset = (fm.UA.Opera && nav.scrollLeft())? 20 : 2; handle.css('top', 0).css({ top : parseInt(nav.scrollTop())+'px', left : ltr ? 'auto' : parseInt(nav.scrollRight() - offset) * -1, right: ltr ? parseInt(nav.scrollLeft() - offset) * -1 : 'auto' }); if (e.type === 'resize') { fm.getUI('cwd').trigger('resize'); } })); }) .children('.ui-resizable-handle').addClass('ui-front'); } if (setWidth = fm.storage('navbarWidth')) { nav.width(setWidth); } else { if (fm.UA.Mobile) { fm.one(fm.cssloaded? 'init' : 'cssloaded', function() { var set = function() { setWidth = nav.parent().width() / 2; if (nav.data('defWidth') > setWidth) { nav.width(setWidth); } else { nav.width(nav.data('defWidth')); } nav.data('width', nav.width()); fm.trigger('wzresize'); }; nav.data('defWidth', nav.width()); jQuery(window).on('resize.' + fm.namespace, set); set(); }); } } }); return this; }; PK Z "js/ui/overlay.jsnuW+A jQuery.fn.elfinderoverlay = function(opts) { "use strict"; var fm = this.parent().elfinder('instance'), o, cnt, show, hide; this.filter(':not(.elfinder-overlay)').each(function() { opts = Object.assign({}, opts); jQuery(this).addClass('ui-front ui-widget-overlay elfinder-overlay') .hide() .on('mousedown', function(e) { e.preventDefault(); e.stopPropagation(); }) .data({ cnt : 0, show : typeof(opts.show) == 'function' ? opts.show : function() { }, hide : typeof(opts.hide) == 'function' ? opts.hide : function() { } }); }); if (opts == 'show') { o = this.eq(0); cnt = o.data('cnt') + 1; show = o.data('show'); fm.toFront(o); o.data('cnt', cnt); if (o.is(':hidden')) { o.show(); show(); } } if (opts == 'hide') { o = this.eq(0); cnt = o.data('cnt') - 1; hide = o.data('hide'); o.data('cnt', cnt); if (cnt <= 0) { o.hide(); hide(); } } return this; }; PK ZL js/ui/path.jsnuW+A/** * @class elFinder ui * Display current folder path in statusbar. * Click on folder name in path - open folder * * @author Dmitry (dio) Levashov **/ jQuery.fn.elfinderpath = function(fm, options) { "use strict"; return this.each(function() { var query = '', target = '', mimes = [], place = 'statusbar', clHover= fm.res('class', 'hover'), prefix = 'path' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-', wzbase = jQuery('
      '), path = jQuery(this).addClass('elfinder-path').html(' ') .on('mousedown', 'span.elfinder-path-dir', function(e) { var hash = jQuery(this).attr('id').substr(prefix.length); e.preventDefault(); if (hash != fm.cwd().hash) { jQuery(this).addClass(clHover); if (query) { fm.exec('search', query, { target: hash, mime: mimes.join(' ') }); } else { fm.trigger('select', {selected : [hash]}).exec('open', hash); } } }) .prependTo(fm.getUI('statusbar').show()), roots = jQuery('
      ').on('click', function(e) { e.stopPropagation(); e.preventDefault(); var roots = jQuery.map(fm.roots, function(h) { return fm.file(h); }), raw = []; jQuery.each(roots, function(i, f) { if (! f.phash && fm.root(fm.cwd().hash, true) !== f.hash) { raw.push({ label : fm.escape(f.i18 || f.name), icon : 'home', callback : function() { fm.exec('open', f.hash); }, options : { iconClass : f.csscls || '', iconImg : f.icon || '' } }); } }); fm.trigger('contextmenu', { raw: raw, x: e.pageX, y: e.pageY }); }).append('').appendTo(wzbase), render = function(cwd) { var dirs = [], names = []; jQuery.each(fm.parents(cwd), function(i, hash) { var c = (cwd === hash)? 'elfinder-path-dir elfinder-path-cwd' : 'elfinder-path-dir', f = fm.file(hash), name = fm.escape(f.i18 || f.name); names.push(name); dirs.push(''+name+''); }); return dirs.join(''+fm.option('separator')+''); }, toWorkzone = function() { var prev; path.children('span.elfinder-path-dir').attr('style', ''); prev = fm.direction === 'ltr'? jQuery('#'+prefix + fm.cwd().hash).prevAll('span.elfinder-path-dir:first') : jQuery(); path.scrollLeft(prev.length? prev.position().left : 0); }, fit = function() { if (fm.UA.CSS.flex) { return; } var dirs = path.children('span.elfinder-path-dir'), cnt = dirs.length, m, bg = 0, ids; if (place === 'workzone' || cnt < 2) { dirs.attr('style', ''); return; } path.width(path.css('max-width')); dirs.css({maxWidth: (100/cnt)+'%', display: 'inline-block'}); m = path.width() - 9; path.children('span.elfinder-path-other').each(function() { m -= jQuery(this).width(); }); ids = []; dirs.each(function(i) { var dir = jQuery(this), w = dir.width(); m -= w; if (w < this.scrollWidth) { ids.push(i); } }); path.width(''); if (ids.length) { if (m > 0) { m = m / ids.length; jQuery.each(ids, function(i, k) { var d = jQuery(dirs[k]); d.css('max-width', d.width() + m); }); } dirs.last().attr('style', ''); } else { dirs.attr('style', ''); } }, hasUiTree, hasUiStat; fm.one('init', function() { hasUiTree = fm.getUI('tree').length; hasUiStat = fm.getUI('stat').length; if (! hasUiTree && options.toWorkzoneWithoutNavbar) { wzbase.append(path).insertBefore(fm.getUI('workzone')); place = 'workzone'; fm.bind('open', toWorkzone) .one('opendone', function() { fm.getUI().trigger('resize'); }); } }) .bind('open searchend parents', function() { var dirs = []; query = ''; target = ''; mimes = []; path.html(render(fm.cwd().hash)); if (Object.keys(fm.roots).length > 1) { path.css('margin', ''); roots.show(); } else { path.css('margin', 0); roots.hide(); } !hasUiStat && fit(); }) .bind('searchstart', function(e) { if (e.data) { query = e.data.query || ''; target = e.data.target || ''; mimes = e.data.mimes || []; } }) .bind('search', function(e) { var dirs = [], html = ''; if (target) { html = render(target); } else { html = fm.i18n('btnAll'); } path.html(''+fm.i18n('searcresult') + ': ' + html); fit(); }) // on swipe to navbar show/hide .bind('navbarshow navbarhide', function() { var wz = fm.getUI('workzone'); if (this.type === 'navbarshow') { fm.unbind('open', toWorkzone); path.prependTo(fm.getUI('statusbar')); wzbase.detach(); place = 'statusbar'; } else { wzbase.append(path).insertBefore(wz); place = 'workzone'; toWorkzone(); fm.bind('open', toWorkzone); } fm.trigger('uiresize'); }) .bind('resize uistatchange', fit); }); }; PK Z0{{js/ui/.htaccessnuW+A Order allow,deny Deny from all PK Z@yB-B-js/jquery.elfinder.jsnuW+A/*** jQuery UI droppable performance tune for elFinder ***/ (function(){ if (jQuery.ui) { if (jQuery.ui.ddmanager) { var origin = jQuery.ui.ddmanager.prepareOffsets; jQuery.ui.ddmanager.prepareOffsets = function( t, event ) { var isOutView = function(elem) { if (elem.is(':hidden')) { return true; } var rect = elem[0].getBoundingClientRect(); return document.elementFromPoint(rect.left, rect.top) || document.elementFromPoint(rect.left + rect.width, rect.top + rect.height)? false : true; }; if (event.type === 'mousedown' || t.options.elfRefresh) { var i, d, m = jQuery.ui.ddmanager.droppables[ t.options.scope ] || [], l = m.length; for ( i = 0; i < l; i++ ) { d = m[ i ]; if (d.options.autoDisable && (!d.options.disabled || d.options.autoDisable > 1)) { d.options.disabled = isOutView(d.element); d.options.autoDisable = d.options.disabled? 2 : 1; } } } // call origin function return origin( t, event ); }; } } })(); /** * * jquery.binarytransport * * @description. jQuery ajax transport for making binary data type requests. * */ (function($, undefined) { "use strict"; // use this transport for "binary" data type jQuery.ajaxTransport("+binary", function(options, originalOptions, jqXHR) { // check for conditions and support for blob / arraybuffer response type if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) { var callback; // Cross domain only allowed if supported through XMLHttpRequest return { send: function( headers, complete ) { var i, dataType = options.responseType || "blob", xhr = options.xhr(); xhr.open( options.type, options.url, options.async, options.username, options.password ); // Apply custom fields if provided if ( options.xhrFields ) { for ( i in options.xhrFields ) { xhr[ i ] = options.xhrFields[ i ]; } } // Override mime type if needed if ( options.mimeType && xhr.overrideMimeType ) { xhr.overrideMimeType( options.mimeType ); } // X-Requested-With header // For cross-domain requests, seeing as conditions for a preflight are // akin to a jigsaw puzzle, we simply never set it to be sure. // (it can always be set on a per-request basis or even using ajaxSetup) // For same-domain requests, won't change header if already provided. if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { headers[ "X-Requested-With" ] = "XMLHttpRequest"; } // Set headers for ( i in headers ) { xhr.setRequestHeader( i, headers[ i ] ); } // Callback callback = function( type ) { return function() { if ( callback ) { callback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null; if ( type === "abort" ) { xhr.abort(); } else if ( type === "error" ) { complete( xhr.status, xhr.statusText ); } else { var data = {}; data[options.dataType] = xhr.response; complete( xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders() ); } } }; }; // Listen to events xhr.onload = callback(); xhr.onabort = xhr.onerror = xhr.ontimeout = callback( "error" ); // Create the abort callback callback = callback( "abort" ); try { xhr.responseType = dataType; // Do send the request (this may raise an exception) xhr.send( options.data || null ); } catch ( e ) { if ( callback ) { throw e; } } }, abort: function() { if ( callback ) { callback(); } } }; } }); })(window.jQuery); /*! * jQuery UI Touch Punch 0.2.3 * * Copyright 2011–2014, Dave Furfero * Dual licensed under the MIT or GPL Version 2 licenses. * * Depends: * jquery.ui.widget.js * jquery.ui.mouse.js */ (function ($) { // Detect touch support jQuery.support.touch = 'ontouchend' in document; // Ignore browsers without touch support if (!jQuery.support.touch) { return; } var mouseProto = jQuery.ui.mouse.prototype, _mouseInit = mouseProto._mouseInit, _mouseDestroy = mouseProto._mouseDestroy, touchHandled, posX, posY; /** * Simulate a mouse event based on a corresponding touch event * @param {Object} event A touch event * @param {String} simulatedType The corresponding mouse event */ function simulateMouseEvent (event, simulatedType) { // Ignore multi-touch events if (event.originalEvent.touches.length > 1) { return; } if (! jQuery(event.currentTarget).hasClass('touch-punch-keep-default')) { event.preventDefault(); } var touch = event.originalEvent.changedTouches[0], simulatedEvent = document.createEvent('MouseEvents'); // Initialize the simulated mouse event using the touch event's coordinates simulatedEvent.initMouseEvent( simulatedType, // type true, // bubbles true, // cancelable window, // view 1, // detail touch.screenX, // screenX touch.screenY, // screenY touch.clientX, // clientX touch.clientY, // clientY false, // ctrlKey false, // altKey false, // shiftKey false, // metaKey 0, // button null // relatedTarget ); // Dispatch the simulated event to the target element event.target.dispatchEvent(simulatedEvent); } /** * Handle the jQuery UI widget's touchstart events * @param {Object} event The widget element's touchstart event */ mouseProto._touchStart = function (event) { var self = this; // Ignore the event if another widget is already being handled if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) { return; } // Track element position to avoid "false" move posX = event.originalEvent.changedTouches[0].screenX.toFixed(0); posY = event.originalEvent.changedTouches[0].screenY.toFixed(0); // Set the flag to prevent other widgets from inheriting the touch event touchHandled = true; // Track movement to determine if interaction was a click self._touchMoved = false; // Simulate the mouseover event simulateMouseEvent(event, 'mouseover'); // Simulate the mousemove event simulateMouseEvent(event, 'mousemove'); // Simulate the mousedown event simulateMouseEvent(event, 'mousedown'); }; /** * Handle the jQuery UI widget's touchmove events * @param {Object} event The document's touchmove event */ mouseProto._touchMove = function (event) { // Ignore event if not handled if (!touchHandled) { return; } // Ignore if it's a "false" move (position not changed) var x = event.originalEvent.changedTouches[0].screenX.toFixed(0); var y = event.originalEvent.changedTouches[0].screenY.toFixed(0); // Ignore if it's a "false" move (position not changed) if (Math.abs(posX - x) <= 4 && Math.abs(posY - y) <= 4) { return; } // Interaction was not a click this._touchMoved = true; // Simulate the mousemove event simulateMouseEvent(event, 'mousemove'); }; /** * Handle the jQuery UI widget's touchend events * @param {Object} event The document's touchend event */ mouseProto._touchEnd = function (event) { // Ignore event if not handled if (!touchHandled) { return; } // Simulate the mouseup event simulateMouseEvent(event, 'mouseup'); // Simulate the mouseout event simulateMouseEvent(event, 'mouseout'); // If the touch interaction did not move, it should trigger a click if (!this._touchMoved) { // Simulate the click event simulateMouseEvent(event, 'click'); } // Unset the flag to allow other widgets to inherit the touch event touchHandled = false; this._touchMoved = false; }; /** * A duck punch of the jQuery.ui.mouse _mouseInit method to support touch events. * This method extends the widget with bound touch event handlers that * translate touch events to mouse events and pass them to the widget's * original mouse event handling methods. */ mouseProto._mouseInit = function () { var self = this; if (self.element.hasClass('touch-punch')) { // Delegate the touch handlers to the widget's element self.element.on({ touchstart: jQuery.proxy(self, '_touchStart'), touchmove: jQuery.proxy(self, '_touchMove'), touchend: jQuery.proxy(self, '_touchEnd') }); } // Call the original jQuery.ui.mouse init method _mouseInit.call(self); }; /** * Remove the touch event handlers */ mouseProto._mouseDestroy = function () { var self = this; if (self.element.hasClass('touch-punch')) { // Delegate the touch handlers to the widget's element self.element.off({ touchstart: jQuery.proxy(self, '_touchStart'), touchmove: jQuery.proxy(self, '_touchMove'), touchend: jQuery.proxy(self, '_touchEnd') }); } // Call the original jQuery.ui.mouse destroy method _mouseDestroy.call(self); }; })(jQuery); jQuery.fn.elfinder = function(o, o2) { if (o === 'instance') { return this.getElFinder(); } else if (o === 'ondemand') { } return this.each(function() { var cmd = typeof o === 'string' ? o : '', bootCallback = typeof o2 === 'function'? o2 : void(0), elfinder = this.elfinder, opts, reloadCallback; if (!elfinder) { if (jQuery.isPlainObject(o)) { new elFinder(this, o, bootCallback); } } else { switch(cmd) { case 'close': case 'hide': elfinder.hide(); break; case 'open': case 'show': elfinder.show(); break; case 'destroy': elfinder.destroy(); break; case 'reload': case 'restart': if (elfinder) { opts = jQuery.extend(true, elfinder.options, jQuery.isPlainObject(o2)? o2 : {}); bootCallback = elfinder.bootCallback; if (elfinder.reloadCallback && jQuery.isFunction(elfinder.reloadCallback)) { elfinder.reloadCallback(opts, bootCallback); } else { elfinder.destroy(); new elFinder(this, opts, bootCallback); } } break; } } }); }; jQuery.fn.getElFinder = function() { var instance; this.each(function() { if (this.elfinder) { instance = this.elfinder; return false; } }); return instance; }; jQuery.fn.elfUiWidgetInstance = function(name) { try { return this[name]('instance'); } catch(e) { // fallback for jQuery UI < 1.11 var data = this.data('ui-' + name); if (data && typeof data === 'object' && data.widgetFullName === 'ui-' + name) { return data; } return null; } }; // function scrollRight if (! jQuery.fn.scrollRight) { jQuery.fn.extend({ scrollRight: function (val) { var node = this.get(0); if (val === undefined) { return Math.max(0, node.scrollWidth - (node.scrollLeft + node.clientWidth)); } return this.scrollLeft(node.scrollWidth - node.clientWidth - val); } }); } // function scrollBottom if (! jQuery.fn.scrollBottom) { jQuery.fn.extend({ scrollBottom: function(val) { var node = this.get(0); if (val === undefined) { return Math.max(0, node.scrollHeight - (node.scrollTop + node.clientHeight)); } return this.scrollTop(node.scrollHeight - node.clientHeight - val); } }); } PK Z[[js/elFinder.version.jsnuW+A/** * Application version * * @type String **/ elFinder.prototype.version = '2.1.60'; PK Z166js/elFinder.options.netmount.jsnuW+A/** * Default elFinder config of commandsOptions.netmount * * @type Object */ elFinder.prototype._options.commandsOptions.netmount = { ftp: { name : 'FTP', inputs: { host : jQuery(''), port : jQuery(''), path : jQuery(''), user : jQuery(''), pass : jQuery(''), FTPS : jQuery(''), encoding : jQuery(''), locale : jQuery('') } }, dropbox2: elFinder.prototype.makeNetmountOptionOauth('dropbox2', 'Dropbox', 'Dropbox', {noOffline : true, root : '/', pathI18n : 'path', integrate : { title: 'Dropbox.com', link: 'https://www.dropbox.com' } }), googledrive: elFinder.prototype.makeNetmountOptionOauth('googledrive', 'Google Drive', 'Google', { integrate : { title: 'Google Drive', link: 'https://www.google.com/drive/' } }), onedrive: elFinder.prototype.makeNetmountOptionOauth('onedrive', 'One Drive', 'OneDrive', { integrate : { title: 'Microsoft OneDrive', link: 'https://onedrive.live.com' } }), box: elFinder.prototype.makeNetmountOptionOauth('box', 'Box', 'Box', { noOffline : true, integrate : { title: 'Box.com', link: 'https://www.box.com' } }) }; PK Zgx}}js/elfinder.full.jsnuW+A/*! * elFinder - file manager for web * Version 2.1.49 (2019-04-14) * http://elfinder.org * * Copyright 2009-2019, Studio 42 * Licensed under a 3-clauses BSD license */ (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery','jquery-ui'], factory); } else if (typeof exports !== 'undefined') { // CommonJS var $, ui; try { $ = require('jquery'); ui = require('jquery-ui'); } catch (e) {} module.exports = factory($, ui); } else { // Browser globals (Note: root is window) factory(root.jQuery, root.jQuery.ui, true); } }(this, function($, _ui, toGlobal) { toGlobal = toGlobal || false; /* * File: /js/elFinder.js */ /** * @class elFinder - file manager for web * * @author Dmitry (dio) Levashov **/ var elFinder = function(elm, opts, bootCallback) { //this.time('load'); var self = this, /** * Objects array of jQuery.Deferred that calls before elFinder boot up * * @type Array */ dfrdsBeforeBootup = [], /** * Plugin name to check for conflicts with bootstrap etc * * @type Array **/ conflictChecks = ['button', 'tooltip'], /** * Node on which elfinder creating * * @type jQuery **/ node = jQuery(elm), /** * Object of events originally registered in this node * * @type Object */ prevEvents = jQuery.extend(true, {}, jQuery._data(node.get(0), 'events')), /** * Store node contents. * * @see this.destroy * @type jQuery **/ prevContent = jQuery('
      ').append(node.contents()).attr('class', node.attr('class') || '').attr('style', node.attr('style') || ''), /** * Instance ID. Required to get/set cookie * * @type String **/ id = node.attr('id') || '', /** * Events namespace * * @type String **/ namespace = 'elfinder-' + (id ? id : Math.random().toString().substr(2, 7)), /** * Mousedown event * * @type String **/ mousedown = 'mousedown.'+namespace, /** * Keydown event * * @type String **/ keydown = 'keydown.'+namespace, /** * Keypress event * * @type String **/ keypress = 'keypress.'+namespace, /** * Keypup event * * @type String **/ keyup = 'keyup.'+namespace, /** * Is shortcuts/commands enabled * * @type Boolean **/ enabled = false, /** * Store enabled value before ajax request * * @type Boolean **/ prevEnabled = false, /** * List of build-in events which mapped into methods with same names * * @type Array **/ events = ['enable', 'disable', 'load', 'open', 'reload', 'select', 'add', 'remove', 'change', 'dblclick', 'getfile', 'lockfiles', 'unlockfiles', 'selectfiles', 'unselectfiles', 'dragstart', 'dragstop', 'search', 'searchend', 'viewchange'], /** * Rules to validate data from backend * * @type Object **/ rules = {}, /** * Current working directory hash * * @type String **/ cwd = '', /** * Current working directory options default * * @type Object **/ cwdOptionsDefault = { path : '', url : '', tmbUrl : '', disabled : [], separator : '/', archives : [], extract : [], copyOverwrite : true, uploadOverwrite : true, uploadMaxSize : 0, jpgQuality : 100, tmbCrop : false, tmb : false // old API }, /** * Current working directory options * * @type Object **/ cwdOptions = {}, /** * Files/dirs cache * * @type Object **/ files = {}, /** * Hidden Files/dirs cache * * @type Object **/ hiddenFiles = {}, /** * Files/dirs hash cache of each dirs * * @type Object **/ ownFiles = {}, /** * Selected files hashes * * @type Array **/ selected = [], /** * Events listeners * * @type Object **/ listeners = {}, /** * Shortcuts * * @type Object **/ shortcuts = {}, /** * Buffer for copied files * * @type Array **/ clipboard = [], /** * Copied/cuted files hashes * Prevent from remove its from cache. * Required for dispaly correct files names in error messages * * @type Object **/ remember = {}, /** * Queue for 'open' requests * * @type Array **/ queue = [], /** * Queue for only cwd requests e.g. `tmb` * * @type Array **/ cwdQueue = [], /** * Commands prototype * * @type Object **/ base = new self.command(self), /** * elFinder node width * * @type String * @default "auto" **/ width = 'auto', /** * elFinder node height * Number: pixcel or String: Number + "%" * * @type Number | String * @default 400 **/ height = 400, /** * Base node object or selector * Element which is the reference of the height percentage * * @type Object|String * @default null | jQuery(window) (if height is percentage) **/ heightBase = null, /** * MIME type list(Associative array) handled as a text file * * @type Object|null */ textMimes = null, /** * elfinder path for sound played on remove * @type String * @default ./sounds/ **/ soundPath = 'sounds/', /** * JSON.stringify of previous fm.sorters * @type String */ prevSorterStr = '', /** * Map table of file extention to MIME-Type * @type Object */ extToMimeTable, beeper = jQuery(document.createElement('audio')).hide().appendTo('body')[0], syncInterval, autoSyncStop = 0, uiCmdMapPrev = '', gcJobRes = null, open = function(data) { // NOTES: Do not touch data object var volumeid, contextmenu, emptyDirs = {}, stayDirs = {}, rmClass, hashes, calc, gc, collapsed, prevcwd, sorterStr; if (self.api >= 2.1) { // support volume driver option `uiCmdMap` self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {}; if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) { uiCmdMapPrev = JSON.stringify(self.commandMap); } } else { self.options.sync = 0; } if (data.init) { // init - reset cache files = {}; ownFiles = {}; } else { // remove only files from prev cwd // and collapsed directory (included 100+ directories) to empty for perfomance tune in DnD prevcwd = cwd; rmClass = 'elfinder-subtree-loaded ' + self.res('class', 'navexpand'); collapsed = self.res('class', 'navcollapse'); hashes = Object.keys(files); calc = function(i) { if (!files[i]) { return true; } var isDir = (files[i].mime === 'directory'), phash = files[i].phash, pnav; if ( (!isDir || emptyDirs[phash] || (!stayDirs[phash] && self.navHash2Elm(files[i].hash).is(':hidden') && self.navHash2Elm(phash).next('.elfinder-navbar-subtree').children().length > 100 ) ) && (isDir || phash !== cwd) && ! remember[i] ) { if (isDir && !emptyDirs[phash]) { emptyDirs[phash] = true; self.navHash2Elm(phash) .removeClass(rmClass) .next('.elfinder-navbar-subtree').empty(); } deleteCache(files[i]); } else if (isDir) { stayDirs[phash] = true; } }; gc = function() { if (hashes.length) { gcJobRes && gcJobRes._abort(); gcJobRes = self.asyncJob(calc, hashes, { interval : 20, numPerOnce : 100 }).done(function() { var hd = self.storage('hide') || {items: {}}; if (Object.keys(hiddenFiles).length) { jQuery.each(hiddenFiles, function(h) { if (!hd.items[h]) { delete hiddenFiles[h]; } }); } }); } }; self.trigger('filesgc').one('filesgc', function() { hashes = []; }); self.one('opendone', function() { if (prevcwd !== cwd) { if (! node.data('lazycnt')) { gc(); } else { self.one('lazydone', gc); } } }); } self.sorters = {}; cwd = data.cwd.hash; cache(data.files); if (!files[cwd]) { cache([data.cwd]); } // trigger event 'sorterupdate' sorterStr = JSON.stringify(self.sorters); if (prevSorterStr !== sorterStr) { self.trigger('sorterupdate'); prevSorterStr = sorterStr; } self.lastDir(cwd); self.autoSync(); }, /** * Store info about files/dirs in "files" object. * * @param Array files * @param String data type * @return void **/ cache = function(data, type) { var defsorter = { name: true, perm: true, date: true, size: true, kind: true }, sorterChk = !self.sorters._checked, l = data.length, setSorter = function(file) { var f = file || {}, sorters = []; jQuery.each(self.sortRules, function(key) { if (defsorter[key] || typeof f[key] !== 'undefined' || (key === 'mode' && typeof f.perm !== 'undefined')) { sorters.push(key); } }); self.sorters = self.arrayFlip(sorters, true); self.sorters._checked = true; }, keeps = ['sizeInfo'], changedParents = {}, hideData = self.storage('hide') || {}, hides = hideData.items || {}, f, i, keepProp, parents, hidden; for (i = 0; i < l; i++) { f = Object.assign({}, data[i]); hidden = (!hideData.show && hides[f.hash])? true : false; if (f.name && f.hash && f.mime) { if (!hidden) { if (sorterChk && f.phash === cwd) { setSorter(f); sorterChk = false; } if (f.phash && (type === 'add' || type === 'change')) { if (parents = self.parents(f.phash)) { jQuery.each(parents, function() { changedParents[this] = true; }); } } } if (files[f.hash]) { jQuery.each(keeps, function() { if(files[f.hash][this] && ! f[this]) { f[this] = files[f.hash][this]; } }); if (f.sizeInfo && !f.size) { f.size = f.sizeInfo.size; } deleteCache(files[f.hash], true); } if (hides[f.hash]) { hiddenFiles[f.hash] = f; } if (hidden) { l--; data.splice(i--, 1); } else { files[f.hash] = f; if (f.mime === 'directory' && !ownFiles[f.hash]) { ownFiles[f.hash] = {}; } if (f.phash) { if (!ownFiles[f.phash]) { ownFiles[f.phash] = {}; } ownFiles[f.phash][f.hash] = true; } } } } // delete sizeInfo cache jQuery.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); // for empty folder sorterChk && setSorter(); }, /** * Delete file object from files caches * * @param Array removed hashes * @return void */ remove = function(removed) { var l = removed.length, roots = {}, rm = function(hash) { var file = files[hash], i; if (file) { if (file.mime === 'directory') { if (roots[hash]) { delete self.roots[roots[hash]]; } // restore stats of deleted root parent directory jQuery.each(self.leafRoots, function(phash, roots) { var idx, pdir; if ((idx = jQuery.inArray(hash, roots))!== -1) { if (roots.length === 1) { if ((pdir = Object.assign({}, files[phash])) && pdir._realStats) { jQuery.each(pdir._realStats, function(k, v) { pdir[k] = v; }); remove(files[phash]._realStats); self.change({ changed: [pdir] }); } delete self.leafRoots[phash]; } else { self.leafRoots[phash].splice(idx, 1); } } }); if (self.searchStatus.state < 2) { jQuery.each(files, function(h, f) { f.phash == hash && rm(h); }); } } if (file.phash) { if (parents = self.parents(file.phash)) { jQuery.each(parents, function() { changedParents[this] = true; }); } } deleteCache(files[hash]); } }, changedParents = {}, parents; jQuery.each(self.roots, function(k, v) { roots[v] = k; }); while (l--) { rm(removed[l]); } // delete sizeInfo cache jQuery.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); }, /** * Update file object in files caches * * @param Array changed file objects * @return void */ change = function(changed) { jQuery.each(changed, function(i, file) { var hash = file.hash; if (files[hash]) { jQuery.each(Object.keys(files[hash]), function(i, v){ if (typeof file[v] === 'undefined') { delete files[hash][v]; } }); } files[hash] = files[hash] ? Object.assign(files[hash], file) : file; }); }, /** * Delete cache data of files, ownFiles and self.optionsByHashes * * @param Object file * @param Boolean update * @return void */ deleteCache = function(file, update) { var hash = file.hash, phash = file.phash; if (phash && ownFiles[phash]) { delete ownFiles[phash][hash]; } if (!update) { ownFiles[hash] && delete ownFiles[hash]; self.optionsByHashes[hash] && delete self.optionsByHashes[hash]; } delete files[hash]; }, /** * Maximum number of concurrent connections on request * * @type Number */ requestMaxConn, /** * Current number of connections * * @type Number */ requestCnt = 0, /** * Queue waiting for connection * * @type Array */ requestQueue = [], /** * Flag to cancel the `open` command waiting for connection * * @type Boolean */ requestQueueSkipOpen = false, /** * Exec shortcut * * @param jQuery.Event keydown/keypress event * @return void */ execShortcut = function(e) { var code = e.keyCode, ctrlKey = !!(e.ctrlKey || e.metaKey), isMousedown = e.type === 'mousedown', ddm; !isMousedown && (self.keyState.keyCode = code); self.keyState.ctrlKey = ctrlKey; self.keyState.shiftKey = e.shiftKey; self.keyState.metaKey = e.metaKey; self.keyState.altKey = e.altKey; if (isMousedown) { return; } else if (e.type === 'keyup') { self.keyState.keyCode = null; return; } if (enabled) { jQuery.each(shortcuts, function(i, shortcut) { if (shortcut.type == e.type && shortcut.keyCode == code && shortcut.shiftKey == e.shiftKey && shortcut.ctrlKey == ctrlKey && shortcut.altKey == e.altKey) { e.preventDefault(); e.stopPropagation(); shortcut.callback(e, self); self.debug('shortcut-exec', i+' : '+shortcut.description); } }); // prevent tab out of elfinder if (code == jQuery.ui.keyCode.TAB && !jQuery(e.target).is(':input')) { e.preventDefault(); } // cancel any actions by [Esc] key if (e.type === 'keydown' && code == jQuery.ui.keyCode.ESCAPE) { // copy or cut if (! node.find('.ui-widget:visible').length) { self.clipboard().length && self.clipboard([]); } // dragging if (jQuery.ui.ddmanager) { ddm = jQuery.ui.ddmanager.current; ddm && ddm.helper && ddm.cancel(); } // button menus self.toHide(node.find('.ui-widget.elfinder-button-menu.elfinder-frontmost:visible')); // trigger keydownEsc self.trigger('keydownEsc', e); } } }, date = new Date(), utc, i18n, inFrame = (window.parent !== window), parentIframe = (function() { var pifm, ifms; if (inFrame) { try { ifms = jQuery('iframe', window.parent.document); if (ifms.length) { jQuery.each(ifms, function(i, ifm) { if (ifm.contentWindow === window) { pifm = jQuery(ifm); return false; } }); } } catch(e) {} } return pifm; })(), /** * elFinder boot up function * * @type Function */ bootUp, /** * Original function of XMLHttpRequest.prototype.send * * @type Function */ savedXhrSend; // opts must be an object if (!opts) { opts = {}; } // set UA.Angle, UA.Rotated for mobile devices if (self.UA.Mobile) { jQuery(window).on('orientationchange.'+namespace, function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } self.UA.Angle = a; self.UA.Rotated = a % 180 === 0? false : true; }).trigger('orientationchange.'+namespace); } // check opt.bootCallback if (opts.bootCallback && typeof opts.bootCallback === 'function') { (function() { var func = bootCallback, opFunc = opts.bootCallback; bootCallback = function(fm, extraObj) { func && typeof func === 'function' && func.call(this, fm, extraObj); opFunc.call(this, fm, extraObj); }; })(); } delete opts.bootCallback; /** * Protocol version * * @type String **/ this.api = null; /** * elFinder use new api * * @type Boolean **/ this.newAPI = false; /** * elFinder use old api * * @type Boolean **/ this.oldAPI = false; /** * Net drivers names * * @type Array **/ this.netDrivers = []; /** * Base URL of elfFinder library starting from Manager HTML * * @type String */ this.baseUrl = ''; /** * Base URL of i18n js files * baseUrl + "js/i18n/" when empty value * * @type String */ this.i18nBaseUrl = ''; /** * Is elFinder CSS loaded * * @type Boolean */ this.cssloaded = false; /** * Current theme object * * @type Object|Null */ this.theme = null; this.mimesCanMakeEmpty = {}; /** * Callback function at boot up that option specified at elFinder starting * * @type Function */ this.bootCallback; /** * ID. Required to create unique cookie name * * @type String **/ this.id = id; /** * Method to store/fetch data * * @type Function **/ this.storage = (function() { try { if ('localStorage' in window && window.localStorage !== null) { if (self.UA.Safari) { // check for Mac/iOS safari private browsing mode window.localStorage.setItem('elfstoragecheck', 1); window.localStorage.removeItem('elfstoragecheck'); } return self.localStorage; } else { return self.cookie; } } catch (e) { return self.cookie; } })(); /** * Configuration options * * @type Object **/ //this.options = jQuery.extend(true, {}, this._options, opts); this.options = Object.assign({}, this._options); // for old type configuration if (opts.uiOptions) { if (opts.uiOptions.toolbar && Array.isArray(opts.uiOptions.toolbar)) { if (jQuery.isPlainObject(opts.uiOptions.toolbar[opts.uiOptions.toolbar.length - 1])) { self.options.uiOptions.toolbarExtra = Object.assign(self.options.uiOptions.toolbarExtra || {}, opts.uiOptions.toolbar.pop()); } } } // Overwrite if opts value is an array (function() { var arrOv = function(obj, base) { if (jQuery.isPlainObject(obj)) { jQuery.each(obj, function(k, v) { if (jQuery.isPlainObject(v)) { if (!base[k]) { base[k] = {}; } arrOv(v, base[k]); } else { base[k] = v; } }); } }; arrOv(opts, self.options); })(); // join toolbarExtra to toolbar this.options.uiOptions.toolbar.push(this.options.uiOptions.toolbarExtra); delete this.options.uiOptions.toolbarExtra; /** * Arrays that has to unbind events * * @type Object */ this.toUnbindEvents = {}; /** * Attach listener to events * To bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Object event handler or {done: handler} * @param Boolean priority first * @return elFinder */ this.bind = function(event, callback, priorityFirst) { var i, len; if (callback && (typeof callback === 'function' || typeof callback.done === 'function')) { event = ('' + event).toLowerCase().replace(/^\s+|\s+$/g, '').split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (listeners[event[i]] === void(0)) { listeners[event[i]] = []; } listeners[event[i]][priorityFirst? 'unshift' : 'push'](callback); } } return this; }; /** * Remove event listener if exists * To un-bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Function callback * @return elFinder */ this.unbind = function(event, callback) { var i, len, l, ci; event = ('' + event).toLowerCase().split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (l = listeners[event[i]]) { ci = jQuery.inArray(callback, l); ci > -1 && l.splice(ci, 1); } } callback = null; return this; }; /** * Fire event - send notification to all event listeners * In the callback `this` becames an event object * * @param String event type * @param Object data to send across event * @param Boolean allow modify data (call by reference of data) default: true * @return elFinder */ this.trigger = function(evType, data, allowModify) { var type = evType.toLowerCase(), isopen = (type === 'open'), dataIsObj = (typeof data === 'object'), handlers = listeners[type] || [], dones = [], i, l, jst, event; this.debug('event-'+type, data); if (! dataIsObj || typeof allowModify === 'undefined') { allowModify = true; } if (l = handlers.length) { event = jQuery.Event(type); if (data) { data._event = event; } if (allowModify) { event.data = data; } for (i = 0; i < l; i++) { if (! handlers[i]) { // probably un-binded this handler continue; } // handler is jQuery.Deferred(), call all functions upon completion if (handlers[i].done) { dones.push(handlers[i].done); continue; } // set `event.data` only callback has argument if (handlers[i].length) { if (!allowModify) { // to avoid data modifications. remember about "sharing" passing arguments in js :) if (typeof jst === 'undefined') { try { jst = JSON.stringify(data); } catch(e) { jst = false; } } event.data = jst? JSON.parse(jst) : data; } } try { if (handlers[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } // call done functions if (l = dones.length) { for (i = 0; i < l; i++) { try { if (dones[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type + '(done)'); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } } if (this.toUnbindEvents[type] && this.toUnbindEvents[type].length) { jQuery.each(this.toUnbindEvents[type], function(i, v) { self.unbind(v.type, v.callback); }); delete this.toUnbindEvents[type]; } } return this; }; /** * Get event listeners * * @param String event type * @return Array listed event functions */ this.getListeners = function(event) { return event? listeners[event.toLowerCase()] : listeners; }; // set fm.baseUrl this.baseUrl = (function() { var myTag, myCss, base, baseUrl; if (self.options.baseUrl) { return self.options.baseUrl; } else { baseUrl = ''; //myTag = jQuery('head > script[src$="js/elfinder.min.js"],script[src$="js/elfinder.full.js"]:first'); myTag = null; jQuery('head > script').each(function() { if (this.src && this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js$/i)) { myTag = jQuery(this); return false; } }); if (myTag) { myCss = jQuery('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length; if (! myCss) { // to request CSS auto loading self.cssloaded = null; } baseUrl = myTag.attr('src').replace(/js\/[^\/]+$/, ''); if (! baseUrl.match(/^(https?\/\/|\/)/)) { // check tag if (base = jQuery('head > base[href]').attr('href')) { baseUrl = base.replace(/\/$/, '') + '/' + baseUrl; } } } if (baseUrl !== '') { self.options.baseUrl = baseUrl; } else { if (! self.options.baseUrl) { self.options.baseUrl = './'; } baseUrl = self.options.baseUrl; } return baseUrl; } })(); this.i18nBaseUrl = (this.options.i18nBaseUrl || this.baseUrl + 'js/i18n').replace(/\/$/, '') + '/'; this.options.maxErrorDialogs = Math.max(1, parseInt(this.options.maxErrorDialogs || 5)); // set dispInlineRegex cwdOptionsDefault.dispInlineRegex = this.options.dispInlineRegex; // auto load required CSS if (this.options.cssAutoLoad) { (function() { var baseUrl = self.baseUrl; // additional CSS files if (Array.isArray(self.options.cssAutoLoad)) { if (self.cssloaded === true) { self.loadCss(self.options.cssAutoLoad); } else { self.bind('cssloaded', function() { self.loadCss(self.options.cssAutoLoad); }); } } // try to load main css if (self.cssloaded === null) { // hide elFinder node while css loading node.data('cssautoloadHide', jQuery('')); jQuery('head').append(node.data('cssautoloadHide')); // set default theme if (!self.options.themes.default) { self.options.themes = Object.assign({ 'default' : { 'name': 'default', 'cssurls': 'css/theme.css', 'author': 'elFinder Project', 'license': '3-clauses BSD' } }, self.options.themes); if (!self.options.theme) { self.options.theme = 'default'; } } // load CSS self.loadCss([baseUrl+'css/elfinder.min.css'], { dfd: jQuery.Deferred().always(function() { if (node.data('cssautoloadHide')) { node.data('cssautoloadHide').remove(); node.removeData('cssautoloadHide'); } }).done(function() { if (!self.cssloaded) { self.cssloaded = true; self.trigger('cssloaded'); } }).fail(function() { self.cssloaded = false; self.error(['errRead', 'CSS (elfinder or theme)']); }) }); } self.options.cssAutoLoad = false; })(); } // load theme if exists this.changeTheme(this.storage('theme') || this.options.theme); /** * Volume option to set the properties of the root Stat * * @type Object */ this.optionProperties = { icon: void(0), csscls: void(0), tmbUrl: void(0), uiCmdMap: {}, netkey: void(0), disabled: [] }; if (! inFrame && ! this.options.enableAlways && jQuery('body').children().length === 2) { // only node and beeper this.options.enableAlways = true; } // make options.debug if (this.options.debug === true) { this.options.debug = 'all'; } else if (Array.isArray(this.options.debug)) { (function() { var d = {}; jQuery.each(self.options.debug, function() { d[this] = true; }); self.options.debug = d; })(); } else { this.options.debug = false; } /** * Original functions evacuated by conflict check * * @type Object */ this.noConflicts = {}; /** * Check and save conflicts with bootstrap etc * * @type Function */ this.noConflict = function() { jQuery.each(conflictChecks, function(i, p) { if (jQuery.fn[p] && typeof jQuery.fn[p].noConflict === 'function') { self.noConflicts[p] = jQuery.fn[p].noConflict(); } }); }; // do check conflict this.noConflict(); /** * Is elFinder over CORS * * @type Boolean **/ this.isCORS = false; // configure for CORS (function(){ if (typeof self.options.cors !== 'undefined' && self.options.cors !== null) { self.isCORS = self.options.cors? true : false; } else { var parseUrl = document.createElement('a'), parseUploadUrl, selfProtocol = window.location.protocol, portReg = function(protocol) { protocol = (!protocol || protocol === ':')? selfProtocol : protocol; return protocol === 'https:'? /\:443$/ : /\:80$/; }, selfHost = window.location.host.replace(portReg(selfProtocol), ''); parseUrl.href = opts.url; if (opts.urlUpload && (opts.urlUpload !== opts.url)) { parseUploadUrl = document.createElement('a'); parseUploadUrl.href = opts.urlUpload; } if (selfHost !== parseUrl.host.replace(portReg(parseUrl.protocol), '') || (parseUrl.protocol !== ':'&& parseUrl.protocol !== '' && (selfProtocol !== parseUrl.protocol)) || (parseUploadUrl && (selfHost !== parseUploadUrl.host.replace(portReg(parseUploadUrl.protocol), '') || (parseUploadUrl.protocol !== ':' && parseUploadUrl.protocol !== '' && (selfProtocol !== parseUploadUrl.protocol)) ) ) ) { self.isCORS = true; } } if (self.isCORS) { if (!jQuery.isPlainObject(self.options.customHeaders)) { self.options.customHeaders = {}; } if (!jQuery.isPlainObject(self.options.xhrFields)) { self.options.xhrFields = {}; } self.options.requestType = 'post'; self.options.customHeaders['X-Requested-With'] = 'XMLHttpRequest'; self.options.xhrFields['withCredentials'] = true; } })(); /** * Ajax request type * * @type String * @default "get" **/ this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get'; // set `requestMaxConn` by option requestMaxConn = Math.max(parseInt(this.options.requestMaxConn), 1); /** * Custom data that given as options * * @type Object * @default {} */ this.optsCustomData = jQuery.isPlainObject(this.options.customData) ? this.options.customData : {}; /** * Any data to send across every ajax request * * @type Object * @default {} **/ this.customData = Object.assign({}, this.optsCustomData); /** * Previous custom data from connector * * @type Object|null */ this.prevCustomData = null; /** * Any custom headers to send across every ajax request * * @type Object * @default {} */ this.customHeaders = jQuery.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {}; /** * Any custom xhrFields to send across every ajax request * * @type Object * @default {} */ this.xhrFields = jQuery.isPlainObject(this.options.xhrFields) ? this.options.xhrFields : {}; /** * Replace XMLHttpRequest.prototype.send to extended function for 3rd party libs XHR request etc. * * @type Function */ this.replaceXhrSend = function() { if (! savedXhrSend) { savedXhrSend = XMLHttpRequest.prototype.send; } XMLHttpRequest.prototype.send = function() { var xhr = this; // set request headers if (self.customHeaders) { jQuery.each(self.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (self.xhrFields) { jQuery.each(self.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } return savedXhrSend.apply(this, arguments); }; }; /** * Restore saved original XMLHttpRequest.prototype.send * * @type Function */ this.restoreXhrSend = function() { savedXhrSend && (XMLHttpRequest.prototype.send = savedXhrSend); }; /** * command names for into queue for only cwd requests * these commands aborts before `open` request * * @type Array * @default ['tmb', 'parents'] */ this.abortCmdsOnOpen = this.options.abortCmdsOnOpen || ['tmb', 'parents']; /** * ui.nav id prefix * * @type String */ this.navPrefix = 'nav' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-'; /** * ui.cwd id prefix * * @type String */ this.cwdPrefix = elFinder.prototype.uniqueid? ('cwd' + elFinder.prototype.uniqueid + '-') : ''; // Increment elFinder.prototype.uniqueid ++elFinder.prototype.uniqueid; /** * URL to upload files * * @type String **/ this.uploadURL = opts.urlUpload || opts.url; /** * Events namespace * * @type String **/ this.namespace = namespace; /** * Today timestamp * * @type Number **/ this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000; /** * Yesterday timestamp * * @type Number **/ this.yesterday = this.today - 86400; utc = this.options.UTCDate ? 'UTC' : ''; this.getHours = 'get'+utc+'Hours'; this.getMinutes = 'get'+utc+'Minutes'; this.getSeconds = 'get'+utc+'Seconds'; this.getDate = 'get'+utc+'Date'; this.getDay = 'get'+utc+'Day'; this.getMonth = 'get'+utc+'Month'; this.getFullYear = 'get'+utc+'FullYear'; /** * elFinder node z-index (auto detect on elFinder load) * * @type null | Number **/ this.zIndex; /** * Current search status * * @type Object */ this.searchStatus = { state : 0, // 0: search ended, 1: search started, 2: in search result query : '', target : '', mime : '', mixed : false, // in multi volumes search: false or Array that target volume ids ininc : false // in incremental search }; /** * Interface language * * @type String * @default "en" **/ this.lang = this.storage('lang') || this.options.lang; if (this.lang === 'jp') { this.lang = this.options.lang = 'ja'; } this.viewType = this.storage('view') || this.options.defaultView || 'icons'; this.sortType = this.storage('sortType') || this.options.sortType || 'name'; this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc'; this.sortStickFolders = this.storage('sortStickFolders'); if (this.sortStickFolders === null) { this.sortStickFolders = !!this.options.sortStickFolders; } else { this.sortStickFolders = !!this.sortStickFolders; } this.sortAlsoTreeview = this.storage('sortAlsoTreeview'); if (this.sortAlsoTreeview === null || this.options.sortAlsoTreeview === null) { this.sortAlsoTreeview = !!this.options.sortAlsoTreeview; } else { this.sortAlsoTreeview = !!this.sortAlsoTreeview; } this.sortRules = jQuery.extend(true, {}, this._sortRules, this.options.sortRules); jQuery.each(this.sortRules, function(name, method) { if (typeof method != 'function') { delete self.sortRules[name]; } }); this.compare = jQuery.proxy(this.compare, this); /** * Delay in ms before open notification dialog * * @type Number * @default 500 **/ this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500; /** * Dragging UI Helper object * * @type jQuery | null **/ this.draggingUiHelper = null; /** * Base droppable options * * @type Object **/ this.droppable = { greedy : true, tolerance : 'pointer', accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename', hoverClass : this.res('class', 'adroppable'), classes : { // Deprecated hoverClass jQueryUI>=1.12.0 'ui-droppable-hover': this.res('class', 'adroppable') }, autoDisable: true, // elFinder original, see jquery.elfinder.js drop : function(e, ui) { var dst = jQuery(this), targets = jQuery.grep(ui.helper.data('files')||[], function(h) { return h? true : false; }), result = [], dups = [], faults = [], isCopy = ui.helper.hasClass('elfinder-drag-helper-plus'), c = 'class', cnt, hash, i, h; if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) { return false; } if (dst.hasClass(self.res(c, 'cwdfile'))) { hash = self.cwdId2Hash(dst.attr('id')); } else if (dst.hasClass(self.res(c, 'navdir'))) { hash = self.navId2Hash(dst.attr('id')); } else { hash = cwd; } cnt = targets.length; while (cnt--) { h = targets[cnt]; // ignore drop into itself or in own location if (h != hash && files[h].phash != hash) { result.push(h); } else { ((isCopy && h !== hash && files[hash].write)? dups : faults).push(h); } } if (faults.length) { return false; } ui.helper.data('droped', true); if (dups.length) { ui.helper.hide(); self.exec('duplicate', dups, {_userAction: true}); } if (result.length) { ui.helper.hide(); self.clipboard(result, !isCopy); self.exec('paste', hash, {_userAction: true}, hash).always(function(){ self.clipboard([]); self.trigger('unlockfiles', {files : targets}); }); self.trigger('drop', {files : targets}); } } }; /** * Return true if filemanager is active * * @return Boolean **/ this.enabled = function() { return enabled && this.visible(); }; /** * Return true if filemanager is visible * * @return Boolean **/ this.visible = function() { return node[0].elfinder && node.is(':visible'); }; /** * Return file is root? * * @param Object target file object * @return Boolean */ this.isRoot = function(file) { return (file.isroot || ! file.phash)? true : false; }; /** * Return root dir hash for current working directory * * @param String target hash * @param Boolean include fake parent (optional) * @return String */ this.root = function(hash, fake) { hash = hash || cwd; var dir, i; if (! fake) { jQuery.each(self.roots, function(id, rhash) { if (hash.indexOf(id) === 0) { dir = rhash; return false; } }); if (dir) { return dir; } } dir = files[hash]; while (dir && dir.phash && (fake || ! dir.isroot)) { dir = files[dir.phash]; } if (dir) { return dir.hash; } while (i in files && files.hasOwnProperty(i)) { dir = files[i]; if (dir.mime === 'directory' && !dir.phash && dir.read) { return dir.hash; } } return ''; }; /** * Return current working directory info * * @return Object */ this.cwd = function() { return files[cwd] || {}; }; /** * Return required cwd option * * @param String option name * @param String target hash (optional) * @return mixed */ this.option = function(name, target) { var res, item; target = target || cwd; if (self.optionsByHashes[target] && typeof self.optionsByHashes[target][name] !== 'undefined') { return self.optionsByHashes[target][name]; } if (self.hasVolOptions && cwd !== target && (!(item = self.file(target)) || item.phash !== cwd)) { res = ''; jQuery.each(self.volOptions, function(id, opt) { if (target.indexOf(id) === 0) { res = opt[name] || ''; return false; } }); return res; } else { return cwdOptions[name] || ''; } }; /** * Return disabled commands by each folder * * @param Array target hashes * @return Array */ this.getDisabledCmds = function(targets, flip) { var disabled = {'hidden': true}; if (! Array.isArray(targets)) { targets = [ targets ]; } jQuery.each(targets, function(i, h) { var disCmds = self.option('disabledFlip', h); if (disCmds) { Object.assign(disabled, disCmds); } }); return flip? disabled : Object.keys(disabled); }; /** * Return file data from current dir or tree by it's hash * * @param String file hash * @return Object */ this.file = function(hash, alsoHidden) { return hash? (files[hash] || (alsoHidden? hiddenFiles[hash] : void(0))) : void(0); }; /** * Return all cached files * * @param String parent hash * @return Object */ this.files = function(phash) { var items = {}; if (phash) { if (!ownFiles[phash]) { return {}; } jQuery.each(ownFiles[phash], function(h) { if (files[h]) { items[h] = files[h]; } else { delete ownFiles[phash][h]; } }); return Object.assign({}, items); } return Object.assign({}, files); }; /** * Return list of file parents hashes include file hash * * @param String file hash * @return Array */ this.parents = function(hash) { var parents = [], dir; while (hash && (dir = this.file(hash))) { parents.unshift(dir.hash); hash = dir.phash; } return parents; }; this.path2array = function(hash, i18) { var file, path = []; while (hash) { if ((file = files[hash]) && file.hash) { path.unshift(i18 && file.i18 ? file.i18 : file.name); hash = file.isroot? null : file.phash; } else { path = []; break; } } return path; }; /** * Return file path or Get path async with jQuery.Deferred * * @param Object file * @param Boolean i18 * @param Object asyncOpt * @return String|jQuery.Deferred */ this.path = function(hash, i18, asyncOpt) { var path = files[hash] && files[hash].path ? files[hash].path : this.path2array(hash, i18).join(cwdOptions.separator); if (! asyncOpt || ! files[hash]) { return path; } else { asyncOpt = Object.assign({notify: {type : 'parents', cnt : 1, hideCnt : true}}, asyncOpt); var dfd = jQuery.Deferred(), notify = asyncOpt.notify, noreq = false, req = function() { self.request({ data : {cmd : 'parents', target : files[hash].phash}, notify : notify, preventFail : true }) .done(done) .fail(function() { dfd.reject(); }); }, done = function() { self.one('parentsdone', function() { path = self.path(hash, i18); if (path === '' && noreq) { //retry with request noreq = false; req(); } else { if (notify) { clearTimeout(ntftm); notify.cnt = -(parseInt(notify.cnt || 0)); self.notify(notify); } dfd.resolve(path); } }); }, ntftm; if (path) { return dfd.resolve(path); } else { if (self.ui['tree']) { // try as no request if (notify) { ntftm = setTimeout(function() { self.notify(notify); }, self.notifyDelay); } noreq = true; done(true); } else { req(); } return dfd; } } }; /** * Return file url if set * * @param String file hash * @param Object Options * @return String|Object of jQuery Deferred */ this.url = function(hash, o) { var file = files[hash], opts = o || {}, async = opts.async || false, temp = opts.temporary || false, onetm = (opts.onetime && self.option('onetimeUrl', hash)) || false, absurl = opts.absurl || false, dfrd = (async || onetm)? jQuery.Deferred() : null, filter = function(url) { if (url && absurl) { url = self.convAbsUrl(url); } return url; }, getUrl = function(url) { if (url) { return filter(url); } if (file.url) { return filter(file.url); } if (typeof baseUrl === 'undefined') { baseUrl = self.option('url', (!self.isRoot(file) && file.phash) || file.hash); } if (baseUrl) { return filter(baseUrl + jQuery.map(self.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/')); } var params = Object.assign({}, self.customData, { cmd: 'file', target: file.hash }); if (self.oldAPI) { params.cmd = 'open'; params.current = file.phash; } return filter(self.options.url + (self.options.url.indexOf('?') === -1 ? '?' : '&') + jQuery.param(params, true)); }, baseUrl, res; if (!file || !file.read) { return async? dfrd.resolve('') : ''; } if (onetm) { async = true; this.request({ data : { cmd : 'url', target : hash, options : { onetime: 1 } }, preventDefault : true, options: {async: async}, notify: {type : 'file', cnt : 1, hideCnt : true} }).done(function(data) { dfrd.resolve(filter(data.url || '')); }).fail(function() { dfrd.resolve(''); }); } else { if (file.url == '1' || (temp && !file.url && !(baseUrl = self.option('url', (!self.isRoot(file) && file.phash) || file.hash)))) { this.request({ data : { cmd : 'url', target : hash, options : { temporary: temp? 1 : 0 } }, preventDefault : true, options: {async: async}, notify: async? {type : temp? 'file' : 'url', cnt : 1, hideCnt : true} : {} }) .done(function(data) { file.url = data.url || ''; }) .fail(function() { file.url = ''; }) .always(function() { var url; if (file.url && temp) { url = file.url; file.url = '1'; // restore } if (async) { dfrd.resolve(getUrl(url)); } else { return getUrl(url); } }); } else { if (async) { dfrd.resolve(getUrl()); } else { return getUrl(); } } } if (async) { return dfrd; } }; /** * Return file url for the extarnal service * * @param String hash The hash * @param Object options The options * @return Object jQuery Deferred */ this.forExternalUrl = function(hash, options) { var onetime = self.option('onetimeUrl', hash), opts = { async: true, absurl: true }; opts[onetime? 'onetime' : 'temporary'] = true; return self.url(hash, Object.assign({}, options, opts)); }; /** * Return file url for open in elFinder * * @param String file hash * @param Boolean for download link * @return String */ this.openUrl = function(hash, download) { var file = files[hash], url = ''; if (!file || !file.read) { return ''; } if (!download) { if (file.url) { if (file.url != 1) { url = file.url; } } else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) { url = cwdOptions.url + jQuery.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/'); } if (url) { url += (url.match(/\?/)? '&' : '?') + '_'.repeat((url.match(/[\?&](_+)t=/g) || ['&t=']).sort().shift().match(/[\?&](_*)t=/)[1].length + 1) + 't=' + (file.ts || parseInt(+new Date()/1000)); return url; } } url = this.options.url; url = url + (url.indexOf('?') === -1 ? '?' : '&') + (this.oldAPI ? 'cmd=open¤t='+file.phash : 'cmd=file') + '&target=' + file.hash + '&_t=' + (file.ts || parseInt(+new Date()/1000)); if (download) { url += '&download=1'; } jQuery.each(this.customData, function(key, val) { url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); return url; }; /** * Return thumbnail url * * @param Object file object * @return String */ this.tmb = function(file) { var tmbUrl, tmbCrop, cls = 'elfinder-cwd-bgurl', url = ''; if (jQuery.isPlainObject(file)) { if (self.searchStatus.state && file.hash.indexOf(self.cwd().volumeid) !== 0) { tmbUrl = self.option('tmbUrl', file.hash); tmbCrop = self.option('tmbCrop', file.hash); } else { tmbUrl = cwdOptions['tmbUrl']; tmbCrop = cwdOptions['tmbCrop']; } if (tmbCrop) { cls += ' elfinder-cwd-bgurl-crop'; } if (tmbUrl === 'self' && file.mime.indexOf('image/') === 0) { url = self.openUrl(file.hash); cls += ' elfinder-cwd-bgself'; } else if ((self.oldAPI || tmbUrl) && file && file.tmb && file.tmb != 1) { url = tmbUrl + file.tmb; } else if (self.newAPI && file && file.tmb && file.tmb != 1) { url = file.tmb; } if (url) { if (file.ts && tmbUrl !== 'self') { url += (url.match(/\?/)? '&' : '?') + '_t=' + file.ts; } return { url: url, className: cls }; } } return false; }; /** * Return selected files hashes * * @return Array **/ this.selected = function() { return selected.slice(0); }; /** * Return selected files info * * @return Array */ this.selectedFiles = function() { return jQuery.map(selected, function(hash) { return files[hash] ? Object.assign({}, files[hash]) : null; }); }; /** * Return true if file with required name existsin required folder * * @param String file name * @param String parent folder hash * @return Boolean */ this.fileByName = function(name, phash) { var hash; for (hash in files) { if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) { return files[hash]; } } }; /** * Valid data for required command based on rules * * @param String command name * @param Object cammand's data * @return Boolean */ this.validResponse = function(cmd, data) { return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data); }; /** * Return bytes from ini formated size * * @param String ini formated size * @return Integer */ this.returnBytes = function(val) { var last; if (isNaN(val)) { if (! val) { val = ''; } // for ex. 1mb, 1KB val = val.replace(/b$/i, ''); last = val.charAt(val.length - 1).toLowerCase(); val = val.replace(/[tgmk]$/i, ''); if (last == 't') { val = val * 1024 * 1024 * 1024 * 1024; } else if (last == 'g') { val = val * 1024 * 1024 * 1024; } else if (last == 'm') { val = val * 1024 * 1024; } else if (last == 'k') { val = val * 1024; } val = isNaN(val)? 0 : parseInt(val); } else { val = parseInt(val); if (val < 1) val = 0; } return val; }; /** * Process ajax request. * Fired events : * @todo * @example * @todo * @return jQuery.Deferred */ this.request = function(opts) { var self = this, o = this.options, dfrd = jQuery.Deferred(), // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16), // request data data = Object.assign({}, self.customData, {mimes : o.onlyMimes}, opts.data || opts), // command name cmd = data.cmd, // request type is binary isBinary = (opts.options || {}).dataType === 'binary', // current cmd is "open" isOpen = (!opts.asNotOpen && cmd === 'open'), // call default fail callback (display error dialog) ? deffail = !(isBinary || opts.preventDefault || opts.preventFail), // call default success callback ? defdone = !(isBinary || opts.preventDefault || opts.preventDone), // options for notify dialog notify = Object.assign({}, opts.notify), // make cancel button cancel = !!opts.cancel, // do not normalize data - return as is raw = isBinary || !!opts.raw, // sync files on request fail syncOnFail = opts.syncOnFail, // use lazy() lazy = !!opts.lazy, // prepare function before done() prepare = opts.prepare, // navigate option object when cmd done navigate = opts.navigate, // open notify dialog timeout timeout, // use browser cache useCache = (opts.options || {}).cache, // request options options = Object.assign({ url : o.url, async : true, type : this.requestType, dataType : 'json', cache : (self.api >= 2.1029), // api >= 2.1029 has unique request ID data : data, headers : this.customHeaders, xhrFields: this.xhrFields }, opts.options || {}), /** * Default success handler. * Call default data handlers and fire event with command name. * * @param Object normalized response data * @return void **/ done = function(data) { data.warning && self.error(data.warning); if (isOpen) { open(data); } else { self.updateCache(data); } data.changed && data.changed.length && change(data.changed); self.lazy(function() { // fire some event to update cache/ui data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); }).then(function() { // fire event with command name return self.lazy(function() { self.trigger(cmd, data, false); }); }).then(function() { // fire event with command name + 'done' return self.lazy(function() { self.trigger(cmd + 'done'); }); }).then(function() { // make toast message if (data.toasts && Array.isArray(data.toasts)) { jQuery.each(data.toasts, function() { this.msg && self.toast(this); }); } // force update content data.sync && self.sync(); }); }, /** * Request error handler. Reject dfrd with correct error message. * * @param jqxhr request object * @param String request status * @return void **/ error = function(xhr, status) { var error, data, d = self.options.debug; switch (status) { case 'abort': error = xhr.quiet ? '' : ['errConnect', 'errAbort']; break; case 'timeout': error = ['errConnect', 'errTimeout']; break; case 'parsererror': error = ['errResponse', 'errDataNotJSON']; if (xhr.responseText) { if (! cwd || (d && (d === 'all' || d['backend-error']))) { error.push(xhr.responseText); } } break; default: if (xhr.responseText) { // check responseText, Is that JSON? try { data = JSON.parse(xhr.responseText); if (data && data.error) { error = data.error; } } catch(e) {} } if (! error) { if (xhr.status == 403) { error = ['errConnect', 'errAccess', 'HTTP error ' + xhr.status]; } else if (xhr.status == 404) { error = ['errConnect', 'errNotFound', 'HTTP error ' + xhr.status]; } else if (xhr.status >= 500) { error = ['errResponse', 'errServerError', 'HTTP error ' + xhr.status]; } else { if (xhr.status == 414 && options.type === 'get') { // retry by POST method options.type = 'post'; self.abortXHR(xhr); dfrd.xhr = xhr = self.transport.send(options).fail(error).done(success); return; } error = xhr.quiet ? '' : ['errConnect', 'HTTP error ' + xhr.status]; } } } self.trigger(cmd + 'done'); dfrd.reject({error: error}, xhr, status); }, /** * Request success handler. Valid response data and reject/resolve dfrd. * * @param Object response data * @param String request status * @return void **/ success = function(response) { var d = self.options.debug; // Set currrent request command name self.currentReqCmd = cmd; if (response.debug && (!d || d !== 'all')) { if (!d) { d = self.options.debug = {}; } d['backend-error'] = true; d['warning'] = true; } if (raw) { self.abortXHR(xhr); response && response.debug && self.debug('backend-debug', response); return dfrd.resolve(response); } if (!response) { return dfrd.reject({error :['errResponse', 'errDataEmpty']}, xhr, response); } else if (!jQuery.isPlainObject(response)) { return dfrd.reject({error :['errResponse', 'errDataNotJSON']}, xhr, response); } else if (response.error) { if (isOpen) { // check leafRoots jQuery.each(self.leafRoots, function(phash, roots) { self.leafRoots[phash] = jQuery.grep(roots, function(h) { return h !== data.target; }); }); } return dfrd.reject({error :response.error}, xhr, response); } var resolve = function() { var pushLeafRoots = function(name) { if (self.leafRoots[data.target] && response[name]) { jQuery.each(self.leafRoots[data.target], function(i, h) { var root; if (root = self.file(h)) { response[name].push(root); } }); } }, setTextMimes = function() { self.textMimes = {}; jQuery.each(self.res('mimes', 'text'), function() { self.textMimes[this.toLowerCase()] = true; }); }, actionTarget; if (isOpen) { pushLeafRoots('files'); } else if (cmd === 'tree') { pushLeafRoots('tree'); } response = self.normalize(response); if (!self.validResponse(cmd, response)) { return dfrd.reject({error :(response.norError || 'errResponse')}, xhr, response); } if (isOpen) { if (!self.api) { self.api = response.api || 1; if (self.api == '2.0' && typeof response.options.uploadMaxSize !== 'undefined') { self.api = '2.1'; } self.newAPI = self.api >= 2; self.oldAPI = !self.newAPI; } if (response.textMimes && Array.isArray(response.textMimes)) { self.resources.mimes.text = response.textMimes; setTextMimes(); } !self.textMimes && setTextMimes(); if (response.options) { cwdOptions = Object.assign({}, cwdOptionsDefault, response.options); } if (response.netDrivers) { self.netDrivers = response.netDrivers; } if (response.maxTargets) { self.maxTargets = response.maxTargets; } if (!!data.init) { self.uplMaxSize = self.returnBytes(response.uplMaxSize); self.uplMaxFile = !!response.uplMaxFile? Math.min(parseInt(response.uplMaxFile), 50) : 20; } } if (typeof prepare === 'function') { prepare(response); } if (navigate) { actionTarget = navigate.target || 'added'; if (response[actionTarget] && response[actionTarget].length) { self.one(cmd + 'done', function() { var targets = response[actionTarget], newItems = self.findCwdNodes(targets), inCwdHashes = function() { var cwdHash = self.cwd().hash; return jQuery.map(targets, function(f) { return (f.phash && cwdHash === f.phash)? f.hash : null; }); }, hashes = inCwdHashes(), makeToast = function(t) { var node = void(0), data = t.action? t.action.data : void(0), cmd, msg, done; if ((data || hashes.length) && t.action && (msg = t.action.msg) && (cmd = t.action.cmd) && (!t.action.cwdNot || t.action.cwdNot !== self.cwd().hash)) { done = t.action.done; data = t.action.data; node = jQuery('
      ') .append( jQuery('') .on('mouseenter mouseleave', function(e) { jQuery(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); }) .on('click', function() { self.exec(cmd, data || hashes, {_userAction: true, _currentType: 'toast', _currentNode: jQuery(this) }); if (done) { self.one(cmd+'done', function() { if (typeof done === 'function') { done(); } else if (done === 'select') { self.trigger('selectfiles', {files : inCwdHashes()}); } }); } }) ); } delete t.action; t.extNode = node; return t; }; if (! navigate.toast) { navigate.toast = {}; } !navigate.noselect && self.trigger('selectfiles', {files : self.searchStatus.state > 1 ? jQuery.map(targets, function(f) { return f.hash; }) : hashes}); if (newItems.length) { if (!navigate.noscroll) { newItems.first().trigger('scrolltoview', {blink : false}); self.resources.blink(newItems, 'lookme'); } if (jQuery.isPlainObject(navigate.toast.incwd)) { self.toast(makeToast(navigate.toast.incwd)); } } else { if (jQuery.isPlainObject(navigate.toast.inbuffer)) { self.toast(makeToast(navigate.toast.inbuffer)); } } }); } } dfrd.resolve(response); response.debug && self.debug('backend-debug', response); }; self.abortXHR(xhr); lazy? self.lazy(resolve) : resolve(); }, xhr, _xhr, xhrAbort = function(e) { if (xhr && xhr.state() === 'pending') { self.abortXHR(xhr, { quiet: true , abort: true }); if (!e || (e.type !== 'unload' && e.type !== 'destroy')) { self.autoSync(); } } }, abort = function(e){ self.trigger(cmd + 'done'); if (e.type == 'autosync') { if (e.data.action != 'stop') return; } else if (e.type != 'unload' && e.type != 'destroy' && e.type != 'openxhrabort') { if (!e.data.added || !e.data.added.length) { return; } } xhrAbort(e); }, request = function(mode) { var queueAbort = function() { syncOnFail = false; dfrd.reject(); }; if (mode) { if (mode === 'cmd') { return cmd; } } if (isOpen) { if (requestQueueSkipOpen) { return dfrd.reject(); } requestQueueSkipOpen = true; } dfrd.always(function() { delete options.headers['X-elFinderReqid']; }).fail(function(error, xhr, response) { var errData = { cmd: cmd, err: error, xhr: xhr, rc: response }; // unset this cmd queue when user canceling // see notify : function - `cancel.reject(0);` if (error === 0) { if (requestQueue.length) { requestQueue = jQuery.grep(requestQueue, function(req) { return (req('cmd') === cmd) ? false : true; }); } } // trigger "requestError" event self.trigger('requestError', errData); if (errData._event && errData._event.isDefaultPrevented()) { deffail = false; syncOnFail = false; if (error) { error.error = ''; } } // abort xhr xhrAbort(); if (isOpen) { openDir = self.file(data.target); openDir && openDir.volumeid && self.isRoot(openDir) && delete self.volumeExpires[openDir.volumeid]; } self.trigger(cmd + 'fail', response); if (error) { deffail ? self.error(error) : self.debug('error', self.i18n(error)); } syncOnFail && self.sync(); }); if (!cmd) { syncOnFail = false; return dfrd.reject({error :'errCmdReq'}); } if (self.maxTargets && data.targets && data.targets.length > self.maxTargets) { syncOnFail = false; return dfrd.reject({error :['errMaxTargets', self.maxTargets]}); } defdone && dfrd.done(done); // quiet abort not completed "open" requests if (isOpen) { while ((_xhr = queue.pop())) { _xhr.queueAbort(); } if (cwd !== data.target) { while ((_xhr = cwdQueue.pop())) { _xhr.queueAbort(); } } } // trigger abort autoSync for commands to add the item if (jQuery.inArray(cmd, (self.cmdsToAdd + ' autosync').split(' ')) !== -1) { if (cmd !== 'autosync') { self.autoSync('stop'); dfrd.always(function() { self.autoSync(); }); } self.trigger('openxhrabort'); } delete options.preventFail; if (self.api >= 2.1029) { if (useCache) { options.headers['X-elFinderReqid'] = reqId; } else { Object.assign(options.data, { reqid : reqId }); } } // function for set value of this syncOnFail dfrd.syncOnFail = function(state) { syncOnFail = !!state; }; requestCnt++; dfrd.xhr = xhr = self.transport.send(options).always(function() { // set responseURL from native xhr object if (options._xhr && typeof options._xhr.responseURL !== 'undefined') { xhr.responseURL = options._xhr.responseURL || ''; } --requestCnt; if (requestQueue.length) { requestQueue.shift()(); } else { requestQueueSkipOpen = false; } }).fail(error).done(success); if (self.api >= 2.1029) { xhr._requestId = reqId; } if (isOpen || (data.compare && cmd === 'info')) { // regist function queueAbort xhr.queueAbort = queueAbort; // add autoSync xhr into queue queue.unshift(xhr); // bind abort() data.compare && self.bind(self.cmdsToAdd + ' autosync openxhrabort', abort); dfrd.always(function() { var ndx = jQuery.inArray(xhr, queue); data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort); ndx !== -1 && queue.splice(ndx, 1); }); } else if (jQuery.inArray(cmd, self.abortCmdsOnOpen) !== -1) { // regist function queueAbort xhr.queueAbort = queueAbort; // add "open" xhr, only cwd xhr into queue cwdQueue.unshift(xhr); dfrd.always(function() { var ndx = jQuery.inArray(xhr, cwdQueue); ndx !== -1 && cwdQueue.splice(ndx, 1); }); } // abort pending xhr on window unload or elFinder destroy self.bind('unload destroy', abort); dfrd.always(function() { self.unbind('unload destroy', abort); }); return dfrd; }, queueingRequest = function() { // show notify if (notify.type && notify.cnt) { if (cancel) { notify.cancel = dfrd; opts.eachCancel && (notify.id = +new Date()); } timeout = setTimeout(function() { self.notify(notify); dfrd.always(function() { notify.cnt = -(parseInt(notify.cnt)||0); self.notify(notify); }); }, self.notifyDelay); dfrd.always(function() { clearTimeout(timeout); }); } // queueing if (isOpen) { requestQueueSkipOpen = false; } if (requestCnt < requestMaxConn) { // do request return request(); } else { if (isOpen) { requestQueue.unshift(request); } else { requestQueue.push(request); } return dfrd; } }, bindData = {opts: opts, result: true}, openDir; // prevent request initial request is completed if (!self.api && !data.init) { syncOnFail = false; return dfrd.reject(); } // trigger "request.cmd" that callback be able to cancel request by substituting "false" for "event.data.result" self.trigger('request.' + cmd, bindData, true); if (! bindData.result) { self.trigger(cmd + 'done'); return dfrd.reject(); } else if (typeof bindData.result === 'object' && bindData.result.promise) { bindData.result .done(queueingRequest) .fail(function() { self.trigger(cmd + 'done'); dfrd.reject(); }); return dfrd; } return queueingRequest(); }; /** * Call cache() * Store info about files/dirs in "files" object. * * @param Array files * @return void */ this.cache = function(dataArray) { if (! Array.isArray(dataArray)) { dataArray = [ dataArray ]; } cache(dataArray); }; /** * Update file object caches by respose data object * * @param Object respose data object * @return void */ this.updateCache = function(data) { if (jQuery.isPlainObject(data)) { data.files && data.files.length && cache(data.files, 'files'); data.tree && data.tree.length && cache(data.tree, 'tree'); data.removed && data.removed.length && remove(data.removed); data.added && data.added.length && cache(data.added, 'add'); data.changed && data.changed.length && change(data.changed, 'change'); } }; /** * Compare current files cache with new files and return diff * * @param Array new files * @param String target folder hash * @param Array exclude properties to compare * @return Object */ this.diff = function(incoming, onlydir, excludeProps) { var raw = {}, added = [], removed = [], changed = [], excludes = null, isChanged = function(hash) { var l = changed.length; while (l--) { if (changed[l].hash == hash) { return true; } } }; jQuery.each(incoming, function(i, f) { raw[f.hash] = f; }); // make excludes object if (excludeProps && excludeProps.length) { excludes = {}; jQuery.each(excludeProps, function() { excludes[this] = true; }); } // find removed jQuery.each(files, function(hash, f) { if (! raw[hash] && (! onlydir || f.phash === onlydir)) { removed.push(hash); } }); // compare files jQuery.each(raw, function(hash, file) { var origin = files[hash], orgKeys = {}, chkKeyLen; if (!origin) { added.push(file); } else { // make orgKeys object jQuery.each(Object.keys(origin), function() { orgKeys[this] = true; }); jQuery.each(file, function(prop) { delete orgKeys[prop]; if (! excludes || ! excludes[prop]) { if (file[prop] !== origin[prop]) { changed.push(file); orgKeys = {}; return false; } } }); chkKeyLen = Object.keys(orgKeys).length; if (chkKeyLen !== 0) { if (excludes) { jQuery.each(orgKeys, function(prop) { if (excludes[prop]) { --chkKeyLen; } }); } (chkKeyLen !== 0) && changed.push(file); } } }); // parents of removed dirs mark as changed (required for tree correct work) jQuery.each(removed, function(i, hash) { var file = files[hash], phash = file.phash; if (phash && file.mime == 'directory' && jQuery.inArray(phash, removed) === -1 && raw[phash] && !isChanged(phash)) { changed.push(raw[phash]); } }); return { added : added, removed : removed, changed : changed }; }; /** * Sync content * * @return jQuery.Deferred */ this.sync = function(onlydir, polling) { this.autoSync('stop'); var self = this, compare = function(){ var c = '', cnt = 0, mtime = 0; if (onlydir && polling) { jQuery.each(files, function(h, f) { if (f.phash && f.phash === onlydir) { ++cnt; mtime = Math.max(mtime, f.ts); } c = cnt+':'+mtime; }); } return c; }, comp = compare(), dfrd = jQuery.Deferred().done(function() { self.trigger('sync'); }), opts = [this.request({ data : {cmd : 'open', reload : 1, target : cwd, tree : (! onlydir && this.ui.tree) ? 1 : 0, compare : comp}, preventDefault : true })], exParents = function() { var parents = [], curRoot = self.file(self.root(cwd)), curId = curRoot? curRoot.volumeid : null, phash = self.cwd().phash, isroot,pdir; while(phash) { if (pdir = self.file(phash)) { if (phash.indexOf(curId) !== 0) { parents.push( {target: phash, cmd: 'tree'} ); if (! self.isRoot(pdir)) { parents.push( {target: phash, cmd: 'parents'} ); } curRoot = self.file(self.root(phash)); curId = curRoot? curRoot.volumeid : null; } phash = pdir.phash; } else { phash = null; } } return parents; }; if (! onlydir && self.api >= 2) { (cwd !== this.root()) && opts.push(this.request({ data : {cmd : 'parents', target : cwd}, preventDefault : true })); jQuery.each(exParents(), function(i, data) { opts.push(self.request({ data : {cmd : data.cmd, target : data.target}, preventDefault : true })); }); } jQuery.when.apply($, opts) .fail(function(error, xhr) { if (! polling || jQuery.inArray('errOpen', error) !== -1) { dfrd.reject(error); self.parseError(error) && self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } else { dfrd.reject((error && xhr.status != 0)? error : void 0); } }) .done(function(odata) { var pdata, argLen, i; if (odata.cwd.compare) { if (comp === odata.cwd.compare) { return dfrd.reject(); } } // for 2nd and more requests pdata = {tree : []}; // results marge of 2nd and more requests argLen = arguments.length; if (argLen > 1) { for(i = 1; i < argLen; i++) { if (arguments[i].tree && arguments[i].tree.length) { pdata.tree.push.apply(pdata.tree, arguments[i].tree); } } } if (self.api < 2.1) { if (! pdata.tree) { pdata.tree = []; } pdata.tree.push(odata.cwd); } // data normalize odata = self.normalize(odata); if (!self.validResponse('open', odata)) { return dfrd.reject((odata.norError || 'errResponse')); } pdata = self.normalize(pdata); if (!self.validResponse('tree', pdata)) { return dfrd.reject((pdata.norError || 'errResponse')); } var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir); diff.added.push(odata.cwd); self.updateCache(diff); // trigger events diff.removed.length && self.remove(diff); diff.added.length && self.add(diff); diff.changed.length && self.change(diff); return dfrd.resolve(diff); }) .always(function() { self.autoSync(); }); return dfrd; }; this.upload = function(files) { return this.transport.upload(files, this); }; /** * Bind keybord shortcut to keydown event * * @example * elfinder.shortcut({ * pattern : 'ctrl+a', * description : 'Select all files', * callback : function(e) { ... }, * keypress : true|false (bind to keypress instead of keydown) * }) * * @param Object shortcut config * @return elFinder */ this.shortcut = function(s) { var patterns, pattern, code, i, parts; if (this.options.allowShortcuts && s.pattern && jQuery.isFunction(s.callback)) { patterns = s.pattern.toUpperCase().split(/\s+/); for (i= 0; i < patterns.length; i++) { pattern = patterns[i]; parts = pattern.split('+'); code = (code = parts.pop()).length == 1 ? (code > 0 ? code : code.charCodeAt(0)) : (code > 0 ? code : jQuery.ui.keyCode[code]); if (code && !shortcuts[pattern]) { shortcuts[pattern] = { keyCode : code, altKey : jQuery.inArray('ALT', parts) != -1, ctrlKey : jQuery.inArray('CTRL', parts) != -1, shiftKey : jQuery.inArray('SHIFT', parts) != -1, type : s.type || 'keydown', callback : s.callback, description : s.description, pattern : pattern }; } } } return this; }; /** * Registered shortcuts * * @type Object **/ this.shortcuts = function() { var ret = []; jQuery.each(shortcuts, function(i, s) { ret.push([s.pattern, self.i18n(s.description)]); }); return ret; }; /** * Get/set clipboard content. * Return new clipboard content. * * @example * this.clipboard([]) - clean clipboard * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted * * @param Array new files hashes * @param Boolean cut files? * @return Array */ this.clipboard = function(hashes, cut) { var map = function() { return jQuery.map(clipboard, function(f) { return f.hash; }); }; if (hashes !== void(0)) { clipboard.length && this.trigger('unlockfiles', {files : map()}); remember = {}; clipboard = jQuery.map(hashes||[], function(hash) { var file = files[hash]; if (file) { remember[hash] = true; return { hash : hash, phash : file.phash, name : file.name, mime : file.mime, read : file.read, locked : file.locked, cut : !!cut }; } return null; }); this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)}); cut && this.trigger('lockfiles', {files : map()}); } // return copy of clipboard instead of refrence return clipboard.slice(0, clipboard.length); }; /** * Return true if command enabled * * @param String command name * @param String|void hash for check of own volume's disabled cmds * @return Boolean */ this.isCommandEnabled = function(name, dstHash) { var disabled, cmd, cvid = self.cwd().volumeid || ''; // In serach results use selected item hash to check if (!dstHash && self.searchStatus.state > 1 && self.selected().length) { dstHash = self.selected()[0]; } if (dstHash && (! cvid || dstHash.indexOf(cvid) !== 0)) { disabled = self.option('disabledFlip', dstHash); //if (! disabled) { // disabled = {}; //} } else { disabled = cwdOptions.disabledFlip/* || {}*/; } cmd = this._commands[name]; return cmd ? (cmd.alwaysEnabled || !disabled[name]) : false; }; /** * Exec command and return result; * * @param String command name * @param String|Array usualy files hashes * @param String|Array command options * @param String|void hash for enabled check of own volume's disabled cmds * @return jQuery.Deferred */ this.exec = function(cmd, files, opts, dstHash) { var dfrd, resType; // apply commandMap for keyboard shortcut if (!dstHash && this.commandMap[cmd] && this.commandMap[cmd] !== 'hidden') { cmd = this.commandMap[cmd]; } if (cmd === 'open') { if (this.searchStatus.state || this.searchStatus.ininc) { this.trigger('searchend', { noupdate: true }); } this.autoSync('stop'); } if (!dstHash && files) { if (jQuery.isArray(files)) { if (files.length) { dstHash = files[0]; } } else { dstHash = files; } } dfrd = this._commands[cmd] && this.isCommandEnabled(cmd, dstHash) ? this._commands[cmd].exec(files, opts) : jQuery.Deferred().reject('No such command'); resType = typeof dfrd; if (!(resType === 'object' && dfrd.promise)) { self.debug('warning', '"cmd.exec()" should be returned "jQuery.Deferred" but cmd "' + cmd + '" returned "' + resType + '"'); dfrd = jQuery.Deferred().resolve(); } this.trigger('exec', { dfrd : dfrd, cmd : cmd, files : files, opts : opts, dstHash : dstHash }); return dfrd; }; /** * Create and return dialog. * * @param String|DOMElement dialog content * @param Object dialog options * @return jQuery */ this.dialog = function(content, options) { var dialog = jQuery('
      ').append(content).appendTo(node).elfinderdialog(options, self), dnode = dialog.closest('.ui-dialog'), resize = function(){ ! dialog.data('draged') && dialog.is(':visible') && dialog.elfinderdialog('posInit'); }; if (dnode.length) { self.bind('resize', resize); dnode.on('remove', function() { self.unbind('resize', resize); }); } return dialog; }; /** * Create and return toast. * * @param Object toast options - see ui/toast.js * @return jQuery */ this.toast = function(options) { return jQuery('
      ').appendTo(this.ui.toast).elfindertoast(options || {}, this); }; /** * Return UI widget or node * * @param String ui name * @return jQuery */ this.getUI = function(ui) { return this.ui[ui] || (ui? jQuery() : node); }; /** * Return elFinder.command instance or instances array * * @param String command name * @return Object | Array */ this.getCommand = function(name) { return name === void(0) ? this._commands : this._commands[name]; }; /** * Resize elfinder node * * @param String|Number width * @param String|Number height * @return void */ this.resize = function(w, h) { var getMargin = function() { var m = node.outerHeight(true) - node.innerHeight(), p = node; while(p.get(0) !== heightBase.get(0)) { p = p.parent(); m += p.outerHeight(true) - p.innerHeight(); if (! p.parent().length) { // reached the document break; } } return m; }, fit = ! node.hasClass('ui-resizable'), prv = node.data('resizeSize') || {w: 0, h: 0}, mt, size = {}; if (heightBase && heightBase.data('resizeTm')) { clearTimeout(heightBase.data('resizeTm')); } if (typeof h === 'string') { if (mt = h.match(/^([0-9.]+)%$/)) { // setup heightBase if (! heightBase || ! heightBase.length) { heightBase = jQuery(window); } if (! heightBase.data('marginToMyNode')) { heightBase.data('marginToMyNode', getMargin()); } if (! heightBase.data('fitToBaseFunc')) { heightBase.data('fitToBaseFunc', function(e) { var tm = heightBase.data('resizeTm'); e.preventDefault(); e.stopPropagation(); tm && cancelAnimationFrame(tm); if (! node.hasClass('elfinder-fullscreen') && (!self.UA.Mobile || heightBase.data('rotated') !== self.UA.Rotated)) { heightBase.data('rotated', self.UA.Rotated); heightBase.data('resizeTm', requestAnimationFrame(function() { self.restoreSize(); })); } }); } if (typeof heightBase.data('rotated') === 'undefined') { heightBase.data('rotated', self.UA.Rotated); } h = heightBase.height() * (mt[1] / 100) - heightBase.data('marginToMyNode'); heightBase.off('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); fit && heightBase.on('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); } } node.css({ width : w, height : parseInt(h) }); size.w = Math.round(node.width()); size.h = Math.round(node.height()); node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); this.trigger('resize', {width : size.w, height : size.h}); } }; /** * Restore elfinder node size * * @return elFinder */ this.restoreSize = function() { this.resize(width, height); }; this.show = function() { node.show(); this.enable().trigger('show'); }; this.hide = function() { if (this.options.enableAlways) { prevEnabled = enabled; enabled = false; } this.disable(); this.trigger('hide'); node.hide(); }; /** * Lazy execution function * * @param Object function * @param Number delay * @param Object options * @return Object jQuery.Deferred */ this.lazy = function(func, delay, opts) { var busy = function(state) { var cnt = node.data('lazycnt'), repaint; if (state) { repaint = node.data('lazyrepaint')? false : opts.repaint; if (! cnt) { node.data('lazycnt', 1) .addClass('elfinder-processing'); } else { node.data('lazycnt', ++cnt); } if (repaint) { node.data('lazyrepaint', true).css('display'); // force repaint } } else { if (cnt && cnt > 1) { node.data('lazycnt', --cnt); } else { repaint = node.data('lazyrepaint'); node.data('lazycnt', 0) .removeData('lazyrepaint') .removeClass('elfinder-processing'); repaint && node.css('display'); // force repaint; self.trigger('lazydone'); } } }, dfd = jQuery.Deferred(), callFunc = function() { dfd.resolve(func.call(dfd)); busy(false); }; delay = delay || 0; opts = opts || {}; busy(true); if (delay) { setTimeout(callFunc, delay); } else { requestAnimationFrame(callFunc); } return dfd; }; /** * Destroy this elFinder instance * * @return void **/ this.destroy = function() { if (node && node[0].elfinder) { node.hasClass('elfinder-fullscreen') && self.toggleFullscreen(node); this.options.syncStart = false; this.autoSync('forcestop'); this.trigger('destroy').disable(); clipboard = []; selected = []; listeners = {}; shortcuts = {}; jQuery(window).off('.' + namespace); jQuery(document).off('.' + namespace); self.trigger = function(){}; jQuery(beeper).remove(); node.off() .removeData() .empty() .append(prevContent.contents()) .attr('class', prevContent.attr('class')) .attr('style', prevContent.attr('style')); delete node[0].elfinder; // restore kept events jQuery.each(prevEvents, function(n, arr) { jQuery.each(arr, function(i, o) { node.on(o.type + (o.namespace? '.'+o.namespace : ''), o.selector, o.handler); }); }); } }; /** * Start or stop auto sync * * @param String|Bool stop * @return void */ this.autoSync = function(mode) { var sync; if (self.options.sync >= 1000) { if (syncInterval) { clearTimeout(syncInterval); syncInterval = null; self.trigger('autosync', {action : 'stop'}); } if (mode === 'stop') { ++autoSyncStop; } else { autoSyncStop = Math.max(0, --autoSyncStop); } if (autoSyncStop || mode === 'forcestop' || ! self.options.syncStart) { return; } // run interval sync sync = function(start){ var timeout; if (cwdOptions.syncMinMs && (start || syncInterval)) { start && self.trigger('autosync', {action : 'start'}); timeout = Math.max(self.options.sync, cwdOptions.syncMinMs); syncInterval && clearTimeout(syncInterval); syncInterval = setTimeout(function() { var dosync = true, hash = cwd, cts; if (cwdOptions.syncChkAsTs && files[hash] && (cts = files[hash].ts)) { self.request({ data : {cmd : 'info', targets : [hash], compare : cts, reload : 1}, preventDefault : true }) .done(function(data){ var ts; dosync = true; if (data.compare) { ts = data.compare; if (ts == cts) { dosync = false; } } if (dosync) { self.sync(hash).always(function(){ if (ts) { // update ts for cache clear etc. files[hash].ts = ts; } sync(); }); } else { sync(); } }) .fail(function(error, xhr){ var err = self.parseError(error); if (err && xhr.status != 0) { self.error(err); if (Array.isArray(err) && jQuery.inArray('errOpen', err) !== -1) { self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } } else { syncInterval = setTimeout(function() { sync(); }, timeout); } }); } else { self.sync(cwd, true).always(function(){ sync(); }); } }, timeout); } }; sync(true); } }; /** * Return bool is inside work zone of specific point * * @param Number event.pageX * @param Number event.pageY * @return Bool */ this.insideWorkzone = function(x, y, margin) { var rectangle = this.getUI('workzone').data('rectangle'); margin = margin || 1; if (x < rectangle.left + margin || x > rectangle.left + rectangle.width + margin || y < rectangle.top + margin || y > rectangle.top + rectangle.height + margin) { return false; } return true; }; /** * Target ui node move to last of children of elFinder node fot to show front * * @param Object target Target jQuery node object */ this.toFront = function(target) { var nodes = node.children('.ui-front').removeClass('elfinder-frontmost'), lastnode = nodes.last(); nodes.css('z-index', ''); jQuery(target).addClass('ui-front elfinder-frontmost').css('z-index', lastnode.css('z-index') + 1); }; /** * Remove class 'elfinder-frontmost' and hide() to target ui node * * @param Object target Target jQuery node object * @param Boolean nohide Do not hide */ this.toHide =function(target, nohide) { var tgt = jQuery(target), last; !nohide && tgt.hide(); if (tgt.hasClass('elfinder-frontmost')) { tgt.removeClass('elfinder-frontmost'); last = node.children('.ui-front:visible:not(.elfinder-frontmost)').last(); if (last.length) { requestAnimationFrame(function() { if (!node.children('.elfinder-frontmost:visible').length) { self.toFront(last); last.trigger('frontmost'); } }); } } }; /** * Return css object for maximize * * @return Object */ this.getMaximizeCss = function() { return { width : '100%', height : '100%', margin : 0, top : 0, left : 0, display : 'block', position: 'fixed', zIndex : Math.max(self.zIndex? (self.zIndex + 1) : 0 , 1000), maxWidth : '', maxHeight: '' }; }; // Closure for togglefullscreen (function() { // check is in iframe if (inFrame && self.UA.Fullscreen) { self.UA.Fullscreen = false; if (parentIframe && typeof parentIframe.attr('allowfullscreen') !== 'undefined') { self.UA.Fullscreen = true; } } var orgStyle, bodyOvf, resizeTm, fullElm, exitFull, toFull, cls = 'elfinder-fullscreen', clsN = 'elfinder-fullscreen-native', checkDialog = function() { var t = 0, l = 0; jQuery.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) { var $d = jQuery(d), pos = $d.position(); if (pos.top < 0) { $d.css('top', t); t += 20; } if (pos.left < 0) { $d.css('left', l); l += 20; } }); }, funcObj = self.UA.Fullscreen? { // native full screen mode fullElm: function() { return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || null; }, exitFull: function() { if (document.exitFullscreen) { return document.exitFullscreen(); } else if (document.webkitExitFullscreen) { return document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { return document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { return document.msExitFullscreen(); } }, toFull: function(elem) { if (elem.requestFullscreen) { return elem.requestFullscreen(); } else if (elem.webkitRequestFullscreen) { return elem.webkitRequestFullscreen(); } else if (elem.mozRequestFullScreen) { return elem.mozRequestFullScreen(); } else if (elem.msRequestFullscreen) { return elem.msRequestFullscreen(); } return false; } } : { // node element maximize mode fullElm: function() { var full; if (node.hasClass(cls)) { return node.get(0); } else { full = node.find('.' + cls); if (full.length) { return full.get(0); } } return null; }, exitFull: function() { var elm; jQuery(window).off('resize.' + namespace, resize); if (bodyOvf !== void(0)) { jQuery('body').css('overflow', bodyOvf); } bodyOvf = void(0); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); jQuery(elm).trigger('resize', {fullscreen: 'off'}); } jQuery(window).trigger('resize'); }, toFull: function(elem) { bodyOvf = jQuery('body').css('overflow') || ''; jQuery('body').css('overflow', 'hidden'); jQuery(elem).css(self.getMaximizeCss()) .addClass(cls) .trigger('resize', {fullscreen: 'on'}); checkDialog(); jQuery(window).on('resize.' + namespace, resize).trigger('resize'); return true; } }, restoreStyle = function(elem) { if (orgStyle && orgStyle.elm == elem) { jQuery(elem).removeClass(cls + ' ' + clsN).attr('style', orgStyle.style); orgStyle = null; } }, resize = function(e) { var elm; if (e.target === window) { resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { if (elm = funcObj.fullElm()) { jQuery(elm).trigger('resize', {fullscreen: 'on'}); } }); } }; jQuery(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){ if (self.UA.Fullscreen) { var elm = funcObj.fullElm(), win = jQuery(window); resizeTm && cancelAnimationFrame(resizeTm); if (elm === null) { win.off('resize.' + namespace, resize); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); jQuery(elm).trigger('resize', {fullscreen: 'off'}); } } else { jQuery(elm).addClass(cls + ' ' + clsN) .attr('style', 'width:100%; height:100%; margin:0; padding:0;') .trigger('resize', {fullscreen: 'on'}); win.on('resize.' + namespace, resize); checkDialog(); } win.trigger('resize'); } }); /** * Toggle Full Scrren Mode * * @param Object target * @param Bool full * @return Object | Null DOM node object of current full scrren */ self.toggleFullscreen = function(target, full) { var elm = jQuery(target).get(0), curElm = null; curElm = funcObj.fullElm(); if (curElm) { if (curElm == elm) { if (full === true) { return curElm; } } else { if (full === false) { return curElm; } } funcObj.exitFull(); return null; } else { if (full === false) { return null; } } orgStyle = {elm: elm, style: jQuery(elm).attr('style')}; if (funcObj.toFull(elm) !== false) { return elm; } else { orgStyle = null; return null; } }; })(); // Closure for toggleMaximize (function(){ var cls = 'elfinder-maximized', resizeTm, resize = function(e) { if (e.target === window && e.data && e.data.elm) { var elm = e.data.elm; resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { elm.trigger('resize', {maximize: 'on'}); }); } }, exitMax = function(elm) { jQuery(window).off('resize.' + namespace, resize); jQuery('body').css('overflow', elm.data('bodyOvf')); elm.removeClass(cls) .attr('style', elm.data('orgStyle')) .removeData('bodyOvf') .removeData('orgStyle'); elm.trigger('resize', {maximize: 'off'}); }, toMax = function(elm) { elm.data('bodyOvf', jQuery('body').css('overflow') || '') .data('orgStyle', elm.attr('style')) .addClass(cls) .css(self.getMaximizeCss()); jQuery('body').css('overflow', 'hidden'); jQuery(window).on('resize.' + namespace, {elm: elm}, resize); elm.trigger('resize', {maximize: 'on'}); }; /** * Toggle Maximize target node * * @param Object target * @param Bool max * @return void */ self.toggleMaximize = function(target, max) { var elm = jQuery(target), maximized = elm.hasClass(cls); if (maximized) { if (max === true) { return; } exitMax(elm); } else { if (max === false) { return; } toMax(elm); } }; })(); /************* init stuffs ****************/ Object.assign(jQuery.ui.keyCode, { 'F1' : 112, 'F2' : 113, 'F3' : 114, 'F4' : 115, 'F5' : 116, 'F6' : 117, 'F7' : 118, 'F8' : 119, 'F9' : 120, 'F10' : 121, 'F11' : 122, 'F12' : 123, 'DIG0' : 48, 'DIG1' : 49, 'DIG2' : 50, 'DIG3' : 51, 'DIG4' : 52, 'DIG5' : 53, 'DIG6' : 54, 'DIG7' : 55, 'DIG8' : 56, 'DIG9' : 57, 'NUM0' : 96, 'NUM1' : 97, 'NUM2' : 98, 'NUM3' : 99, 'NUM4' : 100, 'NUM5' : 101, 'NUM6' : 102, 'NUM7' : 103, 'NUM8' : 104, 'NUM9' : 105, 'CONTEXTMENU' : 93, 'DOT' : 190 }); this.dragUpload = false; this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined'; // configure transport object this.transport = {}; if (typeof(this.options.transport) == 'object') { this.transport = this.options.transport; if (typeof(this.transport.init) == 'function') { this.transport.init(this); } } if (typeof(this.transport.send) != 'function') { this.transport.send = function(opts) { if (!self.UA.IE) { // keep native xhr object for handling property responseURL opts._xhr = new XMLHttpRequest(); opts.xhr = function() { return opts._xhr; }; } return jQuery.ajax(opts); }; } if (this.transport.upload == 'iframe') { this.transport.upload = jQuery.proxy(this.uploads.iframe, this); } else if (typeof(this.transport.upload) == 'function') { this.dragUpload = !!this.options.dragUploadAllow; } else if (this.xhrUpload && !!this.options.dragUploadAllow) { this.transport.upload = jQuery.proxy(this.uploads.xhr, this); this.dragUpload = true; } else { this.transport.upload = jQuery.proxy(this.uploads.iframe, this); } /** * Decoding 'raw' string converted to unicode * * @param String str * @return String */ this.decodeRawString = function(str) { var charCodes = function(str) { var i, len, arr; for (i=0,len=str.length,arr=[]; i= 0xd800 && c <= 0xdbff) { scalars.push((c & 1023) + 64 << 10 | arr[++i] & 1023); } else { scalars.push(c); } } return scalars; }, decodeUTF8 = function(arr) { var i, len, c, str, char = String.fromCharCode; for (i=0,len=arr.length,str=""; c=arr[i],i= 0xc2) { str += char((c&31)<<6 | arr[++i]&63); } else if (c <= 0xef && c >= 0xe0) { str += char((c&15)<<12 | (arr[++i]&63)<<6 | arr[++i]&63); } else if (c <= 0xf7 && c >= 0xf0) { str += char( 0xd800 | ((c&7)<<8 | (arr[++i]&63)<<2 | arr[++i]>>>4&3) - 64, 0xdc00 | (arr[i++]&15)<<6 | arr[i]&63 ); } else { str += char(0xfffd); } } return str; }; return decodeUTF8(scalarValues(str)); }; /** * Gets target file contents by file.hash * * @param String hash The hash * @param String responseType 'blob' or 'arraybuffer' (default) * @return arraybuffer|blob The contents. */ this.getContents = function(hash, responseType) { var self = this, dfd = jQuery.Deferred(), type = responseType || 'arraybuffer', url, req; dfd.fail(function() { req && req.state() === 'pending' && req.reject(); }); url = self.openUrl(hash); if (!self.isSameOrigin(url)) { url = self.openUrl(hash, true); } req = self.request({ data : {cmd : 'get'}, options : { url: url, type: 'get', cache : true, dataType : 'binary', responseType : type, processData: false } }) .fail(function() { dfd.reject(); }) .done(function(data) { dfd.resolve(data); }); return dfd; }; this.getMimetype = function(name, orgMime) { var mime = orgMime, ext, m; m = (name + '').match(/\.([^.]+)$/); if (m && (ext = m[1])) { if (!extToMimeTable) { extToMimeTable = self.arrayFlip(self.mimeTypes); } if (!(mime = extToMimeTable[ext.toLowerCase()])) { mime = orgMime; } } return mime; }; /** * Supported check hash algorisms * * @type Array */ self.hashCheckers = []; /** * Closure of getContentsHashes() */ (function(self) { var hashLibs = { check : true }, md5Calc = function(arr) { var spark = new hashLibs.SparkMD5.ArrayBuffer(), job; job = self.asyncJob(function(buf) { spark.append(buf); }, arr).done(function() { job._md5 = spark.end(); }); return job; }, shaCalc = function(arr, length) { var sha, job; try { sha = new hashLibs.jsSHA('SHA' + (length.substr(0, 1) === '3'? length : ('-' + length)), 'ARRAYBUFFER'); job = self.asyncJob(function(buf) { sha.update(buf); }, arr).done(function() { job._sha = sha.getHash('HEX'); }); } catch(e) { job = jQuery.Deferred.reject(); } return job; }; // make fm.hashCheckers if (self.options.cdns.sparkmd5) { self.hashCheckers.push('md5'); } if (self.options.cdns.jssha) { self.hashCheckers = self.hashCheckers.concat(['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128', 'shake256']); } /** * Gets the contents hashes. * * @param String target target file.hash * @param Object needHashes need hash lib names * @return Object hashes with lib name as key */ self.getContentsHashes = function(target, needHashes) { var dfd = jQuery.Deferred(), needs = self.arrayFlip(needHashes || ['md5'], true), libs = [], jobs = [], res = {}, req; dfd.fail(function() { req && req.reject(); }); if (hashLibs.check) { delete hashLibs.check; // load SparkMD5 var libsmd5 = jQuery.Deferred(); if (window.ArrayBuffer && self.options.cdns.sparkmd5) { libs.push(libsmd5); self.loadScript([self.options.cdns.sparkmd5], function(res) { var SparkMD5 = res || window.SparkMD5; window.SparkMD5 && delete window.SparkMD5; libsmd5.resolve(); if (SparkMD5) { hashLibs.SparkMD5 = SparkMD5; } }, { tryRequire: true, error: function() { libsmd5.reject(); } } ); } // load jsSha var libssha = jQuery.Deferred(); if (window.ArrayBuffer && self.options.cdns.jssha) { libs.push(libssha); self.loadScript([self.options.cdns.jssha], function(res) { var jsSHA = res || window.jsSHA; window.jsSHA && delete window.jsSHA; libssha.resolve(); if (jsSHA) { hashLibs.jsSHA = jsSHA; } }, { tryRequire: true, error: function() { libssha.reject(); } } ); } } jQuery.when.apply(null, libs).always(function() { if (Object.keys(hashLibs).length) { req = self.getContents(target).done(function(arrayBuffer) { var arr = (arrayBuffer instanceof ArrayBuffer && arrayBuffer.byteLength > 0)? self.sliceArrayBuffer(arrayBuffer, 1048576) : false, i; if (needs.md5 && hashLibs.SparkMD5) { jobs.push(function() { var job = md5Calc(arr).done(function() { var f; res.md5 = job._md5; if (f = self.file(target)) { f.md5 = job._md5; } dfd.notify(res); }); dfd.fail(function() { job.reject(); }); return job; }); } if (hashLibs.jsSHA) { jQuery.each(['1', '224', '256', '384', '512', '3-224', '3-256', '3-384', '3-512', 'ke128', 'ke256'], function(i, v) { if (needs['sha' + v]) { jobs.push(function() { var job = shaCalc(arr, v).done(function() { var f; res['sha' + v] = job._sha; if (f = self.file(target)) { f['sha' + v] = job._sha; } dfd.notify(res); }); return job; }); } }); } if (jobs.length) { self.sequence(jobs).always(function() { dfd.resolve(res); }); } else { dfd.reject(); } }).fail(function() { dfd.reject(); }); } else { dfd.reject(); } }); return dfd; }; })(this); /** * Parse error value to display * * @param Mixed error * @return Mixed parsed error */ this.parseError = function(error) { var arg = error; if (jQuery.isPlainObject(arg)) { arg = arg.error; } return arg; }; /** * Alias for this.trigger('error', {error : 'message'}) * * @param String error message * @return elFinder **/ this.error = function() { var arg = arguments[0], opts = arguments[1] || null, err; if (arguments.length == 1 && typeof(arg) === 'function') { return self.bind('error', arg); } else { err = this.parseError(arg); return (err === true || !err)? this : self.trigger('error', {error: err, opts : opts}); } }; // create bind/trigger aliases for build-in events jQuery.each(events, function(i, name) { self[name] = function() { var arg = arguments[0]; return arguments.length == 1 && typeof(arg) == 'function' ? self.bind(name, arg) : self.trigger(name, jQuery.isPlainObject(arg) ? arg : {}); }; }); // bind core event handlers this .enable(function() { if (!enabled && self.api && self.visible() && self.ui.overlay.is(':hidden') && ! node.children('.elfinder-dialog.' + self.res('class', 'editing') + ':visible').length) { enabled = true; document.activeElement && document.activeElement.blur(); node.removeClass('elfinder-disabled'); } }) .disable(function() { prevEnabled = enabled; enabled = false; node.addClass('elfinder-disabled'); }) .open(function() { selected = []; }) .select(function(e) { var cnt = 0, unselects = []; selected = jQuery.grep(e.data.selected || e.data.value|| [], function(hash) { if (unselects.length || (self.maxTargets && ++cnt > self.maxTargets)) { unselects.push(hash); return false; } else { return files[hash] ? true : false; } }); if (unselects.length) { self.trigger('unselectfiles', {files: unselects, inselect: true}); self.toast({mode: 'warning', msg: self.i18n(['errMaxTargets', self.maxTargets])}); } }) .error(function(e) { var opts = { cssClass : 'elfinder-dialog-error', title : self.i18n('error'), resizable : false, destroyOnClose : true, buttons : {} }, node = self.getUI(), cnt = node.children('.elfinder-dialog-error').length, last, counter; if (cnt < self.options.maxErrorDialogs) { opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { jQuery(this).elfinderdialog('close'); }; if (e.data.opts && jQuery.isPlainObject(e.data.opts)) { Object.assign(opts, e.data.opts); } self.dialog(''+self.i18n(e.data.error), opts); } else { last = node.children('.elfinder-dialog-error:last').children('.ui-dialog-content:first'); counter = last.children('.elfinder-error-counter'); if (counter.length) { counter.data('cnt', parseInt(counter.data('cnt')) + 1).html(self.i18n(['moreErrors', counter.data('cnt')])); } else { counter = jQuery(''+ self.i18n(['moreErrors', 1]) +'').data('cnt', 1); last.append('
      ', counter); } } }) .bind('tmb', function(e) { jQuery.each(e.data.images||[], function(hash, tmb) { if (files[hash]) { files[hash].tmb = tmb; } }); }) .bind('searchstart', function(e) { Object.assign(self.searchStatus, e.data); self.searchStatus.state = 1; }) .bind('search', function(e) { self.searchStatus.state = 2; }) .bind('searchend', function() { self.searchStatus.state = 0; self.searchStatus.ininc = false; self.searchStatus.mixed = false; }) .bind('canMakeEmptyFile', function(e) { var data = e.data, obj = {}; if (data && Array.isArray(data.mimes)) { if (!data.unshift) { obj = self.mimesCanMakeEmpty; } jQuery.each(data.mimes, function() { if (!obj[this]) { obj[this] = self.mimeTypes[this]; } }); if (data.unshift) { self.mimesCanMakeEmpty = Object.assign(obj, self.mimesCanMakeEmpty); } } }) .bind('themechange', function() { requestAnimationFrame(function() { self.trigger('uiresize'); }); }) ; // We listen and emit a sound on delete according to option if (true === this.options.sound) { this.bind('playsound', function(e) { var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"'), file = e.data && e.data.soundFile; play && file && play != '' && play != 'no' && jQuery(beeper).html('')[0].play(); }); } // bind external event handlers jQuery.each(this.options.handlers, function(event, callback) { self.bind(event, callback); }); /** * History object. Store visited folders * * @type Object **/ this.history = new this.history(this); /** * Root hashed * * @type Object */ this.roots = {}; /** * leaf roots * * @type Object */ this.leafRoots = {}; this.volumeExpires = {}; /** * Loaded commands * * @type Object **/ this._commands = {}; if (!Array.isArray(this.options.commands)) { this.options.commands = []; } if (jQuery.inArray('*', this.options.commands) !== -1) { this.options.commands = Object.keys(this.commands); } /** * UI command map of cwd volume ( That volume driver option `uiCmdMap` ) * * @type Object **/ this.commandMap = {}; /** * cwd options of each volume * key: volumeid * val: options object * * @type Object */ this.volOptions = {}; /** * Has volOptions data * * @type Boolean */ this.hasVolOptions = false; /** * Hash of trash holders * key: trash folder hash * val: source volume hash * * @type Object */ this.trashes = {}; /** * cwd options of each folder/file * key: hash * val: options object * * @type Object */ this.optionsByHashes = {}; /** * UI Auto Hide Functions * Each auto hide function mast be call to `fm.trigger('uiautohide')` at end of process * * @type Array **/ this.uiAutoHide = []; // trigger `uiautohide` this.one('open', function() { if (self.uiAutoHide.length) { setTimeout(function() { self.trigger('uiautohide'); }, 500); } }); // Auto Hide Functions sequential processing start this.bind('uiautohide', function() { if (self.uiAutoHide.length) { self.uiAutoHide.shift()(); } }); if (this.options.width) { width = this.options.width; } if (this.options.height) { height = this.options.height; } if (this.options.heightBase) { heightBase = jQuery(this.options.heightBase); } if (this.options.soundPath) { soundPath = this.options.soundPath.replace(/\/+$/, '') + '/'; } else { soundPath = this.baseUrl + soundPath; } self.one('opendone', function() { var tm; // attach events to document jQuery(document) // disable elfinder on click outside elfinder .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !jQuery(e.target).closest(node).length && self.disable(); }) // exec shortcuts .on(keydown+' '+keypress+' '+keyup+' '+mousedown, execShortcut); // attach events to window self.options.useBrowserHistory && jQuery(window) .on('popstate.' + namespace, function(ev) { var state = ev.originalEvent.state || {}, hasThash = state.thash? true : false, dialog = node.find('.elfinder-frontmost:visible'), input = node.find('.elfinder-navbar-dir,.elfinder-cwd-filename').find('input,textarea'), onOpen, toast; if (!hasThash) { state = { thash: self.cwd().hash }; // scroll to elFinder node jQuery('html,body').animate({ scrollTop: node.offset().top }); } if (dialog.length || input.length) { history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); if (dialog.length) { if (!dialog.hasClass(self.res('class', 'preventback'))) { if (dialog.hasClass('elfinder-contextmenu')) { jQuery(document).trigger(jQuery.Event('keydown', { keyCode: jQuery.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } else if (dialog.hasClass('elfinder-dialog')) { dialog.elfinderdialog('close'); } else { dialog.trigger('close'); } } } else { input.trigger(jQuery.Event('keydown', { keyCode: jQuery.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } } else { if (hasThash) { !jQuery.isEmptyObject(self.files()) && self.request({ data : {cmd : 'open', target : state.thash, onhistory : 1}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : true }); } else { onOpen = function() { toast.trigger('click'); }; self.one('open', onOpen, true); toast = self.toast({ msg: self.i18n('pressAgainToExit'), onHidden: function() { self.unbind('open', onOpen); history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); } }); } } }); jQuery(window).on('resize.' + namespace, function(e){ if (e.target === this) { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var prv = node.data('resizeSize') || {w: 0, h: 0}, size = {w: Math.round(node.width()), h: Math.round(node.height())}; node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); self.trigger('resize', {width : size.w, height : size.h}); } }); } }) .on('beforeunload.' + namespace,function(e){ var msg, cnt; if (node.is(':visible')) { if (self.ui.notify.children().length && jQuery.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('ntfsmth'); } else if (node.find('.'+self.res('class', 'editing')).length && jQuery.inArray('editingFile', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('editingFile'); } else if ((cnt = Object.keys(self.selected()).length) && jQuery.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasSelected', ''+cnt); } else if ((cnt = Object.keys(self.clipboard()).length) && jQuery.inArray('hasClipboardData', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasClipboard', ''+cnt); } if (msg) { e.returnValue = msg; return msg; } } self.trigger('unload'); }); // bind window onmessage for CORS jQuery(window).on('message.' + namespace, function(e){ var res = e.originalEvent || null, obj, data; if (res && self.uploadURL.indexOf(res.origin) === 0) { try { obj = JSON.parse(res.data); data = obj.data || null; if (data) { if (data.error) { if (obj.bind) { self.trigger(obj.bind+'fail', data); } self.error(data.error); } else { data.warning && self.error(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); if (obj.bind) { self.trigger(obj.bind, data); self.trigger(obj.bind+'done'); } data.sync && self.sync(); } } } catch (e) { self.sync(); } } }); // elFinder enable always if (self.options.enableAlways) { jQuery(window).on('focus.' + namespace, function(e){ (e.target === this) && self.enable(); }); if (inFrame) { jQuery(window.top).on('focus.' + namespace, function() { if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) { requestAnimationFrame(function() { jQuery(window).trigger('focus'); }); } }); } } else if (inFrame) { jQuery(window).on('blur.' + namespace, function(e){ enabled && e.target === this && self.disable(); }); } // return focus to the window on click (elFInder in the frame) if (inFrame) { node.on('click', function(e) { jQuery(window).trigger('focus'); }); } // elFinder to enable by mouse over if (self.options.enableByMouseOver) { node.on('mouseenter touchstart', function(e) { (inFrame) && jQuery(window).trigger('focus'); ! self.enabled() && self.enable(); }); } }); // store instance in node node[0].elfinder = this; // auto load language file dfrdsBeforeBootup.push((function() { var lang = self.lang, langJs = self.i18nBaseUrl + 'elfinder.' + lang + '.js', dfd = jQuery.Deferred().done(function() { if (self.i18[lang]) { self.lang = lang; } self.trigger('i18load'); i18n = self.lang === 'en' ? self.i18['en'] : jQuery.extend(true, {}, self.i18['en'], self.i18[self.lang]); }); if (!self.i18[lang]) { self.lang = 'en'; if (self.hasRequire) { require([langJs], function() { dfd.resolve(); }, function() { dfd.resolve(); }); } else { self.loadScript([langJs], function() { dfd.resolve(); }, { loadType: 'tag', error : function() { dfd.resolve(); } }); } } else { dfd.resolve(); } return dfd; })()); // elFinder boot up function bootUp = function() { var columnNames; /** * i18 messages * * @type Object **/ self.messages = i18n.messages; // check jquery ui if (!(jQuery.fn.selectable && jQuery.fn.draggable && jQuery.fn.droppable && jQuery.fn.resizable && jQuery.fn.slider)) { return alert(self.i18n('errJqui')); } // check node if (!node.length) { return alert(self.i18n('errNode')); } // check connector url if (!self.options.url) { return alert(self.i18n('errURL')); } // column key/name map for fm.getColumnName() columnNames = Object.assign({ name : self.i18n('name'), perm : self.i18n('perms'), date : self.i18n('modify'), size : self.i18n('size'), kind : self.i18n('kind'), modestr : self.i18n('mode'), modeoct : self.i18n('mode'), modeboth : self.i18n('mode') }, self.options.uiOptions.cwd.listView.columnsCustomName); /** * Gets the column name of cwd list view * * @param String key The key * @return String The column name. */ self.getColumnName = function(key) { return columnNames[key] || self.i18n(key); }; /** * Interface direction * * @type String * @default "ltr" **/ self.direction = i18n.direction; /** * Date/time format * * @type String * @default "m.d.Y" **/ self.dateFormat = self.options.dateFormat || i18n.dateFormat; /** * Date format like "Yesterday 10:20:12" * * @type String * @default "{day} {time}" **/ self.fancyFormat = self.options.fancyDateFormat || i18n.fancyDateFormat; /** * Date format for if upload file has not original unique name * e.g. Clipboard image data, Image data taken with iOS * * @type String * @default "ymd-His" **/ self.nonameDateFormat = (self.options.nonameDateFormat || i18n.nonameDateFormat).replace(/[\/\\]/g, '_'); /** * Css classes * * @type String **/ self.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-' +(self.direction == 'rtl' ? 'rtl' : 'ltr') +(self.UA.Touch? (' elfinder-touch' + (self.options.resizable ? ' touch-punch' : '')) : '') +(self.UA.Mobile? ' elfinder-mobile' : '') +(self.UA.iOS? ' elfinder-ios' : '') +' '+self.options.cssClass; // prepare node node.addClass(self.cssClass) .on(mousedown, function() { !enabled && self.enable(); }); // draggable closure (function() { var ltr, wzRect, wzBottom, wzBottom2, nodeStyle, keyEvt = keydown + 'draggable' + ' keyup.' + namespace + 'draggable'; /** * Base draggable options * * @type Object **/ self.draggable = { appendTo : node, addClasses : false, distance : 4, revert : true, refreshPositions : false, cursor : 'crosshair', cursorAt : {left : 50, top : 47}, scroll : false, start : function(e, ui) { var helper = ui.helper, targets = jQuery.grep(helper.data('files')||[], function(h) { if (h) { remember[h] = true; return true; } return false; }), locked = false, cnt, h; // fix node size nodeStyle = node.attr('style'); node.width(node.width()).height(node.height()); // set var for drag() ltr = (self.direction === 'ltr'); wzRect = self.getUI('workzone').data('rectangle'); wzBottom = wzRect.top + wzRect.height; wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true); self.draggingUiHelper = helper; cnt = targets.length; while (cnt--) { h = targets[cnt]; if (files[h].locked) { locked = true; helper.data('locked', true); break; } } !locked && self.trigger('lockfiles', {files : targets}); helper.data('autoScrTm', setInterval(function() { if (helper.data('autoScr')) { self.autoScroll[helper.data('autoScr')](helper.data('autoScrVal')); } }, 50)); }, drag : function(e, ui) { var helper = ui.helper, autoScr, autoUp, bottom; if ((autoUp = wzRect.top > e.pageY) || wzBottom2 < e.pageY) { if (wzRect.cwdEdge > e.pageX) { autoScr = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { autoScr = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (autoScr.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { bottom = wzBottom; } else { autoScr = null; } } else { bottom = wzBottom2; } } if (autoScr) { helper.data('autoScr', autoScr); helper.data('autoScrVal', Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - bottom), 1.3)); } } if (! autoScr) { if (helper.data('autoScr')) { helper.data('refreshPositions', 1).data('autoScr', null); } } if (helper.data('refreshPositions') && jQuery(this).elfUiWidgetInstance('draggable')) { if (helper.data('refreshPositions') > 0) { jQuery(this).draggable('option', { refreshPositions : true, elfRefresh : true }); helper.data('refreshPositions', -1); } else { jQuery(this).draggable('option', { refreshPositions : false, elfRefresh : false }); helper.data('refreshPositions', null); } } }, stop : function(e, ui) { var helper = ui.helper, files; jQuery(document).off(keyEvt); jQuery(this).elfUiWidgetInstance('draggable') && jQuery(this).draggable('option', { refreshPositions : false }); self.draggingUiHelper = null; self.trigger('focus').trigger('dragstop'); if (! helper.data('droped')) { files = jQuery.grep(helper.data('files')||[], function(h) { return h? true : false ;}); self.trigger('unlockfiles', {files : files}); self.trigger('selectfiles', {files : self.selected()}); } self.enable(); // restore node style node.attr('style', nodeStyle); helper.data('autoScrTm') && clearInterval(helper.data('autoScrTm')); }, helper : function(e, ui) { var element = this.id ? jQuery(this) : jQuery(this).parents('[id]:first'), helper = jQuery('
      '), icon = function(f) { var mime = f.mime, i, tmb = self.tmb(f); i = '
      '; if (tmb) { i = jQuery(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML; } else if (f.icon) { i = jQuery(i).css(self.getIconStyle(f, true)).get(0).outerHTML; } if (f.csscls) { i = '
      ' + i + '
      '; } return i; }, hashes, l, ctr; self.draggingUiHelper && self.draggingUiHelper.stop(true, true); self.trigger('dragstart', {target : element[0], originalEvent : e}, true); hashes = element.hasClass(self.res('class', 'cwdfile')) ? self.selected() : [self.navId2Hash(element.attr('id'))]; helper.append(icon(files[hashes[0]])).data('files', hashes).data('locked', false).data('droped', false).data('namespace', namespace).data('dropover', 0); if ((l = hashes.length) > 1) { helper.append(icon(files[hashes[l-1]]) + ''+l+''); } jQuery(document).on(keyEvt, function(e){ var chk = (e.shiftKey||e.ctrlKey||e.metaKey); if (ctr !== chk) { ctr = chk; if (helper.is(':visible') && helper.data('dropover') && ! helper.data('droped')) { helper.toggleClass('elfinder-drag-helper-plus', helper.data('locked')? true : ctr); self.trigger(ctr? 'unlockfiles' : 'lockfiles', {files : hashes, helper: helper}); } } }); return helper; } }; })(); // in getFileCallback set - change default actions on double click/enter/ctrl+enter if (self.commands.getfile) { if (typeof(self.options.getFileCallback) == 'function') { self.bind('dblclick', function(e) { e.preventDefault(); self.exec('getfile').fail(function() { self.exec('open', e.data && e.data.file? [ e.data.file ]: void(0)); }); }); self.shortcut({ pattern : 'enter', description : self.i18n('cmdgetfile'), callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); }); } }) .shortcut({ pattern : 'ctrl+enter', description : self.i18n(self.OS == 'mac' ? 'cmdrename' : 'cmdopen'), callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); } }); } else { self.options.getFileCallback = null; } } // load commands jQuery.each(self.commands, function(name, cmd) { var proto = Object.assign({}, cmd.prototype), extendsCmd, opts; if (jQuery.isFunction(cmd) && !self._commands[name] && (cmd.prototype.forceLoad || jQuery.inArray(name, self.options.commands) !== -1)) { extendsCmd = cmd.prototype.extendsCmd || ''; if (extendsCmd) { if (jQuery.isFunction(self.commands[extendsCmd])) { cmd.prototype = Object.assign({}, base, new self.commands[extendsCmd](), cmd.prototype); } else { return true; } } else { cmd.prototype = Object.assign({}, base, cmd.prototype); } self._commands[name] = new cmd(); cmd.prototype = proto; opts = self.options.commandsOptions[name] || {}; if (extendsCmd && self.options.commandsOptions[extendsCmd]) { opts = jQuery.extend(true, {}, self.options.commandsOptions[extendsCmd], opts); } self._commands[name].setup(name, opts); // setup linked commands if (self._commands[name].linkedCmds.length) { jQuery.each(self._commands[name].linkedCmds, function(i, n) { var lcmd = self.commands[n]; if (jQuery.isFunction(lcmd) && !self._commands[n]) { lcmd.prototype = base; self._commands[n] = new lcmd(); self._commands[n].setup(n, self.options.commandsOptions[n]||{}); } }); } } }); /** * UI nodes * * @type Object **/ self.ui = { // container for nav panel and current folder container workzone : jQuery('
      ').appendTo(node).elfinderworkzone(self), // container for folders tree / places navbar : jQuery('
      ').appendTo(node).elfindernavbar(self, self.options.uiOptions.navbar || {}), // container for for preview etc at below the navbar navdock : jQuery('
      ').appendTo(node).elfindernavdock(self, self.options.uiOptions.navdock || {}), // contextmenu contextmenu : jQuery('
      ').appendTo(node).elfindercontextmenu(self), // overlay overlay : jQuery('
      ').appendTo(node).elfinderoverlay({ show : function() { self.disable(); }, hide : function() { prevEnabled && self.enable(); } }), // current folder container cwd : jQuery('
      ').appendTo(node).elfindercwd(self, self.options.uiOptions.cwd || {}), // notification dialog window notify : self.dialog('', { cssClass : 'elfinder-dialog-notify', position : self.options.notifyDialog.position, absolute : true, resizable : false, autoOpen : false, closeOnEscape : false, title : ' ', width : self.options.notifyDialog.width? parseInt(self.options.notifyDialog.width) : null, minHeight : null }), statusbar : jQuery('
      ').hide().appendTo(node), toast : jQuery('
      ').appendTo(node), bottomtray : jQuery('
      ').appendTo(node) }; self.trigger('uiready'); // load required ui jQuery.each(self.options.ui || [], function(i, ui) { var name = 'elfinder'+ui, opts = self.options.uiOptions[ui] || {}; if (!self.ui[ui] && jQuery.fn[name]) { // regist to self.ui before make instance self.ui[ui] = jQuery('<'+(opts.tag || 'div')+'/>').appendTo(node); self.ui[ui][name](self, opts); } }); // update size self.resize(width, height); // make node resizable if (self.options.resizable) { node.resizable({ resize : function(e, ui) { self.resize(ui.size.width, ui.size.height); }, handles : 'se', minWidth : 300, minHeight : 200 }); if (self.UA.Touch) { node.addClass('touch-punch'); } } (function() { var navbar = self.getUI('navbar'), cwd = self.getUI('cwd').parent(); self.autoScroll = { navbarUp : function(v) { navbar.scrollTop(Math.max(0, navbar.scrollTop() - v)); }, navbarDown : function(v) { navbar.scrollTop(navbar.scrollTop() + v); }, cwdUp : function(v) { cwd.scrollTop(Math.max(0, cwd.scrollTop() - v)); }, cwdDown : function(v) { cwd.scrollTop(cwd.scrollTop() + v); } }; })(); // Swipe on the touch devices to show/hide of toolbar or navbar if (self.UA.Touch) { (function() { var lastX, lastY, nodeOffset, nodeWidth, nodeTop, navbarW, toolbarH, navbar = self.getUI('navbar'), toolbar = self.getUI('toolbar'), moveEv = 'touchmove.stopscroll', moveTm, moveUpOn = function(e) { var touches = e.originalEvent.touches || [{}], y = touches[0].pageY || null; if (!lastY || y < lastY) { e.preventDefault(); moveTm && clearTimeout(moveTm); } }, moveDownOn = function(e) { e.preventDefault(); moveTm && clearTimeout(moveTm); }, moveOff = function() { moveTm = setTimeout(function() { node.off(moveEv); }, 100); }, handleW, handleH = 50; navbar = navbar.children().length? navbar : null; toolbar = toolbar.length? toolbar : null; node.on('touchstart touchmove touchend', function(e) { if (e.type === 'touchend') { lastX = false; lastY = false; moveOff(); return; } var touches = e.originalEvent.touches || [{}], x = touches[0].pageX || null, y = touches[0].pageY || null, ltr = (self.direction === 'ltr'), navbarMode, treeWidth, swipeX, moveX, toolbarT, mode; if (x === null || y === null || (e.type === 'touchstart' && touches.length > 1)) { return; } if (e.type === 'touchstart') { nodeOffset = node.offset(); nodeWidth = node.width(); if (navbar) { lastX = false; if (navbar.is(':hidden')) { if (! handleW) { handleW = Math.max(50, nodeWidth / 10); } if ((ltr? (x - nodeOffset.left) : (nodeWidth + nodeOffset.left - x)) < handleW) { lastX = x; } } else if (! e.originalEvent._preventSwipeX) { navbarW = navbar.width(); if (ltr) { swipeX = (x < nodeOffset.left + navbarW); } else { swipeX = (x > nodeOffset.left + nodeWidth - navbarW); } if (swipeX) { handleW = Math.max(50, nodeWidth / 10); lastX = x; } else { lastX = false; } } } if (toolbar) { lastY = false; if (! e.originalEvent._preventSwipeY) { toolbarH = toolbar.height(); nodeTop = nodeOffset.top; if (y - nodeTop < (toolbar.is(':hidden')? handleH : (toolbarH + 30))) { lastY = y; node.on(moveEv, toolbar.is(':hidden')? moveDownOn: moveUpOn); } } } } else { if (navbar && lastX !== false) { navbarMode = (ltr? (lastX > x) : (lastX < x))? 'navhide' : 'navshow'; moveX = Math.abs(lastX - x); if (navbarMode === 'navhide' && moveX > navbarW * 0.6 || (moveX > (navbarMode === 'navhide'? navbarW / 3 : 45) && (navbarMode === 'navshow' || (ltr? x < nodeOffset.left + 20 : x > nodeOffset.left + nodeWidth - 20) )) ) { self.getUI('navbar').trigger(navbarMode, {handleW: handleW}); lastX = false; } } if (toolbar && lastY !== false ) { toolbarT = toolbar.offset().top; if (Math.abs(lastY - y) > Math.min(45, toolbarH / 3)) { mode = (lastY > y)? 'slideUp' : 'slideDown'; if (mode === 'slideDown' || toolbarT + 20 > y) { if (toolbar.is(mode === 'slideDown' ? ':hidden' : ':visible')) { toolbar.stop(true, true).trigger('toggle', {duration: 100, handleH: handleH}); } lastY = false; } } } } }); })(); } if (self.dragUpload) { // add event listener for HTML5 DnD upload (function() { var isin = function(e) { return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && jQuery(e.target).closest('div.ui-dialog-content').length === 0); }, ent = 'native-drag-enter', disable = 'native-drag-disable', c = 'class', navdir = self.res(c, 'navdir'), droppable = self.res(c, 'droppable'), dropover = self.res(c, 'adroppable'), arrow = self.res(c, 'navarrow'), clDropActive = self.res(c, 'adroppable'), wz = self.getUI('workzone'), ltr = (self.direction === 'ltr'), clearTm = function() { autoScrTm && cancelAnimationFrame(autoScrTm); autoScrTm = null; }, wzRect, autoScrFn, autoScrTm; node.on('dragenter', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); wzRect = wz.data('rectangle'); } }) .on('dragleave', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); } }) .on('dragover', function(e) { var autoUp; if (isin(e)) { e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = 'none'; if (! autoScrTm) { autoScrTm = requestAnimationFrame(function() { var wzBottom = wzRect.top + wzRect.height, wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true), fn; if ((autoUp = e.pageY < wzRect.top) || e.pageY > wzBottom2 ) { if (wzRect.cwdEdge > e.pageX) { fn = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { fn = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (fn.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { wzBottom2 = wzBottom; } else { fn = ''; } } } fn && self.autoScroll[fn](Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom2), 1.3)); } autoScrTm = null; }); } } else { clearTm(); } }) .on('drop', function(e) { clearTm(); if (isin(e)) { e.stopPropagation(); e.preventDefault(); } }); node.on('dragenter', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget), id = e.currentTarget.id || null, cwd = null, elfFrom; if (!id) { // target is cwd cwd = self.cwd(); $elm.data(disable, false); try { jQuery.each(e.originalEvent.dataTransfer.types, function(i, v){ if (v.substr(0, 13) === 'elfinderfrom:') { elfFrom = v.substr(13).toLowerCase(); } }); } catch(e) {} } if (!cwd || (cwd.write && (!elfFrom || elfFrom !== (window.location.href + cwd.hash).toLowerCase()))) { e.preventDefault(); e.stopPropagation(); $elm.data(ent, true); $elm.addClass(clDropActive); } else { $elm.data(disable, true); } } }) .on('dragleave', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget); e.preventDefault(); e.stopPropagation(); if ($elm.data(ent)) { $elm.data(ent, false); } else { $elm.removeClass(clDropActive); } } }) .on('dragover', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget); e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = $elm.data(disable)? 'none' : 'copy'; $elm.data(ent, false); } }) .on('drop', '.native-droppable', function(e){ if (e.originalEvent && e.originalEvent.dataTransfer) { var $elm = jQuery(e.currentTarget), id; e.preventDefault(); e.stopPropagation(); $elm.removeClass(clDropActive); if (e.currentTarget.id) { id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id); } else { id = self.cwd().hash; } e.originalEvent._target = id; self.exec('upload', {dropEvt: e.originalEvent, target: id}, void 0, id); } }); })(); } // trigger event cssloaded if cddAutoLoad disabled if (self.cssloaded === null) { // check css loaded and remove hide (function() { var loaded = function() { if (node.data('cssautoloadHide')) { node.data('cssautoloadHide').remove(); node.removeData('cssautoloadHide'); } self.cssloaded = true; requestAnimationFrame(function() { self.trigger('cssloaded'); }); }, cnt, fi; if (node.css('visibility') === 'hidden') { cnt = 1000; // timeout 10 secs fi = setInterval(function() { if (--cnt < 0 || node.css('visibility') !== 'hidden') { clearInterval(fi); loaded(); } }, 10); } else { loaded(); } })(); } else { self.cssloaded = true; self.trigger('cssloaded'); } // calculate elFinder node z-index self.zIndexCalc(); // send initial request and start to pray >_< self.trigger('init') .request({ data : {cmd : 'open', target : self.startDir(), init : 1, tree : 1}, preventDone : true, notify : {type : 'open', cnt : 1, hideCnt : true}, freeze : true }) .fail(function() { self.trigger('fail').disable().lastDir(''); listeners = {}; shortcuts = {}; jQuery(document).add(node).off('.'+namespace); self.trigger = function() { }; }) .done(function(data) { var trashDisable = function(th) { var src = self.file(self.trashes[th]), d = self.options.debug, error; if (src && src.volumeid) { delete self.volOptions[src.volumeid].trashHash; } self.trashes[th] = false; self.debug('backend-error', 'Trash hash "'+th+'" was not found or not writable.'); }, toChkTh = {}; // regist rawStringDecoder if (self.options.rawStringDecoder) { self.registRawStringDecoder(self.options.rawStringDecoder); } // re-calculate elFinder node z-index self.zIndexCalc(); self.load().debug('api', self.api); // update ui's size after init node.trigger('resize'); // initial open open(data); self.trigger('open', data, false); self.trigger('opendone'); if (inFrame && self.options.enableAlways) { jQuery(window).trigger('focus'); } // check self.trashes jQuery.each(self.trashes, function(th) { var dir = self.file(th), src; if (! dir) { toChkTh[th] = true; } else if (dir.mime !== 'directory' || ! dir.write) { trashDisable(th); } }); if (Object.keys(toChkTh).length) { self.request({ data : {cmd : 'info', targets : Object.keys(toChkTh)}, preventDefault : true }).done(function(data) { if (data && data.files) { jQuery.each(data.files, function(i, dir) { if (dir.mime === 'directory' && dir.write) { delete toChkTh[dir.hash]; } }); } }).always(function() { jQuery.each(toChkTh, trashDisable); }); } // to enable / disable self[self.options.enableAlways? 'enable' : 'disable'](); }); // self.timeEnd('load'); // End of bootUp() }; // call bootCallback function with elFinder instance, extraObject - { dfrdsBeforeBootup: dfrdsBeforeBootup } if (bootCallback && typeof bootCallback === 'function') { self.bootCallback = bootCallback; bootCallback.call(node.get(0), self, { dfrdsBeforeBootup: dfrdsBeforeBootup }); } // call dfrdsBeforeBootup functions then boot up elFinder jQuery.when.apply(null, dfrdsBeforeBootup).done(function() { bootUp(); }).fail(function(error) { self.error(error); }); }; //register elFinder to global scope if (typeof toGlobal === 'undefined' || toGlobal) { window.elFinder = elFinder; } /** * Prototype * * @type Object */ elFinder.prototype = { uniqueid : 0, res : function(type, id) { return this.resources[type] && this.resources[type][id]; }, /** * User os. Required to bind native shortcuts for open/rename * * @type String **/ OS : navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other', /** * User browser UA. * jQuery.browser: version deprecated: 1.3, removed: 1.9 * * @type Object **/ UA : (function(){ var self = this, webkit = !document.unqueID && !window.opera && !window.sidebar && window.localStorage && 'WebkitAppearance' in document.documentElement.style, chrome = webkit && window.chrome, /*setRotated = function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } UA.Angle = a; UA.Rotated = a % 180 === 0? false : true; },*/ UA = { // Browser IE <= IE 6 ltIE6 : typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined", // Browser IE <= IE 7 ltIE7 : typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined", // Browser IE <= IE 8 ltIE8 : typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined", // Browser IE <= IE 9 ltIE9 : document.uniqueID && document.documentMode <= 9, // Browser IE <= IE 10 ltIE10 : document.uniqueID && document.documentMode <= 10, // Browser IE >= IE 11 gtIE11 : document.uniqueID && document.documentMode >= 11, IE : document.uniqueID, Firefox : window.sidebar, Opera : window.opera, Webkit : webkit, Chrome : chrome, Edge : (chrome && window.msCredentials)? true : false, Safari : webkit && !window.chrome, Mobile : typeof window.orientation != "undefined", Touch : typeof window.ontouchstart != "undefined", iOS : navigator.platform.match(/^iP(?:[ao]d|hone)/), Fullscreen : (typeof (document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen) !== 'undefined'), Angle : 0, Rotated : false, CSS : (function() { var aStyle = document.createElement('a').style, pStyle = document.createElement('p').style, css; css = 'position:sticky;position:-webkit-sticky;'; css += 'width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;'; aStyle.cssText = css; return { positionSticky : aStyle.position.indexOf('sticky')!==-1, widthMaxContent : aStyle.width.indexOf('max-content')!==-1, flex : typeof pStyle.flex !== 'undefined' }; })() }; return UA; })(), /** * Has RequireJS? * * @type Boolean */ hasRequire : (typeof define === 'function' && define.amd), /** * Current request command * * @type String */ currentReqCmd : '', /** * Current keyboard state * * @type Object */ keyState : {}, /** * Internationalization object * * @type Object */ i18 : { en : { translator : '', language : 'English', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', nonameDateFormat : 'ymd-His', messages : {} }, months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'], days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] }, /** * File mimetype to kind mapping * * @type Object */ kinds : { 'unknown' : 'Unknown', 'directory' : 'Folder', 'group' : 'Selects', 'symlink' : 'Alias', 'symlink-broken' : 'AliasBroken', 'application/x-empty' : 'TextPlain', 'application/postscript' : 'Postscript', 'application/vnd.ms-office' : 'MsOffice', 'application/msword' : 'MsWord', 'application/vnd.ms-word' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord', 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord', 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord', 'application/vnd.ms-excel' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel', 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel', 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-powerpoint' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP', 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP', 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP', 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP', 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP', 'application/pdf' : 'PDF', 'application/xml' : 'XML', 'application/vnd.oasis.opendocument.text' : 'OO', 'application/vnd.oasis.opendocument.text-template' : 'OO', 'application/vnd.oasis.opendocument.text-web' : 'OO', 'application/vnd.oasis.opendocument.text-master' : 'OO', 'application/vnd.oasis.opendocument.graphics' : 'OO', 'application/vnd.oasis.opendocument.graphics-template' : 'OO', 'application/vnd.oasis.opendocument.presentation' : 'OO', 'application/vnd.oasis.opendocument.presentation-template' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO', 'application/vnd.oasis.opendocument.chart' : 'OO', 'application/vnd.oasis.opendocument.formula' : 'OO', 'application/vnd.oasis.opendocument.database' : 'OO', 'application/vnd.oasis.opendocument.image' : 'OO', 'application/vnd.openofficeorg.extension' : 'OO', 'application/x-shockwave-flash' : 'AppFlash', 'application/flash-video' : 'Flash video', 'application/x-bittorrent' : 'Torrent', 'application/javascript' : 'JS', 'application/rtf' : 'RTF', 'application/rtfd' : 'RTF', 'application/x-font-ttf' : 'TTF', 'application/x-font-otf' : 'OTF', 'application/x-rpm' : 'RPM', 'application/x-web-config' : 'TextPlain', 'application/xhtml+xml' : 'HTML', 'application/docbook+xml' : 'DOCBOOK', 'application/x-awk' : 'AWK', 'application/x-gzip' : 'GZIP', 'application/x-bzip2' : 'BZIP', 'application/x-xz' : 'XZ', 'application/zip' : 'ZIP', 'application/x-zip' : 'ZIP', 'application/x-rar' : 'RAR', 'application/x-tar' : 'TAR', 'application/x-7z-compressed' : '7z', 'application/x-jar' : 'JAR', 'text/plain' : 'TextPlain', 'text/x-php' : 'PHP', 'text/html' : 'HTML', 'text/javascript' : 'JS', 'text/css' : 'CSS', 'text/rtf' : 'RTF', 'text/rtfd' : 'RTF', 'text/x-c' : 'C', 'text/x-csrc' : 'C', 'text/x-chdr' : 'CHeader', 'text/x-c++' : 'CPP', 'text/x-c++src' : 'CPP', 'text/x-c++hdr' : 'CPPHeader', 'text/x-shellscript' : 'Shell', 'application/x-csh' : 'Shell', 'text/x-python' : 'Python', 'text/x-java' : 'Java', 'text/x-java-source' : 'Java', 'text/x-ruby' : 'Ruby', 'text/x-perl' : 'Perl', 'text/x-sql' : 'SQL', 'text/xml' : 'XML', 'text/x-comma-separated-values' : 'CSV', 'text/x-markdown' : 'Markdown', 'image/x-ms-bmp' : 'BMP', 'image/jpeg' : 'JPEG', 'image/gif' : 'GIF', 'image/png' : 'PNG', 'image/tiff' : 'TIFF', 'image/x-targa' : 'TGA', 'image/vnd.adobe.photoshop' : 'PSD', 'image/xbm' : 'XBITMAP', 'image/pxm' : 'PXM', 'audio/mpeg' : 'AudioMPEG', 'audio/midi' : 'AudioMIDI', 'audio/ogg' : 'AudioOGG', 'audio/mp4' : 'AudioMPEG4', 'audio/x-m4a' : 'AudioMPEG4', 'audio/wav' : 'AudioWAV', 'audio/x-mp3-playlist' : 'AudioPlaylist', 'video/x-dv' : 'VideoDV', 'video/mp4' : 'VideoMPEG4', 'video/mpeg' : 'VideoMPEG', 'video/x-msvideo' : 'VideoAVI', 'video/quicktime' : 'VideoMOV', 'video/x-ms-wmv' : 'VideoWM', 'video/x-flv' : 'VideoFlash', 'video/x-matroska' : 'VideoMKV', 'video/ogg' : 'VideoOGG' }, /** * File mimetype to file extention mapping * * @type Object * @see elFinder.mimetypes.js */ mimeTypes : {}, /** * Ajax request data validation rules * * @type Object */ rules : { defaults : function(data) { if (!data || (data.added && !Array.isArray(data.added)) || (data.removed && !Array.isArray(data.removed)) || (data.changed && !Array.isArray(data.changed))) { return false; } return true; }, open : function(data) { return data && data.cwd && data.files && jQuery.isPlainObject(data.cwd) && Array.isArray(data.files); }, tree : function(data) { return data && data.tree && Array.isArray(data.tree); }, parents : function(data) { return data && data.tree && Array.isArray(data.tree); }, tmb : function(data) { return data && data.images && (jQuery.isPlainObject(data.images) || Array.isArray(data.images)); }, upload : function(data) { return data && (jQuery.isPlainObject(data.added) || Array.isArray(data.added));}, search : function(data) { return data && data.files && Array.isArray(data.files); } }, /** * Commands costructors * * @type Object */ commands : {}, /** * Commands to add the item (space delimited) * * @type String */ cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload', parseUploadData : function(text) { var self = this, data; if (!jQuery.trim(text)) { return {error : ['errResponse', 'errDataEmpty']}; } try { data = JSON.parse(text); } catch (e) { return {error : ['errResponse', 'errDataNotJSON']}; } data = self.normalize(data); if (!self.validResponse('upload', data)) { return {error : (response.norError || ['errResponse'])}; } data.removed = jQuery.merge((data.removed || []), jQuery.map(data.added || [], function(f) { return self.file(f.hash)? f.hash : null; })); return data; }, iframeCnt : 0, uploads : { // xhr muiti uploading flag xhrUploading: false, // Timer of request fail to sync failSyncTm: null, // current chunkfail requesting chunk chunkfailReq: {}, // check file/dir exists checkExists: function(files, target, fm, isDir) { var dfrd = jQuery.Deferred(), names, renames = [], hashes = {}, chkFiles = [], cancel = function() { var i = files.length; while (--i > -1) { files[i]._remove = true; } }, resolve = function() { dfrd.resolve(renames, hashes); }, check = function() { var existed = [], exists = [], i, c, pathStr = target !== fm.cwd().hash? fm.path(target, true) + fm.option('separator', target) : '', confirm = function(ndx) { alert(1); var last = ndx == exists.length-1, opts = { cssClass : 'elfinder-confirm-upload', title : fm.i18n('cmdupload'), text : ['errExists', pathStr + exists[ndx].name, 'confirmRepl'], all : !last, accept : { label : 'btnYes', callback : function(all) { !last && !all ? confirm(++ndx) : resolve(); } }, reject : { label : 'btnNo', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { files[exists[i].i]._remove = true; } } else { files[exists[ndx].i]._remove = true; } !last && !all ? confirm(++ndx) : resolve(); } }, cancel : { label : 'btnCancel', callback : function() { cancel(); resolve(); } }, buttons : [ { label : 'btnBackup', cssClass : 'elfinder-confirm-btn-backup', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { renames.push(exists[i].name); } } else { renames.push(exists[ndx].name); } !last && !all ? confirm(++ndx) : resolve(); } } ] }; if (!isDir) { opts.buttons.push({ label : 'btnRename' + (last? '' : 'All'), cssClass : 'elfinder-confirm-btn-rename', callback : function() { renames = null; resolve(); } }); } if (fm.iframeCnt > 0) { delete opts.reject; } fm.confirm(opts); }; if (! fm.file(target).read) { // for dropbox type resolve(); return; } names = jQuery.map(files, function(file, i) { return file.name && (!fm.UA.iOS || file.name !== 'image.jpg')? {i: i, name: file.name} : null ;}); fm.request({ data : {cmd : 'ls', target : target, intersect : jQuery.map(names, function(item) { return item.name;})}, notify : {type : 'preupload', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { var existedArr, cwdItems; if (data) { if (data.error) { cancel(); } else { if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (data.list) { if (Array.isArray(data.list)) { existed = data.list || []; } else { existedArr = []; existed = jQuery.map(data.list, function(n) { if (typeof n === 'string') { return n; } else { // support to >=2.1.11 plugin Normalizer, Sanitizer existedArr = existedArr.concat(n); return false; } }); if (existedArr.length) { existed = existed.concat(existedArr); } hashes = data.list; } exists = jQuery.grep(names, function(name){ return jQuery.inArray(name.name, existed) !== -1 ? true : false ; }); if (exists.length && existed.length && target == fm.cwd().hash) { cwdItems = jQuery.map(fm.files(target), function(file) { return file.name; } ); if (jQuery.grep(existed, function(n) { return jQuery.inArray(n, cwdItems) === -1? true : false; }).length){ fm.sync(); } } } } } } if (exists.length > 0) { confirm(0); } else { resolve(); } }) .fail(function(error) { cancel(); resolve(); error && fm.error(error); }); }; if (fm.api >= 2.1 && typeof files[0] == 'object') { check(); } else { resolve(); } return dfrd; }, // check droped contents checkFile : function(data, fm, target) { if (!!data.checked || data.type == 'files') { return data.files; } else if (data.type == 'data') { var dfrd = jQuery.Deferred(), scanDfd = jQuery.Deferred(), files = [], paths = [], dirctorys = [], processing = 0, items, mkdirs = [], cancel = false, toArray = function(list) { return Array.prototype.slice.call(list || [], 0); }, doScan = function(items) { var entry, readEntries, excludes = fm.options.folderUploadExclude[fm.OS] || null, length = items.length, check = function() { if (--processing < 1 && scanDfd.state() === 'pending') { scanDfd.resolve(); } }, pushItem = function(file) { if (! excludes || ! file.name.match(excludes)) { paths.push(entry.fullPath || ''); files.push(file); } check(); }, readEntries = function(dirReader) { var entries = [], read = function() { dirReader.readEntries(function(results) { if (cancel || !results.length) { for (var i = 0; i < entries.length; i++) { if (cancel) { scanDfd.reject(); break; } doScan([entries[i]]); } check(); } else { entries = entries.concat(toArray(results)); read(); } }, check); }; read(); }; processing++; for (var i = 0; i < length; i++) { if (cancel) { scanDfd.reject(); break; } entry = items[i]; if (entry) { if (entry.isFile) { processing++; entry.file(pushItem, check); } else if (entry.isDirectory) { if (fm.api >= 2.1) { processing++; mkdirs.push(entry.fullPath); readEntries(entry.createReader()); // Start reading dirs. } } } } check(); return scanDfd; }, hasDirs; items = jQuery.map(data.files.items, function(item){ return item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry(); }); jQuery.each(items, function(i, item) { if (item.isDirectory) { hasDirs = true; return false; } }); if (items.length > 0) { fm.uploads.checkExists(items, target, fm, hasDirs).done(function(renames, hashes){ var dfds = []; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (renames === null) { data.overwrite = 0; renames = []; } items = jQuery.grep(items, function(item){ var i, bak, hash, dfd, hi; if (item.isDirectory && renames.length) { i = jQuery.inArray(item.name, renames); if (i !== -1) { renames.splice(i, 1); bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, ''); jQuery.each(hashes, function(h, name) { if (item.name == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(item.name, target).hash; } fm.lockfiles({files : [hash]}); dfd = fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function() { item._remove = true; fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }); dfds.push(dfd); } } return !item._remove? true : false; }); } jQuery.when.apply($, dfds).done(function(){ var notifyto, msg, id = +new Date(); if (items.length > 0) { msg = fm.escape(items[0].name); if (items.length > 1) { msg += ' ... ' + items.length + fm.i18n('items'); } notifyto = setTimeout(function() { fm.notify({ type : 'readdir', id : id, cnt : 1, hideCnt: true, msg : fm.i18n('ntfreaddir') + ' (' + msg + ')', cancel: function() { cancel = true; } }); }, fm.options.notifyDelay); doScan(items).done(function() { notifyto && clearTimeout(notifyto); fm.notify({type : 'readdir', id: id, cnt : -1}); if (cancel) { dfrd.reject(); } else { dfrd.resolve([files, paths, renames, hashes, mkdirs]); } }).fail(function() { dfrd.reject(); }); } else { dfrd.reject(); } }); }); return dfrd.promise(); } else { return dfrd.reject(); } } else { var ret = []; var check = []; var str = data.files[0]; if (data.type == 'html') { var tmp = jQuery("").append(jQuery.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))), atag; jQuery('img[_elfsrc]', tmp).each(function(){ var url, purl, self = jQuery(this), pa = self.closest('a'); if (pa && pa.attr('href') && pa.attr('href').match(/\.(?:jpe?g|gif|bmp|png)/i)) { purl = pa.attr('href'); } url = self.attr('_elfsrc'); if (url) { if (purl) { jQuery.inArray(purl, ret) == -1 && ret.push(purl); jQuery.inArray(url, check) == -1 && check.push(url); } else { jQuery.inArray(url, ret) == -1 && ret.push(url); } } // Probably it's clipboard data if (ret.length === 1 && ret[0].match(/^data:image\/png/)) { data.clipdata = true; } }); atag = jQuery('a[href]', tmp); atag.each(function(){ var text, loc, parseUrl = function(url) { var a = document.createElement('a'); a.href = url; return a; }; if (text = jQuery(this).text()) { loc = parseUrl(jQuery(this).attr('href')); if (loc.href && loc.href.match(/^(?:ht|f)tp/i) && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i) || jQuery.trim(text).match(/\.[a-z0-9-]{1,10}$/i))) { if (jQuery.inArray(loc.href, ret) == -1 && jQuery.inArray(loc.href, check) == -1) ret.push(loc.href); } } }); } else { var regex, m, url; regex = /((?:ht|f)tps?:\/\/[-_.!~*\'()a-z0-9;/?:\@&=+\$,%#\*\[\]]+)/ig; while (m = regex.exec(str)) { url = m[1].replace(/&/g, '&'); if (jQuery.inArray(url, ret) == -1) ret.push(url); } } return ret; } }, // upload transport using XMLHttpRequest xhr : function(data, fm) { var self = fm ? fm : this, node = self.getUI(), xhr = new XMLHttpRequest(), notifyto = null, notifyto2 = null, dataChecked = data.checked, isDataType = (data.isDataType || data.type == 'data'), target = (data.target || self.cwd().hash), dropEvt = (data.dropEvt || null), extraData  = data.extraData || null, chunkEnable = (self.option('uploadMaxConn', target) != -1), multiMax = Math.min(5, Math.max(1, self.option('uploadMaxConn', target))), retryWait = 10000, // 10 sec retryMax = 30, // 10 sec * 30 = 300 secs (Max 5 mins) retry = 0, getFile = function(files) { var dfd = jQuery.Deferred(), file; if (files.promise) { files.always(function(f) { dfd.resolve(Array.isArray(f) && f.length? (isDataType? f[0][0] : f[0]) : {}); }); } else { dfd.resolve(files.length? (isDataType? files[0][0] : files[0]) : {}); } return dfd; }, dfrd = jQuery.Deferred() .fail(function(err) { var error = self.parseError(err), userAbort; if (error === 'userabort') { userAbort = true; error = void 0; } if (files && (self.uploads.xhrUploading || userAbort)) { // send request om fail getFile(files).done(function(file) { if (!userAbort) { triggerError(error, file); } if (! file._cid) { // send sync request self.uploads.failSyncTm && clearTimeout(self.uploads.failSyncTm); self.uploads.failSyncTm = setTimeout(function() { self.sync(target); }, 1000); } else if (! self.uploads.chunkfailReq[file._cid]) { // send chunkfail request self.uploads.chunkfailReq[file._cid] = true; setTimeout(function() { fm.request({ data : { cmd: 'upload', target: target, chunk: file._chunk, cid: file._cid, upload: ['chunkfail'], mimes: 'chunkfail' }, options : { type: 'post', url: self.uploadURL }, preventDefault: true }).always(function() { delete self.uploads.chunkfailReq[file._chunk]; }); }, 1000); } }); } else { triggerError(error); } !userAbort && self.sync(); self.uploads.xhrUploading = false; files = null; }) .done(function(data) { self.uploads.xhrUploading = false; files = null; if (data) { self.currentReqCmd = 'upload'; data.warning && triggerError(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); self.trigger('upload', data, false); self.trigger('uploaddone'); if (data.toasts && Array.isArray(data.toasts)) { jQuery.each(data.toasts, function() { this.msg && self.toast(this); }); } data.sync && self.sync(); data.debug && fm.debug('backend-debug', data); } }) .always(function() { self.abortXHR(xhr); // unregist fnAbort function node.off('uploadabort', fnAbort); jQuery(window).off('unload', fnAbort); notifyto && clearTimeout(notifyto); notifyto2 && clearTimeout(notifyto2); dataChecked && !data.multiupload && checkNotify() && self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); chunkMerge && notifyElm.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1}); }), formData = new FormData(), files = data.input ? data.input.files : self.uploads.checkFile(data, self, target), cnt = data.checked? (isDataType? files[0].length : files.length) : files.length, loaded = 0, prev = 0, filesize = 0, notify = false, notifyElm = self.ui.notify, cancelBtn = true, abort = false, checkNotify = function() { if (!notify && (ntfUpload = notifyElm.children('.elfinder-notify-upload')).length) { notify = true; } return notify; }, fnAbort = function(e, error) { abort = true; self.abortXHR(xhr, { quiet: true, abort: true }); dfrd.reject(error); if (checkNotify()) { self.notify({type : 'upload', cnt : ntfUpload.data('cnt') * -1, progress : 0, size : 0}); } }, cancelToggle = function(show) { ntfUpload.children('.elfinder-notify-cancel')[show? 'show':'hide'](); }, startNotify = function(size) { if (!size) size = filesize; return setTimeout(function() { notify = true; self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size, cancel: function() { node.trigger('uploadabort', 'userabort'); } }); ntfUpload = notifyElm.children('.elfinder-notify-upload'); prev = loaded; if (data.multiupload) { cancelBtn && cancelToggle(true); } else { cancelToggle(cancelBtn && loaded < size); } }, self.options.notifyDelay); }, doRetry = function() { if (retry++ <= retryMax) { if (checkNotify() && prev) { self.notify({type : 'upload', cnt : 0, progress : 0, size : prev}); } self.abortXHR(xhr, { quiet: true }); prev = loaded = 0; setTimeout(function() { var reqId; if (! abort) { xhr.open('POST', self.uploadURL, true); if (self.api >= 2.1029) { reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); (typeof formData['delete'] === 'function') && formData['delete']('reqid'); formData.append('reqid', reqId); xhr._requestId = reqId; } xhr.send(formData); } }, retryWait); } else { node.trigger('uploadabort', ['errAbort', 'errTimeout']); } }, progress = function() { var node; if (notify) { dfrd.notifyWith(ntfUpload, [{ cnt: ntfUpload.data('cnt'), progress: ntfUpload.data('progress'), total: ntfUpload.data('total') }]); } }, triggerError = function(err, file, unite) { err && self.trigger('xhruploadfail', { error: err, file: file }); if (unite) { if (err) { if (errCnt < self.options.maxErrorDialogs) { if (Array.isArray(err)) { errors = errors.concat(err); } else { errors.push(err); } } errCnt++; } } else { if (err) { self.error(err); } else { if (errors.length) { if (errCnt >= self.options.maxErrorDialogs) { errors = errors.concat('moreErrors', errCnt - self.options.maxErrorDialogs); } self.error(errors); } errors = []; errCnt = 0; } } }, errors = [], errCnt = 0, renames = (data.renames || null), hashes = (data.hashes || null), chunkMerge = false, ntfUpload = jQuery(); // regist fnAbort function node.one('uploadabort', fnAbort); jQuery(window).one('unload.' + fm.namespace, fnAbort); !chunkMerge && (prev = loaded); if (!isDataType && !cnt) { return dfrd.reject(['errUploadNoFiles']); } xhr.addEventListener('error', function() { if (xhr.status == 0) { if (abort) { dfrd.reject(); } else { // ff bug while send zero sized file // for safari - send directory if (!isDataType && data.files && jQuery.grep(data.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errAbort', 'errFolderUpload']); } else if (data.input && jQuery.grep(data.input.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errUploadNoFiles']); } else { doRetry(); } } } else { node.trigger('uploadabort', 'errConnect'); } }, false); xhr.addEventListener('load', function(e) { var status = xhr.status, res, curr = 0, error = '', errData, errObj; if (status >= 400) { if (status > 500) { error = 'errResponse'; } else { error = ['errResponse', 'errServerError']; } } else { if (!xhr.responseText) { error = ['errResponse', 'errDataEmpty']; } } if (error) { node.trigger('uploadabort'); getFile(files).done(function(file) { return dfrd.reject(file._cid? null : error); }); } loaded = filesize; if (checkNotify() && (curr = loaded - prev)) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); progress(); } res = self.parseUploadData(xhr.responseText); // chunked upload commit if (res._chunkmerged) { formData = new FormData(); var _file = [{_chunkmerged: res._chunkmerged, _name: res._name, _mtime: res._mtime}]; chunkMerge = true; node.off('uploadabort', fnAbort); notifyto2 = setTimeout(function() { self.notify({type : 'chunkmerge', cnt : 1}); }, self.options.notifyDelay); isDataType? send(_file, files[1]) : send(_file); return; } res._multiupload = data.multiupload? true : false; if (res.error) { errData = { cmd: 'upload', err: res, xhr: xhr, rc: xhr.status }; self.trigger('uploadfail', res); // trigger "requestError" event self.trigger('requestError', errData); if (errData._event && errData._event.isDefaultPrevented()) { res.error = ''; } if (res._chunkfailure || res._multiupload) { abort = true; self.uploads.xhrUploading = false; notifyto && clearTimeout(notifyto); if (ntfUpload.length) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); dfrd.reject(res); } else { // for multi connection dfrd.reject(); } } else { dfrd.reject(res); } } else { dfrd.resolve(res); } }, false); xhr.upload.addEventListener('loadstart', function(e) { if (!chunkMerge && e.lengthComputable) { loaded = e.loaded; retry && (loaded = 0); filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } if (checkNotify()) { self.notify({type : 'upload', cnt : 0, progress : loaded - prev, size : data.multiupload? 0 : filesize}); prev = loaded; progress(); } } }, false); xhr.upload.addEventListener('progress', function(e) { var curr; if (e.lengthComputable && !chunkMerge && xhr.readyState < 2) { loaded = e.loaded; // to avoid strange bug in safari (not in chrome) with drag&drop. // bug: macos finder opened in any folder, // reset safari cache (option+command+e), reload elfinder page, // drop file from finder // on first attempt request starts (progress callback called ones) but never ends. // any next drop - successfull. if (!data.checked && loaded > 0 && !notifyto) { notifyto = startNotify(xhr._totalSize - loaded); } if (!filesize) { filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } } curr = loaded - prev; if (checkNotify() && (curr/e.total) >= 0.05) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); prev = loaded; progress(); } if (! data.multiupload && loaded >= filesize) { cancelBtn = false; cancelToggle(false); } } }, false); var send = function(files, paths){ var size = 0, fcnt = 1, sfiles = [], c = 0, total = cnt, maxFileSize, totalSize = 0, chunked = [], chunkID = new Date().getTime().toString().substr(-9), // for take care of the 32bit backend system BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize blobSlice = chunkEnable? false : '', blobSize, blobMtime, i, start, end, chunks, blob, chunk, added, done, last, failChunk, multi = function(files, num){ var sfiles = [], cid, sfilesLen = 0, cancelChk; if (!abort) { while(files.length && sfiles.length < num) { sfiles.push(files.shift()); } sfilesLen = sfiles.length; if (sfilesLen) { cancelChk = sfilesLen; for (var i=0; i < sfilesLen; i++) { if (abort) { break; } cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null); if (!!failChunk[cid]) { last--; continue; } fm.exec('upload', { type: data.type, isDataType: isDataType, files: sfiles[i], checked: true, target: target, dropEvt: dropEvt, renames: renames, hashes: hashes, multiupload: true, overwrite: data.overwrite === 0? 0 : void 0 }, void 0, target) .fail(function(error) { if (error && error === 'No such command') { abort = true; fm.error(['errUpload', 'errPerm']); } if (cid) { failChunk[cid] = true; } }) .always(function(e) { if (e && e.added) added = jQuery.merge(added, e.added); if (last <= ++done) { fm.trigger('multiupload', {added: added}); notifyto && clearTimeout(notifyto); if (checkNotify()) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); } } if (files.length) { multi(files, 1); // Next one } else { if (--cancelChk <= 1) { cancelBtn = false; cancelToggle(false); } } }); } } } if (sfiles.length < 1 || abort) { if (abort) { notifyto && clearTimeout(notifyto); if (cid) { failChunk[cid] = true; } dfrd.reject(); } else { dfrd.resolve(); self.uploads.xhrUploading = false; } } }, check = function(){ if (!self.uploads.xhrUploading) { self.uploads.xhrUploading = true; multi(sfiles, multiMax); // Max connection: 3 } else { setTimeout(check, 100); } }, reqId, err; if (! dataChecked && (isDataType || data.type == 'files')) { if (! (maxFileSize = fm.option('uploadMaxSize', target))) { maxFileSize = 0; } for (i=0; i < files.length; i++) { try { blob = files[i]; blobSize = blob.size; if (blobSlice === false) { blobSlice = ''; if (self.api >= 2.1) { if ('slice' in blob) { blobSlice = 'slice'; } else if ('mozSlice' in blob) { blobSlice = 'mozSlice'; } else if ('webkitSlice' in blob) { blobSlice = 'webkitSlice'; } } } } catch(e) { cnt--; total--; continue; } // file size check if ((maxFileSize && blobSize > maxFileSize) || (!blobSlice && fm.uplMaxSize && blobSize > fm.uplMaxSize)) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; continue; } // file mime check if (blob.type && ! self.uploadMimeCheck(blob.type, target)) { triggerError(['errUploadFile', blob.name, 'errUploadMime', '(' + blob.type + ')'], blob, true); cnt--; total--; continue; } if (blobSlice && blobSize > BYTES_PER_CHUNK) { start = 0; end = BYTES_PER_CHUNK; chunks = -1; total = Math.floor((blobSize - 1) / BYTES_PER_CHUNK); blobMtime = blob.lastModified? Math.round(blob.lastModified/1000) : 0; totalSize += blobSize; chunked[chunkID] = 0; while(start < blobSize) { chunk = blob[blobSlice](start, end); chunk._chunk = blob.name + '.' + (++chunks) + '_' + total + '.part'; chunk._cid = chunkID; chunk._range = start + ',' + chunk.size + ',' + blobSize; chunk._mtime = blobMtime; chunked[chunkID]++; if (size) { c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } size = BYTES_PER_CHUNK; fcnt = 1; if (isDataType) { sfiles[c][0].push(chunk); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(chunk); } start = end; end = start + BYTES_PER_CHUNK; } if (chunk == null) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; } else { total += chunks; size = 0; fcnt = 1; c++; } continue; } if ((fm.uplMaxSize && size + blobSize > fm.uplMaxSize) || fcnt > fm.uplMaxFile) { size = 0; fcnt = 1; c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } if (isDataType) { sfiles[c][0].push(blob); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(blob); } size += blobSize; totalSize += blobSize; fcnt++; } if (errors.length) { triggerError(); } if (sfiles.length == 0) { // no data data.checked = true; return false; } if (sfiles.length > 1) { // multi upload notifyto = startNotify(totalSize); added = []; done = 0; last = sfiles.length; failChunk = []; check(); return true; } // single upload if (isDataType) { files = sfiles[0][0]; paths = sfiles[0][1]; } else { files = sfiles[0]; } } if (!dataChecked) { if (!fm.UA.Safari || !data.files) { notifyto = startNotify(totalSize); } else { xhr._totalSize = totalSize; } } dataChecked = true; if (! files.length) { dfrd.reject(['errUploadNoFiles']); } xhr.open('POST', self.uploadURL, true); // set request headers if (fm.customHeaders) { jQuery.each(fm.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (fm.xhrFields) { jQuery.each(fm.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } if (self.api >= 2.1029) { // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); formData.append('reqid', reqId); xhr._requestId = reqId; } formData.append('cmd', 'upload'); formData.append(self.newAPI ? 'target' : 'current', target); if (renames && renames.length) { jQuery.each(renames, function(i, v) { formData.append('renames[]', v); }); formData.append('suffix', fm.options.backupSuffix); } if (hashes) { jQuery.each(hashes, function(i, v) { formData.append('hashes['+ i +']', v); }); } jQuery.each(self.customData, function(key, val) { formData.append(key, val); }); jQuery.each(self.options.onlyMimes, function(i, mime) { formData.append('mimes[]', mime); }); jQuery.each(files, function(i, file) { if (file._chunkmerged) { formData.append('chunk', file._chunkmerged); formData.append('upload[]', file._name); formData.append('mtime[]', file._mtime); } else { if (file._chunkfail) { formData.append('upload[]', 'chunkfail'); formData.append('mimes', 'chunkfail'); } else { formData.append('upload[]', file); if (data.clipdata) { data.overwrite = 0; formData.append('name[]', fm.date(fm.nonameDateFormat) + '.png'); } if (file.name && fm.UA.iOS) { if (file.name.match(/^image\.jpe?g$/i)) { data.overwrite = 0; formData.append('name[]', fm.date(fm.nonameDateFormat) + '.jpg'); } else if (file.name.match(/^capturedvideo\.mov$/i)) { data.overwrite = 0; formData.append('name[]', fm.date(fm.nonameDateFormat) + '.mov'); } } } if (file._chunk) { formData.append('chunk', file._chunk); formData.append('cid' , file._cid); formData.append('range', file._range); formData.append('mtime[]', file._mtime); } else { formData.append('mtime[]', file.lastModified? Math.round(file.lastModified/1000) : 0); } } }); if (isDataType) { jQuery.each(paths, function(i, path) { formData.append('upload_path[]', path); }); } if (data.overwrite === 0) { formData.append('overwrite', 0); } // send int value that which meta key was pressed when dropped as `dropWith` if (dropEvt) { formData.append('dropWith', parseInt( (dropEvt.altKey ? '1' : '0')+ (dropEvt.ctrlKey ? '1' : '0')+ (dropEvt.metaKey ? '1' : '0')+ (dropEvt.shiftKey? '1' : '0'), 2)); } // set extraData on current request if (extraData) { jQuery.each(extraData, function(key, val) { formData.append(key, val); }); } xhr.send(formData); return true; }; if (! isDataType) { if (files.length > 0) { if (! data.clipdata && renames == null) { var mkdirs = [], paths = [], excludes = fm.options.folderUploadExclude[fm.OS] || null; jQuery.each(files, function(i, file) { var relPath = file.webkitRelativePath || file.relativePath || '', idx, rootDir; if (! relPath) { return false; } if (excludes && file.name.match(excludes)) { file._remove = true; relPath = void(0); } else { // add '/' as prefix to make same to folder uploading with DnD, see #2607 relPath = '/' + relPath.replace(/\/[^\/]*$/, '').replace(/^\//, ''); if (relPath && jQuery.inArray(relPath, mkdirs) === -1) { mkdirs.push(relPath); // checking the root directory to supports see #2378 idx = relPath.substr(1).indexOf('/'); if (idx !== -1 && (rootDir = relPath.substr(0, idx + 1)) && jQuery.inArray(rootDir, mkdirs) === -1) { mkdirs.unshift(rootDir); } } } paths.push(relPath); }); renames = []; hashes = {}; if (mkdirs.length) { (function() { var checkDirs = jQuery.map(mkdirs, function(name) { return name.substr(1).indexOf('/') === -1 ? {name: name.substr(1)} : null;}), cancelDirs = []; fm.uploads.checkExists(checkDirs, target, fm, true).done( function(res, res2) { var dfds = [], dfd, bak, hash; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { cancelDirs = jQuery.map(checkDirs, function(dir) { return dir._remove? dir.name : null ;} ); checkDirs = jQuery.grep(checkDirs, function(dir) { return !dir._remove? true : false ;} ); } if (cancelDirs.length) { jQuery.each(paths.concat(), function(i, path) { if (jQuery.inArray(path, cancelDirs) === 0) { files[i]._remove = true; paths[i] = void(0); } }); } files = jQuery.grep(files, function(file) { return file._remove? false : true; }); paths = jQuery.grep(paths, function(path) { return path === void 0 ? false : true; }); if (checkDirs.length) { dfd = jQuery.Deferred(); if (res.length) { jQuery.each(res, function(i, existName) { // backup bak = fm.uniqueName(existName + fm.options.backupSuffix , null, ''); jQuery.each(res2, function(h, name) { if (res[0] == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(res[0], target).hash; } fm.lockfiles({files : [hash]}); dfds.push( fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function(error) { dfrd.reject(error); fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }) ); }); } else { dfds.push(null); } jQuery.when.apply($, dfds).done(function() { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : mkdirs}, notify : {type : 'mkdir', cnt : mkdirs.length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } paths = jQuery.map(paths.concat(), function(p, i) { if (p === '/') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; files[i]._remove = true; return null; } } }); if (rm) { files = jQuery.grep(files, function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { isDataType = true; if (! send(files, paths)) { dfrd.reject(); } } }); }); } else { dfrd.reject(); } } ); })(); } else { fm.uploads.checkExists(files, target, fm).done( function(res, res2){ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { hashes = res2; if (res === null) { data.overwrite = 0; } else { renames = res; } files = jQuery.grep(files, function(file){return !file._remove? true : false ;}); } cnt = files.length; if (cnt > 0) { if (! send(files)) { dfrd.reject(); } } else { dfrd.reject(); } } ); } } else { if (! send(files)) { dfrd.reject(); } } } else { dfrd.reject(); } } else { if (dataChecked) { send(files[0], files[1]); } else { files.done(function(result) { // result: [files, paths, renames, hashes, mkdirs] renames = []; cnt = result[0].length; if (cnt) { if (result[4] && result[4].length) { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : result[4]}, notify : {type : 'mkdir', cnt : result[4].length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } result[1] = jQuery.map(result[1], function(p, i) { p = p.replace(/\/[^\/]*$/, ''); if (p === '') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; result[0][i]._remove = true; return null; } } }); if (rm) { result[0] = jQuery.grep(result[0], function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { renames = result[2]; hashes = result[3]; send(result[0], result[1]); } }); return; } else { result[1] = jQuery.map(result[1], function() { return target; }); } renames = result[2]; hashes = result[3]; send(result[0], result[1]); } else { dfrd.reject(['errUploadNoFiles']); } }).fail(function(){ dfrd.reject(); }); } } return dfrd; }, // upload transport using iframe iframe : function(data, fm) { var self = fm ? fm : this, input = data.input? data.input : false, files = !input ? self.uploads.checkFile(data, self) : false, dfrd = jQuery.Deferred() .fail(function(error) { error && self.error(error); }), name = 'iframe-'+fm.namespace+(++self.iframeCnt), form = jQuery('
      '), msie = this.UA.IE, // clear timeouts, close notification dialog, remove form/iframe onload = function() { abortto && clearTimeout(abortto); notifyto && clearTimeout(notifyto); notify && self.notify({type : 'upload', cnt : -cnt}); setTimeout(function() { msie && jQuery('