APP_NAME=PMI
-APP_ENV=production
+APP_ENV=dev
APP_KEY=base64:/Jmlg7TepI/inQ4KJ3VF0YVTqghRGvvBrnDI7NkUk94=
APP_DEBUG=true
APP_URL=https://dev.pmi.cubedesigners.com
"backpack/pagemanager": "^1.1",
"backpack/permissionmanager": "^4.0",
"backpack/settings": "^2.1",
+ "barryvdh/laravel-elfinder": "^0.4.1",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0",
- "predis/predis": "^1.1"
+ "predis/predis": "^1.1",
+ "stechstudio/laravel-ssh-tunnel": "^1.2"
},
"require-dev": {
"backpack/generators": "^1.2",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "139108ca700dc9aef6210c284d80f004",
+ "content-hash": "0538bbfe8da040f822b5342f47712bf6",
"packages": [
{
"name": "almasaeed2010/adminlte",
],
"time": "2018-11-22T21:29:16+00:00"
},
+ {
+ "name": "barryvdh/elfinder-flysystem-driver",
+ "version": "v0.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/barryvdh/elfinder-flysystem-driver.git",
+ "reference": "1f323056495fdce019b6ef1621be697f2945c609"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/barryvdh/elfinder-flysystem-driver/zipball/1f323056495fdce019b6ef1621be697f2945c609",
+ "reference": "1f323056495fdce019b6ef1621be697f2945c609",
+ "shasum": ""
+ },
+ "require": {
+ "intervention/image": "^2.0",
+ "league/flysystem": "^1.0",
+ "league/flysystem-cached-adapter": "^1.0",
+ "php": ">=5.4",
+ "studio-42/elfinder": "^2.1.10"
+ },
+ "suggest": {
+ "league/glide": "1.x to display images through Glide"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "elFinderVolumeFlysystem.php"
+ ],
+ "psr-4": {
+ "Barryvdh\\elFinderFlysystemDriver\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "A Flysystem Driver for elFinder",
+ "keywords": [
+ "Flysystem",
+ "elfinder",
+ "filesystem"
+ ],
+ "time": "2017-07-08T17:59:38+00:00"
+ },
+ {
+ "name": "barryvdh/laravel-elfinder",
+ "version": "v0.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/barryvdh/laravel-elfinder.git",
+ "reference": "bcac1ba35d89acc793a90d04fb157bf6dc8ea78f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/barryvdh/laravel-elfinder/zipball/bcac1ba35d89acc793a90d04fb157bf6dc8ea78f",
+ "reference": "bcac1ba35d89acc793a90d04fb157bf6dc8ea78f",
+ "shasum": ""
+ },
+ "require": {
+ "barryvdh/elfinder-flysystem-driver": "^0.2",
+ "illuminate/support": "5.5.x|5.6.x|5.7.x",
+ "league/flysystem": "^1.0",
+ "league/flysystem-cached-adapter": "^1.0",
+ "php": ">=7.0",
+ "studio-42/elfinder": "~2.1.10"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.4-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Barryvdh\\Elfinder\\ElfinderServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Barryvdh\\Elfinder\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "A Laravel Package to integrate elFinder 2",
+ "keywords": [
+ "elfinder",
+ "filebrowser",
+ "laravel",
+ "tinymce"
+ ],
+ "time": "2018-08-09T08:41:48+00:00"
+ },
{
"name": "cocur/slugify",
"version": "v3.1",
],
"time": "2018-11-23T23:41:29+00:00"
},
+ {
+ "name": "league/flysystem-cached-adapter",
+ "version": "1.0.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem-cached-adapter.git",
+ "reference": "08ef74e9be88100807a3b92cc9048a312bf01d6f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/08ef74e9be88100807a3b92cc9048a312bf01d6f",
+ "reference": "08ef74e9be88100807a3b92cc9048a312bf01d6f",
+ "shasum": ""
+ },
+ "require": {
+ "league/flysystem": "~1.0",
+ "psr/cache": "^1.0.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.9",
+ "phpspec/phpspec": "^3.4",
+ "phpunit/phpunit": "^5.7",
+ "predis/predis": "~1.0",
+ "tedivm/stash": "~0.12"
+ },
+ "suggest": {
+ "ext-phpredis": "Pure C implemented extension for PHP"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\Cached\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "frankdejonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "An adapter decorator to enable meta-data caching.",
+ "time": "2018-07-09T20:51:04+00:00"
+ },
{
"name": "monolog/monolog",
"version": "1.24.0",
],
"time": "2019-01-22T07:44:39+00:00"
},
+ {
+ "name": "psr/cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "time": "2016-08-06T20:24:11+00:00"
+ },
{
"name": "psr/container",
"version": "1.0.0",
],
"time": "2018-04-12T09:34:43+00:00"
},
+ {
+ "name": "stechstudio/laravel-ssh-tunnel",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/stechstudio/laravel-ssh-tunnel.git",
+ "reference": "c041dddcc8ad5eb92a40610d6e16812fe5141c29"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/stechstudio/laravel-ssh-tunnel/zipball/c041dddcc8ad5eb92a40610d6e16812fe5141c29",
+ "reference": "c041dddcc8ad5eb92a40610d6e16812fe5141c29",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "^5.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "STS\\Tunneler\\TunnelerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "classmap": [],
+ "psr-4": {
+ "STS\\Tunneler\\": "src"
+ },
+ "files": []
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bubba Hines",
+ "email": "rob@stechstudio.com"
+ }
+ ],
+ "description": "Easy creation & maintenance of an SSH Tunnel for Laravel/Lumen",
+ "keywords": [
+ "laravel",
+ "lumen",
+ "mysql",
+ "ssh",
+ "tunnel"
+ ],
+ "time": "2018-05-20T19:10:27+00:00"
+ },
+ {
+ "name": "studio-42/elfinder",
+ "version": "2.1.46",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Studio-42/elFinder.git",
+ "reference": "67799d42e7ee0afd3ed13e95f935694a8b3820d1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Studio-42/elFinder/zipball/67799d42e7ee0afd3ed13e95f935694a8b3820d1",
+ "reference": "67799d42e7ee0afd3ed13e95f935694a8b3820d1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2"
+ },
+ "suggest": {
+ "barryvdh/elfinder-flysystem-driver": "VolumeDriver for elFinder to use Flysystem as a root.",
+ "google/apiclient": "VolumeDriver GoogleDrive require `google/apiclient:^2.0.",
+ "kunalvarma05/dropbox-php-sdk": "VolumeDriver `Dropbox`2 require `kunalvarma05/dropbox-php-sdk.",
+ "nao-pon/flysystem-google-drive": "require in GoogleDrive network volume mounting with Flysystem."
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Dmitry Levashov",
+ "email": "dio@std42.ru",
+ "homepage": "http://std42.ru"
+ },
+ {
+ "name": "Troex Nevelin",
+ "email": "troex@fury.scancode.ru",
+ "homepage": "http://std42.ru"
+ },
+ {
+ "name": "Community contributions",
+ "homepage": "https://github.com/Studio-42/elFinder/contributors"
+ },
+ {
+ "name": "Naoki Sawada",
+ "email": "hypweb+elfinder@gmail.com",
+ "homepage": "http://xoops.hypweb.net"
+ }
+ ],
+ "description": "File manager for web",
+ "homepage": "http://elfinder.org",
+ "time": "2019-01-14T03:59:31+00:00"
+ },
{
"name": "swiftmailer/swiftmailer",
"version": "v6.1.3",
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
+ STS\Tunneler\TunnelerServiceProvider::class,
+
],
/*
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack\CRUD preferences
+ |--------------------------------------------------------------------------
+ */
+
+ /*
+ |------------
+ | CREATE & UPDATE
+ |------------
+ */
+ // Where do you want to redirect the user by default, after a CRUD entry is saved in the Add or Edit forms?
+ 'default_save_action' => 'save_and_back', //options: save_and_back, save_and_edit, save_and_new
+
+ // When the user chooses "save and back" or "save and new", show a bubble
+ // for the fact that the default save action has been changed?
+ 'show_save_action_change' => true, //options: true, false
+
+ // When using tabbed forms (create & update), what kind of tabs would you like?
+ 'tabs_type' => 'horizontal', //options: horizontal, vertical
+
+ // How would you like the validation errors to be shown?
+ 'show_grouped_errors' => true,
+ 'show_inline_errors' => true,
+
+ // Here you may override the css-classes for the content section of the create view globally
+ // To override per view use $this->crud->setCreateContentClass('class-string')
+ 'create_content_class' => 'col-md-8 col-md-offset-2',
+
+ // Here you may override the css-classes for the content section of the edit view globally
+ // To override per view use $this->crud->setEditContentClass('class-string')
+ 'edit_content_class' => 'col-md-8 col-md-offset-2',
+
+ // Here you may override the css-classes for the content section of the revisions timeline view globally
+ // To override per view use $this->crud->setRevisionsTimelineContentClass('class-string')
+ 'revisions_timeline_content_class' => 'col-md-10 col-md-offset-1',
+
+ /*
+ |------------
+ | READ
+ |------------
+ */
+
+ // LIST VIEW (table view)
+
+ // enable the datatables-responsive plugin, which hides columns if they don't fit?
+ // if not, a horizontal scrollbar will be shown instead
+ 'responsive_table' => true,
+
+ // stores pagination and filters in localStorage for two hours
+ // whenever the user tries to see that page, backpack loads the previous pagination and filtration
+ 'persistent_table' => false,
+
+ // How many items should be shown by default by the Datatable?
+ // This value can be overwritten on a specific CRUD by calling
+ // $this->crud->setDefaultPageLength(50);
+ 'default_page_length' => 25,
+
+ // A 1D array of options which will be used for both the displayed option and the value, or
+ // A 2D array in which the first array is used to define the value options and the second array the displayed options
+ // If a 2D array is used, strings in the right hand array will be automatically run through trans()
+ 'page_length_menu' => [[10, 25, 50, 100, -1], [10, 25, 50, 100, 'backpack::crud.all']],
+
+ // Here you may override the css-class for the content section of the list view globally
+ // To override per view use $this->crud->setListContentClass('class-string')
+ 'list_content_class' => 'col-md-12',
+
+ // SHOW (PREVIEW)
+
+ // Here you may override the css-classes for the content section of the show view globally
+ // To override per view use $this->crud->setShowContentClass('class-string')
+ 'show_content_class' => 'col-md-8 col-md-offset-2',
+
+ /*
+ |------------
+ | DELETE
+ |------------
+ */
+
+ /*
+ |------------
+ | REORDER
+ |------------
+ */
+
+ // Here you may override the css-classes for the content section of the reorder view globally
+ // To override per view use $this->crud->setReorderContentClass('class-string')
+ 'reorder_content_class' => 'col-md-8 col-md-offset-2',
+
+ /*
+ |------------
+ | DETAILS ROW
+ |------------
+ */
+
+ /*
+ |-------------------
+ | TRANSLATABLE CRUDS
+ |-------------------
+ */
+
+ 'show_translatable_field_icon' => true,
+ 'translatable_field_icon_position' => 'right', // left or right
+
+ 'locales' => [
+ // "af_NA" => "Afrikaans (Namibia)",
+ // "af_ZA" => "Afrikaans (South Africa)",
+ // "af" => "Afrikaans",
+ // "ak_GH" => "Akan (Ghana)",
+ // "ak" => "Akan",
+ // "sq_AL" => "Albanian (Albania)",
+ // "sq" => "Albanian",
+ // "am_ET" => "Amharic (Ethiopia)",
+ // "am" => "Amharic",
+ // "ar_DZ" => "Arabic (Algeria)",
+ // "ar_BH" => "Arabic (Bahrain)",
+ // "ar_EG" => "Arabic (Egypt)",
+ // "ar_IQ" => "Arabic (Iraq)",
+ // "ar_JO" => "Arabic (Jordan)",
+ // "ar_KW" => "Arabic (Kuwait)",
+ // "ar_LB" => "Arabic (Lebanon)",
+ // "ar_LY" => "Arabic (Libya)",
+ // "ar_MA" => "Arabic (Morocco)",
+ // "ar_OM" => "Arabic (Oman)",
+ // "ar_QA" => "Arabic (Qatar)",
+ // "ar_SA" => "Arabic (Saudi Arabia)",
+ // "ar_SD" => "Arabic (Sudan)",
+ // "ar_SY" => "Arabic (Syria)",
+ // "ar_TN" => "Arabic (Tunisia)",
+ // "ar_AE" => "Arabic (United Arab Emirates)",
+ // "ar_YE" => "Arabic (Yemen)",
+ // "ar" => "Arabic",
+ // "hy_AM" => "Armenian (Armenia)",
+ // "hy" => "Armenian",
+ // "as_IN" => "Assamese (India)",
+ // "as" => "Assamese",
+ // "asa_TZ" => "Asu (Tanzania)",
+ // "asa" => "Asu",
+ // "az_Cyrl" => "Azerbaijani (Cyrillic)",
+ // "az_Cyrl_AZ" => "Azerbaijani (Cyrillic, Azerbaijan)",
+ // "az_Latn" => "Azerbaijani (Latin)",
+ // "az_Latn_AZ" => "Azerbaijani (Latin, Azerbaijan)",
+ // "az" => "Azerbaijani",
+ // "bm_ML" => "Bambara (Mali)",
+ // "bm" => "Bambara",
+ // "eu_ES" => "Basque (Spain)",
+ // "eu" => "Basque",
+ // "be_BY" => "Belarusian (Belarus)",
+ // "be" => "Belarusian",
+ // "bem_ZM" => "Bemba (Zambia)",
+ // "bem" => "Bemba",
+ // "bez_TZ" => "Bena (Tanzania)",
+ // "bez" => "Bena",
+ // "bn_BD" => "Bengali (Bangladesh)",
+ // "bn_IN" => "Bengali (India)",
+ // "bn" => "Bengali",
+ // "bs_BA" => "Bosnian (Bosnia and Herzegovina)",
+ // "bs" => "Bosnian",
+ // "bg_BG" => "Bulgarian (Bulgaria)",
+ // "bg" => "Bulgarian",
+ // "my_MM" => "Burmese (Myanmar [Burma])",
+ // "my" => "Burmese",
+ // "ca_ES" => "Catalan (Spain)",
+ // "ca" => "Catalan",
+ // "tzm_Latn" => "Central Morocco Tamazight (Latin)",
+ // "tzm_Latn_MA" => "Central Morocco Tamazight (Latin, Morocco)",
+ // "tzm" => "Central Morocco Tamazight",
+ // "chr_US" => "Cherokee (United States)",
+ // "chr" => "Cherokee",
+ // "cgg_UG" => "Chiga (Uganda)",
+ // "cgg" => "Chiga",
+ // "zh_Hans" => "Chinese (Simplified Han)",
+ // "zh_Hans_CN" => "Chinese (Simplified Han, China)",
+ // "zh_Hans_HK" => "Chinese (Simplified Han, Hong Kong SAR China)",
+ // "zh_Hans_MO" => "Chinese (Simplified Han, Macau SAR China)",
+ // "zh_Hans_SG" => "Chinese (Simplified Han, Singapore)",
+ // "zh_Hant" => "Chinese (Traditional Han)",
+ // "zh_Hant_HK" => "Chinese (Traditional Han, Hong Kong SAR China)",
+ // "zh_Hant_MO" => "Chinese (Traditional Han, Macau SAR China)",
+ // "zh_Hant_TW" => "Chinese (Traditional Han, Taiwan)",
+ // "zh" => "Chinese",
+ // "kw_GB" => "Cornish (United Kingdom)",
+ // "kw" => "Cornish",
+ // "hr_HR" => "Croatian (Croatia)",
+ // "hr" => "Croatian",
+ // "cs_CZ" => "Czech (Czech Republic)",
+ // "cs" => "Czech",
+ // "da_DK" => "Danish (Denmark)",
+ // "da" => "Danish",
+ // "nl_BE" => "Dutch (Belgium)",
+ // "nl_NL" => "Dutch (Netherlands)",
+ // "nl" => "Dutch",
+ // "ebu_KE" => "Embu (Kenya)",
+ // "ebu" => "Embu",
+ // "en_AS" => "English (American Samoa)",
+ // "en_AU" => "English (Australia)",
+ // "en_BE" => "English (Belgium)",
+ // "en_BZ" => "English (Belize)",
+ // "en_BW" => "English (Botswana)",
+ // "en_CA" => "English (Canada)",
+ // "en_GU" => "English (Guam)",
+ // "en_HK" => "English (Hong Kong SAR China)",
+ // "en_IN" => "English (India)",
+ // "en_IE" => "English (Ireland)",
+ // "en_JM" => "English (Jamaica)",
+ // "en_MT" => "English (Malta)",
+ // "en_MH" => "English (Marshall Islands)",
+ // "en_MU" => "English (Mauritius)",
+ // "en_NA" => "English (Namibia)",
+ // "en_NZ" => "English (New Zealand)",
+ // "en_MP" => "English (Northern Mariana Islands)",
+ // "en_PK" => "English (Pakistan)",
+ // "en_PH" => "English (Philippines)",
+ // "en_SG" => "English (Singapore)",
+ // "en_ZA" => "English (South Africa)",
+ // "en_TT" => "English (Trinidad and Tobago)",
+ // "en_UM" => "English (U.S. Minor Outlying Islands)",
+ // "en_VI" => "English (U.S. Virgin Islands)",
+ // "en_GB" => "English (United Kingdom)",
+ // "en_US" => "English (United States)",
+ // "en_ZW" => "English (Zimbabwe)",
+ 'en' => 'English',
+ // "eo" => "Esperanto",
+ // "et_EE" => "Estonian (Estonia)",
+ // "et" => "Estonian",
+ // "ee_GH" => "Ewe (Ghana)",
+ // "ee_TG" => "Ewe (Togo)",
+ // "ee" => "Ewe",
+ // "fo_FO" => "Faroese (Faroe Islands)",
+ // "fo" => "Faroese",
+ // "fil_PH" => "Filipino (Philippines)",
+ // "fil" => "Filipino",
+ // "fi_FI" => "Finnish (Finland)",
+ // "fi" => "Finnish",
+ // "fr_BE" => "French (Belgium)",
+ // "fr_BJ" => "French (Benin)",
+ // "fr_BF" => "French (Burkina Faso)",
+ // "fr_BI" => "French (Burundi)",
+ // "fr_CM" => "French (Cameroon)",
+ // "fr_CA" => "French (Canada)",
+ // "fr_CF" => "French (Central African Republic)",
+ // "fr_TD" => "French (Chad)",
+ // "fr_KM" => "French (Comoros)",
+ // "fr_CG" => "French (Congo - Brazzaville)",
+ // "fr_CD" => "French (Congo - Kinshasa)",
+ // "fr_CI" => "French (Côte d’Ivoire)",
+ // "fr_DJ" => "French (Djibouti)",
+ // "fr_GQ" => "French (Equatorial Guinea)",
+ // "fr_FR" => "French (France)",
+ // "fr_GA" => "French (Gabon)",
+ // "fr_GP" => "French (Guadeloupe)",
+ // "fr_GN" => "French (Guinea)",
+ // "fr_LU" => "French (Luxembourg)",
+ // "fr_MG" => "French (Madagascar)",
+ // "fr_ML" => "French (Mali)",
+ // "fr_MQ" => "French (Martinique)",
+ // "fr_MC" => "French (Monaco)",
+ // "fr_NE" => "French (Niger)",
+ // "fr_RW" => "French (Rwanda)",
+ // "fr_RE" => "French (Réunion)",
+ // "fr_BL" => "French (Saint Barthélemy)",
+ // "fr_MF" => "French (Saint Martin)",
+ // "fr_SN" => "French (Senegal)",
+ // "fr_CH" => "French (Switzerland)",
+ // "fr_TG" => "French (Togo)",
+ 'fr' => 'French',
+ // "ff_SN" => "Fulah (Senegal)",
+ // "ff" => "Fulah",
+ // "gl_ES" => "Galician (Spain)",
+ // "gl" => "Galician",
+ // "lg_UG" => "Ganda (Uganda)",
+ // "lg" => "Ganda",
+ // "ka_GE" => "Georgian (Georgia)",
+ // "ka" => "Georgian",
+ // "de_AT" => "German (Austria)",
+ // "de_BE" => "German (Belgium)",
+ // "de_DE" => "German (Germany)",
+ // "de_LI" => "German (Liechtenstein)",
+ // "de_LU" => "German (Luxembourg)",
+ // "de_CH" => "German (Switzerland)",
+ // "de" => "German",
+ // "el_CY" => "Greek (Cyprus)",
+ // "el_GR" => "Greek (Greece)",
+ // "el" => "Greek",
+ // "gu_IN" => "Gujarati (India)",
+ // "gu" => "Gujarati",
+ // "guz_KE" => "Gusii (Kenya)",
+ // "guz" => "Gusii",
+ // "ha_Latn" => "Hausa (Latin)",
+ // "ha_Latn_GH" => "Hausa (Latin, Ghana)",
+ // "ha_Latn_NE" => "Hausa (Latin, Niger)",
+ // "ha_Latn_NG" => "Hausa (Latin, Nigeria)",
+ // "ha" => "Hausa",
+ // "haw_US" => "Hawaiian (United States)",
+ // "haw" => "Hawaiian",
+ // "he_IL" => "Hebrew (Israel)",
+ // "he" => "Hebrew",
+ // "hi_IN" => "Hindi (India)",
+ // "hi" => "Hindi",
+ // "hu_HU" => "Hungarian (Hungary)",
+ // "hu" => "Hungarian",
+ // "is_IS" => "Icelandic (Iceland)",
+ // "is" => "Icelandic",
+ // "ig_NG" => "Igbo (Nigeria)",
+ // "ig" => "Igbo",
+ // "id_ID" => "Indonesian (Indonesia)",
+ // "id" => "Indonesian",
+ // "ga_IE" => "Irish (Ireland)",
+ // "ga" => "Irish",
+ // "it_IT" => "Italian (Italy)",
+ // "it_CH" => "Italian (Switzerland)",
+ 'it' => 'Italian',
+ // "ja_JP" => "Japanese (Japan)",
+ // "ja" => "Japanese",
+ // "kea_CV" => "Kabuverdianu (Cape Verde)",
+ // "kea" => "Kabuverdianu",
+ // "kab_DZ" => "Kabyle (Algeria)",
+ // "kab" => "Kabyle",
+ // "kl_GL" => "Kalaallisut (Greenland)",
+ // "kl" => "Kalaallisut",
+ // "kln_KE" => "Kalenjin (Kenya)",
+ // "kln" => "Kalenjin",
+ // "kam_KE" => "Kamba (Kenya)",
+ // "kam" => "Kamba",
+ // "kn_IN" => "Kannada (India)",
+ // "kn" => "Kannada",
+ // "kk_Cyrl" => "Kazakh (Cyrillic)",
+ // "kk_Cyrl_KZ" => "Kazakh (Cyrillic, Kazakhstan)",
+ // "kk" => "Kazakh",
+ // "km_KH" => "Khmer (Cambodia)",
+ // "km" => "Khmer",
+ // "ki_KE" => "Kikuyu (Kenya)",
+ // "ki" => "Kikuyu",
+ // "rw_RW" => "Kinyarwanda (Rwanda)",
+ // "rw" => "Kinyarwanda",
+ // "kok_IN" => "Konkani (India)",
+ // "kok" => "Konkani",
+ // "ko_KR" => "Korean (South Korea)",
+ // "ko" => "Korean",
+ // "khq_ML" => "Koyra Chiini (Mali)",
+ // "khq" => "Koyra Chiini",
+ // "ses_ML" => "Koyraboro Senni (Mali)",
+ // "ses" => "Koyraboro Senni",
+ // "lag_TZ" => "Langi (Tanzania)",
+ // "lag" => "Langi",
+ // "lv_LV" => "Latvian (Latvia)",
+ // "lv" => "Latvian",
+ // "lt_LT" => "Lithuanian (Lithuania)",
+ // "lt" => "Lithuanian",
+ // "luo_KE" => "Luo (Kenya)",
+ // "luo" => "Luo",
+ // "luy_KE" => "Luyia (Kenya)",
+ // "luy" => "Luyia",
+ // "mk_MK" => "Macedonian (Macedonia)",
+ // "mk" => "Macedonian",
+ // "jmc_TZ" => "Machame (Tanzania)",
+ // "jmc" => "Machame",
+ // "kde_TZ" => "Makonde (Tanzania)",
+ // "kde" => "Makonde",
+ // "mg_MG" => "Malagasy (Madagascar)",
+ // "mg" => "Malagasy",
+ // "ms_BN" => "Malay (Brunei)",
+ // "ms_MY" => "Malay (Malaysia)",
+ // "ms" => "Malay",
+ // "ml_IN" => "Malayalam (India)",
+ // "ml" => "Malayalam",
+ // "mt_MT" => "Maltese (Malta)",
+ // "mt" => "Maltese",
+ // "gv_GB" => "Manx (United Kingdom)",
+ // "gv" => "Manx",
+ // "mr_IN" => "Marathi (India)",
+ // "mr" => "Marathi",
+ // "mas_KE" => "Masai (Kenya)",
+ // "mas_TZ" => "Masai (Tanzania)",
+ // "mas" => "Masai",
+ // "mer_KE" => "Meru (Kenya)",
+ // "mer" => "Meru",
+ // "mfe_MU" => "Morisyen (Mauritius)",
+ // "mfe" => "Morisyen",
+ // "naq_NA" => "Nama (Namibia)",
+ // "naq" => "Nama",
+ // "ne_IN" => "Nepali (India)",
+ // "ne_NP" => "Nepali (Nepal)",
+ // "ne" => "Nepali",
+ // "nd_ZW" => "North Ndebele (Zimbabwe)",
+ // "nd" => "North Ndebele",
+ // "nb_NO" => "Norwegian Bokmål (Norway)",
+ // "nb" => "Norwegian Bokmål",
+ // "nn_NO" => "Norwegian Nynorsk (Norway)",
+ // "nn" => "Norwegian Nynorsk",
+ // "nyn_UG" => "Nyankole (Uganda)",
+ // "nyn" => "Nyankole",
+ // "or_IN" => "Oriya (India)",
+ // "or" => "Oriya",
+ // "om_ET" => "Oromo (Ethiopia)",
+ // "om_KE" => "Oromo (Kenya)",
+ // "om" => "Oromo",
+ // "ps_AF" => "Pashto (Afghanistan)",
+ // "ps" => "Pashto",
+ // "fa_AF" => "Persian (Afghanistan)",
+ // "fa_IR" => "Persian (Iran)",
+ // "fa" => "Persian",
+ // "pl_PL" => "Polish (Poland)",
+ // "pl" => "Polish",
+ // "pt_BR" => "Portuguese (Brazil)",
+ // "pt_GW" => "Portuguese (Guinea-Bissau)",
+ // "pt_MZ" => "Portuguese (Mozambique)",
+ // "pt_PT" => "Portuguese (Portugal)",
+ // "pt" => "Portuguese",
+ // "pa_Arab" => "Punjabi (Arabic)",
+ // "pa_Arab_PK" => "Punjabi (Arabic, Pakistan)",
+ // "pa_Guru" => "Punjabi (Gurmukhi)",
+ // "pa_Guru_IN" => "Punjabi (Gurmukhi, India)",
+ // "pa" => "Punjabi",
+ // "ro_MD" => "Romanian (Moldova)",
+ // "ro_RO" => "Romanian (Romania)",
+ 'ro' => 'Romanian',
+ // "rm_CH" => "Romansh (Switzerland)",
+ // "rm" => "Romansh",
+ // "rof_TZ" => "Rombo (Tanzania)",
+ // "rof" => "Rombo",
+ // "ru_MD" => "Russian (Moldova)",
+ // "ru_RU" => "Russian (Russia)",
+ // "ru_UA" => "Russian (Ukraine)",
+ // "ru" => "Russian",
+ // "rwk_TZ" => "Rwa (Tanzania)",
+ // "rwk" => "Rwa",
+ // "saq_KE" => "Samburu (Kenya)",
+ // "saq" => "Samburu",
+ // "sg_CF" => "Sango (Central African Republic)",
+ // "sg" => "Sango",
+ // "seh_MZ" => "Sena (Mozambique)",
+ // "seh" => "Sena",
+ // "sr_Cyrl" => "Serbian (Cyrillic)",
+ // "sr_Cyrl_BA" => "Serbian (Cyrillic, Bosnia and Herzegovina)",
+ // "sr_Cyrl_ME" => "Serbian (Cyrillic, Montenegro)",
+ // "sr_Cyrl_RS" => "Serbian (Cyrillic, Serbia)",
+ // "sr_Latn" => "Serbian (Latin)",
+ // "sr_Latn_BA" => "Serbian (Latin, Bosnia and Herzegovina)",
+ // "sr_Latn_ME" => "Serbian (Latin, Montenegro)",
+ // "sr_Latn_RS" => "Serbian (Latin, Serbia)",
+ // "sr" => "Serbian",
+ // "sn_ZW" => "Shona (Zimbabwe)",
+ // "sn" => "Shona",
+ // "ii_CN" => "Sichuan Yi (China)",
+ // "ii" => "Sichuan Yi",
+ // "si_LK" => "Sinhala (Sri Lanka)",
+ // "si" => "Sinhala",
+ // "sk_SK" => "Slovak (Slovakia)",
+ // "sk" => "Slovak",
+ // "sl_SI" => "Slovenian (Slovenia)",
+ // "sl" => "Slovenian",
+ // "xog_UG" => "Soga (Uganda)",
+ // "xog" => "Soga",
+ // "so_DJ" => "Somali (Djibouti)",
+ // "so_ET" => "Somali (Ethiopia)",
+ // "so_KE" => "Somali (Kenya)",
+ // "so_SO" => "Somali (Somalia)",
+ // "so" => "Somali",
+ // "es_AR" => "Spanish (Argentina)",
+ // "es_BO" => "Spanish (Bolivia)",
+ // "es_CL" => "Spanish (Chile)",
+ // "es_CO" => "Spanish (Colombia)",
+ // "es_CR" => "Spanish (Costa Rica)",
+ // "es_DO" => "Spanish (Dominican Republic)",
+ // "es_EC" => "Spanish (Ecuador)",
+ // "es_SV" => "Spanish (El Salvador)",
+ // "es_GQ" => "Spanish (Equatorial Guinea)",
+ // "es_GT" => "Spanish (Guatemala)",
+ // "es_HN" => "Spanish (Honduras)",
+ // "es_419" => "Spanish (Latin America)",
+ // "es_MX" => "Spanish (Mexico)",
+ // "es_NI" => "Spanish (Nicaragua)",
+ // "es_PA" => "Spanish (Panama)",
+ // "es_PY" => "Spanish (Paraguay)",
+ // "es_PE" => "Spanish (Peru)",
+ // "es_PR" => "Spanish (Puerto Rico)",
+ // "es_ES" => "Spanish (Spain)",
+ // "es_US" => "Spanish (United States)",
+ // "es_UY" => "Spanish (Uruguay)",
+ // "es_VE" => "Spanish (Venezuela)",
+ // "es" => "Spanish",
+ // "sw_KE" => "Swahili (Kenya)",
+ // "sw_TZ" => "Swahili (Tanzania)",
+ // "sw" => "Swahili",
+ // "sv_FI" => "Swedish (Finland)",
+ // "sv_SE" => "Swedish (Sweden)",
+ // "sv" => "Swedish",
+ // "gsw_CH" => "Swiss German (Switzerland)",
+ // "gsw" => "Swiss German",
+ // "shi_Latn" => "Tachelhit (Latin)",
+ // "shi_Latn_MA" => "Tachelhit (Latin, Morocco)",
+ // "shi_Tfng" => "Tachelhit (Tifinagh)",
+ // "shi_Tfng_MA" => "Tachelhit (Tifinagh, Morocco)",
+ // "shi" => "Tachelhit",
+ // "dav_KE" => "Taita (Kenya)",
+ // "dav" => "Taita",
+ // "ta_IN" => "Tamil (India)",
+ // "ta_LK" => "Tamil (Sri Lanka)",
+ // "ta" => "Tamil",
+ // "te_IN" => "Telugu (India)",
+ // "te" => "Telugu",
+ // "teo_KE" => "Teso (Kenya)",
+ // "teo_UG" => "Teso (Uganda)",
+ // "teo" => "Teso",
+ // "th_TH" => "Thai (Thailand)",
+ // "th" => "Thai",
+ // "bo_CN" => "Tibetan (China)",
+ // "bo_IN" => "Tibetan (India)",
+ // "bo" => "Tibetan",
+ // "ti_ER" => "Tigrinya (Eritrea)",
+ // "ti_ET" => "Tigrinya (Ethiopia)",
+ // "ti" => "Tigrinya",
+ // "to_TO" => "Tonga (Tonga)",
+ // "to" => "Tonga",
+ // "tr_TR" => "Turkish (Turkey)",
+ // "tr" => "Turkish",
+ // "uk_UA" => "Ukrainian (Ukraine)",
+ // "uk" => "Ukrainian",
+ // "ur_IN" => "Urdu (India)",
+ // "ur_PK" => "Urdu (Pakistan)",
+ // "ur" => "Urdu",
+ // "uz_Arab" => "Uzbek (Arabic)",
+ // "uz_Arab_AF" => "Uzbek (Arabic, Afghanistan)",
+ // "uz_Cyrl" => "Uzbek (Cyrillic)",
+ // "uz_Cyrl_UZ" => "Uzbek (Cyrillic, Uzbekistan)",
+ // "uz_Latn" => "Uzbek (Latin)",
+ // "uz_Latn_UZ" => "Uzbek (Latin, Uzbekistan)",
+ // "uz" => "Uzbek",
+ // "vi_VN" => "Vietnamese (Vietnam)",
+ // "vi" => "Vietnamese",
+ // "vun_TZ" => "Vunjo (Tanzania)",
+ // "vun" => "Vunjo",
+ // "cy_GB" => "Welsh (United Kingdom)",
+ // "cy" => "Welsh",
+ // "yo_NG" => "Yoruba (Nigeria)",
+ // "yo" => "Yoruba",
+ // "zu_ZA" => "Zulu (South Africa)",
+ // "zu" => "Zulu"
+ ],
+
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Upload dir
+ |--------------------------------------------------------------------------
+ |
+ | The dir where to store the images (relative from public).
+ |
+ */
+ 'dir' => ['uploads'],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Filesystem disks (Flysytem)
+ |--------------------------------------------------------------------------
+ |
+ | Define an array of Filesystem disks, which use Flysystem.
+ | You can set extra options, example:
+ |
+ | 'my-disk' => [
+ | 'URL' => url('to/disk'),
+ | 'alias' => 'Local storage',
+ | ]
+ */
+ 'disks' => [
+ // 'uploads',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Routes group config
+ |--------------------------------------------------------------------------
+ |
+ | The default group settings for the elFinder routes.
+ |
+ */
+
+ 'route' => [
+ 'prefix' => config('backpack.base.route_prefix', 'admin').'/elfinder',
+ 'middleware' => ['web', config('backpack.base.middleware_key', 'admin')], //Set to null to disable middleware filter
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Access filter
+ |--------------------------------------------------------------------------
+ |
+ | Filter callback to check the files
+ |
+ */
+
+ 'access' => 'Barryvdh\Elfinder\Elfinder::checkAccess',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Roots
+ |--------------------------------------------------------------------------
+ |
+ | By default, the roots file is LocalFileSystem, with the above public dir.
+ | If you want custom options, you can set your own roots below.
+ |
+ */
+
+ 'roots' => null,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Options
+ |--------------------------------------------------------------------------
+ |
+ | These options are merged, together with 'roots' and passed to the Connector.
+ | See https://github.com/Studio-42/elFinder/wiki/Connector-configuration-options-2.1
+ |
+ */
+
+ 'options' => [],
+
+];
--- /dev/null
+/*!
+ * elFinder - file manager for web
+ * Version 2.1.46 (2019-01-14)
+ * http://elfinder.org
+ *
+ * Copyright 2009-2019, Studio 42
+ * Licensed under a 3-clauses BSD license
+ */
+
+/* File: /css/commands.css */
+/******************************************************************/
+/* COMMANDS STYLES */
+/******************************************************************/
+
+/********************** COMMAND "RESIZE" ****************************/
+.elfinder-resize-container {
+ margin-top: .3em;
+}
+
+.elfinder-resize-type {
+ float: left;
+ margin-bottom: .4em;
+}
+
+.elfinder-resize-control {
+ float: left;
+}
+
+.elfinder-resize-control input[type=number] {
+ border: 1px solid #aaa;
+ text-align: right;
+ width: 4.5em;
+}
+
+.elfinder-mobile .elfinder-resize-control input[type=number] {
+ width: 3.5em;
+}
+
+.elfinder-resize-control input.elfinder-resize-bg {
+ text-align: center;
+ width: 5em;
+ direction: ltr;
+}
+
+.elfinder-dialog-resize .elfinder-resize-control-panel {
+ margin-top: 10px;
+}
+
+.elfinder-dialog-resize .elfinder-resize-imgrotate,
+.elfinder-dialog-resize .elfinder-resize-pallet {
+ cursor: pointer;
+}
+
+.elfinder-dialog-resize .elfinder-resize-picking {
+ cursor: crosshair;
+}
+
+.elfinder-dialog-resize .elfinder-resize-grid8 + button {
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+.elfinder-resize-preview {
+ width: 400px;
+ height: 400px;
+ padding: 10px;
+ background: #fff;
+ border: 1px solid #aaa;
+ float: right;
+ position: relative;
+ overflow: hidden;
+ text-align: left;
+ direction: ltr;
+}
+
+.elfinder-resize-handle {
+ position: relative;
+}
+
+.elfinder-resize-handle-hline,
+.elfinder-resize-handle-vline {
+ position: absolute;
+ background-image: url("../img/crop.gif");
+}
+
+.elfinder-resize-handle-hline {
+ width: 100%;
+ height: 1px !important;
+ background-repeat: repeat-x;
+}
+
+.elfinder-resize-handle-vline {
+ width: 1px !important;
+ height: 100%;
+ background-repeat: repeat-y;
+}
+
+.elfinder-resize-handle-hline-top {
+ top: 0;
+ left: 0;
+}
+
+.elfinder-resize-handle-hline-bottom {
+ bottom: 0;
+ left: 0;
+}
+
+.elfinder-resize-handle-vline-left {
+ top: 0;
+ left: 0;
+}
+
+.elfinder-resize-handle-vline-right {
+ top: 0;
+ right: 0;
+}
+
+.elfinder-resize-handle-point {
+ position: absolute;
+ width: 8px;
+ height: 8px;
+ border: 1px solid #777;
+ background: transparent;
+}
+
+.elfinder-resize-handle-point-n {
+ top: 0;
+ left: 50%;
+ margin-top: -5px;
+ margin-left: -5px;
+}
+
+.elfinder-resize-handle-point-ne {
+ top: 0;
+ right: 0;
+ margin-top: -5px;
+ margin-right: -5px;
+}
+
+.elfinder-resize-handle-point-e {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ margin-right: -5px;
+}
+
+.elfinder-resize-handle-point-se {
+ bottom: 0;
+ right: 0;
+ margin-bottom: -5px;
+ margin-right: -5px;
+}
+
+.elfinder-resize-handle-point-s {
+ bottom: 0;
+ left: 50%;
+ margin-bottom: -5px;
+ margin-left: -5px;
+}
+
+.elfinder-resize-handle-point-sw {
+ bottom: 0;
+ left: 0;
+ margin-bottom: -5px;
+ margin-left: -5px;
+}
+
+.elfinder-resize-handle-point-w {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ margin-left: -5px;
+}
+
+.elfinder-resize-handle-point-nw {
+ top: 0;
+ left: 0;
+ margin-top: -5px;
+ margin-left: -5px;
+}
+
+.elfinder-dialog.elfinder-dialog-resize .ui-resizable-e {
+ width: 10px;
+ height: 100%;
+}
+
+.elfinder-dialog.elfinder-dialog-resize .ui-resizable-s {
+ width: 100%;
+ height: 10px;
+}
+
+.elfinder-resize-loading {
+ position: absolute;
+ width: 200px;
+ height: 30px;
+ top: 50%;
+ margin-top: -25px;
+ left: 50%;
+ margin-left: -100px;
+ text-align: center;
+ background: url(../img/progress.gif) center bottom repeat-x;
+}
+
+.elfinder-resize-row {
+ margin-bottom: 9px;
+ position: relative;
+}
+
+.elfinder-resize-label {
+ float: left;
+ width: 80px;
+ padding-top: 3px;
+}
+
+.elfinder-resize-checkbox-label {
+ border: 1px solid transparent;
+}
+
+.elfinder-dialog-resize .elfinder-resize-whctrls {
+ margin: -20px 5px 0 5px;
+}
+
+.elfinder-ltr .elfinder-dialog-resize .elfinder-resize-whctrls {
+ float: right;
+}
+
+.elfinder-rtl .elfinder-dialog-resize .elfinder-resize-whctrls {
+ float: left;
+}
+
+.elfinder-dialog-resize .ui-resizable-e,
+.elfinder-dialog-resize .ui-resizable-w {
+ height: 100%;
+ width: 10px;
+}
+
+.elfinder-dialog-resize .ui-resizable-s,
+.elfinder-dialog-resize .ui-resizable-n {
+ width: 100%;
+ height: 10px;
+}
+
+.elfinder-dialog-resize .ui-resizable-e {
+ margin-right: -7px;
+}
+
+.elfinder-dialog-resize .ui-resizable-w {
+ margin-left: -7px;
+}
+
+.elfinder-dialog-resize .ui-resizable-s {
+ margin-bottom: -7px;
+}
+
+.elfinder-dialog-resize .ui-resizable-n {
+ margin-top: -7px;
+}
+
+.elfinder-dialog-resize .ui-resizable-se,
+.elfinder-dialog-resize .ui-resizable-sw,
+.elfinder-dialog-resize .ui-resizable-ne,
+.elfinder-dialog-resize .ui-resizable-nw {
+ width: 10px;
+ height: 10px;
+}
+
+.elfinder-dialog-resize .ui-resizable-se {
+ background: transparent;
+ bottom: 0;
+ right: 0;
+ margin-right: -7px;
+ margin-bottom: -7px;
+}
+
+.elfinder-dialog-resize .ui-resizable-sw {
+ margin-left: -7px;
+ margin-bottom: -7px;
+}
+
+.elfinder-dialog-resize .ui-resizable-ne {
+ margin-right: -7px;
+ margin-top: -7px;
+}
+
+.elfinder-dialog-resize .ui-resizable-nw {
+ margin-left: -7px;
+ margin-top: -7px;
+}
+
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-s,
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-n {
+ height: 20px;
+}
+
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-e,
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-w {
+ width: 20px;
+}
+
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-se,
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-sw,
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-ne,
+.elfinder-touch .elfinder-dialog-resize .ui-resizable-nw {
+ width: 30px;
+ height: 30px;
+}
+
+.elfinder-touch .elfinder-dialog-resize .elfinder-resize-preview .ui-resizable-se {
+ width: 30px;
+ height: 30px;
+ margin: 0;
+}
+
+.elfinder-dialog-resize .ui-icon-grip-solid-vertical {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ margin-top: -8px;
+ margin-right: -11px;
+}
+
+.elfinder-dialog-resize .ui-icon-grip-solid-horizontal {
+ position: absolute;
+ left: 50%;
+ bottom: 0;
+ margin-left: -8px;
+ margin-bottom: -11px;;
+}
+
+.elfinder-dialog-resize .elfinder-resize-row .ui-buttonset {
+ float: right;
+}
+
+.elfinder-dialog-resize .elfinder-resize-degree input,
+.elfinder-dialog-resize input.elfinder-resize-quality {
+ width: 3.5em;
+}
+
+.elfinder-mobile .elfinder-dialog-resize .elfinder-resize-degree input,
+.elfinder-mobile .elfinder-dialog-resize input.elfinder-resize-quality {
+ width: 2.5em;
+}
+
+.elfinder-dialog-resize .elfinder-resize-degree button.ui-button {
+ padding: 6px 8px;
+}
+
+.elfinder-dialog-resize button.ui-button span {
+ padding: 0;
+}
+
+.elfinder-dialog-resize .elfinder-resize-jpgsize {
+ font-size: 90%;
+}
+
+.ui-widget-content .elfinder-resize-container .elfinder-resize-rotate-slider {
+ width: 195px;
+ margin: 10px 7px;
+ background-color: #fafafa;
+}
+
+.elfinder-dialog-resize .elfinder-resize-type span.ui-checkboxradio-icon {
+ display: none;
+}
+
+.elfinder-resize-preset-container {
+ box-sizing: border-box;
+ border-radius: 5px;
+}
+
+/********************** COMMAND "EDIT" ****************************/
+/* edit text file textarea */
+.elfinder-file-edit {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 2px;
+ border: 1px solid #ccc;
+ box-sizing: border-box;
+ resize: none;
+}
+
+.elfinder-touch .elfinder-file-edit {
+ font-size: 16px;
+}
+
+/* edit area */
+.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor {
+ background-color: #fff;
+}
+
+.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor {
+ width: 100%;
+ height: 300px;
+ max-height: 100%;
+ text-align: center;
+}
+
+.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor * {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ user-select: none;
+}
+
+.elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-main {
+ top: 0;
+}
+
+.elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-header {
+ display: none;
+}
+
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-crop .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-flip .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-rotate .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-draw .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-shape .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-icon .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-text .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-mask .tui-image-editor-wrap,
+.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-filter .tui-image-editor-wrap {
+ height: calc(100% - 150px);
+}
+
+/* bottom margen for softkeyboard on fullscreen mode */
+.elfinder-touch.elfinder-fullscreen-native textarea.elfinder-file-edit {
+ padding-bottom: 20em;
+ margin-bottom: -20em;
+}
+
+.elfinder-dialog-edit .ui-dialog-buttonpane .elfinder-dialog-confirm-encoding {
+ font-size: 12px;
+}
+
+.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras {
+ margin: 0 1em 0 .2em;
+ float: left;
+}
+
+.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras-quality {
+ padding-top: 6px;
+}
+
+.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras select {
+ font-size: 12px;
+ margin-top: 8px;
+}
+
+.elfinder-dialog-edit .ui-dialog-buttonpane .ui-icon {
+ cursor: pointer;
+}
+
+.elfinder-edit-spinner {
+ position: absolute;
+ top: 50%;
+ text-align: center;
+ width: 100%;
+ font-size: 16pt;
+}
+
+.elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner,
+.elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner-text {
+ float: none;
+}
+
+.elfinder-dialog-edit .elfinder-toast > div {
+ width: 280px;
+}
+
+.elfinder-edit-onlineconvert-button {
+ display: inline-block;
+ width: 180px;
+ min-height: 30px;
+ vertical-align: top;
+}
+.elfinder-edit-onlineconvert-button button,
+.elfinder-edit-onlineconvert-bottom-btn button {
+ cursor: pointer;
+}
+.elfinder-edit-onlineconvert-bottom-btn button.elfinder-button-ios-multiline {
+ -webkit-appearance: none;
+ border-radius: 16px;
+ color: #000;
+ text-align: center;
+ padding: 8px;
+ background-color: #eee;
+ background-image: -webkit-linear-gradient(top, hsl(0,0%,98%) 0%,hsl(0,0%,77%) 100%);
+ background-image: linear-gradient(to bottom, hsl(0,0%,98%) 0%,hsl(0,0%,77%) 100%);
+}
+.elfinder-edit-onlineconvert-button .elfinder-button-icon {
+ margin: 0 10px;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.elfinder-edit-onlineconvert-bottom-btn {
+ text-align: center;
+ margin: 10px 0 0;
+}
+
+.elfinder-edit-onlineconvert-link {
+ margin-top: 1em;
+ text-align: center;
+}
+.elfinder-edit-onlineconvert-link .elfinder-button-icon {
+ background-image: url("../img/editor-icons.png");
+ background-repeat: no-repeat;
+ background-position: 0 -144px;
+ margin-bottom: -3px;
+}
+.elfinder-edit-onlineconvert-link a {
+ text-decoration: none;
+}
+
+/********************** COMMAND "SORT" ****************************/
+/* for list table header sort triangle icon */
+div.elfinder-cwd-wrapper-list tr.ui-state-default td {
+ position: relative;
+}
+
+div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
+ position: absolute;
+ top: 4px;
+ left: 0;
+ right: 0;
+ margin: auto 0px auto auto;
+}
+
+.elfinder-touch div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
+ top: 7px;
+}
+
+.elfinder-rtl div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
+ margin: auto auto auto 0px;
+}
+
+/********************** COMMAND "HELP" ****************************/
+/* help dialog */
+.elfinder-help {
+ margin-bottom: .5em;
+ -webkit-overflow-scrolling: touch;
+}
+
+/* fix tabs */
+.elfinder-help .ui-tabs-panel {
+ padding: .5em;
+ overflow: auto;
+ padding: 10px;
+}
+
+.elfinder-dialog .ui-tabs .ui-tabs-nav li {
+ overflow: hidden;
+}
+
+.elfinder-dialog .ui-tabs .ui-tabs-nav li a {
+ padding: .2em .8em;
+ display: inline-block;
+}
+
+.elfinder-touch .elfinder-dialog .ui-tabs .ui-tabs-nav li a {
+ padding: .5em .5em;
+}
+
+.elfinder-dialog .ui-tabs-active a {
+ background: inherit;
+}
+
+.elfinder-help-shortcuts {
+ height: auto;
+ padding: 10px;
+ margin: 0;
+ box-sizing: border-box;
+}
+
+.elfinder-help-shortcut {
+ white-space: nowrap;
+ clear: both;
+}
+
+.elfinder-help-shortcut-pattern {
+ float: left;
+ width: 160px;
+}
+
+.elfinder-help-logo {
+ width: 100px;
+ height: 96px;
+ float: left;
+ margin-right: 1em;
+ background: url('../img/logo.png') center center no-repeat;
+}
+
+.elfinder-help h3 {
+ font-size: 1.5em;
+ margin: .2em 0 .3em 0;
+}
+
+.elfinder-help-separator {
+ clear: both;
+ padding: .5em;
+}
+
+.elfinder-help-link {
+ display: inline-block;
+ margin-right: 12px;
+ padding: 2px 0;
+ white-space: nowrap;
+}
+
+.elfinder-rtl .elfinder-help-link {
+ margin-right: 0;
+ margin-left: 12px;
+}
+
+.elfinder-help .ui-priority-secondary {
+ font-size: .9em;
+}
+
+.elfinder-help .ui-priority-primary {
+ margin-bottom: 7px;
+}
+
+.elfinder-help-team {
+ clear: both;
+ text-align: right;
+ border-bottom: 1px solid #ccc;
+ margin: .5em 0;
+ font-size: .9em;
+}
+
+.elfinder-help-team div {
+ float: left;
+}
+
+.elfinder-help-license {
+ font-size: .9em;
+}
+
+.elfinder-help-disabled {
+ font-weight: bold;
+ text-align: center;
+ margin: 90px 0;
+}
+
+.elfinder-help .elfinder-dont-panic {
+ display: block;
+ border: 1px solid transparent;
+ width: 200px;
+ height: 200px;
+ margin: 30px auto;
+ text-decoration: none;
+ text-align: center;
+ position: relative;
+ background: #d90004;
+ -moz-box-shadow: 5px 5px 9px #111;
+ -webkit-box-shadow: 5px 5px 9px #111;
+ box-shadow: 5px 5px 9px #111;
+ background: -moz-radial-gradient(80px 80px, circle farthest-corner, #d90004 35%, #960004 100%);
+ background: -webkit-gradient(radial, 80 80, 60, 80 80, 120, from(#d90004), to(#960004));
+ -moz-border-radius: 100px;
+ -webkit-border-radius: 100px;
+ border-radius: 100px;
+ outline: none;
+}
+
+.elfinder-help .elfinder-dont-panic span {
+ font-size: 3em;
+ font-weight: bold;
+ text-align: center;
+ color: #fff;
+ position: absolute;
+ left: 0;
+ top: 45px;
+}
+
+ul.elfinder-help-integrations ul {
+ margin-bottom: 1em;
+ padding: 0;
+ margin: 0 1em 1em;
+}
+
+ul.elfinder-help-integrations a {
+ text-decoration: none;
+}
+
+ul.elfinder-help-integrations a:hover {
+ text-decoration: underline;
+}
+
+.elfinder-help-debug {
+ height: 100%;
+ padding: 0;
+ margin: 0;
+ overflow: none;
+ border: none;
+}
+
+.elfinder-help-debug .ui-tabs-panel {
+ padding: 0;
+ margin: 0;
+ overflow: auto;
+}
+
+.elfinder-help-debug fieldset {
+ margin-bottom: 10px;
+ border-color: #778899;
+ border-radius: 10px;
+}
+
+.elfinder-help-debug legend {
+ font-size: 1.2em;
+ font-weight: bold;
+ color: #2e8b57;
+}
+
+.elfinder-help-debug dl {
+ margin: 0;
+}
+
+.elfinder-help-debug dt {
+ color: #778899;
+}
+
+.elfinder-help-debug dt:before {
+ content: "[";
+}
+
+.elfinder-help-debug dt:after {
+ content: "]";
+}
+
+.elfinder-help-debug dd {
+ margin-left: 1em;
+}
+
+.elfinder-help-debug dd span {
+ /*font-size: 1.2em;*/
+}
+
+/********************** COMMAND "PREFERENCE" ****************************/
+.elfinder-dialog .elfinder-preference .ui-tabs-nav {
+ margin-bottom: 1px;
+ height: auto;
+}
+
+/* fix tabs */
+.elfinder-preference .ui-tabs-panel {
+ padding: 10px 10px 0;
+ overflow: auto;
+ box-sizing: border-box;
+ -webkit-overflow-scrolling: touch;
+}
+
+.elfinder-preference a.ui-state-hover,
+.elfinder-preference label.ui-state-hover {
+ border: none;
+}
+
+.elfinder-preference dl {
+ width: 100%;
+ display: inline-block;
+ margin: .5em 0;
+}
+
+.elfinder-preference dt {
+ display: block;
+ width: 200px;
+ clear: left;
+ float: left;
+ max-width: 50%;
+}
+
+.elfinder-rtl .elfinder-preference dt {
+ clear: right;
+ float: right;
+}
+
+.elfinder-preference dd {
+ margin-bottom: 1em;
+}
+
+.elfinder-preference dt label {
+ cursor: pointer;
+}
+
+.elfinder-preference dd label,
+.elfinder-preference dd input[type=checkbox] {
+ white-space: nowrap;
+ display: inline-block;
+ cursor: pointer;
+}
+
+.elfinder-preference dt.elfinder-preference-checkboxes {
+ width: 100%;
+ max-width: none;
+}
+
+.elfinder-preference dd.elfinder-preference-checkboxes {
+ padding-top: 3ex;
+}
+
+.elfinder-preference select {
+ max-width: 100%;
+}
+
+.elfinder-preference dd.elfinder-preference-iconSize .ui-slider {
+ width: 50%;
+ max-width: 100px;
+ display: inline-block;
+ margin: 0 10px;
+}
+
+.elfinder-preference button {
+ margin: 0 16px;
+}
+
+.elfinder-preference button + button {
+ margin: 0 -10px;
+}
+
+.elfinder-preference .elfinder-preference-taball .elfinder-reference-hide-taball {
+ display: none;
+}
+
+.elfinder-preference-theme fieldset {
+ margin-bottom: 10px;
+}
+
+.elfinder-preference-theme legend a {
+ font-size: 1.8em;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.elfinder-preference-theme dt {
+ width: 20%;
+ word-break: break-all;
+}
+
+.elfinder-preference-theme dt:after {
+ content: " :";
+}
+
+.elfinder-preference-theme dd {
+ margin-inline-start: 20%;
+}
+
+.elfinder-preference img.elfinder-preference-theme-image {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 90%;
+ max-height: 200px;
+ cursor: pointer;
+}
+
+.elfinder-preference-theme-btn {
+ text-align: center;
+}
+
+.elfinder-preference-theme button.elfinder-preference-theme-default {
+ display: inline;
+ margin: 0 10px;
+ font-size: 8pt;
+}
+
+/********************** COMMAND "INFO" ****************************/
+.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon:before {
+ right: 33px;
+ left: auto;
+}
+
+.elfinder-info-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
+ content: none;
+}
+
+/********************** COMMAND "UPLOAD" ****************************/
+.elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
+ position: absolute;
+ bottom: 2px;
+ width: 16px;
+ height: 16px;
+ padding: 10px;
+ border: none;
+ overflow: hidden;
+ cursor: pointer;
+}
+
+.elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
+ left: 2px;
+}
+
+.elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
+ right: 2px;
+}
+
+/********************** COMMAND "RM" ****************************/
+.elfinder-ltr .elfinder-rm-title .elfinder-cwd-icon:before {
+ left: 38px;
+}
+
+.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon:before {
+ right: 86px;
+ left: auto;
+}
+
+.elfinder-rm-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
+ content: none;
+}
+
+/********************** COMMAND "RENAME" ****************************/
+.elfinder-rename-batch div {
+ margin: 5px 8px;
+}
+
+.elfinder-rename-batch .elfinder-rename-batch-name input {
+ width: 100%;
+ font-size: 1.6em;
+}
+
+.elfinder-rename-batch-type {
+ text-align: center;
+}
+
+.elfinder-rename-batch .elfinder-rename-batch-type label {
+ margin: 2px;
+ font-size: .9em;
+}
+
+.elfinder-rename-batch-preview {
+ padding: 0 8px;
+ font-size: 1.1em;
+ min-height: 4ex;
+}
+
+
+/* File: /css/common.css */
+/*********************************************/
+/* COMMON ELFINDER STUFFS */
+/*********************************************/
+
+/* for old jQuery UI */
+.ui-front {
+ z-index: 100;
+}
+
+/* common container */
+.elfinder {
+ padding: 0;
+ position: relative;
+ display: block;
+ visibility: visible;
+ font-size: 18px;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+}
+
+/* prevent auto zoom on iOS */
+.elfinder-ios input,
+.elfinder-ios select,
+.elfinder-ios textarea {
+ font-size: 16px !important;
+}
+
+/* full screen mode */
+.elfinder.elfinder-fullscreen > .ui-resizable-handle {
+ display: none;
+}
+
+.elfinder-font-mono {
+ line-height: 2ex;
+}
+
+/* in lazy execution status */
+.elfinder.elfinder-processing * {
+ cursor: progress !important
+}
+
+.elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ height: 3px;
+ content: '';
+ left: 0;
+ background-image: url(../img/progress.gif);
+ opacity: .6;
+ pointer-events: none;
+}
+
+/* for disable select of Touch devices */
+.elfinder *:not(input):not(textarea):not(select):not([contenteditable=true]),
+.elfinder-contextmenu *:not(input):not(textarea):not(select):not([contenteditable=true]) {
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ /*-webkit-touch-callout:none;*/
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ user-select: none;
+}
+
+.elfinder .overflow-scrolling-touch {
+ -webkit-overflow-scrolling: touch;
+}
+
+/* right to left enviroment */
+.elfinder-rtl {
+ text-align: right;
+ direction: rtl;
+}
+
+/* nav and cwd container */
+.elfinder-workzone {
+ padding: 0;
+ position: relative;
+ overflow: hidden;
+}
+
+/* dir/file permissions and symlink markers */
+.elfinder-lock,
+.elfinder-perms,
+.elfinder-symlink {
+ position: absolute;
+ width: 16px;
+ height: 16px;
+ background-image: url(../img/toolbar.png);
+ background-repeat: no-repeat;
+ background-position: 0 -528px;
+}
+
+.elfinder-symlink {
+}
+
+/* noaccess */
+.elfinder-na .elfinder-perms {
+ background-position: 0 -96px;
+}
+
+/* read only */
+.elfinder-ro .elfinder-perms {
+ background-position: 0 -64px;
+}
+
+/* write only */
+.elfinder-wo .elfinder-perms {
+ background-position: 0 -80px;
+}
+
+/* volume type group */
+.elfinder-group .elfinder-perms {
+ background-position: 0 0px;
+}
+
+/* locked */
+.elfinder-lock {
+ background-position: 0 -656px;
+}
+
+/* drag helper */
+.elfinder-drag-helper {
+ top: 0px;
+ left: 0px;
+ width: 70px;
+ height: 60px;
+ padding: 0 0 0 25px;
+ z-index: 100000;
+ will-change: left, top;
+}
+
+.elfinder-drag-helper.html5-native {
+ position: absolute;
+ top: -1000px;
+ left: -1000px;
+}
+
+/* drag helper status icon (default no-drop) */
+.elfinder-drag-helper-icon-status {
+ position: absolute;
+ width: 16px;
+ height: 16px;
+ left: 42px;
+ top: 60px;
+ background: url('../img/toolbar.png') 0 -96px no-repeat;
+ display: block;
+}
+
+/* show "up-arrow" icon for move item */
+.elfinder-drag-helper-move .elfinder-drag-helper-icon-status {
+ background-position: 0 -720px;
+}
+
+/* show "plus" icon when ctrl/shift pressed */
+.elfinder-drag-helper-plus .elfinder-drag-helper-icon-status {
+ background-position: 0 -544px;
+}
+
+/* files num in drag helper */
+.elfinder-drag-num {
+ display: inline-box;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: auto;
+ height: 14px;
+ text-align: center;
+ padding: 1px 3px 1px 3px;
+
+ font-weight: bold;
+ color: #fff;
+ background-color: red;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+}
+
+/* icon in drag helper */
+.elfinder-drag-helper .elfinder-cwd-icon {
+ margin: 0 0 0 -24px;
+ float: left;
+}
+
+/* transparent overlay */
+.elfinder-overlay {
+ position: absolute;
+ opacity: .2;
+ filter: Alpha(Opacity=20);
+}
+
+/* panels under/below cwd (for search field etc) */
+.elfinder .elfinder-panel {
+ position: relative;
+ background-image: none;
+ padding: 7px 12px;
+}
+
+/* for html5 drag and drop */
+[draggable=true] {
+ -khtml-user-drag: element;
+}
+
+/* for place holder to content editable elements */
+.elfinder [contentEditable=true]:empty:not(:focus):before {
+ content: attr(data-ph);
+}
+
+/* bottom tray */
+.elfinder div.elfinder-bottomtray {
+ position: fixed;
+ bottom: 0;
+ max-width: 100%;
+ opacity: .8;
+}
+
+.elfinder.elfinder-ltr div.elfinder-bottomtray {
+ left: 0;
+}
+
+.elfinder.elfinder-rtl div.elfinder-bottomtray {
+ right: 0;
+}
+
+/* tooltip */
+.elfinder-ui-tooltip,
+.elfinder .elfinder-ui-tooltip {
+ font-size: 14px;
+ padding: 2px 4px;
+}
+
+/* File: /css/contextmenu.css */
+/* menu and submenu */
+.elfinder .elfinder-contextmenu,
+.elfinder .elfinder-contextmenu-sub {
+ position: absolute;
+ border: 1px solid #aaa;
+ background: #fff;
+ color: #555;
+ padding: 4px 0;
+ top: 0;
+ left: 0;
+}
+
+/* submenu */
+.elfinder .elfinder-contextmenu-sub {
+ top: 5px;
+}
+
+/* submenu in rtl/ltr enviroment */
+.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub {
+ margin-left: -5px;
+}
+
+.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub {
+ margin-right: -5px;
+}
+
+/* menu item */
+.elfinder .elfinder-contextmenu-header {
+ margin-top: -4px;
+ padding: 0 .5em .2ex;
+ border: none;
+ text-align: center;
+}
+
+.elfinder .elfinder-contextmenu-header span {
+ font-weight: normal;
+ font-size: 0.8em;
+ font-weight: bolder;
+}
+
+.elfinder .elfinder-contextmenu-item {
+ position: relative;
+ display: block;
+ padding: 4px 30px;
+ text-decoration: none;
+ white-space: nowrap;
+ cursor: default;
+}
+
+.elfinder .elfinder-contextmenu-item.ui-state-active {
+ border: none;
+}
+
+.elfinder .elfinder-contextmenu-item .ui-icon {
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ left: auto;
+ right: auto;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon {
+ left: 2px;
+}
+
+.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon {
+ right: 2px;
+}
+
+.elfinder-touch .elfinder-contextmenu-item {
+ padding: 12px 38px;
+}
+
+/* root icon of each volume */
+.elfinder-navbar-root-local.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_local.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-trash.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_trash.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-ftp.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_ftp.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-sql.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_sql.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-dropbox.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_dropbox.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-googledrive.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_googledrive.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-onedrive.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_onedrive.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-box.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_box.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-zip.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_zip.svg");
+ background-size: contain;
+}
+
+.elfinder-navbar-root-network.elfinder-contextmenu-icon {
+ background-image: url("../img/volume_icon_network.svg");
+ background-size: contain;
+}
+
+/* text in item */
+.elfinder .elfinder-contextmenu .elfinder-contextmenu-item span {
+ display: block;
+}
+
+/* submenu item in rtl/ltr enviroment */
+.elfinder .elfinder-contextmenu-sub .elfinder-contextmenu-item {
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item {
+ text-align: left;
+}
+
+.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item {
+ text-align: right;
+}
+
+.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
+ padding-left: 28px;
+}
+
+.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
+ padding-right: 28px;
+}
+
+.elfinder-touch .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
+ padding-left: 36px;
+}
+
+.elfinder-touch .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
+ padding-right: 36px;
+}
+
+/* command/submenu icon */
+.elfinder .elfinder-contextmenu-extra-icon,
+.elfinder .elfinder-contextmenu-arrow,
+.elfinder .elfinder-contextmenu-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+ overflow: hidden;
+}
+
+/* command icon in rtl/ltr enviroment */
+.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon {
+ left: 8px;
+}
+
+.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon {
+ right: 8px;
+}
+
+.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon {
+ right: 8px;
+}
+
+.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon {
+ left: 8px;
+}
+
+/* arrow icon */
+.elfinder .elfinder-contextmenu-arrow {
+ width: 16px;
+ height: 16px;
+ background: url('../img/arrows-normal.png') 5px 4px no-repeat;
+}
+
+/* arrow icon in rtl/ltr enviroment */
+.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow {
+ right: 5px;
+}
+
+.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow {
+ left: 5px;
+ background-position: 0 -10px;
+}
+
+/* command extra icon's <a>, <span> tag */
+.elfinder .elfinder-contextmenu-extra-icon a,
+.elfinder .elfinder-contextmenu-extra-icon span {
+ display: inline-block;
+ width: 100%;
+ height: 100%;
+ padding: 20px;
+ margin: 0;
+ color: transparent !important;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+/* disable ui border/bg image on hover */
+.elfinder .elfinder-contextmenu .ui-state-hover {
+ border: 0 solid;
+ background-image: none;
+}
+
+/* separator */
+.elfinder .elfinder-contextmenu-separator {
+ height: 0px;
+ border-top: 1px solid #ccc;
+ margin: 0 1px;
+}
+
+/* for CSS style priority to ui-state-disabled - "background-image: none" */
+.elfinder .elfinder-contextmenu-item .elfinder-button-icon.ui-state-disabled {
+ background-image: url('../img/toolbar.png');
+}
+
+/* File: /css/cwd.css */
+/******************************************************************/
+/* CURRENT DIRECTORY STYLES */
+/******************************************************************/
+/* cwd container to avoid selectable on scrollbar */
+.elfinder-cwd-wrapper {
+ overflow: auto;
+ position: relative;
+ padding: 2px;
+ margin: 0;
+}
+
+.elfinder-cwd-wrapper-list {
+ padding: 0;
+}
+
+/* container */
+.elfinder-cwd {
+ position: absolute;
+ top: 0;
+ cursor: default;
+ padding: 0;
+ margin: 0;
+ -ms-touch-action: auto;
+ touch-action: auto;
+ min-width: 100%;
+}
+
+.elfinder-ltr .elfinder-cwd {
+ left: 0;
+}
+
+.elfinder-rtl .elfinder-cwd {
+ right: 0;
+}
+
+.elfinder-cwd.elfinder-table-header-sticky {
+ position: -webkit-sticky;
+ position: -ms-sticky;
+ position: sticky;
+ top: 0;
+ left: auto;
+ right: auto;
+ width: -webkit-max-content;
+ width: -moz-max-content;
+ width: -ms-max-content;
+ width: max-content;
+ height: 0;
+ overflow: visible;
+}
+
+.elfinder-cwd.elfinder-table-header-sticky table {
+ border-top: 2px solid;
+ padding-top: 0;
+}
+
+.elfinder-cwd.elfinder-table-header-sticky td {
+ display: inline-block;
+}
+
+.elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table {
+ border-top: 2px solid transparent;
+}
+
+/* fixed table header container */
+.elfinder-cwd-fixheader .elfinder-cwd {
+ position: relative;
+}
+
+/* container active on dropenter */
+.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active {
+ outline: 2px solid #8cafed;
+ outline-offset: -2px;
+}
+
+.elfinder-cwd-wrapper-empty .elfinder-cwd:after {
+ display: block;
+ position: absolute;
+ height: auto;
+ width: 90%;
+ width: calc(100% - 20px);
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -ms-transform: translateY(-50%) translateX(-50%);
+ -webkit-transform: translateY(-50%) translateX(-50%);
+ transform: translateY(-50%) translateX(-50%);
+ line-height: 1.5em;
+ text-align: center;
+ white-space: pre-wrap;
+ opacity: 0.6;
+ filter: Alpha(Opacity=60);
+ font-weight: bold;
+}
+
+.elfinder-cwd-file .elfinder-cwd-select {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ background-color: transparent;
+ opacity: .4;
+ filter: Alpha(Opacity=40);
+}
+
+.elfinder-mobile .elfinder-cwd-file .elfinder-cwd-select {
+ width: 30px;
+ height: 30px;
+}
+
+.elfinder-cwd-file.ui-selected .elfinder-cwd-select {
+ opacity: .8;
+ filter: Alpha(Opacity=80);
+}
+
+.elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select {
+ left: auto;
+ right: 0px;
+}
+
+.elfinder .elfinder-cwd-selectall {
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ top: 0px;
+ opacity: .8;
+ filter: Alpha(Opacity=80);
+}
+
+.elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall {
+ display: none;
+}
+
+/************************** ICONS VIEW ********************************/
+
+.elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall {
+ text-align: right;
+ right: 18px;
+ left: auto;
+}
+
+.elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall {
+ text-align: left;
+ right: auto;
+ left: 18px;
+}
+
+.elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall {
+ right: 0px;
+}
+
+.elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall {
+ left: 0px;
+}
+
+.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover {
+ background-color: transparent;
+}
+
+/* file container */
+.elfinder-cwd-view-icons .elfinder-cwd-file {
+ width: 120px;
+ height: 90px;
+ padding-bottom: 2px;
+ cursor: default;
+ border: none;
+ position: relative;
+}
+
+.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active {
+ border: none;
+}
+
+/* ltr/rtl enviroment */
+.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file {
+ float: left;
+ margin: 0 3px 2px 0;
+}
+
+.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file {
+ float: right;
+ margin: 0 0 5px 3px;
+}
+
+/* remove ui hover class border */
+.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover {
+ border: 0 solid;
+}
+
+/* icon wrapper to create selected highlight around icon */
+.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
+ width: 52px;
+ height: 52px;
+ margin: 1px auto 1px auto;
+ padding: 2px;
+ position: relative;
+}
+
+/*** Custom Icon Size size1 - size3 ***/
+/* type badge */
+.elfinder-cwd-size1 .elfinder-cwd-icon:before,
+.elfinder-cwd-size2 .elfinder-cwd-icon:before,
+.elfinder-cwd-size3 .elfinder-cwd-icon:before {
+ top: 3px;
+ display: block;
+}
+
+/* size1 */
+.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file {
+ width: 120px;
+ height: 112px;
+}
+
+.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
+ width: 74px;
+ height: 74px;
+}
+
+.elfinder-cwd-size1 .elfinder-cwd-icon {
+ -ms-transform-origin: top center;
+ -ms-transform: scale(1.5);
+ -webkit-transform-origin: top center;
+ -webkit-transform: scale(1.5);
+ transform-origin: top center;
+ transform: scale(1.5);
+}
+
+.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
+ -ms-transform-origin: top left;
+ -ms-transform: scale(1.35) translate(-4px, 15%);
+ -webkit-transform-origin: top left;
+ -webkit-transform: scale(1.35) translate(-4px, 15%);
+ transform-origin: top left;
+ transform: scale(1.35) translate(-4px, 15%);
+}
+
+.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
+ -ms-transform: scale(1) translate(10px, -5px);
+ -webkit-transform: scale(1) translate(10px, -5px);
+ transform: scale(1) translate(10px, -5px);
+}
+
+.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl {
+ -ms-transform-origin: center center;
+ -ms-transform: scale(1);
+ -webkit-transform-origin: center center;
+ -webkit-transform: scale(1);
+ transform-origin: center center;
+ transform: scale(1);
+ width: 72px;
+ height: 72px;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+ border-radius: 6px;
+}
+
+/* size2 */
+.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file {
+ width: 140px;
+ height: 134px;
+}
+
+.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
+ width: 98px;
+ height: 98px;
+}
+
+.elfinder-cwd-size2 .elfinder-cwd-icon {
+ -ms-transform-origin: top center;
+ -ms-transform: scale(2);
+ -webkit-transform-origin: top center;
+ -webkit-transform: scale(2);
+ transform-origin: top center;
+ transform: scale(2);
+}
+
+.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
+ -ms-transform-origin: top left;
+ -ms-transform: scale(1.8) translate(-5px, 18%);
+ -webkit-transform-origin: top left;
+ -webkit-transform: scale(1.8) translate(-5px, 18%);
+ transform-origin: top left;
+ transform: scale(1.8) translate(-5px, 18%);
+}
+
+.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
+ -ms-transform: scale(1.1) translate(0px, 10px);
+ -webkit-transform: scale(1.1) translate(0px, 10px);
+ transform: scale(1.1) translate(0px, 10px);
+}
+
+.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl {
+ -ms-transform-origin: center center;
+ -ms-transform: scale(1);
+ -webkit-transform-origin: center center;
+ -webkit-transform: scale(1);
+ transform-origin: center center;
+ transform: scale(1);
+ width: 96px;
+ height: 96px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+}
+
+/* size3 */
+.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file {
+ width: 174px;
+ height: 158px;
+}
+
+.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
+ width: 122px;
+ height: 122px;
+}
+
+.elfinder-cwd-size3 .elfinder-cwd-icon {
+ -ms-transform-origin: top center;
+ -ms-transform: scale(2.5);
+ -webkit-transform-origin: top center;
+ -webkit-transform: scale(2.5);
+ transform-origin: top center;
+ transform: scale(2.5);
+}
+
+.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
+ -ms-transform-origin: top left;
+ -ms-transform: scale(2.25) translate(-6px, 20%);
+ -webkit-transform-origin: top left;
+ -webkit-transform: scale(2.25) translate(-6px, 20%);
+ transform-origin: top left;
+ transform: scale(2.25) translate(-6px, 20%);
+}
+
+.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
+ -ms-transform: scale(1.2) translate(-9px, 22px);
+ -webkit-transform: scale(1.2) translate(-9px, 22px);
+ transform: scale(1.2) translate(-9px, 22px);
+}
+
+.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl {
+ -ms-transform-origin: center center;
+ -ms-transform: scale(1);
+ -webkit-transform-origin: center center;
+ -webkit-transform: scale(1);
+ transform-origin: center center;
+ transform: scale(1);
+ width: 120px;
+ height: 120px;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+}
+
+/* file name place */
+.elfinder-cwd-view-icons .elfinder-cwd-filename {
+ text-align: center;
+ max-height: 2.4em;
+ line-height: 1.2em;
+ white-space: pre-line;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+ margin: 3px 1px 0 1px;
+ padding: 1px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+ /* for webkit CSS3 */
+ word-break: break-word;
+ overflow-wrap: break-word;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+
+/* permissions/symlink markers */
+.elfinder-cwd-view-icons .elfinder-perms {
+ bottom: 4px;
+ right: 2px;
+}
+
+.elfinder-cwd-view-icons .elfinder-lock {
+ top: -3px;
+ right: -2px;
+}
+
+.elfinder-cwd-view-icons .elfinder-symlink {
+ bottom: 6px;
+ left: 0px;
+}
+
+/* icon/thumbnail */
+.elfinder-cwd-icon {
+ display: block;
+ width: 48px;
+ height: 48px;
+ margin: 0 auto;
+ background-image: url('../img/icons-big.svg');
+ background-image: url('../img/icons-big.png') \9;
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ -moz-background-clip: padding;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+}
+
+/* volume icon of root in folder */
+.elfinder-navbar-root-local .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_local.svg");
+ background-image: url("../img/volume_icon_local.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 1px -1px;
+}
+
+.elfinder-navbar-root-trash .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_trash.svg");
+ background-image: url("../img/volume_icon_trash.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 1px -1px;
+}
+
+.elfinder-navbar-root-ftp .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_ftp.svg");
+ background-image: url("../img/volume_icon_ftp.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 1px -1px;
+}
+
+.elfinder-navbar-root-sql .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_sql.svg");
+ background-image: url("../img/volume_icon_sql.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 1px -1px;
+}
+
+.elfinder-navbar-root-dropbox .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_dropbox.svg");
+ background-image: url("../img/volume_icon_dropbox.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 1px -1px;
+}
+
+.elfinder-navbar-root-googledrive .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_googledrive.svg");
+ background-image: url("../img/volume_icon_googledrive.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-navbar-root-onedrive .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_onedrive.svg");
+ background-image: url("../img/volume_icon_onedrive.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-navbar-root-box .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_box.svg");
+ background-image: url("../img/volume_icon_box.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-navbar-root-zip .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-zip.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_zip.svg");
+ background-image: url("../img/volume_icon_zip.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 1px -1px;
+}
+
+.elfinder-navbar-root-network .elfinder-cwd-icon,
+.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon,
+.elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon {
+ background-image: url("../img/volume_icon_network.svg");
+ background-image: url("../img/volume_icon_network.png") \9;
+ background-position: 0 0;
+ background-size: contain;
+}
+
+.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 1px -1px;
+}
+
+/* type badge in "icons" view */
+.elfinder-cwd-icon:before {
+ content: none;
+ position: absolute;
+ left: 0px;
+ top: 5px;
+ min-width: 20px;
+ max-width: 84px;
+ text-align: center;
+ padding: 0px 4px 1px;
+ border-radius: 4px;
+ font-family: Verdana;
+ font-size: 10px;
+ line-height: 1.3em;
+ -webkit-transform: scale(0.9);
+ -moz-transform: scale(0.9);
+ -ms-transform: scale(0.9);
+ -o-transform: scale(0.9);
+ transform: scale(0.9);
+}
+
+.elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
+ left: -10px;
+}
+
+/* addtional type badge name */
+.elfinder-cwd-icon.elfinder-cwd-icon-mp2t:before {
+ content: 'ts'
+}
+
+.elfinder-cwd-icon.elfinder-cwd-icon-dash-xml:before {
+ content: 'dash'
+}
+
+.elfinder-cwd-icon.elfinder-cwd-icon-x-mpegurl:before {
+ content: 'hls'
+}
+
+.elfinder-cwd-icon.elfinder-cwd-icon-x-c:before {
+ content: 'c++'
+}
+
+/* thumbnail image */
+.elfinder-cwd-icon.elfinder-cwd-bgurl {
+ background-position: center center;
+ background-repeat: no-repeat;
+ -moz-background-size: contain;
+ background-size: contain;
+}
+
+/* thumbnail self */
+.elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself {
+ -moz-background-size: cover;
+ background-size: cover;
+}
+
+/* thumbnail crop*/
+.elfinder-cwd-icon.elfinder-cwd-bgurl {
+ -moz-background-size: cover;
+ background-size: cover;
+}
+
+.elfinder-cwd-icon.elfinder-cwd-bgurl:after {
+ content: ' ';
+}
+
+.elfinder-cwd-bgurl:after {
+ position: relative;
+ display: inline-block;
+ top: 36px;
+ left: -38px;
+ width: 48px;
+ height: 48px;
+ background-image: url('../img/icons-big.svg');
+ background-image: url('../img/icons-big.png') \9;
+ background-repeat: no-repeat;
+ background-size: auto !important;
+ opacity: .8;
+ filter: Alpha(Opacity=60);
+ -webkit-transform-origin: 54px -24px;
+ -webkit-transform: scale(.6);
+ -moz-transform-origin: 54px -24px;
+ -moz-transform: scale(.6);
+ -ms-transform-origin: 54px -24px;
+ -ms-transform: scale(.6);
+ -o-transform-origin: 54px -24px;
+ -o-transform: scale(.6);
+ transform-origin: 54px -24px;
+ transform: scale(.6);
+}
+
+/* thumbnail image and draging icon */
+.elfinder-cwd-icon.elfinder-cwd-icon-drag {
+ width: 48px;
+ height: 48px;
+}
+
+/* thumbnail image and draging icon overlay none */
+.elfinder-cwd-icon.elfinder-cwd-icon-drag:before,
+.elfinder-cwd-icon.elfinder-cwd-icon-drag:after,
+.elfinder-cwd-icon-image.elfinder-cwd-bgurl:after,
+.elfinder-cwd-icon-directory.elfinder-cwd-bgurl:after {
+ content: none;
+}
+
+/* "opened folder" icon on dragover */
+.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon {
+ background-position: 0 -100px;
+}
+
+.elfinder-cwd .elfinder-droppable-active {
+ outline: 2px solid #8cafed;
+ outline-offset: -2px;
+}
+
+/* mimetypes icons */
+.elfinder-cwd-icon-directory {
+ background-position: 0 -50px;
+}
+
+.elfinder-cwd-icon-application:after,
+.elfinder-cwd-icon-application {
+ background-position: 0 -150px;
+}
+
+.elfinder-cwd-icon-text:after,
+.elfinder-cwd-icon-text {
+ background-position: 0 -1350px;
+}
+
+.elfinder-cwd-icon-plain:after,
+.elfinder-cwd-icon-plain,
+.elfinder-cwd-icon-x-empty:after,
+.elfinder-cwd-icon-x-empty {
+ background-position: 0 -200px;
+}
+
+.elfinder-cwd-icon-image:after,
+.elfinder-cwd-icon-vnd-adobe-photoshop:after,
+.elfinder-cwd-icon-image,
+.elfinder-cwd-icon-vnd-adobe-photoshop {
+ background-position: 0 -250px;
+}
+
+.elfinder-cwd-icon-postscript:after,
+.elfinder-cwd-icon-postscript {
+ background-position: 0 -1550px;
+}
+
+.elfinder-cwd-icon-audio:after,
+.elfinder-cwd-icon-audio {
+ background-position: 0 -300px;
+}
+
+.elfinder-cwd-icon-video:after,
+.elfinder-cwd-icon-video,
+.elfinder-cwd-icon-flash-video,
+.elfinder-cwd-icon-dash-xml,
+.elfinder-cwd-icon-vnd-apple-mpegurl,
+.elfinder-cwd-icon-x-mpegurl {
+ background-position: 0 -350px;
+}
+
+.elfinder-cwd-icon-rtf:after,
+.elfinder-cwd-icon-rtfd:after,
+.elfinder-cwd-icon-rtf,
+.elfinder-cwd-icon-rtfd {
+ background-position: 0 -400px;
+}
+
+.elfinder-cwd-icon-pdf:after,
+.elfinder-cwd-icon-pdf {
+ background-position: 0 -450px;
+}
+
+.elfinder-cwd-icon-ms-excel,
+.elfinder-cwd-icon-ms-excel:after,
+.elfinder-cwd-icon-vnd-ms-excel,
+.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-excel:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:after {
+ background-position: 0 -1450px
+}
+
+.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,
+.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,
+.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:after {
+ background-position: 0 -1700px
+}
+
+.elfinder-cwd-icon-vnd-ms-powerpoint,
+.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-powerpoint:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:after {
+ background-position: 0 -1400px
+}
+
+.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,
+.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,
+.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-presentation:after {
+ background-position: 0 -1650px
+}
+
+.elfinder-cwd-icon-msword,
+.elfinder-cwd-icon-msword:after,
+.elfinder-cwd-icon-vnd-ms-word,
+.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,
+.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:after,
+.elfinder-cwd-icon-vnd-ms-word:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:after,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:after {
+ background-position: 0 -1500px
+}
+
+.elfinder-cwd-icon-vnd-oasis-opendocument-text,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-master:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-template:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-web:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text:after {
+ background-position: 0 -1750px
+}
+
+.elfinder-cwd-icon-vnd-ms-office,
+.elfinder-cwd-icon-vnd-ms-office:after {
+ background-position: 0 -500px
+}
+
+.elfinder-cwd-icon-vnd-oasis-opendocument-chart,
+.elfinder-cwd-icon-vnd-oasis-opendocument-chart:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-database,
+.elfinder-cwd-icon-vnd-oasis-opendocument-database:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-formula,
+.elfinder-cwd-icon-vnd-oasis-opendocument-formula:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,
+.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,
+.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-graphics:after,
+.elfinder-cwd-icon-vnd-oasis-opendocument-image,
+.elfinder-cwd-icon-vnd-oasis-opendocument-image:after,
+.elfinder-cwd-icon-vnd-openofficeorg-extension,
+.elfinder-cwd-icon-vnd-openofficeorg-extension:after {
+ background-position: 0 -1600px
+}
+
+.elfinder-cwd-icon-html:after,
+.elfinder-cwd-icon-html {
+ background-position: 0 -550px;
+}
+
+.elfinder-cwd-icon-css:after,
+.elfinder-cwd-icon-css {
+ background-position: 0 -600px;
+}
+
+.elfinder-cwd-icon-javascript:after,
+.elfinder-cwd-icon-x-javascript:after,
+.elfinder-cwd-icon-javascript,
+.elfinder-cwd-icon-x-javascript {
+ background-position: 0 -650px;
+}
+
+.elfinder-cwd-icon-x-perl:after,
+.elfinder-cwd-icon-x-perl {
+ background-position: 0 -700px;
+}
+
+.elfinder-cwd-icon-x-python:after,
+.elfinder-cwd-icon-x-python {
+ background-position: 0 -750px;
+}
+
+.elfinder-cwd-icon-x-ruby:after,
+.elfinder-cwd-icon-x-ruby {
+ background-position: 0 -800px;
+}
+
+.elfinder-cwd-icon-x-sh:after,
+.elfinder-cwd-icon-x-shellscript:after,
+.elfinder-cwd-icon-x-sh,
+.elfinder-cwd-icon-x-shellscript {
+ background-position: 0 -850px;
+}
+
+.elfinder-cwd-icon-x-c:after,
+.elfinder-cwd-icon-x-csrc:after,
+.elfinder-cwd-icon-x-chdr:after,
+.elfinder-cwd-icon-x-c--:after,
+.elfinder-cwd-icon-x-c--src:after,
+.elfinder-cwd-icon-x-c--hdr:after,
+.elfinder-cwd-icon-x-java:after,
+.elfinder-cwd-icon-x-java-source:after,
+.elfinder-cwd-icon-x-c,
+.elfinder-cwd-icon-x-csrc,
+.elfinder-cwd-icon-x-chdr,
+.elfinder-cwd-icon-x-c--,
+.elfinder-cwd-icon-x-c--src,
+.elfinder-cwd-icon-x-c--hdr,
+.elfinder-cwd-icon-x-java,
+.elfinder-cwd-icon-x-java-source {
+ background-position: 0 -900px;
+}
+
+.elfinder-cwd-icon-x-php:after,
+.elfinder-cwd-icon-x-php {
+ background-position: 0 -950px;
+}
+
+.elfinder-cwd-icon-xml:after,
+.elfinder-cwd-icon-xml {
+ background-position: 0 -1000px;
+}
+
+.elfinder-cwd-icon-zip:after,
+.elfinder-cwd-icon-x-zip:after,
+.elfinder-cwd-icon-x-xz:after,
+.elfinder-cwd-icon-x-7z-compressed:after,
+.elfinder-cwd-icon-zip,
+.elfinder-cwd-icon-x-zip,
+.elfinder-cwd-icon-x-xz,
+.elfinder-cwd-icon-x-7z-compressed {
+ background-position: 0 -1050px;
+}
+
+.elfinder-cwd-icon-x-gzip:after,
+.elfinder-cwd-icon-x-tar:after,
+.elfinder-cwd-icon-x-gzip,
+.elfinder-cwd-icon-x-tar {
+ background-position: 0 -1100px;
+}
+
+.elfinder-cwd-icon-x-bzip:after,
+.elfinder-cwd-icon-x-bzip2:after,
+.elfinder-cwd-icon-x-bzip,
+.elfinder-cwd-icon-x-bzip2 {
+ background-position: 0 -1150px;
+}
+
+.elfinder-cwd-icon-x-rar:after,
+.elfinder-cwd-icon-x-rar-compressed:after,
+.elfinder-cwd-icon-x-rar,
+.elfinder-cwd-icon-x-rar-compressed {
+ background-position: 0 -1200px;
+}
+
+.elfinder-cwd-icon-x-shockwave-flash:after,
+.elfinder-cwd-icon-x-shockwave-flash {
+ background-position: 0 -1250px;
+}
+
+.elfinder-cwd-icon-group {
+ background-position: 0 -1300px;
+}
+
+/* textfield inside icon */
+.elfinder-cwd-filename input {
+ width: 100%;
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+.elfinder-cwd-view-icons input {
+ text-align: center;
+}
+
+.elfinder-cwd-view-icons textarea {
+ width: 100%;
+ border: 0px solid;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+ overflow: hidden;
+ resize: none;
+}
+
+.elfinder-cwd-view-icons {
+ text-align: center;
+}
+
+/************************************ LIST VIEW ************************************/
+
+/*.elfinder-cwd-view-list { padding:0 0 4px 0; }*/
+
+.elfinder-cwd-wrapper.elfinder-cwd-fixheader .elfinder-cwd::after {
+ display: none;
+}
+
+.elfinder-cwd table {
+ width: 100%;
+ border-collapse: separate;
+ border: 0 solid;
+ margin: 0 0 10px 0;
+ border-spacing: 0;
+ box-sizing: padding-box;
+ padding: 2px;
+ position: relative;
+}
+
+.elfinder-cwd table td {
+ /* fix conflict with Bootstrap CSS */
+ box-sizing: content-box;
+}
+
+.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader {
+ position: absolute;
+ overflow: hidden;
+}
+
+.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ top: 0;
+ height: 3px;
+ background-color: white;
+}
+
+.elfinder-droppable-active + .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before {
+ background-color: #8cafed;
+}
+
+.elfinder .elfinder-workzone div.elfinder-cwd-fixheader table {
+ table-layout: fixed;
+}
+
+.elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader {
+ position: relative;
+}
+
+.elfinder-ltr .elfinder-cwd thead .elfinder-cwd-selectall {
+ text-align: left;
+ right: auto;
+ left: 0px;
+ padding-top: 3px;
+}
+
+.elfinder-rtl .elfinder-cwd thead .elfinder-cwd-selectall {
+ text-align: right;
+ right: 0px;
+ left: auto;
+ padding-top: 3px;
+}
+
+.elfinder-touch .elfinder-cwd thead .elfinder-cwd-selectall {
+ padding-top: 4px;
+}
+
+.elfinder .elfinder-cwd table thead tr {
+ border-left: 0 solid;
+ border-top: 0 solid;
+ border-right: 0 solid;
+}
+
+.elfinder .elfinder-cwd table thead td {
+ padding: 4px 14px;
+}
+
+.elfinder-ltr .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
+ padding: 4px 14px 4px 22px;
+}
+
+.elfinder-rtl .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
+ padding: 4px 22px 4px 14px;
+}
+
+.elfinder-touch .elfinder-cwd table thead td,
+.elfinder-touch .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+
+.elfinder .elfinder-cwd table thead td.ui-state-active {
+ background: #ebf1f6;
+ background: -moz-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ebf1f6), color-stop(50%, #abd3ee), color-stop(51%, #89c3eb), color-stop(100%, #d5ebfb));
+ background: -webkit-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
+ background: -o-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
+ background: -ms-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
+ background: linear-gradient(to bottom, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebf1f6', endColorstr='#d5ebfb', GradientType=0);
+}
+
+.elfinder .elfinder-cwd table td {
+ padding: 4px 12px;
+ white-space: pre;
+ overflow: hidden;
+ text-align: right;
+ cursor: default;
+ border: 0 solid;
+}
+
+.elfinder .elfinder-cwd table tbody td:first-child {
+ position: relative
+}
+
+.elfinder .elfinder-cwd table td div {
+ box-sizing: content-box;
+}
+
+tr.elfinder-cwd-file td .elfinder-cwd-select {
+ padding-top: 3px;
+}
+
+.elfinder-mobile tr.elfinder-cwd-file td .elfinder-cwd-select {
+ width: 40px;
+}
+
+.elfinder-touch tr.elfinder-cwd-file td .elfinder-cwd-select {
+ padding-top: 10px;
+}
+
+.elfinder-touch .elfinder-cwd tr td {
+ padding: 10px 12px;
+}
+
+.elfinder-touch .elfinder-cwd tr.elfinder-cwd-file td {
+ padding: 13px 12px;
+}
+
+.elfinder-ltr .elfinder-cwd table td {
+ text-align: right;
+}
+
+.elfinder-ltr .elfinder-cwd table td:first-child {
+ text-align: left;
+}
+
+.elfinder-rtl .elfinder-cwd table td {
+ text-align: left;
+}
+
+.elfinder-rtl .elfinder-cwd table td:first-child {
+ text-align: right;
+}
+
+.elfinder-odd-row {
+ background: #eee;
+}
+
+/* filename container */
+.elfinder-cwd-view-list .elfinder-cwd-file-wrapper {
+ width: 97%;
+ position: relative;
+}
+
+/* filename container in ltr/rtl enviroment */
+.elfinder-ltr .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper {
+ margin-left: 8px;
+}
+
+.elfinder-rtl .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper {
+ margin-right: 8px;
+}
+
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename {
+ padding-left: 23px;
+}
+
+.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-filename {
+ padding-right: 23px;
+}
+
+/* premissions/symlink marker */
+.elfinder-cwd-view-list .elfinder-perms,
+.elfinder-cwd-view-list .elfinder-lock,
+.elfinder-cwd-view-list .elfinder-symlink {
+ margin-top: -6px;
+ opacity: .6;
+ filter: Alpha(Opacity=60);
+}
+
+.elfinder-cwd-view-list .elfinder-perms {
+ bottom: -4px;
+}
+
+.elfinder-cwd-view-list .elfinder-lock {
+ top: 0px;
+}
+
+.elfinder-cwd-view-list .elfinder-symlink {
+ bottom: -4px;
+}
+
+/* markers in ltr/rtl enviroment */
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms {
+ left: 8px;
+}
+
+.elfinder-rtl .elfinder-cwd-view-list .elfinder-perms {
+ right: -8px;
+}
+
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock {
+ left: 10px;
+}
+
+.elfinder-rtl .elfinder-cwd-view-list .elfinder-lock {
+ right: -10px;
+}
+
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink {
+ left: -7px;
+}
+
+.elfinder-rtl .elfinder-cwd-view-list .elfinder-symlink {
+ right: 7px;
+}
+
+/* file icon */
+.elfinder-cwd-view-list td .elfinder-cwd-icon {
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+ background-image: url(../img/icons-small.png);
+}
+
+/* icon in ltr/rtl enviroment */
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon {
+ left: 0;
+}
+
+.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon {
+ right: 0;
+}
+
+/* type badge, thumbnail image overlay */
+.elfinder-cwd-view-list .elfinder-cwd-icon:before,
+.elfinder-cwd-view-list .elfinder-cwd-icon:after {
+ content: none;
+}
+
+/* table header resize handle */
+.elfinder-cwd-view-list thead td .ui-resizable-handle {
+ height: 100%;
+ top: 6px;
+}
+
+.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-handle {
+ top: -4px;
+ margin: 10px;
+}
+
+.elfinder-cwd-view-list thead td .ui-resizable-e {
+ right: -7px;
+}
+
+.elfinder-cwd-view-list thead td .ui-resizable-w {
+ left: -7px;
+}
+
+.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-e {
+ right: -16px;
+}
+
+.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-w {
+ left: -16px;
+}
+
+/* empty message */
+.elfinder-cwd-wrapper-empty .elfinder-cwd-view-list.elfinder-cwd:after {
+ margin-top: 0;
+}
+
+/* overlay message board */
+.elfinder-cwd-message-board {
+ position: absolute;
+ position: -webkit-sticky;
+ position: sticky;
+ width: 100%;
+ height: calc(100% - 0.01px); /* for Firefox scroll problem */
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+/* overlay message board for trash */
+.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board {
+ background-image: url(../img/trashmesh.png);
+}
+
+.elfinder-cwd-message-board .elfinder-cwd-trash {
+ position: absolute;
+ bottom: 0;
+ font-size: 30px;
+ width: 100%;
+ text-align: right;
+ display: none;
+}
+
+.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-trash {
+ text-align: left;
+}
+
+.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-trash {
+ font-size: 20px;
+}
+
+.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board .elfinder-cwd-trash {
+ display: block;
+ opacity: .3;
+}
+
+/* overlay message board for expires */
+.elfinder-cwd-message-board .elfinder-cwd-expires {
+ position: absolute;
+ bottom: 0;
+ font-size: 24px;
+ width: 100%;
+ text-align: right;
+ opacity: .25;
+}
+
+.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-expires {
+ text-align: left;
+}
+
+.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-expires {
+ font-size: 20px;
+}
+
+/* File: /css/dialog.css */
+/*********************************************/
+/* DIALOGS STYLES */
+/*********************************************/
+
+/* common dialogs class */
+.std42-dialog {
+ padding: 0;
+ position: absolute;
+ left: auto;
+ right: auto;
+ box-sizing: border-box;
+}
+
+.std42-dialog.elfinder-dialog-minimized {
+ overFlow: hidden;
+ position: relative;
+ float: left;
+ width: auto;
+ cursor: pointer;
+}
+
+.elfinder-rtl .std42-dialog.elfinder-dialog-minimized {
+ float: right;
+}
+
+.std42-dialog input {
+ border: 1px solid;
+}
+
+/* titlebar */
+.std42-dialog .ui-dialog-titlebar {
+ border-left: 0 solid transparent;
+ border-top: 0 solid transparent;
+ border-right: 0 solid transparent;
+ font-weight: normal;
+ padding: .2em 1em;
+}
+
+.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar {
+ padding: 0 .5em;
+ height: 20px;
+}
+
+.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar {
+ padding: .3em .5em;
+}
+
+.std42-dialog.ui-draggable-disabled .ui-dialog-titlebar {
+ cursor: default;
+}
+
+.std42-dialog .ui-dialog-titlebar .ui-widget-header {
+ border: none;
+ cursor: pointer;
+}
+
+.std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title {
+ display: inherit;
+ word-break: break-all;
+}
+
+.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title {
+ display: list-item;
+ display: -moz-inline-box;
+ white-space: nowrap;
+ word-break: normal;
+ overflow: hidden;
+ word-wrap: normal;
+ overflow-wrap: normal;
+ max-width: -webkit-calc(100% - 24px);
+ max-width: -moz-calc(100% - 24px);
+ max-width: calc(100% - 24px);
+}
+
+.elfinder-touch .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title {
+ padding-top: .15em;
+}
+
+.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title {
+ max-width: -webkit-calc(100% - 36px);
+ max-width: -moz-calc(100% - 36px);
+ max-width: calc(100% - 36px);
+}
+
+.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button {
+ position: relative;
+ float: left;
+ top: 10px;
+ left: -10px;
+ right: 10px;
+ width: 20px;
+ height: 20px;
+ padding: 1px;
+ margin: -10px 1px 0 1px;
+ background-color: transparent;
+ background-image: none;
+}
+
+.elfinder-touch .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button {
+ -moz-transform: scale(1.2);
+ zoom: 1.2;
+ padding-left: 6px;
+ padding-right: 6px;
+ height: 24px;
+}
+
+.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button-right {
+ float: right;
+}
+
+.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right {
+ left: 10px;
+ right: -10px;
+}
+
+.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
+ width: 17px;
+ height: 17px;
+ border-width: 1px;
+ opacity: .7;
+ filter: Alpha(Opacity=70);
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+}
+
+.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
+ opacity: .5;
+ filter: Alpha(Opacity=50);
+}
+
+.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
+ opacity: 1;
+ filter: Alpha(Opacity=100);
+}
+
+.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar select {
+ display: none;
+}
+
+.elfinder-spinner {
+ width: 14px;
+ height: 14px;
+ background: url("../img/spinner-mini.gif") center center no-repeat;
+ margin: 0 5px;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.elfinder-ltr .elfinder-spinner,
+.elfinder-ltr .elfinder-spinner-text {
+ float: left;
+}
+
+.elfinder-rtl .elfinder-spinner,
+.elfinder-rtl .elfinder-spinner-text {
+ float: right;
+}
+
+
+
+/* resize handle for touch devices */
+.elfinder-touch .std42-dialog.ui-dialog:not(ui-resizable-disabled) .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ -moz-transform-origin: bottom right;
+ -moz-transform: scale(1.5);
+ zoom: 1.5;
+ right: -7px;
+ bottom: -7px;
+ margin: 3px 7px 7px 3px;
+ background-position: -64px -224px;
+}
+
+.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar {
+ text-align: right;
+}
+
+/* content */
+.std42-dialog .ui-dialog-content {
+ padding: .3em .5em;
+ box-sizing: border-box;
+}
+
+.elfinder .std42-dialog .ui-dialog-content,
+.elfinder .std42-dialog .ui-dialog-content * {
+ -webkit-user-select: auto;
+ -moz-user-select: text;
+ -khtml-user-select: text;
+ user-select: text;
+}
+
+.elfinder .std42-dialog .ui-dialog-content label {
+ border: none;
+}
+
+/* buttons */
+.std42-dialog .ui-dialog-buttonpane {
+ border: 0 solid;
+ margin: 0;
+ padding: .5em;
+ text-align: right;
+}
+
+.elfinder-rtl .std42-dialog .ui-dialog-buttonpane {
+ text-align: left;
+}
+
+.std42-dialog .ui-dialog-buttonpane button {
+ margin: .2em 0 0 .4em;
+ padding: .2em;
+ outline: 0px solid;
+}
+
+.std42-dialog .ui-dialog-buttonpane button span {
+ padding: 2px 9px;
+}
+
+.std42-dialog .ui-dialog-buttonpane button span.ui-icon {
+ padding: 2px;
+}
+
+.elfinder-dialog .ui-resizable-e,
+.elfinder-dialog .ui-resizable-s {
+ width: 0;
+ height: 0;
+}
+
+.std42-dialog .ui-button input {
+ cursor: pointer;
+}
+
+.std42-dialog select {
+ border: 1px solid #ccc;
+}
+
+/* error/notify/confirm dialogs icon */
+.elfinder-dialog-icon {
+ position: absolute;
+ width: 32px;
+ height: 32px;
+ left: 10px;
+ top: 50%;
+ margin-top: -15px;
+ background: url("../img/dialogs.png") 0 0 no-repeat;
+}
+
+.elfinder-rtl .elfinder-dialog-icon {
+ left: auto;
+ right: 10px;
+}
+
+/*********************** ERROR DIALOG **************************/
+
+.elfinder-dialog-error .ui-dialog-content,
+.elfinder-dialog-confirm .ui-dialog-content {
+ padding-left: 56px;
+ min-height: 35px;
+}
+
+.elfinder-rtl .elfinder-dialog-error .ui-dialog-content,
+.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content {
+ padding-left: 0;
+ padding-right: 56px;
+}
+
+.elfinder-dialog-error .elfinder-err-var {
+ word-break: break-all;
+}
+
+/*********************** NOTIFY DIALOG **************************/
+
+.elfinder-dialog-notify {
+ top : 36px;
+ width : 280px;
+}
+
+.elfinder-ltr .elfinder-dialog-notify {
+ right : 12px;
+}
+
+.elfinder-rtl .elfinder-dialog-notify {
+ left : 12px;
+}
+
+.elfinder-dialog-notify .ui-dialog-titlebar {
+ height: 5px;
+}
+
+.elfinder-dialog-notify .ui-dialog-titlebar-close {
+ display: none;
+}
+
+.elfinder-dialog-notify .ui-dialog-content {
+ padding: 0;
+}
+
+/* one notification container */
+.elfinder-notify {
+ border-bottom: 1px solid #ccc;
+ position: relative;
+ padding: .5em;
+
+ text-align: center;
+ overflow: hidden;
+}
+
+.elfinder-ltr .elfinder-notify {
+ padding-left: 36px;
+}
+
+.elfinder-rtl .elfinder-notify {
+ padding-right: 36px;
+}
+
+.elfinder-notify:last-child {
+ border: 0 solid;
+}
+
+/* progressbar */
+.elfinder-notify-progressbar {
+ width: 180px;
+ height: 8px;
+ border: 1px solid #aaa;
+ background: #f5f5f5;
+ margin: 5px auto;
+ overflow: hidden;
+}
+
+.elfinder-notify-progress {
+ width: 100%;
+ height: 8px;
+ background: url(../img/progress.gif) center center repeat-x;
+}
+
+.elfinder-notify-progressbar, .elfinder-notify-progress {
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+}
+
+/* icons */
+.elfinder-dialog-icon-open,
+.elfinder-dialog-icon-readdir,
+.elfinder-dialog-icon-file {
+ background-position: 0 -225px;
+}
+
+.elfinder-dialog-icon-reload {
+ background-position: 0 -225px;
+}
+
+.elfinder-dialog-icon-mkdir {
+ background-position: 0 -64px;
+}
+
+.elfinder-dialog-icon-mkfile {
+ background-position: 0 -96px;
+}
+
+.elfinder-dialog-icon-copy,
+.elfinder-dialog-icon-prepare,
+.elfinder-dialog-icon-move {
+ background-position: 0 -128px;
+}
+
+.elfinder-dialog-icon-upload {
+ background-position: 0 -160px;
+}
+
+.elfinder-dialog-icon-chunkmerge {
+ background-position: 0 -160px;
+}
+
+.elfinder-dialog-icon-rm {
+ background-position: 0 -192px;
+}
+
+.elfinder-dialog-icon-download {
+ background-position: 0 -260px;
+}
+
+.elfinder-dialog-icon-save {
+ background-position: 0 -295px;
+}
+
+.elfinder-dialog-icon-rename,
+.elfinder-dialog-icon-chkcontent {
+ background-position: 0 -330px;
+}
+
+.elfinder-dialog-icon-zipdl,
+.elfinder-dialog-icon-archive,
+.elfinder-dialog-icon-extract {
+ background-position: 0 -365px;
+}
+
+.elfinder-dialog-icon-search {
+ background-position: 0 -402px;
+}
+
+.elfinder-dialog-icon-resize,
+.elfinder-dialog-icon-loadimg,
+.elfinder-dialog-icon-netmount,
+.elfinder-dialog-icon-netunmount,
+.elfinder-dialog-icon-chmod,
+.elfinder-dialog-icon-preupload,
+.elfinder-dialog-icon-url,
+.elfinder-dialog-icon-dim {
+ background-position: 0 -434px;
+}
+
+/*********************** CONFIRM DIALOG **************************/
+
+.elfinder-dialog-confirm-applyall,
+.elfinder-dialog-confirm-encoding {
+ padding: 0 1em;
+ margin: 0;
+}
+
+.elfinder-ltr .elfinder-dialog-confirm-applyall,
+.elfinder-ltr .elfinder-dialog-confirm-encoding {
+ text-align: left;
+}
+
+.elfinder-rtl .elfinder-dialog-confirm-applyall,
+.elfinder-rtl .elfinder-dialog-confirm-encoding {
+ text-align: right;
+}
+
+.elfinder-dialog-confirm .elfinder-dialog-icon {
+ background-position: 0 -32px;
+}
+
+.elfinder-dialog-confirm .ui-dialog-buttonset {
+ width: auto;
+}
+
+/*********************** FILE INFO DIALOG **************************/
+
+.elfinder-info-title .elfinder-cwd-icon {
+ float: left;
+ width: 48px;
+ height: 48px;
+ margin-right: 1em;
+}
+
+.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon {
+ float: right;
+ margin-right: 0;
+ margin-left: 1em;
+}
+
+.elfinder-info-title strong {
+ display: block;
+ padding: .3em 0 .5em 0;
+}
+
+.elfinder-info-tb {
+ min-width: 200px;
+ border: 0 solid;
+ margin: 1em .2em 1em .2em;
+ width: 100%;
+}
+
+.elfinder-info-tb td {
+ white-space: pre-wrap;
+ padding: 2px;
+}
+
+.elfinder-info-tb td.elfinder-info-label {
+ white-space: nowrap;
+}
+
+.elfinder-info-tb td.elfinder-info-hash {
+ display: inline-block;
+ word-break: break-all;
+ max-width: 32ch;
+}
+
+.elfinder-ltr .elfinder-info-tb tr td:first-child {
+ text-align: right;
+}
+
+.elfinder-ltr .elfinder-info-tb span {
+ float: left;
+}
+
+.elfinder-rtl .elfinder-info-tb tr td:first-child {
+ text-align: left;
+}
+
+.elfinder-rtl .elfinder-info-tb span {
+ float: right;
+}
+
+.elfinder-info-tb a {
+ outline: none;
+ text-decoration: underline;
+}
+
+.elfinder-info-tb a:hover {
+ text-decoration: none;
+}
+
+.elfinder-netmount-tb {
+ margin: 0 auto;
+}
+
+.elfinder-netmount-tb select,
+.elfinder-netmount-tb .elfinder-button-icon {
+ cursor: pointer;
+}
+
+button.elfinder-info-button {
+ margin: -3.5px 0;
+ cursor: pointer;
+}
+
+/*********************** UPLOAD DIALOG **************************/
+
+.elfinder-upload-dropbox {
+ display: table-cell;
+ text-align: center;
+ vertical-align: middle;
+ padding: 0.5em;
+ border: 3px dashed #aaa;
+ width: 9999px;
+ height: 80px;
+ overflow: hidden;
+ word-break: keep-all;
+}
+
+.elfinder-upload-dropbox.ui-state-hover {
+ background: #dfdfdf;
+ border: 3px dashed #555;
+}
+
+.elfinder-upload-dialog-or {
+ margin: .3em 0;
+ text-align: center;
+}
+
+.elfinder-upload-dialog-wrapper {
+ text-align: center;
+}
+
+.elfinder-upload-dialog-wrapper .ui-button {
+ position: relative;
+ overflow: hidden;
+}
+
+.elfinder-upload-dialog-wrapper .ui-button form {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 100%;
+ opacity: 0;
+ filter: Alpha(Opacity=0);
+}
+
+.elfinder-upload-dialog-wrapper .ui-button form input {
+ padding: 50px 0 0;
+ font-size: 3em;
+ width: 100%;
+}
+
+/* dialog for elFinder itself */
+.dialogelfinder .dialogelfinder-drag {
+ border-left: 0 solid;
+ border-top: 0 solid;
+ border-right: 0 solid;
+ font-weight: normal;
+ padding: 2px 12px;
+ cursor: move;
+ position: relative;
+ text-align: left;
+}
+
+.elfinder-rtl .dialogelfinder-drag {
+ text-align: right;
+}
+
+.dialogelfinder-drag-close {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.elfinder-ltr .dialogelfinder-drag-close {
+ right: 12px;
+}
+
+.elfinder-rtl .dialogelfinder-drag-close {
+ left: 12px;
+}
+
+/*********************** RM CONFIRM **************************/
+.elfinder-rm-title {
+ margin-bottom: .5ex;
+}
+
+.elfinder-rm-title .elfinder-cwd-icon {
+ float: left;
+ width: 48px;
+ height: 48px;
+ margin-right: 1em;
+}
+
+.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon {
+ float: right;
+ margin-right: 0;
+ margin-left: 1em;
+}
+
+.elfinder-rm-title strong {
+ display: block;
+ /*word-wrap: break-word;*/
+ white-space: pre-wrap;
+ word-break: normal;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.elfinder-rm-title + br {
+ display: none;
+}
+
+/* File: /css/fonts.css */
+.elfinder-font-mono {
+ font-family: "Ricty Diminished", "Myrica M", Consolas, "Courier New", Courier, Monaco, monospace;
+ font-size: 1.1em;
+}
+
+.elfinder-contextmenu .elfinder-contextmenu-item span {
+ font-size: .72em;
+}
+
+.elfinder-cwd-view-icons .elfinder-cwd-filename {
+ font-size: .7em;
+}
+
+.elfinder-cwd-view-list td {
+ font-size: .7em;
+}
+
+.std42-dialog .ui-dialog-titlebar {
+ font-size: .82em;
+}
+
+.std42-dialog .ui-dialog-content {
+ font-size: .72em;
+}
+
+.std42-dialog .ui-dialog-buttonpane {
+ font-size: .76em;
+}
+
+.elfinder-info-tb {
+ font-size: .9em;
+}
+
+.elfinder-upload-dropbox {
+ font-size: 1.2em;
+}
+
+.elfinder-upload-dialog-or {
+ font-size: 1.2em;
+}
+
+.dialogelfinder .dialogelfinder-drag {
+ font-size: .9em;
+}
+
+.elfinder .elfinder-navbar {
+ font-size: .72em;
+}
+
+.elfinder-place-drag .elfinder-navbar-dir {
+ font-size: .9em;
+}
+
+.elfinder-quicklook-title {
+ font-size: .7em;
+ font-weight: normal;
+}
+
+.elfinder-quicklook-info-data {
+ font-size: .72em;
+}
+
+.elfinder-quicklook-preview-text-wrapper {
+ font-size: .9em;
+}
+
+.elfinder-button-menu-item {
+ font-size: .72em;
+}
+
+.elfinder-button-search input {
+ font-size: .8em;
+}
+
+.elfinder-statusbar div {
+ font-size: .7em;
+}
+
+.elfinder-drag-num {
+ font-size: 12px;
+}
+
+.elfinder-toast {
+ font-size: .76em;
+}
+
+
+/* File: /css/navbar.css */
+/*********************************************/
+/* NAVIGATION PANEL */
+/*********************************************/
+
+/* container */
+.elfinder .elfinder-navbar {
+ /*box-sizing: border-box;*/
+ width: 230px;
+ padding: 3px 5px;
+ background-image: none;
+ border-top: 0 solid;
+ border-bottom: 0 solid;
+ overflow: auto;
+ position: relative;
+}
+
+.elfinder .elfinder-navdock {
+ box-sizing: border-box;
+ width: 230px;
+ height: auto;
+ position: absolute;
+ bottom: 0;
+ overflow: auto;
+}
+
+.elfinder-navdock .ui-resizable-n {
+ top: 0;
+ height: 20px;
+}
+
+/* ltr/rtl enviroment */
+.elfinder-ltr .elfinder-navbar {
+ float: left;
+ border-left: 0 solid;
+}
+
+.elfinder-rtl .elfinder-navbar {
+ float: right;
+ border-right: 0 solid;
+}
+
+.elfinder-ltr .ui-resizable-e {
+ margin-left: 10px;
+}
+
+/* folders tree container */
+.elfinder-tree {
+ display: table;
+ width: 100%;
+ margin: 0 0 .5em 0;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+/* one folder wrapper */
+.elfinder-navbar-wrapper, .elfinder-place-wrapper {
+}
+
+/* folder */
+.elfinder-navbar-dir {
+ position: relative;
+ display: block;
+ white-space: nowrap;
+ padding: 3px 12px;
+ margin: 0;
+ outline: 0px solid;
+ border: 1px solid transparent;
+ cursor: default;
+}
+
+.elfinder-touch .elfinder-navbar-dir {
+ padding: 12px 12px;
+}
+
+/* ltr/rtl enviroment */
+.elfinder-ltr .elfinder-navbar-dir {
+ padding-left: 35px;
+}
+
+.elfinder-rtl .elfinder-navbar-dir {
+ padding-right: 35px;
+}
+
+/* arrow before icon */
+.elfinder-navbar-arrow {
+ width: 12px;
+ height: 14px;
+ position: absolute;
+ display: none;
+ top: 50%;
+ margin-top: -8px;
+ background-image: url("../img/arrows-normal.png");
+ background-repeat: no-repeat;
+ /* border:1px solid #111;*/
+}
+
+.elfinder-ltr .elfinder-navbar-arrow {
+ left: 0;
+}
+
+.elfinder-rtl .elfinder-navbar-arrow {
+ right: 0;
+}
+
+.elfinder-touch .elfinder-navbar-arrow {
+ -moz-transform-origin: top left;
+ -moz-transform: scale(1.4);
+ zoom: 1.4;
+ margin-bottom: 7px;
+}
+
+.elfinder-ltr.elfinder-touch .elfinder-navbar-arrow {
+ left: -3px;
+ margin-right: 20px;
+}
+
+.elfinder-rtl.elfinder-touch .elfinder-navbar-arrow {
+ right: -3px;
+ margin-left: 20px;
+}
+
+.ui-state-active .elfinder-navbar-arrow {
+ background-image: url("../img/arrows-active.png");
+}
+
+/* collapsed/expanded arrow view */
+.elfinder-navbar-collapsed .elfinder-navbar-arrow {
+ display: block;
+}
+
+.elfinder-subtree-chksubdir .elfinder-navbar-arrow {
+ opacity: .25;
+ filter: Alpha(Opacity=25);
+}
+
+/* arrow ltr/rtl enviroment */
+.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow {
+ background-position: 0 4px;
+}
+
+.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow {
+ background-position: 0 -10px;
+}
+
+.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,
+.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow {
+ background-position: 0 -21px;
+}
+
+/* folder icon */
+.elfinder-navbar-icon {
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+ background-image: url("../img/toolbar.png");
+ background-repeat: no-repeat;
+ background-position: 0 -16px;
+}
+
+/* ltr/rtl enviroment */
+.elfinder-ltr .elfinder-navbar-icon {
+ left: 14px;
+}
+
+.elfinder-rtl .elfinder-navbar-icon {
+ right: 14px;
+}
+
+/* places icon */
+.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon {
+ background-position: 0 -704px;
+}
+
+/* root folder */
+.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon,
+.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon {
+ background-position: 0 0;
+ background-size: contain;
+}
+
+/* root icon of each volume "\9" for IE8 trick */
+.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_local.svg");
+ background-image: url("../img/volume_icon_local.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_trash.svg");
+ background-image: url("../img/volume_icon_trash.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_ftp.svg");
+ background-image: url("../img/volume_icon_ftp.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_sql.svg");
+ background-image: url("../img/volume_icon_sql.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_dropbox.svg");
+ background-image: url("../img/volume_icon_dropbox.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_googledrive.svg");
+ background-image: url("../img/volume_icon_googledrive.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_onedrive.svg");
+ background-image: url("../img/volume_icon_onedrive.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_box.svg");
+ background-image: url("../img/volume_icon_box.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_zip.svg");
+ background-image: url("../img/volume_icon_zip.png") \9;
+}
+
+.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon {
+ background-image: url("../img/volume_icon_network.svg");
+ background-image: url("../img/volume_icon_network.png") \9;
+}
+
+/* icon in active/hove/dropactive state */
+.ui-state-active .elfinder-navbar-icon,
+.elfinder-droppable-active .elfinder-navbar-icon,
+.ui-state-hover .elfinder-navbar-icon {
+ background-position: 0 -32px;
+}
+
+/* ltr/rtl enviroment */
+.elfinder-ltr .elfinder-navbar-subtree {
+ margin-left: 12px;
+}
+
+.elfinder-rtl .elfinder-navbar-subtree {
+ margin-right: 12px;
+}
+
+/* spinner */
+.elfinder-tree .elfinder-spinner {
+ position: absolute;
+ top: 50%;
+ margin: -7px 0 0;
+}
+
+/* spinner ltr/rtl enviroment */
+.elfinder-ltr .elfinder-tree .elfinder-spinner {
+ left: 0;
+ margin-left: -2px;
+}
+
+.elfinder-rtl .elfinder-tree .elfinder-spinner {
+ right: 0;
+ margin-right: -2px;
+}
+
+/* marker */
+.elfinder-navbar .elfinder-perms,
+.elfinder-navbar .elfinder-lock,
+.elfinder-navbar .elfinder-symlink {
+ opacity: .6;
+ filter: Alpha(Opacity=60);
+}
+
+/* permissions marker */
+.elfinder-navbar .elfinder-perms {
+ bottom: -1px;
+ margin-top: -8px;
+}
+
+/* locked marker */
+.elfinder-navbar .elfinder-lock {
+ top: -2px;
+}
+
+/* permissions/symlink markers ltr/rtl enviroment */
+.elfinder-ltr .elfinder-navbar .elfinder-perms {
+ left: 20px;
+ transform: scale(0.8);
+}
+
+.elfinder-rtl .elfinder-navbar .elfinder-perms {
+ right: 20px;
+ transform: scale(0.8);
+}
+
+.elfinder-ltr .elfinder-navbar .elfinder-lock {
+ left: 20px;
+ transform: scale(0.8);
+}
+
+.elfinder-rtl .elfinder-navbar .elfinder-lock {
+ right: 20px;
+ transform: scale(0.8);
+}
+
+.elfinder-ltr .elfinder-navbar .elfinder-symlink {
+ left: 8px;
+ transform: scale(0.8);
+}
+
+.elfinder-rtl .elfinder-navbar .elfinder-symlink {
+ right: 8px;
+ transform: scale(0.8);
+}
+
+/* navbar input */
+.elfinder-navbar input {
+ width: 100%;
+ border: 0px solid;
+ margin: 0;
+ padding: 0;
+}
+
+/* resizable */
+.elfinder-navbar .ui-resizable-handle {
+ width: 12px;
+ background: transparent url('../img/resize.png') center center no-repeat;
+}
+
+.elfinder-nav-handle-icon {
+ position: absolute;
+ top: 50%;
+ margin: -8px 2px 0 2px;
+ opacity: .5;
+ filter: Alpha(Opacity=50);
+}
+
+/* pager button */
+.elfinder-navbar-pager {
+ width: 100%;
+ box-sizing: border-box;
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+.elfinder-touch .elfinder-navbar-pager {
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+.elfinder-places {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+.elfinder-places.elfinder-droppable-active {
+ /*border:1px solid #8cafed;*/
+}
+
+/* navbar swipe handle */
+.elfinder-navbar-swipe-handle {
+ position: absolute;
+ top: 0px;
+ height: 100%;
+ width: 50px;
+ pointer-events: none;
+}
+
+.elfinder-ltr .elfinder-navbar-swipe-handle {
+ left: 0px;
+ background: linear-gradient(to right,
+ rgba(221, 228, 235, 1) 0,
+ rgba(221, 228, 235, 0.8) 5px,
+ rgba(216, 223, 230, 0.3) 8px,
+ rgba(0, 0, 0, 0.1) 95%,
+ rgba(0, 0, 0, 0) 100%);
+}
+
+.elfinder-rtl .elfinder-navbar-swipe-handle {
+ right: 0px;
+ background: linear-gradient(to left,
+ rgba(221, 228, 235, 1) 0,
+ rgba(221, 228, 235, 0.8) 5px,
+ rgba(216, 223, 230, 0.3) 8px,
+ rgba(0, 0, 0, 0.1) 95%,
+ rgba(0, 0, 0, 0) 100%);
+}
+
+/* File: /css/places.css */
+/*********************************************/
+/* PLACES STYLES */
+/*********************************************/
+/* root extra icon */
+.elfinder-navbar-root .elfinder-places-root-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -9px;
+ cursor: pointer;
+}
+
+.elfinder-ltr .elfinder-places-root-icon {
+ right: 10px;
+}
+
+.elfinder-rtl .elfinder-places-root-icon {
+ left: 10px;
+}
+
+.elfinder-navbar-expanded .elfinder-places-root-icon {
+ display: block;
+}
+
+/* dragging helper base */
+.elfinder-place-drag {
+ font-size: 0.8em;
+}
+
+/* File: /css/quicklook.css */
+/* quicklook window */
+.elfinder-quicklook {
+ position: absolute;
+ background: url("../img/quicklook-bg.png");
+ overflow: hidden;
+ -moz-border-radius: 7px;
+ -webkit-border-radius: 7px;
+ border-radius: 7px;
+ padding: 20px 0 40px 0;
+}
+
+.elfinder-navdock .elfinder-quicklook {
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ border-radius: 0;
+ font-size: 90%;
+ overflow: auto;
+}
+
+.elfinder-quicklook.elfinder-touch {
+ padding: 30px 0 40px 0;
+}
+
+.elfinder-quicklook .ui-resizable-se {
+ width: 14px;
+ height: 14px;
+ right: 5px;
+ bottom: 3px;
+ background: url("../img/toolbar.png") 0 -496px no-repeat;
+}
+
+.elfinder-quicklook.elfinder-touch .ui-resizable-se {
+ -moz-transform-origin: bottom right;
+ -moz-transform: scale(1.5);
+ zoom: 1.5;
+}
+
+/* quicklook fullscreen window */
+.elfinder-quicklook.elfinder-quicklook-fullscreen {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: 0;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+ border-radius: 0;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ -webkit-background-clip: padding-box;
+ padding: 0;
+ background: #000;
+ display: block;
+}
+
+/* hide titlebar in fullscreen mode */
+.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar,
+.elfinder-quicklook-fullscreen.elfinder-quicklook .ui-resizable-handle {
+ display: none;
+}
+
+/* hide preview border in fullscreen mode */
+.elfinder-quicklook-fullscreen .elfinder-quicklook-preview {
+ border: 0 solid;
+}
+
+/*.elfinder-quicklook-fullscreen iframe {
+ height: 100%;
+}*/
+
+.elfinder-quicklook-cover {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+}
+
+.elfinder-quicklook-cover.elfinder-quicklook-coverbg {
+ /* background need to catch mouse event over browser plugin (eg PDF preview) */
+ background-color: #fff;
+ opacity: 0.000001;
+ filter: Alpha(Opacity=0.0001);
+}
+
+/* quicklook titlebar */
+.elfinder-quicklook-titlebar {
+ text-align: center;
+ background: #777;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 20px;
+ -moz-border-radius-topleft: 7px;
+ -webkit-border-top-left-radius: 7px;
+ border-top-left-radius: 7px;
+ -moz-border-radius-topright: 7px;
+ -webkit-border-top-right-radius: 7px;
+ border-top-right-radius: 7px;
+ border: none;
+ line-height: 1.2;
+}
+
+.elfinder-navdock .elfinder-quicklook-titlebar {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ cursor: default;
+}
+
+.elfinder-touch .elfinder-quicklook-titlebar {
+ height: 30px;
+}
+
+/* window title */
+.elfinder-quicklook-title {
+ display: inline-block;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.elfinder-touch .elfinder-quicklook-title {
+ padding: 8px 0;
+}
+
+/* icon "close" in titlebar */
+.elfinder-quicklook-titlebar-icon {
+ position: absolute;
+ left: 4px;
+ top: 50%;
+ margin-top: -8px;
+ height: 16px;
+ border: none;
+}
+.elfinder-touch .elfinder-quicklook-titlebar-icon {
+ height: 22px;
+}
+
+.elfinder-quicklook-titlebar-icon .ui-icon {
+ position: relative;
+ margin: -9px 3px 0px 0px;
+ cursor: pointer;
+ border-radius: 10px;
+ border: 1px solid;
+ opacity: .7;
+ filter: Alpha(Opacity=70);
+}
+
+.elfinder-quicklook-titlebar-icon .ui-icon.ui-icon-closethick {
+ padding-left: 1px;
+}
+
+.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon {
+ opacity: .6;
+ filter: Alpha(Opacity=60);
+}
+
+.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon {
+ margin-top: -5px;
+}
+
+.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right {
+ left: auto;
+ right: 4px;
+ direction: rtl;
+}
+
+.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon {
+ margin: -9px 0px 0px 3px;
+}
+
+.elfinder-touch .elfinder-quicklook-titlebar .ui-icon {
+ -moz-transform-origin: center center;
+ -moz-transform: scale(1.2);
+ zoom: 1.2;
+}
+
+.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon {
+ margin-right: 10px;
+}
+
+.elfinder-touch .elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon {
+ margin-left: 10px;
+}
+
+/* main part of quicklook window */
+.elfinder-quicklook-preview {
+ overflow: hidden;
+ position: relative;
+ border: 0 solid;
+ border-left: 1px solid transparent;
+ border-right: 1px solid transparent;
+ height: 100%;
+}
+
+.elfinder-navdock .elfinder-quicklook-preview {
+ border-left: 0;
+ border-right: 0;
+}
+
+.elfinder-quicklook-preview.elfinder-overflow-auto {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+/* wrapper for file info/icon */
+.elfinder-quicklook-info-wrapper {
+ display: table;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ height: calc(100% - 80px);
+ left: 0;
+ top: 20px;
+}
+
+.elfinder-navdock .elfinder-quicklook-info-wrapper {
+ height: calc(100% - 20px);
+}
+
+/* file info */
+.elfinder-quicklook-info {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+.elfinder-ltr .elfinder-quicklook-info {
+ padding: 0 12px 0 112px;
+}
+
+.elfinder-rtl .elfinder-quicklook-info {
+ padding: 0 112px 0 12px;
+}
+
+.elfinder-ltr .elfinder-navdock .elfinder-quicklook-info {
+ padding: 0 0 0 80px;
+}
+
+.elfinder-rtl .elfinder-navdock .elfinder-quicklook-info {
+ padding: 0 80px 0 0;
+}
+
+/* file name in info */
+.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child {
+ color: #fff;
+ font-weight: bold;
+ padding-bottom: .5em;
+}
+
+/* other data in info */
+.elfinder-quicklook-info-data {
+ clear: both;
+ padding-bottom: .2em;
+ color: #fff;
+}
+
+/* file icon */
+.elfinder-quicklook .elfinder-cwd-icon {
+ position: absolute;
+ left: 32px;
+ top: 50%;
+ margin-top: -20px;
+}
+
+.elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon {
+ left: 16px;
+}
+
+.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon {
+ left: auto;
+ right: 32px;
+}
+
+.elfinder-rtl .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon {
+ right: 6px;
+}
+
+.elfinder-quicklook .elfinder-cwd-icon:before {
+ top: -10px;
+}
+
+.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:before {
+ left: -20px;
+}
+
+.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:before {
+ left: -14px;
+}
+
+.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:after {
+ left: -20px;
+}
+
+.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:after {
+ left: -12px;
+}
+
+.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:before {
+ left: auto;
+ right: 40px;
+}
+
+.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:after {
+ left: auto;
+ right: 46px;
+}
+
+/* image in preview */
+.elfinder-quicklook-preview img {
+ display: block;
+ margin: 0 auto;
+}
+
+/* navigation bar on quicklook window bottom */
+.elfinder-quicklook-navbar {
+ position: absolute;
+ left: 50%;
+ bottom: 4px;
+ width: 140px;
+ height: 32px;
+ padding: 0px;
+ margin-left: -70px;
+ border: 1px solid transparent;
+ border-radius: 19px;
+ -moz-border-radius: 19px;
+ -webkit-border-radius: 19px;
+}
+
+/* navigation bar in fullscreen mode */
+.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar {
+ width: 188px;
+ margin-left: -94px;
+ padding: 5px;
+ border: 1px solid #eee;
+ background: #000;
+ opacity: 0.4;
+ filter: Alpha(Opacity=40);
+}
+
+/* show close icon in fullscreen mode */
+.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,
+.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator {
+ display: inline;
+}
+
+/* icons in navbar */
+.elfinder-quicklook-navbar-icon {
+ width: 32px;
+ height: 32px;
+ margin: 0 7px;
+ float: left;
+ background: url("../img/quicklook-icons.png") 0 0 no-repeat;
+
+}
+
+/* fullscreen icon */
+.elfinder-quicklook-navbar-icon-fullscreen {
+ background-position: 0 -64px;
+}
+
+/* exit fullscreen icon */
+.elfinder-quicklook-navbar-icon-fullscreen-off {
+ background-position: 0 -96px;
+}
+
+/* prev file icon */
+.elfinder-quicklook-navbar-icon-prev {
+ background-position: 0 0;
+}
+
+/* next file icon */
+.elfinder-quicklook-navbar-icon-next {
+ background-position: 0 -32px;
+}
+
+/* close icon */
+.elfinder-quicklook-navbar-icon-close {
+ background-position: 0 -128px;
+ display: none;
+}
+
+/* icons separator */
+.elfinder-quicklook-navbar-separator {
+ width: 1px;
+ height: 32px;
+ float: left;
+ border-left: 1px solid #fff;
+ display: none;
+}
+
+/* text files preview wrapper */
+.elfinder-quicklook-preview-text-wrapper {
+ width: 100%;
+ height: 100%;
+ background: #fff;
+ color: #222;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+/* archive files preview wrapper */
+.elfinder-quicklook-preview-archive-wrapper {
+ width: 100%;
+ height: 100%;
+ background: #fff;
+ color: #222;
+ font-size: 90%;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch
+}
+
+/* archive files preview header */
+.elfinder-quicklook-preview-archive-wrapper strong {
+ padding: 0 5px;
+}
+
+/* text preview */
+pre.elfinder-quicklook-preview-text,
+pre.elfinder-quicklook-preview-text.prettyprint {
+ width: auto;
+ height: auto;
+ margin: 0;
+ padding: 3px 9px;
+ border: none;
+ -o-tab-size: 4;
+ -moz-tab-size: 4;
+ tab-size: 4;
+}
+
+.elfinder-quicklook-preview-charsleft hr {
+ border: none;
+ border-top: dashed 1px;
+}
+
+.elfinder-quicklook-preview-charsleft span {
+ font-size: 90%;
+ font-style: italic;
+ cursor: pointer;
+}
+
+/* html/pdf preview */
+.elfinder-quicklook-preview-html,
+.elfinder-quicklook-preview-pdf,
+.elfinder-quicklook-preview-iframe {
+ width: 100%;
+ height: 100%;
+ background: #fff;
+ margin: 0;
+ border: none;
+ display: block;
+}
+
+/* swf preview container */
+.elfinder-quicklook-preview-flash {
+ width: 100%;
+ height: 100%;
+}
+
+/* audio preview container */
+.elfinder-quicklook-preview-audio {
+ width: 100%;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+}
+
+/* audio preview using embed */
+embed.elfinder-quicklook-preview-audio {
+ height: 30px;
+ background: transparent;
+}
+
+/* video preview container */
+.elfinder-quicklook-preview-video {
+ width: 100%;
+ height: 100%;
+}
+
+/* allow user select */
+.elfinder .elfinder-quicklook .elfinder-quicklook-info *,
+.elfinder .elfinder-quicklook .elfinder-quicklook-preview * {
+ -webkit-user-select: auto;
+ -moz-user-select: text;
+ -khtml-user-select: text;
+ user-select: text;
+}
+
+/* File: /css/statusbar.css */
+/******************************************************************/
+/* STATUSBAR STYLES */
+/******************************************************************/
+
+/* statusbar container */
+.elfinder-statusbar {
+ display: flex;
+ justify-content: space-between;
+ cursor: default;
+ text-align: center;
+ font-weight: normal;
+ padding: .2em .5em;
+ border-right: 0 solid transparent;
+ border-bottom: 0 solid transparent;
+ border-left: 0 solid transparent;
+}
+
+.elfinder-statusbar:before,
+.elfinder-statusbar:after {
+ display: none;
+}
+
+.elfinder-statusbar span {
+ vertical-align: bottom;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+}
+
+.elfinder-statusbar span.elfinder-path-other {
+ flex-shrink: 0;
+ text-overflow: clip;
+ -o-text-overflow: clip;
+}
+
+.elfinder-statusbar span.ui-state-hover,
+.elfinder-statusbar span.ui-state-active {
+ border: none;
+}
+
+.elfinder-statusbar span.elfinder-path-cwd {
+ cursor: default;
+}
+
+/* path in statusbar */
+.elfinder-path {
+ display: flex;
+ order: 1;
+ flex-grow: 1;
+ cursor: pointer;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+ max-width: 30%\9;
+}
+
+.elfinder-ltr .elfinder-path {
+ text-align: left;
+ float: left\9;
+}
+
+.elfinder-rtl .elfinder-path {
+ text-align: right;
+ float: right\9;
+}
+
+/* path in workzone (case of swipe to navbar close) */
+.elfinder-workzone-path {
+ position: relative;
+}
+
+.elfinder-workzone-path .elfinder-path {
+ position: relative;
+ font-size: .75em;
+ font-weight: normal;
+ float: none;
+ max-width: none;
+ overflow: hidden;
+ overflow-x: hidden;
+ text-overflow: initial;
+ -o-text-overflow: initial;
+}
+
+.elfinder-mobile .elfinder-workzone-path .elfinder-path {
+ overflow: auto;
+ overflow-x: scroll;
+}
+
+.elfinder-ltr .elfinder-workzone-path .elfinder-path {
+ margin-left: 24px;
+}
+
+.elfinder-rtl .elfinder-workzone-path .elfinder-path {
+ margin-right: 24px;
+}
+
+.elfinder-workzone-path .elfinder-path span {
+ display: inline-block;
+ padding: 5px 3px;
+}
+
+.elfinder-workzone-path .elfinder-path span.elfinder-path-cwd {
+ font-weight: bold;
+}
+
+.elfinder-workzone-path .elfinder-path span.ui-state-hover,
+.elfinder-workzone-path .elfinder-path span.ui-state-active {
+ border: none;
+}
+
+.elfinder-workzone-path .elfinder-path-roots {
+ position: absolute;
+ top: 0;
+ width: 24px;
+ height: 20px;
+ padding: 2px;
+ border: none;
+ overflow: hidden;
+}
+
+.elfinder-ltr .elfinder-workzone-path .elfinder-path-roots {
+ left: 0;
+}
+
+.elfinder-rtl .elfinder-workzone-path .elfinder-path-roots {
+ right: 0;
+}
+
+/* total/selected size in statusbar */
+.elfinder-stat-size {
+ order: 3;
+ flex-grow: 1;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.elfinder-ltr .elfinder-stat-size {
+ text-align: right;
+ float: right\9;
+}
+
+.elfinder-rtl .elfinder-stat-size {
+ text-align: left;
+ float: left\9;
+}
+
+/* info of current selected item */
+.elfinder-stat-selected {
+ order: 2;
+ margin: 0 .5em;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+/* File: /css/toast.css */
+/*
+ * CSS for Toastr
+ * Copyright 2012-2015
+ * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.
+ * All Rights Reserved.
+ * Use, reproduction, distribution, and modification of this code is subject to the terms and
+ * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php
+ *
+ * ARIA Support: Greta Krafsig
+ *
+ * Project: https://github.com/CodeSeven/toastr
+ */
+
+.elfinder .elfinder-toast {
+ position: absolute;
+ top: 12px;
+ right: 12px;
+ max-width: 90%;
+ cursor: default;
+}
+
+.elfinder .elfinder-toast > div {
+ position: relative;
+ pointer-events: auto;
+ overflow: hidden;
+ margin: 0 0 6px;
+ padding: 8px 16px 8px 50px;
+ -moz-border-radius: 3px 3px 3px 3px;
+ -webkit-border-radius: 3px 3px 3px 3px;
+ border-radius: 3px 3px 3px 3px;
+ background-position: 15px center;
+ background-repeat: no-repeat;
+ -moz-box-shadow: 0 0 12px #999999;
+ -webkit-box-shadow: 0 0 12px #999999;
+ box-shadow: 0 0 12px #999999;
+ color: #FFFFFF;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ background-color: #030303;
+ text-align: center;
+}
+
+.elfinder .elfinder-toast > .toast-info {
+ background-color: #2F96B4;
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
+}
+
+.elfinder .elfinder-toast > .toast-error {
+ background-color: #BD362F;
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
+}
+
+.elfinder .elfinder-toast > .toast-success {
+ background-color: #51A351;
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
+}
+
+.elfinder .elfinder-toast > .toast-warning {
+ background-color: #F89406;
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
+}
+
+.elfinder .elfinder-toast > div button.ui-button {
+ background-image: none;
+ margin-top: 8px;
+ padding: .5em .8em;
+}
+
+.elfinder .elfinder-toast > .toast-success button.ui-button {
+ background-color: green;
+ color: #FFF;
+}
+
+.elfinder .elfinder-toast > .toast-success button.ui-button.ui-state-hover {
+ background-color: #add6ad;
+ color: #254b25;
+}
+
+.elfinder .elfinder-toast > .toast-info button.ui-button {
+ background-color: #046580;
+ color: #FFF;
+}
+
+.elfinder .elfinder-toast > .toast-info button.ui-button.ui-state-hover {
+ background-color: #7DC6DB;
+ color: #046580;
+}
+
+.elfinder .elfinder-toast > .toast-warning button.ui-button {
+ background-color: #dd8c1a;
+ color: #FFF;
+}
+
+.elfinder .elfinder-toast > .toast-warning button.ui-button.ui-state-hover {
+ background-color: #e7ae5e;
+ color: #422a07;
+}
+
+/* File: /css/toolbar.css */
+/*********************************************/
+/* TOOLBAR STYLES */
+/*********************************************/
+/* toolbar container */
+.elfinder-toolbar {
+ padding: 4px 0 3px 0;
+ border-left: 0 solid transparent;
+ border-top: 0 solid transparent;
+ border-right: 0 solid transparent;
+ max-height: 50%;
+ overflow-y: auto;
+}
+
+/* container for button's group */
+.elfinder-buttonset {
+ margin: 1px 4px;
+ float: left;
+ background: transparent;
+ padding: 0;
+ overflow: hidden;
+}
+
+/*.elfinder-buttonset:first-child { margin:0; }*/
+
+/* button */
+.elfinder .elfinder-button {
+ min-width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 4px;
+ float: left;
+ overflow: hidden;
+ position: relative;
+ border: 0 solid;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ line-height: 1;
+ cursor: default;
+}
+
+.elfinder-rtl .elfinder-button {
+ float: right;
+}
+
+.elfinder-touch .elfinder-button {
+ min-width: 20px;
+ height: 20px;
+}
+
+.elfinder .ui-icon-search {
+ cursor: pointer;
+}
+
+/* separator between buttons, required for berder between button with ui color */
+.elfinder-toolbar-button-separator {
+ float: left;
+ padding: 0;
+ height: 24px;
+ border-top: 0 solid;
+ border-right: 0 solid;
+ border-bottom: 0 solid;
+ width: 0;
+}
+
+.elfinder-rtl .elfinder-toolbar-button-separator {
+ float: right;
+}
+
+.elfinder-touch .elfinder-toolbar-button-separator {
+ height: 28px;
+}
+
+/* change icon opacity^ not button */
+.elfinder .elfinder-button.ui-state-disabled {
+ opacity: 1;
+ filter: Alpha(Opacity=100);
+}
+
+.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon,
+.elfinder .elfinder-button.ui-state-disabled .elfinder-button-text {
+ opacity: .4;
+ filter: Alpha(Opacity=40);
+}
+
+/* rtl enviroment */
+.elfinder-rtl .elfinder-buttonset {
+ float: right;
+}
+
+/* icon inside button */
+.elfinder-button-icon {
+ width: 16px;
+ height: 16px;
+ /*display:block;*/
+ display: inline-block;
+ background: url('../img/toolbar.png') no-repeat;
+}
+
+.elfinder-button-text {
+ position: relative;
+ display: inline-block;
+ top: -4px;
+ margin: 0 2px;
+ font-size: 12px;
+}
+
+.elfinder-touch .elfinder-button-icon {
+ -moz-transform-origin: top left;
+ -moz-transform: scale(1.25);
+ zoom: 1.25;
+}
+
+.elfinder-touch .elfinder-button-text {
+ -moz-transform: translate(3px, 3px);
+ top: -5px;
+}
+
+/* buttons icons */
+.elfinder-button-icon-home {
+ background-position: 0 0;
+}
+
+.elfinder-button-icon-back {
+ background-position: 0 -112px;
+}
+
+.elfinder-button-icon-forward {
+ background-position: 0 -128px;
+}
+
+.elfinder-button-icon-up {
+ background-position: 0 -144px;
+}
+
+.elfinder-button-icon-dir {
+ background-position: 0 -16px;
+}
+
+.elfinder-button-icon-opendir {
+ background-position: 0 -32px;
+}
+
+.elfinder-button-icon-reload {
+ background-position: 0 -160px;
+}
+
+.elfinder-button-icon-open {
+ background-position: 0 -176px;
+}
+
+.elfinder-button-icon-mkdir {
+ background-position: 0 -192px;
+}
+
+.elfinder-button-icon-mkfile {
+ background-position: 0 -208px;
+}
+
+.elfinder-button-icon-rm {
+ background-position: 0 -832px;
+}
+
+.elfinder-button-icon-trash {
+ background-position: 0 -224px;
+}
+
+.elfinder-button-icon-restore {
+ background-position: 0 -816px;
+}
+
+.elfinder-button-icon-copy {
+ background-position: 0 -240px;
+}
+
+.elfinder-button-icon-cut {
+ background-position: 0 -256px;
+}
+
+.elfinder-button-icon-paste {
+ background-position: 0 -272px;
+}
+
+.elfinder-button-icon-getfile {
+ background-position: 0 -288px;
+}
+
+.elfinder-button-icon-duplicate {
+ background-position: 0 -304px;
+}
+
+.elfinder-button-icon-rename {
+ background-position: 0 -320px;
+}
+
+.elfinder-button-icon-edit {
+ background-position: 0 -336px;
+}
+
+.elfinder-button-icon-quicklook {
+ background-position: 0 -352px;
+}
+
+.elfinder-button-icon-upload {
+ background-position: 0 -368px;
+}
+
+.elfinder-button-icon-download {
+ background-position: 0 -384px;
+}
+
+.elfinder-button-icon-info {
+ background-position: 0 -400px;
+}
+
+.elfinder-button-icon-extract {
+ background-position: 0 -416px;
+}
+
+.elfinder-button-icon-archive {
+ background-position: 0 -432px;
+}
+
+.elfinder-button-icon-view {
+ background-position: 0 -448px;
+}
+
+.elfinder-button-icon-view-list {
+ background-position: 0 -464px;
+}
+
+.elfinder-button-icon-help {
+ background-position: 0 -480px;
+}
+
+.elfinder-button-icon-resize {
+ background-position: 0 -512px;
+}
+
+.elfinder-button-icon-link {
+ background-position: 0 -528px;
+}
+
+.elfinder-button-icon-search {
+ background-position: 0 -561px;
+}
+
+.elfinder-button-icon-sort {
+ background-position: 0 -577px;
+}
+
+.elfinder-button-icon-rotate-r {
+ background-position: 0 -625px;
+}
+
+.elfinder-button-icon-rotate-l {
+ background-position: 0 -641px;
+}
+
+.elfinder-button-icon-netmount {
+ background-position: 0 -688px;
+}
+
+.elfinder-button-icon-netunmount {
+ background-position: 0 -96px;
+}
+
+.elfinder-button-icon-places {
+ background-position: 0 -704px;
+}
+
+.elfinder-button-icon-chmod {
+ background-position: 0 -48px;
+}
+
+.elfinder-button-icon-accept {
+ background-position: 0 -736px;
+}
+
+.elfinder-button-icon-menu {
+ background-position: 0 -752px;
+}
+
+.elfinder-button-icon-colwidth {
+ background-position: 0 -768px;
+}
+
+.elfinder-button-icon-fullscreen {
+ background-position: 0 -784px;
+}
+
+.elfinder-button-icon-unfullscreen {
+ background-position: 0 -800px;
+}
+
+.elfinder-button-icon-empty {
+ background-position: 0 -848px;
+}
+
+.elfinder-button-icon-undo {
+ background-position: 0 -864px;
+}
+
+.elfinder-button-icon-redo {
+ background-position: 0 -880px;
+}
+
+.elfinder-button-icon-preference {
+ background-position: 0 -896px;
+}
+
+.elfinder-button-icon-mkdirin {
+ background-position: 0 -912px;
+}
+
+.elfinder-button-icon-selectall {
+ background-position: 0 -928px;
+}
+
+.elfinder-button-icon-selectnone {
+ background-position: 0 -944px;
+}
+
+.elfinder-button-icon-selectinvert {
+ background-position: 0 -960px;
+}
+
+.elfinder-button-icon-opennew {
+ background-position: 0 -976px;
+}
+
+.elfinder-button-icon-hide {
+ background-position: 0 -992px;
+}
+
+.elfinder-button-icon-text {
+ background-position: 0 -1008px;
+}
+
+/* button icon mirroring for rtl */
+.elfinder-rtl .elfinder-button-icon-back,
+.elfinder-rtl .elfinder-button-icon-forward,
+.elfinder-rtl .elfinder-button-icon-getfile,
+.elfinder-rtl .elfinder-button-icon-help,
+.elfinder-rtl .elfinder-button-icon-redo,
+.elfinder-rtl .elfinder-button-icon-rename,
+.elfinder-rtl .elfinder-button-icon-search,
+.elfinder-rtl .elfinder-button-icon-undo,
+.elfinder-rtl .elfinder-button-icon-view-list,
+.elfinder-rtl .ui-icon-search {
+ -ms-transform: scale(-1, 1);
+ -webkit-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+/* button with dropdown menu*/
+.elfinder .elfinder-menubutton {
+ overflow: visible;
+}
+
+/* button with spinner icon */
+.elfinder-button-icon-spinner {
+ background: url("../img/spinner-mini.gif") center center no-repeat;
+}
+
+/* menu */
+.elfinder-button-menu {
+ position: absolute;
+ margin-top: 24px;
+ padding: 3px 0;
+ overflow-y: auto;
+}
+
+.elfinder-touch .elfinder-button-menu {
+ margin-top: 30px;
+}
+
+/* menu item */
+.elfinder-button-menu-item {
+ white-space: nowrap;
+ cursor: default;
+ padding: 5px 19px;
+ position: relative;
+}
+
+.elfinder-touch .elfinder-button-menu-item {
+ padding: 12px 19px
+}
+
+/* fix hover ui class */
+.elfinder-button-menu .ui-state-hover {
+ border: 0 solid;
+}
+
+.elfinder-button-menu-item-separated {
+ border-top: 1px solid #ccc;
+}
+
+.elfinder-button-menu-item .ui-icon {
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ left: 2px;
+ top: 50%;
+ margin-top: -8px;
+ display: none;
+}
+
+.elfinder-button-menu-item-selected .ui-icon {
+ display: block;
+}
+
+.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s {
+ display: none;
+}
+
+.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n {
+ display: none;
+}
+
+/* hack for upload button */
+.elfinder-button form {
+ position: absolute;
+ top: 0;
+ right: 0;
+ opacity: 0;
+ filter: Alpha(Opacity=0);
+ cursor: pointer;
+}
+
+.elfinder .elfinder-button form input {
+ background: transparent;
+ cursor: default;
+}
+
+/* search "button" */
+.elfinder .elfinder-button-search {
+ border: 0 solid;
+ background: transparent;
+ padding: 0;
+ margin: 1px 4px;
+ height: auto;
+ min-height: 26px;
+ width: 70px;
+ overflow: visible;
+}
+
+.elfinder .elfinder-button-search.ui-state-active {
+ width: 220px;
+}
+
+/* search "pull down menu" */
+.elfinder .elfinder-button-search-menu {
+ font-size: 8pt;
+ text-align: center;
+ width: auto;
+ min-width: 180px;
+ position: absolute;
+ top: 30px;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+.elfinder-ltr .elfinder-button-search-menu {
+ right: 22px;
+ left: auto;
+}
+
+.elfinder-rtl .elfinder-button-search-menu {
+ right: auto;
+ left: 22px;
+}
+
+.elfinder-touch .elfinder-button-search-menu {
+ top: 34px;
+}
+
+.elfinder .elfinder-button-search-menu div {
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ display: table;
+}
+
+.elfinder .elfinder-button-search-menu div .ui-state-hover {
+ border: 1px solid;
+}
+
+/* ltr/rte enviroment */
+.elfinder-ltr .elfinder-button-search {
+ float: right;
+ margin-right: 10px;
+}
+
+.elfinder-rtl .elfinder-button-search {
+ float: left;
+ margin-left: 10px;
+}
+
+.elfinder-rtl .ui-controlgroup > .ui-controlgroup-item {
+ float: right;
+}
+
+/* search text field */
+.elfinder-button-search input[type=text] {
+ box-sizing: border-box;
+ width: 100%;
+ height: 26px;
+ padding: 0 20px;
+ line-height: 22px;
+ border: 0 solid;
+ border: 1px solid #aaa;
+ -moz-border-radius: 12px;
+ -webkit-border-radius: 12px;
+ border-radius: 12px;
+ outline: 0px solid;
+}
+
+.elfinder-button-search input::-ms-clear {
+ display: none;
+}
+
+.elfinder-touch .elfinder-button-search input {
+ height: 30px;
+ line-height: 28px;
+}
+
+.elfinder-rtl .elfinder-button-search input {
+ direction: rtl;
+}
+
+/* icons */
+.elfinder-button-search .ui-icon {
+ position: absolute;
+ height: 18px;
+ top: 50%;
+ margin: -8px 4px 0 4px;
+ opacity: .6;
+ filter: Alpha(Opacity=60);
+}
+
+.elfinder-button-search-menu .ui-checkboxradio-icon {
+ display: none;
+}
+
+/* search/close icons */
+.elfinder-ltr .elfinder-button-search .ui-icon-search {
+ left: 0;
+}
+
+.elfinder-rtl .elfinder-button-search .ui-icon-search {
+ right: 0;
+}
+
+.elfinder-ltr .elfinder-button-search .ui-icon-close {
+ right: 0;
+}
+
+.elfinder-rtl .elfinder-button-search .ui-icon-close {
+ left: 0;
+}
+
+/* toolbar swipe handle */
+.elfinder-toolbar-swipe-handle {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ height: 50px;
+ width: 100%;
+ pointer-events: none;
+ background: linear-gradient(to bottom,
+ rgba(221, 228, 235, 1) 0,
+ rgba(221, 228, 235, 0.8) 2px,
+ rgba(216, 223, 230, 0.3) 5px,
+ rgba(0, 0, 0, 0.1) 95%,
+ rgba(0, 0, 0, 0) 100%);
+}
+
--- /dev/null
+/*!
+ * elFinder - file manager for web
+ * Version 2.1.46 (2019-01-14)
+ * http://elfinder.org
+ *
+ * Copyright 2009-2019, Studio 42
+ * Licensed under a 3-clauses BSD license
+ */
+.elfinder-resize-container{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{float:left}.elfinder-resize-control input[type=number]{border:1px solid #aaa;text-align:right;width:4.5em}.elfinder-resize-control input.elfinder-resize-bg{text-align:center;width:5em;direction:ltr}.elfinder-dialog-resize .elfinder-resize-control-panel{margin-top:10px}.elfinder-dialog-resize .elfinder-resize-imgrotate,.elfinder-dialog-resize .elfinder-resize-pallet{cursor:pointer}.elfinder-dialog-resize .elfinder-resize-picking{cursor:crosshair}.elfinder-dialog-resize .elfinder-resize-grid8+button{padding-top:2px;padding-bottom:2px}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:hidden;text-align:left;direction:ltr}.elfinder-resize-handle,div.elfinder-cwd-wrapper-list tr.ui-state-default td{position:relative}.elfinder-resize-handle-hline,.elfinder-resize-handle-vline{position:absolute;background-image:url(../img/crop.gif)}.elfinder-resize-handle-hline{width:100%;height:1px!important;background-repeat:repeat-x}.elfinder-resize-handle-vline{width:1px!important;height:100%;background-repeat:repeat-y}.elfinder-resize-handle-hline-top{top:0;left:0}.elfinder-resize-handle-hline-bottom{bottom:0;left:0}.elfinder-resize-handle-vline-left{top:0;left:0}.elfinder-resize-handle-vline-right{top:0;right:0}.elfinder-resize-handle-point{position:absolute;width:8px;height:8px;border:1px solid #777;background:0 0}.elfinder-resize-handle-point-n{top:0;left:50%;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-e,.elfinder-resize-handle-point-ne{top:0;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-e{top:50%}.elfinder-resize-handle-point-se{bottom:0;right:0;margin-bottom:-5px;margin-right:-5px}.elfinder-resize-handle-point-s,.elfinder-resize-handle-point-sw{bottom:0;left:50%;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-sw{left:0}.elfinder-resize-handle-point-nw,.elfinder-resize-handle-point-w{top:50%;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-nw{top:0}.elfinder-dialog.elfinder-dialog-resize .ui-resizable-e{width:10px;height:100%}.elfinder-dialog.elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-resize-loading{position:absolute;width:200px;height:30px;top:50%;margin-top:-25px;left:50%;margin-left:-100px;text-align:center;background:url(../img/progress.gif) center bottom repeat-x}.elfinder-resize-row{margin-bottom:9px;position:relative}.elfinder-resize-label{float:left;width:80px;padding-top:3px}.elfinder-resize-checkbox-label{border:1px solid transparent}.elfinder-dialog-resize .elfinder-resize-whctrls{margin:-20px 5px 0}.elfinder-ltr .elfinder-dialog-resize .elfinder-resize-whctrls{float:right}.elfinder-help-team div,.elfinder-rtl .elfinder-dialog-resize .elfinder-resize-whctrls{float:left}.elfinder-dialog-resize .ui-resizable-e,.elfinder-dialog-resize .ui-resizable-w{height:100%;width:10px}.elfinder-dialog-resize .ui-resizable-n,.elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-dialog-resize .ui-resizable-e{margin-right:-7px}.elfinder-dialog-resize .ui-resizable-w{margin-left:-7px}.elfinder-dialog-resize .ui-resizable-s{margin-bottom:-7px}.elfinder-dialog-resize .ui-resizable-n{margin-top:-7px}.elfinder-dialog-resize .ui-resizable-ne,.elfinder-dialog-resize .ui-resizable-nw,.elfinder-dialog-resize .ui-resizable-se,.elfinder-dialog-resize .ui-resizable-sw{width:10px;height:10px}.elfinder-dialog-resize .ui-resizable-se{background:0 0;bottom:0;right:0;margin-right:-7px;margin-bottom:-7px}.elfinder-dialog-resize .ui-resizable-sw{margin-left:-7px;margin-bottom:-7px}.elfinder-dialog-resize .ui-resizable-ne{margin-right:-7px;margin-top:-7px}.elfinder-dialog-resize .ui-resizable-nw{margin-left:-7px;margin-top:-7px}.elfinder-touch .elfinder-dialog-resize .ui-resizable-n,.elfinder-touch .elfinder-dialog-resize .ui-resizable-s{height:20px}.elfinder-touch .elfinder-dialog-resize .ui-resizable-e,.elfinder-touch .elfinder-dialog-resize .ui-resizable-w{width:20px}.elfinder-touch .elfinder-dialog-resize .ui-resizable-ne,.elfinder-touch .elfinder-dialog-resize .ui-resizable-nw,.elfinder-touch .elfinder-dialog-resize .ui-resizable-se,.elfinder-touch .elfinder-dialog-resize .ui-resizable-sw{width:30px;height:30px}.elfinder-touch .elfinder-dialog-resize .elfinder-resize-preview .ui-resizable-se{width:30px;height:30px;margin:0}.elfinder-dialog-resize .ui-icon-grip-solid-vertical{position:absolute;top:50%;right:0;margin-top:-8px;margin-right:-11px}.elfinder-dialog-resize .ui-icon-grip-solid-horizontal{position:absolute;left:50%;bottom:0;margin-left:-8px;margin-bottom:-11px}.elfinder-dialog-resize .elfinder-resize-row .ui-buttonset{float:right}.elfinder-dialog-resize .elfinder-resize-degree input,.elfinder-dialog-resize input.elfinder-resize-quality,.elfinder-mobile .elfinder-resize-control input[type=number]{width:3.5em}.elfinder-mobile .elfinder-dialog-resize .elfinder-resize-degree input,.elfinder-mobile .elfinder-dialog-resize input.elfinder-resize-quality{width:2.5em}.elfinder-dialog-resize .elfinder-resize-degree button.ui-button{padding:6px 8px}.elfinder-dialog-resize button.ui-button span{padding:0}.elfinder-dialog-resize .elfinder-resize-jpgsize{font-size:90%}.ui-widget-content .elfinder-resize-container .elfinder-resize-rotate-slider{width:195px;margin:10px 7px;background-color:#fafafa}.elfinder-dialog-resize .elfinder-resize-type span.ui-checkboxradio-icon{display:none}.elfinder-resize-preset-container{box-sizing:border-box;border-radius:5px}.elfinder-file-edit{width:100%;height:100%;margin:0;padding:2px;border:1px solid #ccc;box-sizing:border-box;resize:none}.elfinder-touch .elfinder-file-edit{font-size:16px}.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor{background-color:#fff}.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor{width:100%;height:300px;max-height:100%;text-align:center}.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor *{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;user-select:none}.elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-main{top:0}.elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-header{display:none}.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-crop .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-draw .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-filter .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-flip .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-icon .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-mask .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-rotate .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-shape .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-text .tui-image-editor-wrap{height:calc(100% - 150px)}.elfinder-touch.elfinder-fullscreen-native textarea.elfinder-file-edit{padding-bottom:20em;margin-bottom:-20em}.elfinder-dialog-edit .ui-dialog-buttonpane .elfinder-dialog-confirm-encoding{font-size:12px}.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras{margin:0 1em 0 .2em;float:left}.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras-quality{padding-top:6px}.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras select{font-size:12px;margin-top:8px}.elfinder-dialog-edit .ui-dialog-buttonpane .ui-icon,.elfinder-edit-onlineconvert-bottom-btn button,.elfinder-edit-onlineconvert-button button,.elfinder-preference dt label{cursor:pointer}.elfinder-edit-spinner{position:absolute;top:50%;text-align:center;width:100%;font-size:16pt}.elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner,.elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner-text{float:none}.elfinder-dialog-edit .elfinder-toast>div{width:280px}.elfinder-edit-onlineconvert-button{display:inline-block;width:180px;min-height:30px;vertical-align:top}.elfinder-edit-onlineconvert-bottom-btn button.elfinder-button-ios-multiline{-webkit-appearance:none;border-radius:16px;color:#000;text-align:center;padding:8px;background-color:#eee;background-image:-webkit-linear-gradient(top,#fafafa 0%,#c4c4c4 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#c4c4c4 100%)}.elfinder-edit-onlineconvert-button .elfinder-button-icon{margin:0 10px;vertical-align:middle;cursor:pointer}.elfinder-edit-onlineconvert-bottom-btn{text-align:center;margin:10px 0 0}.elfinder-edit-onlineconvert-link{margin-top:1em;text-align:center}.elfinder-edit-onlineconvert-link .elfinder-button-icon{background-image:url(../img/editor-icons.png);background-repeat:no-repeat;background-position:0 -144px;margin-bottom:-3px}.elfinder-edit-onlineconvert-link a,ul.elfinder-help-integrations a{text-decoration:none}div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{position:absolute;top:4px;left:0;right:0;margin:auto 0 auto auto}.elfinder-touch div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{top:7px}.elfinder-rtl div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{margin:auto auto auto 0}.elfinder-help{margin-bottom:.5em;-webkit-overflow-scrolling:touch}.elfinder-help .ui-tabs-panel{overflow:auto;padding:10px}.elfinder-dialog .ui-tabs .ui-tabs-nav li{overflow:hidden}.elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.2em .8em;display:inline-block}.elfinder-touch .elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.5em}.elfinder-dialog .ui-tabs-active a{background:inherit}.elfinder-help-shortcuts{height:auto;padding:10px;margin:0;box-sizing:border-box}.elfinder-help-shortcut{white-space:nowrap;clear:both}.elfinder-help-shortcut-pattern{float:left;width:160px}.elfinder-help-logo{width:100px;height:96px;float:left;margin-right:1em;background:url(../img/logo.png) center center no-repeat}.elfinder-help h3{font-size:1.5em;margin:.2em 0 .3em}.elfinder-help-separator{clear:both;padding:.5em}.elfinder-help-link{display:inline-block;margin-right:12px;padding:2px 0;white-space:nowrap}.elfinder-rtl .elfinder-help-link{margin-right:0;margin-left:12px}.elfinder-help .ui-priority-secondary{font-size:.9em}.elfinder-help .ui-priority-primary{margin-bottom:7px}.elfinder-help-team{clear:both;text-align:right;border-bottom:1px solid #ccc;margin:.5em 0;font-size:.9em}.elfinder-help-license{font-size:.9em}.elfinder-help-disabled{font-weight:700;text-align:center;margin:90px 0}.elfinder-help .elfinder-dont-panic{display:block;border:1px solid transparent;width:200px;height:200px;margin:30px auto;text-decoration:none;text-align:center;position:relative;background:#d90004;-moz-box-shadow:5px 5px 9px #111;-webkit-box-shadow:5px 5px 9px #111;box-shadow:5px 5px 9px #111;background:-moz-radial-gradient(80px 80px,circle farthest-corner,#d90004 35%,#960004 100%);background:-webkit-gradient(radial,80 80,60,80 80,120,from(#d90004),to(#960004));-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;outline:none}.elfinder-help .elfinder-dont-panic span{font-size:3em;font-weight:700;text-align:center;color:#fff;position:absolute;left:0;top:45px}ul.elfinder-help-integrations ul{padding:0;margin:0 1em 1em}ul.elfinder-help-integrations a:hover{text-decoration:underline}.elfinder-help-debug{height:100%;padding:0;margin:0;overflow:none;border:none}.elfinder-help-debug .ui-tabs-panel{padding:0;margin:0;overflow:auto}.elfinder-help-debug fieldset{margin-bottom:10px;border-color:#789;border-radius:10px}.elfinder-help-debug legend{font-size:1.2em;font-weight:700;color:#2e8b57}.elfinder-help-debug dl{margin:0}.elfinder-help-debug dt{color:#789}.elfinder-help-debug dt:before{content:"["}.elfinder-help-debug dt:after{content:"]"}.elfinder-help-debug dd{margin-left:1em}.elfinder-dialog .elfinder-preference .ui-tabs-nav{margin-bottom:1px;height:auto}.elfinder-preference .ui-tabs-panel{padding:10px 10px 0;overflow:auto;box-sizing:border-box;-webkit-overflow-scrolling:touch}.elfinder-preference a.ui-state-hover,.elfinder-preference label.ui-state-hover{border:none}.elfinder-preference dl{width:100%;display:inline-block;margin:.5em 0}.elfinder-preference dt{display:block;width:200px;clear:left;float:left;max-width:50%}.elfinder-rtl .elfinder-preference dt{clear:right;float:right}.elfinder-preference dd{margin-bottom:1em}.elfinder-preference dd input[type=checkbox],.elfinder-preference dd label{white-space:nowrap;display:inline-block;cursor:pointer}.elfinder-preference dt.elfinder-preference-checkboxes{width:100%;max-width:none}.elfinder-preference dd.elfinder-preference-checkboxes{padding-top:3ex}.elfinder-preference select{max-width:100%}.elfinder-preference dd.elfinder-preference-iconSize .ui-slider{width:50%;max-width:100px;display:inline-block;margin:0 10px}.elfinder-preference button{margin:0 16px}.elfinder-preference button+button{margin:0 -10px}.elfinder-preference .elfinder-preference-taball .elfinder-reference-hide-taball{display:none}.elfinder-preference-theme fieldset{margin-bottom:10px}.elfinder-preference-theme legend a{font-size:1.8em;text-decoration:none;cursor:pointer}.elfinder-preference-theme dt{width:20%;word-break:break-all}.elfinder-preference-theme dt:after{content:" :"}.elfinder-preference-theme dd{margin-inline-start:20%}.elfinder-preference img.elfinder-preference-theme-image{display:block;margin-left:auto;margin-right:auto;max-width:90%;max-height:200px;cursor:pointer}.elfinder-preference-theme-btn,.elfinder-rename-batch-type{text-align:center}.elfinder-preference-theme button.elfinder-preference-theme-default{display:inline;margin:0 10px;font-size:8pt}.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon:before{right:33px;left:auto}.elfinder-info-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:none}.elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{position:absolute;bottom:2px;width:16px;height:16px;padding:10px;border:none;overflow:hidden;cursor:pointer}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon,.elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{left:2px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon,.elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{right:2px}.elfinder-ltr .elfinder-rm-title .elfinder-cwd-icon:before{left:38px}.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon:before{right:86px;left:auto}.elfinder-rm-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:none}.elfinder-rename-batch div{margin:5px 8px}.elfinder-rename-batch .elfinder-rename-batch-name input{width:100%;font-size:1.6em}.elfinder-rename-batch .elfinder-rename-batch-type label{margin:2px;font-size:.9em}.elfinder-rename-batch-preview{padding:0 8px;font-size:1.1em;min-height:4ex}.ui-front{z-index:100}.elfinder{padding:0;position:relative;display:block;visibility:visible;font-size:18px;font-family:Verdana,Arial,Helvetica,sans-serif}.elfinder-ios input,.elfinder-ios select,.elfinder-ios textarea{font-size:16px!important}.elfinder.elfinder-fullscreen>.ui-resizable-handle{display:none}.elfinder-font-mono{line-height:2ex}.elfinder.elfinder-processing *{cursor:progress!important}.elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after{position:absolute;top:0;width:100%;height:3px;content:'';left:0;background-image:url(../img/progress.gif);opacity:.6;pointer-events:none}.elfinder :not(input):not(textarea):not(select):not([contenteditable=true]),.elfinder-contextmenu :not(input):not(textarea):not(select):not([contenteditable=true]){-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;user-select:none}.elfinder .overflow-scrolling-touch{-webkit-overflow-scrolling:touch}.elfinder-rtl{text-align:right;direction:rtl}.elfinder-workzone{padding:0;position:relative;overflow:hidden}.elfinder-lock,.elfinder-perms,.elfinder-symlink{position:absolute;width:16px;height:16px;background-image:url(../img/toolbar.png);background-repeat:no-repeat}.elfinder-perms,.elfinder-symlink{background-position:0 -528px}.elfinder-na .elfinder-perms{background-position:0 -96px}.elfinder-ro .elfinder-perms{background-position:0 -64px}.elfinder-wo .elfinder-perms{background-position:0 -80px}.elfinder-group .elfinder-perms{background-position:0 0}.elfinder-lock{background-position:0 -656px}.elfinder-drag-helper{top:0;left:0;width:70px;height:60px;padding:0 0 0 25px;z-index:100000;will-change:left,top}.elfinder-drag-helper.html5-native{position:absolute;top:-1000px;left:-1000px}.elfinder-drag-helper-icon-status{position:absolute;width:16px;height:16px;left:42px;top:60px;background:url(../img/toolbar.png) 0 -96px no-repeat;display:block}.elfinder-drag-helper-move .elfinder-drag-helper-icon-status{background-position:0 -720px}.elfinder-drag-helper-plus .elfinder-drag-helper-icon-status{background-position:0 -544px}.elfinder-drag-num{display:inline-box;position:absolute;top:0;left:0;width:auto;height:14px;text-align:center;padding:1px 3px;font-weight:700;color:#fff;background-color:red;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-drag-helper .elfinder-cwd-icon{margin:0 0 0 -24px;float:left}.elfinder-overlay{position:absolute;opacity:.2;filter:Alpha(Opacity=20)}.elfinder .elfinder-panel{position:relative;background-image:none;padding:7px 12px}[draggable=true]{-khtml-user-drag:element}.elfinder [contentEditable=true]:empty:not(:focus):before{content:attr(data-ph)}.elfinder div.elfinder-bottomtray{position:fixed;bottom:0;max-width:100%;opacity:.8}.elfinder.elfinder-ltr div.elfinder-bottomtray{left:0}.elfinder.elfinder-rtl div.elfinder-bottomtray{right:0}.elfinder .elfinder-ui-tooltip,.elfinder-ui-tooltip{font-size:14px;padding:2px 4px}.elfinder .elfinder-contextmenu,.elfinder .elfinder-contextmenu-sub{position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0;top:0;left:0}.elfinder .elfinder-contextmenu-sub{top:5px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder .elfinder-contextmenu-header{margin-top:-4px;padding:0 .5em .2ex;border:none;text-align:center}.elfinder .elfinder-contextmenu-header span{font-size:.8em;font-weight:bolder}.elfinder .elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder .elfinder-contextmenu-item.ui-state-active{border:none}.elfinder .elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:auto;right:auto;top:50%;margin-top:-8px}.elfinder-touch .elfinder-contextmenu-item{padding:12px 38px}.elfinder-navbar-root-local.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_local.svg);background-size:contain}.elfinder-navbar-root-trash.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_trash.svg);background-size:contain}.elfinder-navbar-root-ftp.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_ftp.svg);background-size:contain}.elfinder-navbar-root-sql.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_sql.svg);background-size:contain}.elfinder-navbar-root-dropbox.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_dropbox.svg);background-size:contain}.elfinder-navbar-root-googledrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_googledrive.svg);background-size:contain}.elfinder-navbar-root-onedrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_onedrive.svg);background-size:contain}.elfinder-navbar-root-box.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_box.svg);background-size:contain}.elfinder-navbar-root-zip.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_zip.svg);background-size:contain}.elfinder-navbar-root-network.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_network.svg);background-size:contain}.elfinder .elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px;padding-right:12px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-left:28px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-right:28px}.elfinder-touch .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-left:36px}.elfinder-touch .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-right:36px}.elfinder .elfinder-contextmenu-arrow,.elfinder .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px;overflow:hidden}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon{right:8px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon{left:8px}.elfinder .elfinder-contextmenu-arrow{width:16px;height:16px;background:url(../img/arrows-normal.png) 5px 4px no-repeat}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder .elfinder-contextmenu-extra-icon a,.elfinder .elfinder-contextmenu-extra-icon span{display:inline-block;width:100%;height:100%;padding:20px;margin:0;color:transparent!important;text-decoration:none;cursor:pointer}.elfinder .elfinder-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder .elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder .elfinder-contextmenu-item .elfinder-button-icon.ui-state-disabled{background-image:url(../img/toolbar.png)}.elfinder-cwd-wrapper{overflow:auto;position:relative;padding:2px;margin:0}.elfinder-cwd-wrapper-list{padding:0}.elfinder-cwd{position:absolute;top:0;cursor:default;padding:0;margin:0;-ms-touch-action:auto;touch-action:auto;min-width:100%}.elfinder-ltr .elfinder-cwd{left:0}.elfinder-rtl .elfinder-cwd{right:0}.elfinder-cwd.elfinder-table-header-sticky{position:-webkit-sticky;position:-ms-sticky;position:sticky;top:0;left:auto;right:auto;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;height:0;overflow:visible}.elfinder-cwd.elfinder-table-header-sticky table{border-top:2px solid;padding-top:0}.elfinder-cwd.elfinder-table-header-sticky td{display:inline-block}.elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table{border-top:2px solid transparent}.elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader,.elfinder-cwd-fixheader .elfinder-cwd{position:relative}.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-wrapper-empty .elfinder-cwd:after{display:block;height:auto;width:90%;width:calc(100% - 20px);position:absolute;top:50%;left:50%;-ms-transform:translateY(-50%) translateX(-50%);-webkit-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);line-height:1.5em;text-align:center;white-space:pre-wrap;opacity:.6;filter:Alpha(Opacity=60);font-weight:700}.elfinder-cwd-file .elfinder-cwd-select{position:absolute;top:0;left:0;background-color:transparent;opacity:.4;filter:Alpha(Opacity=40)}.elfinder-mobile .elfinder-cwd-file .elfinder-cwd-select{width:30px;height:30px}.elfinder .elfinder-cwd-selectall,.elfinder-cwd-file.ui-selected .elfinder-cwd-select{opacity:.8;filter:Alpha(Opacity=80)}.elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select{left:auto;right:0}.elfinder .elfinder-cwd-selectall{position:absolute;width:30px;height:30px;top:0}.elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall{display:none}.elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall{text-align:right;right:18px;left:auto}.elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall{text-align:left;right:auto;left:18px}.elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{right:0}.elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{left:0}.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover{background-color:transparent}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:90px;padding-bottom:2px;cursor:default;border:none;position:relative}.elfinder .std42-dialog .ui-dialog-content label,.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active{border:none}.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file{float:left;margin:0 3px 2px 0}.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file{float:right;margin:0 0 5px 3px}.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover{border:0 solid}.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:52px;height:52px;margin:1px auto;padding:2px;position:relative}.elfinder-cwd-size1 .elfinder-cwd-icon:before,.elfinder-cwd-size2 .elfinder-cwd-icon:before,.elfinder-cwd-size3 .elfinder-cwd-icon:before{top:3px;display:block}.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:112px}.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:74px;height:74px}.elfinder-cwd-size1 .elfinder-cwd-icon,.elfinder-cwd-size2 .elfinder-cwd-icon,.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform-origin:top center;-ms-transform:scale(1.5);-webkit-transform-origin:top center;-webkit-transform:scale(1.5);transform-origin:top center;transform:scale(1.5)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(1.35) translate(-4px,15%);-webkit-transform-origin:top left;-webkit-transform:scale(1.35) translate(-4px,15%);transform-origin:top left;transform:scale(1.35) translate(-4px,15%)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1) translate(10px,-5px);-webkit-transform:scale(1) translate(10px,-5px);transform:scale(1) translate(10px,-5px)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:72px;height:72px;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file{width:140px;height:134px}.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:98px;height:98px}.elfinder-cwd-size2 .elfinder-cwd-icon,.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform:scale(2);-webkit-transform:scale(2);transform:scale(2)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(1.8) translate(-5px,18%);-webkit-transform-origin:top left;-webkit-transform:scale(1.8) translate(-5px,18%);transform-origin:top left;transform:scale(1.8) translate(-5px,18%)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1.1) translate(0,10px);-webkit-transform:scale(1.1) translate(0,10px);transform:scale(1.1) translate(0,10px)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:96px;height:96px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file{width:174px;height:158px}.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:122px;height:122px}.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform:scale(2.5);-webkit-transform:scale(2.5);transform:scale(2.5)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(2.25) translate(-6px,20%);-webkit-transform-origin:top left;-webkit-transform:scale(2.25) translate(-6px,20%);transform-origin:top left;transform:scale(2.25) translate(-6px,20%)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1.2) translate(-9px,22px);-webkit-transform:scale(1.2) translate(-9px,22px);transform:scale(1.2) translate(-9px,22px)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:120px;height:120px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}.elfinder-cwd-view-icons .elfinder-cwd-filename{text-align:center;max-height:2.4em;line-height:1.2em;white-space:pre-line;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;margin:3px 1px 0;padding:1px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;word-break:break-word;overflow-wrap:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.elfinder-cwd-view-icons .elfinder-perms{bottom:4px;right:2px}.elfinder-cwd-view-icons .elfinder-lock{top:-3px;right:-2px}.elfinder-cwd-view-icons .elfinder-symlink{bottom:6px;left:0}.elfinder-cwd-icon{display:block;width:48px;height:48px;margin:0 auto;background-image:url(../img/icons-big.svg);background-image:url(../img/icons-big.png) \9;background-position:0 0;background-repeat:no-repeat;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon,.elfinder-navbar-root-local .elfinder-cwd-icon{background-image:url(../img/volume_icon_local.svg);background-image:url(../img/volume_icon_local.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon,.elfinder-navbar-root-trash .elfinder-cwd-icon{background-image:url(../img/volume_icon_trash.svg);background-image:url(../img/volume_icon_trash.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon,.elfinder-navbar-root-ftp .elfinder-cwd-icon{background-image:url(../img/volume_icon_ftp.svg);background-image:url(../img/volume_icon_ftp.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon,.elfinder-navbar-root-sql .elfinder-cwd-icon{background-image:url(../img/volume_icon_sql.svg);background-image:url(../img/volume_icon_sql.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon,.elfinder-navbar-root-dropbox .elfinder-cwd-icon{background-image:url(../img/volume_icon_dropbox.svg);background-image:url(../img/volume_icon_dropbox.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon,.elfinder-navbar-root-googledrive .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon,.elfinder-navbar-root-googledrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_googledrive.svg);background-image:url(../img/volume_icon_googledrive.png) \9;background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon,.elfinder-navbar-root-onedrive .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon,.elfinder-navbar-root-onedrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_onedrive.svg);background-image:url(../img/volume_icon_onedrive.png) \9;background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon,.elfinder-navbar-root-box .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon,.elfinder-navbar-root-box .elfinder-cwd-icon{background-image:url(../img/volume_icon_box.svg);background-image:url(../img/volume_icon_box.png) \9;background-size:contain}.elfinder-cwd .elfinder-navbar-root-zip.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon,.elfinder-navbar-root-zip .elfinder-cwd-icon{background-image:url(../img/volume_icon_zip.svg);background-image:url(../img/volume_icon_zip.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon,.elfinder-navbar-root-network .elfinder-cwd-icon{background-image:url(../img/volume_icon_network.svg);background-image:url(../img/volume_icon_network.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd-icon:before{content:none;position:absolute;left:0;top:5px;min-width:20px;max-width:84px;text-align:center;padding:0 4px 1px;border-radius:4px;font-family:Verdana;font-size:10px;line-height:1.3em;-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);-o-transform:scale(.9);transform:scale(.9)}.elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before{left:-10px}.elfinder-cwd-icon.elfinder-cwd-icon-mp2t:before{content:'ts'}.elfinder-cwd-icon.elfinder-cwd-icon-dash-xml:before{content:'dash'}.elfinder-cwd-icon.elfinder-cwd-icon-x-mpegurl:before{content:'hls'}.elfinder-cwd-icon.elfinder-cwd-icon-x-c:before{content:'c++'}.elfinder-cwd-icon.elfinder-cwd-bgurl{background-position:center center;background-repeat:no-repeat}.elfinder-cwd-icon.elfinder-cwd-bgurl,.elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself{-moz-background-size:cover;background-size:cover}.elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:' '}.elfinder-cwd-bgurl:after{position:relative;display:inline-block;top:36px;left:-38px;width:48px;height:48px;background-image:url(../img/icons-big.svg);background-image:url(../img/icons-big.png) \9;background-repeat:no-repeat;background-size:auto!important;opacity:.8;filter:Alpha(Opacity=60);-webkit-transform-origin:54px -24px;-webkit-transform:scale(.6);-moz-transform-origin:54px -24px;-moz-transform:scale(.6);-ms-transform-origin:54px -24px;-ms-transform:scale(.6);-o-transform-origin:54px -24px;-o-transform:scale(.6);transform-origin:54px -24px;transform:scale(.6)}.elfinder-cwd-icon.elfinder-cwd-icon-drag{width:48px;height:48px}.elfinder-cwd-icon-directory.elfinder-cwd-bgurl:after,.elfinder-cwd-icon-image.elfinder-cwd-bgurl:after,.elfinder-cwd-icon.elfinder-cwd-icon-drag:after,.elfinder-cwd-icon.elfinder-cwd-icon-drag:before{content:none}.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon{background-position:0 -100px}.elfinder-cwd .elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-icon-directory{background-position:0 -50px}.elfinder-cwd-icon-application,.elfinder-cwd-icon-application:after{background-position:0 -150px}.elfinder-cwd-icon-text,.elfinder-cwd-icon-text:after{background-position:0 -1350px}.elfinder-cwd-icon-plain,.elfinder-cwd-icon-plain:after,.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-x-empty:after{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-image:after,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-vnd-adobe-photoshop:after{background-position:0 -250px}.elfinder-cwd-icon-postscript,.elfinder-cwd-icon-postscript:after{background-position:0 -1550px}.elfinder-cwd-icon-audio,.elfinder-cwd-icon-audio:after{background-position:0 -300px}.elfinder-cwd-icon-dash-xml,.elfinder-cwd-icon-flash-video,.elfinder-cwd-icon-video,.elfinder-cwd-icon-video:after,.elfinder-cwd-icon-vnd-apple-mpegurl,.elfinder-cwd-icon-x-mpegurl{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtf:after,.elfinder-cwd-icon-rtfd,.elfinder-cwd-icon-rtfd:after{background-position:0 -400px}.elfinder-cwd-icon-pdf,.elfinder-cwd-icon-pdf:after{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-ms-excel:after,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:after{background-position:0 -1450px}.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:after{background-position:0 -1700px}.elfinder-cwd-icon-vnd-ms-powerpoint,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:after{background-position:0 -1400px}.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation:after{background-position:0 -1650px}.elfinder-cwd-icon-msword,.elfinder-cwd-icon-msword:after,.elfinder-cwd-icon-vnd-ms-word,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-word:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:after{background-position:0 -1500px}.elfinder-cwd-icon-vnd-oasis-opendocument-text,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text:after{background-position:0 -1750px}.elfinder-cwd-icon-vnd-ms-office,.elfinder-cwd-icon-vnd-ms-office:after{background-position:0 -500px}.elfinder-cwd-icon-vnd-oasis-opendocument-chart,.elfinder-cwd-icon-vnd-oasis-opendocument-chart:after,.elfinder-cwd-icon-vnd-oasis-opendocument-database,.elfinder-cwd-icon-vnd-oasis-opendocument-database:after,.elfinder-cwd-icon-vnd-oasis-opendocument-formula,.elfinder-cwd-icon-vnd-oasis-opendocument-formula:after,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics:after,.elfinder-cwd-icon-vnd-oasis-opendocument-image,.elfinder-cwd-icon-vnd-oasis-opendocument-image:after,.elfinder-cwd-icon-vnd-openofficeorg-extension,.elfinder-cwd-icon-vnd-openofficeorg-extension:after{background-position:0 -1600px}.elfinder-cwd-icon-html,.elfinder-cwd-icon-html:after{background-position:0 -550px}.elfinder-cwd-icon-css,.elfinder-cwd-icon-css:after{background-position:0 -600px}.elfinder-cwd-icon-javascript,.elfinder-cwd-icon-javascript:after,.elfinder-cwd-icon-x-javascript,.elfinder-cwd-icon-x-javascript:after{background-position:0 -650px}.elfinder-cwd-icon-x-perl,.elfinder-cwd-icon-x-perl:after{background-position:0 -700px}.elfinder-cwd-icon-x-python,.elfinder-cwd-icon-x-python:after{background-position:0 -750px}.elfinder-cwd-icon-x-ruby,.elfinder-cwd-icon-x-ruby:after{background-position:0 -800px}.elfinder-cwd-icon-x-sh,.elfinder-cwd-icon-x-sh:after,.elfinder-cwd-icon-x-shellscript,.elfinder-cwd-icon-x-shellscript:after{background-position:0 -850px}.elfinder-cwd-icon-x-c,.elfinder-cwd-icon-x-c--,.elfinder-cwd-icon-x-c--:after,.elfinder-cwd-icon-x-c--hdr,.elfinder-cwd-icon-x-c--hdr:after,.elfinder-cwd-icon-x-c--src,.elfinder-cwd-icon-x-c--src:after,.elfinder-cwd-icon-x-c:after,.elfinder-cwd-icon-x-chdr,.elfinder-cwd-icon-x-chdr:after,.elfinder-cwd-icon-x-csrc,.elfinder-cwd-icon-x-csrc:after,.elfinder-cwd-icon-x-java,.elfinder-cwd-icon-x-java-source,.elfinder-cwd-icon-x-java-source:after,.elfinder-cwd-icon-x-java:after{background-position:0 -900px}.elfinder-cwd-icon-x-php,.elfinder-cwd-icon-x-php:after{background-position:0 -950px}.elfinder-cwd-icon-xml,.elfinder-cwd-icon-xml:after{background-position:0 -1000px}.elfinder-cwd-icon-x-7z-compressed,.elfinder-cwd-icon-x-7z-compressed:after,.elfinder-cwd-icon-x-xz,.elfinder-cwd-icon-x-xz:after,.elfinder-cwd-icon-x-zip,.elfinder-cwd-icon-x-zip:after,.elfinder-cwd-icon-zip,.elfinder-cwd-icon-zip:after{background-position:0 -1050px}.elfinder-cwd-icon-x-gzip,.elfinder-cwd-icon-x-gzip:after,.elfinder-cwd-icon-x-tar,.elfinder-cwd-icon-x-tar:after{background-position:0 -1100px}.elfinder-cwd-icon-x-bzip,.elfinder-cwd-icon-x-bzip2,.elfinder-cwd-icon-x-bzip2:after,.elfinder-cwd-icon-x-bzip:after{background-position:0 -1150px}.elfinder-cwd-icon-x-rar,.elfinder-cwd-icon-x-rar-compressed,.elfinder-cwd-icon-x-rar-compressed:after,.elfinder-cwd-icon-x-rar:after{background-position:0 -1200px}.elfinder-cwd-icon-x-shockwave-flash,.elfinder-cwd-icon-x-shockwave-flash:after{background-position:0 -1250px}.elfinder-cwd-icon-group{background-position:0 -1300px}.elfinder-cwd-filename input{width:100%;border:none;margin:0;padding:0}.elfinder-cwd-view-icons,.elfinder-cwd-view-icons input{text-align:center}.elfinder-cwd-view-icons textarea{width:100%;border:0 solid;margin:0;padding:0;text-align:center;overflow:hidden;resize:none}.elfinder-cwd-wrapper.elfinder-cwd-fixheader .elfinder-cwd::after,.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar select{display:none}.elfinder-cwd table{width:100%;border-collapse:separate;border:0 solid;margin:0 0 10px;border-spacing:0;box-sizing:padding-box;padding:2px;position:relative}.elfinder .elfinder-cwd table td div,.elfinder-cwd table td{box-sizing:content-box}.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader{position:absolute;overflow:hidden}.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before{content:'';position:absolute;width:100%;top:0;height:3px;background-color:#fff}.elfinder-droppable-active+.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before{background-color:#8cafed}.elfinder .elfinder-workzone div.elfinder-cwd-fixheader table{table-layout:fixed}.elfinder-ltr .elfinder-cwd thead .elfinder-cwd-selectall{text-align:left;right:auto;left:0;padding-top:3px}.elfinder-rtl .elfinder-cwd thead .elfinder-cwd-selectall{text-align:right;right:0;left:auto;padding-top:3px}.elfinder-touch .elfinder-cwd thead .elfinder-cwd-selectall{padding-top:4px}.elfinder .elfinder-cwd table thead tr{border-left:0 solid;border-top:0 solid;border-right:0 solid}.elfinder .elfinder-cwd table thead td{padding:4px 14px}.elfinder-ltr .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding:4px 14px 4px 22px}.elfinder-rtl .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding:4px 22px 4px 14px}.elfinder-touch .elfinder-cwd table thead td,.elfinder-touch .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding-top:8px;padding-bottom:8px}.elfinder .elfinder-cwd table thead td.ui-state-active{background:#ebf1f6;background:-moz-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebf1f6),color-stop(50%,#abd3ee),color-stop(51%,#89c3eb),color-stop(100%,#d5ebfb));background:-webkit-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-o-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-ms-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:linear-gradient(to bottom,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebf1f6', endColorstr='#d5ebfb', GradientType=0)}.elfinder .elfinder-cwd table td{padding:4px 12px;white-space:pre;overflow:hidden;text-align:right;cursor:default;border:0 solid}.elfinder .elfinder-cwd table tbody td:first-child{position:relative}tr.elfinder-cwd-file td .elfinder-cwd-select{padding-top:3px}.elfinder-mobile tr.elfinder-cwd-file td .elfinder-cwd-select{width:40px}.elfinder-touch tr.elfinder-cwd-file td .elfinder-cwd-select{padding-top:10px}.elfinder-touch .elfinder-cwd tr td{padding:10px 12px}.elfinder-touch .elfinder-cwd tr.elfinder-cwd-file td{padding:13px 12px}.elfinder-ltr .elfinder-cwd table td{text-align:right}.elfinder-ltr .elfinder-cwd table td:first-child{text-align:left}.elfinder-rtl .elfinder-cwd table td{text-align:left}.elfinder-ltr .elfinder-info-tb tr td:first-child,.elfinder-rtl .elfinder-cwd table td:first-child{text-align:right}.elfinder-odd-row{background:#eee}.elfinder-cwd-view-list .elfinder-cwd-file-wrapper{width:97%;position:relative}.elfinder-ltr .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper{margin-left:8px}.elfinder-rtl .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper{margin-right:8px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename{padding-left:23px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-filename{padding-right:23px}.elfinder-cwd-view-list .elfinder-lock,.elfinder-cwd-view-list .elfinder-perms,.elfinder-cwd-view-list .elfinder-symlink{margin-top:-6px;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-cwd-view-list .elfinder-perms{bottom:-4px}.elfinder-cwd-view-list .elfinder-lock{top:0}.elfinder-cwd-view-list .elfinder-symlink{bottom:-4px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms{left:8px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-perms{right:-8px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock{left:10px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-lock{right:-10px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink{left:-7px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-symlink{right:7px}.elfinder-cwd-view-list td .elfinder-cwd-icon{width:16px;height:16px;position:absolute;top:50%;margin-top:-8px;background-image:url(../img/icons-small.png)}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon{left:0}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon{right:0}.elfinder-cwd-view-list .elfinder-cwd-icon:after,.elfinder-cwd-view-list .elfinder-cwd-icon:before{content:none}.elfinder-cwd-view-list thead td .ui-resizable-handle{height:100%;top:6px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-handle{top:-4px;margin:10px}.elfinder-cwd-view-list thead td .ui-resizable-e{right:-7px}.elfinder-cwd-view-list thead td .ui-resizable-w{left:-7px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-e{right:-16px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-w{left:-16px}.elfinder-cwd-wrapper-empty .elfinder-cwd-view-list.elfinder-cwd:after{margin-top:0}.elfinder-cwd-message-board{position:-webkit-sticky;position:sticky;width:100%;height:calc(100% - .01px);top:0;left:0;margin:0;padding:0;pointer-events:none;background-color:transparent}.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board{background-image:url(../img/trashmesh.png)}.elfinder-cwd-message-board .elfinder-cwd-trash{position:absolute;bottom:0;font-size:30px;width:100%;text-align:right;display:none}.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-trash{text-align:left}.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-trash{font-size:20px}.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board .elfinder-cwd-trash{display:block;opacity:.3}.elfinder-cwd-message-board .elfinder-cwd-expires{position:absolute;bottom:0;font-size:24px;width:100%;text-align:right;opacity:.25}.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-expires{text-align:left}.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-expires{font-size:20px}.std42-dialog{padding:0;position:absolute;left:auto;right:auto;box-sizing:border-box}.std42-dialog.elfinder-dialog-minimized{overFlow:hidden;position:relative;float:left;width:auto;cursor:pointer}.elfinder-rtl .std42-dialog.elfinder-dialog-minimized{float:right}.std42-dialog input{border:1px solid}.std42-dialog .ui-dialog-titlebar{border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;font-weight:400;padding:.2em 1em}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar{padding:0 .5em;height:20px}.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar{padding:.3em .5em}.std42-dialog.ui-draggable-disabled .ui-dialog-titlebar{cursor:default}.std42-dialog .ui-dialog-titlebar .ui-widget-header{border:none;cursor:pointer}.std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title{display:inherit;word-break:break-all}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title{display:list-item;display:-moz-inline-box;white-space:nowrap;word-break:normal;overflow:hidden;word-wrap:normal;overflow-wrap:normal;max-width:-webkit-calc(100% - 24px);max-width:-moz-calc(100% - 24px);max-width:calc(100% - 24px)}.elfinder-touch .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title{padding-top:.15em}.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title{max-width:-webkit-calc(100% - 36px);max-width:-moz-calc(100% - 36px);max-width:calc(100% - 36px)}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button{position:relative;float:left;top:10px;left:-10px;right:10px;width:20px;height:20px;padding:1px;margin:-10px 1px 0;background-color:transparent;background-image:none}.elfinder-touch .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button{-moz-transform:scale(1.2);zoom:1.2;padding-left:6px;padding-right:6px;height:24px}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button-right{float:right}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right{left:10px;right:-10px}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{width:17px;height:17px;border-width:1px;opacity:.7;filter:Alpha(Opacity=70);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{opacity:.5;filter:Alpha(Opacity=50)}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{opacity:1;filter:Alpha(Opacity=100)}.elfinder-spinner{width:14px;height:14px;background:url(../img/spinner-mini.gif) center center no-repeat;margin:0 5px;display:inline-block;vertical-align:middle}.elfinder-ltr .elfinder-info-tb span,.elfinder-ltr .elfinder-spinner,.elfinder-ltr .elfinder-spinner-text{float:left}.elfinder-rtl .elfinder-info-tb span,.elfinder-rtl .elfinder-spinner,.elfinder-rtl .elfinder-spinner-text{float:right}.elfinder-touch .std42-dialog.ui-dialog:not(ui-resizable-disabled) .ui-resizable-se{width:12px;height:12px;-moz-transform-origin:bottom right;-moz-transform:scale(1.5);zoom:1.5;right:-7px;bottom:-7px;margin:3px 7px 7px 3px;background-position:-64px -224px}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar{text-align:right}.std42-dialog .ui-dialog-content{padding:.3em .5em;box-sizing:border-box}.elfinder .std42-dialog .ui-dialog-content,.elfinder .std42-dialog .ui-dialog-content *{-webkit-user-select:auto;-moz-user-select:text;-khtml-user-select:text;user-select:text}.std42-dialog .ui-dialog-buttonpane{border:0 solid;margin:0;padding:.5em;text-align:right}.elfinder-rtl .std42-dialog .ui-dialog-buttonpane{text-align:left}.std42-dialog .ui-dialog-buttonpane button{margin:.2em 0 0 .4em;padding:.2em;outline:0 solid}.std42-dialog .ui-dialog-buttonpane button span{padding:2px 9px}.std42-dialog .ui-dialog-buttonpane button span.ui-icon{padding:2px}.elfinder-dialog .ui-resizable-e,.elfinder-dialog .ui-resizable-s{width:0;height:0}.std42-dialog .ui-button input{cursor:pointer}.std42-dialog select{border:1px solid #ccc}.elfinder-dialog-icon{position:absolute;width:32px;height:32px;left:10px;top:50%;margin-top:-15px;background:url(../img/dialogs.png) 0 0 no-repeat}.elfinder-rtl .elfinder-dialog-icon{left:auto;right:10px}.elfinder-dialog-confirm .ui-dialog-content,.elfinder-dialog-error .ui-dialog-content{padding-left:56px;min-height:35px}.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content,.elfinder-rtl .elfinder-dialog-error .ui-dialog-content{padding-left:0;padding-right:56px}.elfinder-dialog-error .elfinder-err-var{word-break:break-all}.elfinder-dialog-notify{top:36px;width:280px}.elfinder-ltr .elfinder-dialog-notify{right:12px}.elfinder-rtl .elfinder-dialog-notify{left:12px}.elfinder-dialog-notify .ui-dialog-titlebar{height:5px}.elfinder-dialog-notify .ui-dialog-titlebar-close,.elfinder-rm-title+br{display:none}.elfinder-dialog-notify .ui-dialog-content{padding:0}.elfinder-notify{border-bottom:1px solid #ccc;position:relative;padding:.5em;text-align:center;overflow:hidden}.elfinder-ltr .elfinder-notify{padding-left:36px}.elfinder-rtl .elfinder-notify{padding-right:36px}.elfinder-notify:last-child{border:0 solid}.elfinder-notify-progressbar{width:180px;height:8px;border:1px solid #aaa;background:#f5f5f5;margin:5px auto;overflow:hidden}.elfinder-notify-progress{width:100%;height:8px;background:url(../img/progress.gif) center center repeat-x}.elfinder-notify-progress,.elfinder-notify-progressbar{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.elfinder-dialog-icon-file,.elfinder-dialog-icon-open,.elfinder-dialog-icon-readdir,.elfinder-dialog-icon-reload{background-position:0 -225px}.elfinder-dialog-icon-mkdir{background-position:0 -64px}.elfinder-dialog-icon-mkfile{background-position:0 -96px}.elfinder-dialog-icon-copy,.elfinder-dialog-icon-move,.elfinder-dialog-icon-prepare{background-position:0 -128px}.elfinder-dialog-icon-chunkmerge,.elfinder-dialog-icon-upload{background-position:0 -160px}.elfinder-dialog-icon-rm{background-position:0 -192px}.elfinder-dialog-icon-download{background-position:0 -260px}.elfinder-dialog-icon-save{background-position:0 -295px}.elfinder-dialog-icon-chkcontent,.elfinder-dialog-icon-rename{background-position:0 -330px}.elfinder-dialog-icon-archive,.elfinder-dialog-icon-extract,.elfinder-dialog-icon-zipdl{background-position:0 -365px}.elfinder-dialog-icon-search{background-position:0 -402px}.elfinder-dialog-icon-chmod,.elfinder-dialog-icon-dim,.elfinder-dialog-icon-loadimg,.elfinder-dialog-icon-netmount,.elfinder-dialog-icon-netunmount,.elfinder-dialog-icon-preupload,.elfinder-dialog-icon-resize,.elfinder-dialog-icon-url{background-position:0 -434px}.elfinder-dialog-confirm-applyall,.elfinder-dialog-confirm-encoding{padding:0 1em;margin:0}.elfinder-ltr .elfinder-dialog-confirm-applyall,.elfinder-ltr .elfinder-dialog-confirm-encoding{text-align:left}.elfinder-rtl .elfinder-dialog-confirm-applyall,.elfinder-rtl .elfinder-dialog-confirm-encoding{text-align:right}.elfinder-dialog-confirm .elfinder-dialog-icon{background-position:0 -32px}.elfinder-dialog-confirm .ui-dialog-buttonset{width:auto}.elfinder-info-title .elfinder-cwd-icon{float:left;width:48px;height:48px;margin-right:1em}.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon,.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon{float:right;margin-right:0;margin-left:1em}.elfinder-info-title strong{display:block;padding:.3em 0 .5em}.elfinder-info-tb{min-width:200px;border:0 solid;margin:1em .2em;width:100%}.elfinder-info-tb td{white-space:pre-wrap;padding:2px}.elfinder-info-tb td.elfinder-info-label{white-space:nowrap}.elfinder-info-tb td.elfinder-info-hash{display:inline-block;word-break:break-all;max-width:32ch}.elfinder-rtl .elfinder-info-tb tr td:first-child{text-align:left}.elfinder-info-tb a{outline:none;text-decoration:underline}.elfinder-info-tb a:hover{text-decoration:none}.elfinder-netmount-tb{margin:0 auto}.elfinder-netmount-tb .elfinder-button-icon,.elfinder-netmount-tb select{cursor:pointer}button.elfinder-info-button{margin:-3.5px 0;cursor:pointer}.elfinder-upload-dropbox{display:table-cell;text-align:center;vertical-align:middle;padding:.5em;border:3px dashed #aaa;width:9999px;height:80px;overflow:hidden;word-break:keep-all}.elfinder-upload-dropbox.ui-state-hover{background:#dfdfdf;border:3px dashed #555}.elfinder-upload-dialog-or{margin:.3em 0;text-align:center}.elfinder-upload-dialog-wrapper{text-align:center}.elfinder-upload-dialog-wrapper .ui-button{position:relative;overflow:hidden}.elfinder-upload-dialog-wrapper .ui-button form{position:absolute;right:0;top:0;width:100%;opacity:0;filter:Alpha(Opacity=0)}.elfinder-upload-dialog-wrapper .ui-button form input{padding:50px 0 0;font-size:3em;width:100%}.dialogelfinder .dialogelfinder-drag{border-left:0 solid;border-top:0 solid;border-right:0 solid;font-weight:400;padding:2px 12px;cursor:move;position:relative;text-align:left}.elfinder-rtl .dialogelfinder-drag{text-align:right}.dialogelfinder-drag-close{position:absolute;top:50%;margin-top:-8px}.elfinder-ltr .dialogelfinder-drag-close{right:12px}.elfinder-rtl .dialogelfinder-drag-close{left:12px}.elfinder-rm-title{margin-bottom:.5ex}.elfinder-rm-title .elfinder-cwd-icon{float:left;width:48px;height:48px;margin-right:1em}.elfinder-rm-title strong{display:block;white-space:pre-wrap;word-break:normal;overflow:hidden;text-overflow:ellipsis}.elfinder-font-mono{font-family:"Ricty Diminished","Myrica M",Consolas,"Courier New",Courier,Monaco,monospace;font-size:1.1em}.elfinder-contextmenu .elfinder-contextmenu-item span{font-size:.72em}.elfinder-cwd-view-icons .elfinder-cwd-filename,.elfinder-cwd-view-list td,.elfinder-statusbar div{font-size:.7em}.std42-dialog .ui-dialog-titlebar{font-size:.82em}.std42-dialog .ui-dialog-content{font-size:.72em}.std42-dialog .ui-dialog-buttonpane{font-size:.76em}.dialogelfinder .dialogelfinder-drag,.elfinder-info-tb{font-size:.9em}.elfinder-upload-dialog-or,.elfinder-upload-dropbox{font-size:1.2em}.elfinder .elfinder-navbar{font-size:.72em}.elfinder-place-drag .elfinder-navbar-dir{font-size:.9em}.elfinder-quicklook-title{font-size:.7em;font-weight:400}.elfinder-quicklook-info-data{font-size:.72em}.elfinder-quicklook-preview-text-wrapper{font-size:.9em}.elfinder-button-menu-item{font-size:.72em}.elfinder-button-search input{font-size:.8em}.elfinder-drag-num{font-size:12px}.elfinder-toast{font-size:.76em}.elfinder .elfinder-navbar{width:230px;padding:3px 5px;background-image:none;border-top:0 solid;border-bottom:0 solid;overflow:auto;position:relative}.elfinder .elfinder-navdock{box-sizing:border-box;width:230px;height:auto;position:absolute;bottom:0;overflow:auto}.elfinder-navdock .ui-resizable-n{top:0;height:20px}.elfinder-ltr .elfinder-navbar{float:left;border-left:0 solid}.elfinder-rtl .elfinder-navbar{float:right;border-right:0 solid}.elfinder-ltr .ui-resizable-e,.elfinder-touch .elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon{margin-left:10px}.elfinder-tree{display:table;width:100%;margin:0 0 .5em;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder-navbar-dir{position:relative;display:block;white-space:nowrap;padding:3px 12px;margin:0;outline:0 solid;border:1px solid transparent;cursor:default}.elfinder-touch .elfinder-navbar-dir{padding:12px}.elfinder-ltr .elfinder-navbar-dir{padding-left:35px}.elfinder-rtl .elfinder-navbar-dir{padding-right:35px}.elfinder-navbar-arrow,.elfinder-navbar-icon{position:absolute;top:50%;margin-top:-8px;background-repeat:no-repeat}.elfinder-navbar-arrow{display:none;width:12px;height:14px;background-image:url(../img/arrows-normal.png)}.elfinder-ltr .elfinder-navbar-arrow{left:0}.elfinder-rtl .elfinder-navbar-arrow{right:0}.elfinder-touch .elfinder-navbar-arrow{-moz-transform-origin:top left;-moz-transform:scale(1.4);zoom:1.4;margin-bottom:7px}.elfinder-ltr.elfinder-touch .elfinder-navbar-arrow{left:-3px;margin-right:20px}.elfinder-rtl.elfinder-touch .elfinder-navbar-arrow{right:-3px;margin-left:20px}.ui-state-active .elfinder-navbar-arrow{background-image:url(../img/arrows-active.png)}.elfinder-navbar-collapsed .elfinder-navbar-arrow{display:block}.elfinder-subtree-chksubdir .elfinder-navbar-arrow{opacity:.25;filter:Alpha(Opacity=25)}.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 4px}.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 -10px}.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow{background-position:0 -21px}.elfinder-navbar-icon{width:16px;height:16px;background-image:url(../img/toolbar.png);background-position:0 -16px}.elfinder-ltr .elfinder-navbar-icon{left:14px}.elfinder-rtl .elfinder-navbar-icon{right:14px}.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 -704px}.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon{background-position:0 0;background-size:contain}.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon{background-image:url(../img/volume_icon_local.svg);background-image:url(../img/volume_icon_local.png) \9}.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon{background-image:url(../img/volume_icon_trash.svg);background-image:url(../img/volume_icon_trash.png) \9}.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon{background-image:url(../img/volume_icon_ftp.svg);background-image:url(../img/volume_icon_ftp.png) \9}.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon{background-image:url(../img/volume_icon_sql.svg);background-image:url(../img/volume_icon_sql.png) \9}.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon{background-image:url(../img/volume_icon_dropbox.svg);background-image:url(../img/volume_icon_dropbox.png) \9}.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon{background-image:url(../img/volume_icon_googledrive.svg);background-image:url(../img/volume_icon_googledrive.png) \9}.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon{background-image:url(../img/volume_icon_onedrive.svg);background-image:url(../img/volume_icon_onedrive.png) \9}.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon{background-image:url(../img/volume_icon_box.svg);background-image:url(../img/volume_icon_box.png) \9}.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon{background-image:url(../img/volume_icon_zip.svg);background-image:url(../img/volume_icon_zip.png) \9}.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon{background-image:url(../img/volume_icon_network.svg);background-image:url(../img/volume_icon_network.png) \9}.elfinder-droppable-active .elfinder-navbar-icon,.ui-state-active .elfinder-navbar-icon,.ui-state-hover .elfinder-navbar-icon{background-position:0 -32px}.elfinder-ltr .elfinder-navbar-subtree{margin-left:12px}.elfinder-rtl .elfinder-navbar-subtree{margin-right:12px}.elfinder-tree .elfinder-spinner{position:absolute;top:50%;margin:-7px 0 0}.elfinder-ltr .elfinder-tree .elfinder-spinner{left:0;margin-left:-2px}.elfinder-rtl .elfinder-tree .elfinder-spinner{right:0;margin-right:-2px}.elfinder-navbar .elfinder-lock,.elfinder-navbar .elfinder-perms,.elfinder-navbar .elfinder-symlink{opacity:.6;filter:Alpha(Opacity=60)}.elfinder-navbar .elfinder-perms{bottom:-1px;margin-top:-8px}.elfinder-navbar .elfinder-lock{top:-2px}.elfinder-ltr .elfinder-navbar .elfinder-perms{left:20px;transform:scale(.8)}.elfinder-rtl .elfinder-navbar .elfinder-perms{right:20px;transform:scale(.8)}.elfinder-ltr .elfinder-navbar .elfinder-lock{left:20px;transform:scale(.8)}.elfinder-rtl .elfinder-navbar .elfinder-lock{right:20px;transform:scale(.8)}.elfinder-ltr .elfinder-navbar .elfinder-symlink{left:8px;transform:scale(.8)}.elfinder-rtl .elfinder-navbar .elfinder-symlink{right:8px;transform:scale(.8)}.elfinder-navbar input{width:100%;border:0 solid;margin:0;padding:0}.elfinder-navbar .ui-resizable-handle{width:12px;background:url(../img/resize.png) center center no-repeat}.elfinder-nav-handle-icon{position:absolute;top:50%;margin:-8px 2px 0;opacity:.5;filter:Alpha(Opacity=50)}.elfinder-navbar-pager{width:100%;box-sizing:border-box;padding-top:3px;padding-bottom:3px}.elfinder-touch .elfinder-navbar-pager{padding-top:10px;padding-bottom:10px}.elfinder-places{border:none;margin:0;padding:0}.elfinder-navbar-swipe-handle{position:absolute;top:0;height:100%;width:50px;pointer-events:none}.elfinder-ltr .elfinder-navbar-swipe-handle{left:0;background:linear-gradient(to right,#dde4eb 0,rgba(221,228,235,.8) 5px,rgba(216,223,230,.3) 8px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}.elfinder-rtl .elfinder-navbar-swipe-handle{right:0;background:linear-gradient(to left,#dde4eb 0,rgba(221,228,235,.8) 5px,rgba(216,223,230,.3) 8px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}.elfinder-navbar-root .elfinder-places-root-icon{position:absolute;top:50%;margin-top:-9px;cursor:pointer}.elfinder-ltr .elfinder-places-root-icon{right:10px}.elfinder-rtl .elfinder-places-root-icon{left:10px}.elfinder-navbar-expanded .elfinder-places-root-icon{display:block}.elfinder-place-drag{font-size:.8em}.elfinder-quicklook{position:absolute;background:url(../img/quicklook-bg.png);overflow:hidden;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;padding:20px 0 40px}.elfinder-navdock .elfinder-quicklook{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;font-size:90%;overflow:auto}.elfinder-quicklook.elfinder-touch{padding:30px 0 40px}.elfinder-quicklook .ui-resizable-se{width:14px;height:14px;right:5px;bottom:3px;background:url(../img/toolbar.png) 0 -496px no-repeat}.elfinder-quicklook.elfinder-touch .ui-resizable-se{-moz-transform-origin:bottom right;-moz-transform:scale(1.5);zoom:1.5}.elfinder-quicklook.elfinder-quicklook-fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;margin:0;box-sizing:border-box;width:100%;height:100%;object-fit:contain;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-background-clip:padding-box;padding:0;background:#000;display:block}.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar,.elfinder-quicklook-fullscreen.elfinder-quicklook .ui-resizable-handle,.elfinder-statusbar:after,.elfinder-statusbar:before{display:none}.elfinder-quicklook-fullscreen .elfinder-quicklook-preview{border:0 solid}.elfinder-quicklook-cover,.elfinder-quicklook-titlebar{width:100%;height:100%;top:0;left:0;position:absolute}.elfinder-quicklook-cover.elfinder-quicklook-coverbg{background-color:#fff;opacity:.000001;filter:Alpha(Opacity=.0001)}.elfinder-quicklook-titlebar{text-align:center;background:#777;height:20px;-moz-border-radius-topleft:7px;-webkit-border-top-left-radius:7px;border-top-left-radius:7px;-moz-border-radius-topright:7px;-webkit-border-top-right-radius:7px;border-top-right-radius:7px;border:none;line-height:1.2}.elfinder-navdock .elfinder-quicklook-titlebar{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;cursor:default}.elfinder-touch .elfinder-quicklook-titlebar{height:30px}.elfinder-quicklook-title{display:inline-block;white-space:nowrap;overflow:hidden}.elfinder-touch .elfinder-quicklook-title{padding:8px 0}.elfinder-quicklook-titlebar-icon{position:absolute;left:4px;top:50%;margin-top:-8px;height:16px;border:none}.elfinder-touch .elfinder-quicklook-titlebar-icon{height:22px}.elfinder-quicklook-titlebar-icon .ui-icon{position:relative;margin:-9px 3px 0 0;cursor:pointer;border-radius:10px;border:1px solid;opacity:.7;filter:Alpha(Opacity=70)}.elfinder-quicklook-titlebar-icon .ui-icon.ui-icon-closethick{padding-left:1px}.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon{opacity:.6;filter:Alpha(Opacity=60)}.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon{margin-top:-5px}.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right{left:auto;right:4px;direction:rtl}.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon{margin:-9px 0 0 3px}.elfinder-touch .elfinder-quicklook-titlebar .ui-icon{-moz-transform-origin:center center;-moz-transform:scale(1.2);zoom:1.2}.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon{margin-right:10px}.elfinder-quicklook-preview{overflow:hidden;position:relative;border:0 solid;border-left:1px solid transparent;border-right:1px solid transparent;height:100%}.elfinder-navdock .elfinder-quicklook-preview{border-left:0;border-right:0}.elfinder-quicklook-preview.elfinder-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.elfinder-quicklook-info-wrapper{display:table;position:absolute;width:100%;height:100%;height:calc(100% - 80px);left:0;top:20px}.elfinder-navdock .elfinder-quicklook-info-wrapper{height:calc(100% - 20px)}.elfinder-quicklook-info{display:table-cell;vertical-align:middle}.elfinder-ltr .elfinder-quicklook-info{padding:0 12px 0 112px}.elfinder-rtl .elfinder-quicklook-info{padding:0 112px 0 12px}.elfinder-ltr .elfinder-navdock .elfinder-quicklook-info{padding:0 0 0 80px}.elfinder-rtl .elfinder-navdock .elfinder-quicklook-info{padding:0 80px 0 0}.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child{color:#fff;font-weight:700;padding-bottom:.5em}.elfinder-quicklook-info-data{clear:both;padding-bottom:.2em;color:#fff}.elfinder-quicklook .elfinder-cwd-icon{position:absolute;left:32px;top:50%;margin-top:-20px}.elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon{left:16px}.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon{left:auto;right:32px}.elfinder-rtl .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon{right:6px}.elfinder-quicklook .elfinder-cwd-icon:before{top:-10px}.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:after,.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:before{left:-20px}.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:before{left:-14px}.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:after{left:-12px}.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:before{left:auto;right:40px}.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:after{left:auto;right:46px}.elfinder-quicklook-preview img{display:block;margin:0 auto}.elfinder-quicklook-navbar{position:absolute;left:50%;bottom:4px;width:140px;height:32px;padding:0;margin-left:-70px;border:1px solid transparent;border-radius:19px;-moz-border-radius:19px;-webkit-border-radius:19px}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar{width:188px;margin-left:-94px;padding:5px;border:1px solid #eee;background:#000;opacity:.4;filter:Alpha(Opacity=40)}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator{display:inline}.elfinder-quicklook-navbar-icon{width:32px;height:32px;margin:0 7px;float:left;background:url(../img/quicklook-icons.png) 0 0 no-repeat}.elfinder-quicklook-navbar-icon-fullscreen{background-position:0 -64px}.elfinder-quicklook-navbar-icon-fullscreen-off{background-position:0 -96px}.elfinder-quicklook-navbar-icon-prev{background-position:0 0}.elfinder-quicklook-navbar-icon-next{background-position:0 -32px}.elfinder-quicklook-navbar-icon-close{background-position:0 -128px;display:none}.elfinder-quicklook-navbar-separator{width:1px;height:32px;float:left;border-left:1px solid #fff;display:none}.elfinder-quicklook-preview-archive-wrapper,.elfinder-quicklook-preview-text-wrapper{width:100%;height:100%;background:#fff;color:#222;overflow:auto;-webkit-overflow-scrolling:touch}.elfinder-quicklook-preview-archive-wrapper{font-size:90%}.elfinder-quicklook-preview-archive-wrapper strong{padding:0 5px}pre.elfinder-quicklook-preview-text,pre.elfinder-quicklook-preview-text.prettyprint{width:auto;height:auto;margin:0;padding:3px 9px;border:none;-o-tab-size:4;-moz-tab-size:4;tab-size:4}.elfinder-quicklook-preview-charsleft hr{border:none;border-top:dashed 1px}.elfinder-quicklook-preview-charsleft span{font-size:90%;font-style:italic;cursor:pointer}.elfinder-quicklook-preview-html,.elfinder-quicklook-preview-iframe,.elfinder-quicklook-preview-pdf{width:100%;height:100%;background:#fff;margin:0;border:none;display:block}.elfinder-quicklook-preview-flash{width:100%;height:100%}.elfinder-quicklook-preview-audio{width:100%;position:absolute;bottom:0;left:0}embed.elfinder-quicklook-preview-audio{height:30px;background:0 0}.elfinder-quicklook-preview-video{width:100%;height:100%}.elfinder .elfinder-quicklook .elfinder-quicklook-info *,.elfinder .elfinder-quicklook .elfinder-quicklook-preview *{-webkit-user-select:auto;-moz-user-select:text;-khtml-user-select:text;user-select:text}.elfinder-statusbar{display:flex;justify-content:space-between;cursor:default;text-align:center;font-weight:400;padding:.2em .5em;border-right:0 solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent}.elfinder-path,.elfinder-statusbar span{overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.elfinder-statusbar span{vertical-align:bottom}.elfinder-statusbar span.elfinder-path-other{flex-shrink:0;text-overflow:clip;-o-text-overflow:clip}.elfinder-statusbar span.ui-state-active,.elfinder-statusbar span.ui-state-hover{border:none}.elfinder-statusbar span.elfinder-path-cwd{cursor:default}.elfinder-path{display:flex;order:1;flex-grow:1;cursor:pointer;white-space:nowrap;max-width:30%\9}.elfinder-ltr .elfinder-path{text-align:left;float:left\9}.elfinder-rtl .elfinder-path{text-align:right;float:right\9}.elfinder-workzone-path{position:relative}.elfinder-workzone-path .elfinder-path{position:relative;font-size:.75em;font-weight:400;float:none;max-width:none;overflow:hidden;overflow-x:hidden;text-overflow:initial;-o-text-overflow:initial}.elfinder-mobile .elfinder-workzone-path .elfinder-path{overflow:auto;overflow-x:scroll}.elfinder-ltr .elfinder-workzone-path .elfinder-path{margin-left:24px}.elfinder-rtl .elfinder-workzone-path .elfinder-path{margin-right:24px}.elfinder-workzone-path .elfinder-path span{display:inline-block;padding:5px 3px}.elfinder-workzone-path .elfinder-path span.elfinder-path-cwd{font-weight:700}.elfinder-workzone-path .elfinder-path span.ui-state-active,.elfinder-workzone-path .elfinder-path span.ui-state-hover{border:none}.elfinder-workzone-path .elfinder-path-roots{position:absolute;top:0;width:24px;height:20px;padding:2px;border:none;overflow:hidden}.elfinder-ltr .elfinder-workzone-path .elfinder-path-roots{left:0}.elfinder-rtl .elfinder-workzone-path .elfinder-path-roots{right:0}.elfinder-stat-size{order:3;flex-grow:1;overflow:hidden;white-space:nowrap}.elfinder-ltr .elfinder-stat-size{text-align:right;float:right\9}.elfinder-rtl .elfinder-stat-size{text-align:left;float:left\9}.elfinder-stat-selected{order:2;margin:0 .5em;white-space:nowrap;overflow:hidden}.elfinder .elfinder-toast{position:absolute;top:12px;right:12px;max-width:90%;cursor:default}.elfinder .elfinder-toast>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:8px 16px 8px 50px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.9;filter:alpha(opacity=90);background-color:#030303;text-align:center}.elfinder .elfinder-toast>.toast-info{background-color:#2f96b4;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>.toast-error{background-color:#bd362f;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>.toast-success{background-color:#51a351;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}.elfinder .elfinder-toast>.toast-warning{background-color:#f89406;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>div button.ui-button{background-image:none;margin-top:8px;padding:.5em .8em}.elfinder .elfinder-toast>.toast-success button.ui-button{background-color:green;color:#fff}.elfinder .elfinder-toast>.toast-success button.ui-button.ui-state-hover{background-color:#add6ad;color:#254b25}.elfinder .elfinder-toast>.toast-info button.ui-button{background-color:#046580;color:#fff}.elfinder .elfinder-toast>.toast-info button.ui-button.ui-state-hover{background-color:#7dc6db;color:#046580}.elfinder .elfinder-toast>.toast-warning button.ui-button{background-color:#dd8c1a;color:#fff}.elfinder .elfinder-toast>.toast-warning button.ui-button.ui-state-hover{background-color:#e7ae5e;color:#422a07}.elfinder-toolbar{padding:4px 0 3px;border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;max-height:50%;overflow-y:auto}.elfinder-buttonset{margin:1px 4px;float:left;background:0 0;padding:0;overflow:hidden}.elfinder .elfinder-button{min-width:16px;height:16px;margin:0;padding:4px;float:left;overflow:hidden;position:relative;border:0 solid;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;line-height:1;cursor:default}.elfinder-rtl .elfinder-button{float:right}.elfinder-touch .elfinder-button{min-width:20px;height:20px}.elfinder .ui-icon-search{cursor:pointer}.elfinder-toolbar-button-separator{float:left;padding:0;height:24px;border-top:0 solid;border-right:0 solid;border-bottom:0 solid;width:0}.elfinder-rtl .elfinder-toolbar-button-separator{float:right}.elfinder-touch .elfinder-toolbar-button-separator{height:28px}.elfinder .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon,.elfinder .elfinder-button.ui-state-disabled .elfinder-button-text{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:inline-block;background:url(../img/toolbar.png) no-repeat}.elfinder-button-text{position:relative;display:inline-block;top:-4px;margin:0 2px;font-size:12px}.elfinder-touch .elfinder-button-icon{-moz-transform-origin:top left;-moz-transform:scale(1.25);zoom:1.25}.elfinder-touch .elfinder-button-text{-moz-transform:translate(3px,3px);top:-5px}.elfinder-button-icon-home{background-position:0 0}.elfinder-button-icon-back{background-position:0 -112px}.elfinder-button-icon-forward{background-position:0 -128px}.elfinder-button-icon-up{background-position:0 -144px}.elfinder-button-icon-dir{background-position:0 -16px}.elfinder-button-icon-opendir{background-position:0 -32px}.elfinder-button-icon-reload{background-position:0 -160px}.elfinder-button-icon-open{background-position:0 -176px}.elfinder-button-icon-mkdir{background-position:0 -192px}.elfinder-button-icon-mkfile{background-position:0 -208px}.elfinder-button-icon-rm{background-position:0 -832px}.elfinder-button-icon-trash{background-position:0 -224px}.elfinder-button-icon-restore{background-position:0 -816px}.elfinder-button-icon-copy{background-position:0 -240px}.elfinder-button-icon-cut{background-position:0 -256px}.elfinder-button-icon-paste{background-position:0 -272px}.elfinder-button-icon-getfile{background-position:0 -288px}.elfinder-button-icon-duplicate{background-position:0 -304px}.elfinder-button-icon-rename{background-position:0 -320px}.elfinder-button-icon-edit{background-position:0 -336px}.elfinder-button-icon-quicklook{background-position:0 -352px}.elfinder-button-icon-upload{background-position:0 -368px}.elfinder-button-icon-download{background-position:0 -384px}.elfinder-button-icon-info{background-position:0 -400px}.elfinder-button-icon-extract{background-position:0 -416px}.elfinder-button-icon-archive{background-position:0 -432px}.elfinder-button-icon-view{background-position:0 -448px}.elfinder-button-icon-view-list{background-position:0 -464px}.elfinder-button-icon-help{background-position:0 -480px}.elfinder-button-icon-resize{background-position:0 -512px}.elfinder-button-icon-link{background-position:0 -528px}.elfinder-button-icon-search{background-position:0 -561px}.elfinder-button-icon-sort{background-position:0 -577px}.elfinder-button-icon-rotate-r{background-position:0 -625px}.elfinder-button-icon-rotate-l{background-position:0 -641px}.elfinder-button-icon-netmount{background-position:0 -688px}.elfinder-button-icon-netunmount{background-position:0 -96px}.elfinder-button-icon-places{background-position:0 -704px}.elfinder-button-icon-chmod{background-position:0 -48px}.elfinder-button-icon-accept{background-position:0 -736px}.elfinder-button-icon-menu{background-position:0 -752px}.elfinder-button-icon-colwidth{background-position:0 -768px}.elfinder-button-icon-fullscreen{background-position:0 -784px}.elfinder-button-icon-unfullscreen{background-position:0 -800px}.elfinder-button-icon-empty{background-position:0 -848px}.elfinder-button-icon-undo{background-position:0 -864px}.elfinder-button-icon-redo{background-position:0 -880px}.elfinder-button-icon-preference{background-position:0 -896px}.elfinder-button-icon-mkdirin{background-position:0 -912px}.elfinder-button-icon-selectall{background-position:0 -928px}.elfinder-button-icon-selectnone{background-position:0 -944px}.elfinder-button-icon-selectinvert{background-position:0 -960px}.elfinder-button-icon-opennew{background-position:0 -976px}.elfinder-button-icon-hide{background-position:0 -992px}.elfinder-button-icon-text{background-position:0 -1008px}.elfinder-rtl .elfinder-button-icon-back,.elfinder-rtl .elfinder-button-icon-forward,.elfinder-rtl .elfinder-button-icon-getfile,.elfinder-rtl .elfinder-button-icon-help,.elfinder-rtl .elfinder-button-icon-redo,.elfinder-rtl .elfinder-button-icon-rename,.elfinder-rtl .elfinder-button-icon-search,.elfinder-rtl .elfinder-button-icon-undo,.elfinder-rtl .elfinder-button-icon-view-list,.elfinder-rtl .ui-icon-search{-ms-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scale(-1,1)}.elfinder .elfinder-menubutton{overflow:visible}.elfinder-button-icon-spinner{background:url(../img/spinner-mini.gif) center center no-repeat}.elfinder-button-menu{position:absolute;margin-top:24px;padding:3px 0;overflow-y:auto}.elfinder-touch .elfinder-button-menu{margin-top:30px}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.elfinder-touch .elfinder-button-menu-item{padding:12px 19px}.elfinder-button-menu .ui-state-hover{border:0 solid}.elfinder-button-menu-item-separated{border-top:1px solid #ccc}.elfinder-button-menu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-button-menu-item-selected .ui-icon{display:block}.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n{display:none}.elfinder-button form{position:absolute;top:0;right:0;opacity:0;filter:Alpha(Opacity=0);cursor:pointer}.elfinder .elfinder-button form input{background:0 0;cursor:default}.elfinder .elfinder-button-search{border:0 solid;background:0 0;padding:0;margin:1px 4px;height:auto;min-height:26px;width:70px;overflow:visible}.elfinder .elfinder-button-search.ui-state-active{width:220px}.elfinder .elfinder-button-search-menu{font-size:8pt;text-align:center;width:auto;min-width:180px;position:absolute;top:30px;padding-right:5px;padding-left:5px}.elfinder-ltr .elfinder-button-search-menu{right:22px;left:auto}.elfinder-rtl .elfinder-button-search-menu{right:auto;left:22px}.elfinder-touch .elfinder-button-search-menu{top:34px}.elfinder .elfinder-button-search-menu div{margin:5px auto;display:table}.elfinder .elfinder-button-search-menu div .ui-state-hover{border:1px solid}.elfinder-ltr .elfinder-button-search{float:right;margin-right:10px}.elfinder-rtl .elfinder-button-search{float:left;margin-left:10px}.elfinder-rtl .ui-controlgroup>.ui-controlgroup-item{float:right}.elfinder-button-search input[type=text]{box-sizing:border-box;width:100%;height:26px;padding:0 20px;line-height:22px;border:1px solid #aaa;-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px;outline:0 solid}.elfinder-button-search input::-ms-clear{display:none}.elfinder-touch .elfinder-button-search input{height:30px;line-height:28px}.elfinder-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-8px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-button-search-menu .ui-checkboxradio-icon{display:none}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-ltr .elfinder-button-search .ui-icon-close,.elfinder-rtl .elfinder-button-search .ui-icon-search{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0}.elfinder-toolbar-swipe-handle{position:absolute;top:0;left:0;height:50px;width:100%;pointer-events:none;background:linear-gradient(to bottom,#dde4eb 0,rgba(221,228,235,.8) 2px,rgba(216,223,230,.3) 5px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}
\ No newline at end of file
--- /dev/null
+/**
+ * MacOS X like theme for elFinder.
+ * Required jquery ui "smoothness" theme.
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+
+/* input textarea */
+.elfinder input,
+.elfinder textarea {
+ color: #000;
+ background-color: #FFF;
+ border-color: #ccc;
+}
+
+/* dialogs */
+.std42-dialog, .std42-dialog .ui-widget-content {
+ background-color: #ededed;
+ background-image: none;
+ background-clip: content-box;
+}
+
+.std42-dialog.elfinder-bg-translucent {
+ background-color: #fff;
+ background-color: rgba(255, 255, 255, 0.9);
+}
+
+.std42-dialog.elfinder-bg-translucent .ui-widget-content {
+ background-color: transparent;
+}
+
+.elfinder-quicklook-title {
+ color: #fff;
+}
+
+.elfinder-quicklook-titlebar-icon {
+ background-color: transparent;
+ background-image: none;
+}
+
+.elfinder-quicklook-titlebar-icon .ui-icon {
+ background-color: #d4d4d4;
+ border-color: #8a8a8a;
+}
+
+.std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover .ui-icon,
+.elfinder-mobile .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-icon,
+.elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close:hover,
+.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close {
+ background-color: #ff6252;
+ border-color: #e5695d;
+ background-image: url("../img/ui-icons_ffffff_256x240.png");
+}
+
+.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize:hover .ui-icon,
+.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize .ui-icon,
+.elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize:hover,
+.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize {
+ background-color: #ffbc00;
+ border-color: #e3a40b;
+ background-image: url("../img/ui-icons_ffffff_256x240.png");
+}
+
+.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full:hover .ui-icon,
+.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full .ui-icon,
+.elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full:hover,
+.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full {
+ background-color: #26c82f;
+ border-color: #13ae10;
+ background-image: url("../img/ui-icons_ffffff_256x240.png");
+}
+
+.std42-dialog .elfinder-help,
+.std42-dialog .elfinder-help .ui-widget-content {
+ background: #fff;
+}
+
+/* navbar */
+.elfinder .elfinder-navbar {
+ background: #dde4eb;
+}
+
+.elfinder-navbar .ui-state-hover {
+ color: #000;
+ background-color: #edf1f4;
+ border-color: #bdcbd8;
+}
+
+.elfinder-navbar .ui-droppable-hover {
+ background: transparent;
+}
+
+.elfinder-navbar .ui-state-active {
+ background: #3875d7;
+ border-color: #3875d7;
+ color: #fff;
+}
+
+.elfinder-navbar .elfinder-droppable-active {
+ background: #A7C6E5;
+}
+
+/* disabled elfinder */
+.elfinder-disabled .elfinder-navbar .ui-state-active {
+ background: #dadada;
+ border-color: #aaa;
+ color: #777;
+}
+
+/* workzone */
+.elfinder-workzone {
+ background: #fff;
+}
+
+/* current directory */
+/* Is in trash */
+.elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash {
+ background-color: #f0f0f0;
+}
+
+/* selected file in "icons" view */
+.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover,
+.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active {
+ background: #ccc;
+}
+
+/* type badge in "icons" view */
+/* default */
+.elfinder-cwd-icon:before {
+ color: white;
+ background-color: #798da7;
+}
+
+/* type */
+.elfinder-cwd-icon-text:before {
+ background-color: #6f99e6
+}
+
+.elfinder-cwd-icon-image:before {
+ background-color: #2ea26c
+}
+
+.elfinder-cwd-icon-audio:before {
+ background-color: #7bad2a
+}
+
+.elfinder-cwd-icon-video:before {
+ background-color: #322aad
+}
+
+/* subtype */
+.elfinder-cwd-icon-x-empty:before,
+.elfinder-cwd-icon-plain:before {
+ background-color: #719be6
+}
+
+.elfinder-cwd-icon-rtf:before,
+.elfinder-cwd-icon-rtfd:before {
+ background-color: #83aae7
+}
+
+.elfinder-cwd-icon-pdf:before {
+ background-color: #db7424
+}
+
+.elfinder-cwd-icon-html:before {
+ background-color: #82bc12
+}
+
+.elfinder-cwd-icon-xml:before,
+.elfinder-cwd-icon-css:before {
+ background-color: #7c7c7c
+}
+
+.elfinder-cwd-icon-x-shockwave-flash:before {
+ background-color: #f43a36
+}
+
+.elfinder-cwd-icon-zip:before,
+.elfinder-cwd-icon-x-zip:before,
+.elfinder-cwd-icon-x-xz:before,
+.elfinder-cwd-icon-x-7z-compressed:before,
+.elfinder-cwd-icon-x-gzip:before,
+.elfinder-cwd-icon-x-tar:before,
+.elfinder-cwd-icon-x-bzip:before,
+.elfinder-cwd-icon-x-bzip2:before,
+.elfinder-cwd-icon-x-rar:before,
+.elfinder-cwd-icon-x-rar-compressed:before {
+ background-color: #97638e
+}
+
+.elfinder-cwd-icon-javascript:before,
+.elfinder-cwd-icon-x-javascript:before,
+.elfinder-cwd-icon-x-perl:before,
+.elfinder-cwd-icon-x-python:before,
+.elfinder-cwd-icon-x-ruby:before,
+.elfinder-cwd-icon-x-sh:before,
+.elfinder-cwd-icon-x-shellscript:before,
+.elfinder-cwd-icon-x-c:before,
+.elfinder-cwd-icon-x-csrc:before,
+.elfinder-cwd-icon-x-chdr:before,
+.elfinder-cwd-icon-x-c--:before,
+.elfinder-cwd-icon-x-c--src:before,
+.elfinder-cwd-icon-x-c--hdr:before,
+.elfinder-cwd-icon-x-java:before,
+.elfinder-cwd-icon-x-java-source:before,
+.elfinder-cwd-icon-x-php:before {
+ background-color: #7c607c
+}
+
+.elfinder-cwd-icon-msword:before,
+.elfinder-cwd-icon-vnd-ms-office:before,
+.elfinder-cwd-icon-vnd-ms-word:before,
+.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:before {
+ background-color: #2b569a
+}
+
+.elfinder-cwd-icon-ms-excel:before,
+.elfinder-cwd-icon-vnd-ms-excel:before,
+.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:before {
+ background-color: #107b10
+}
+
+.elfinder-cwd-icon-vnd-ms-powerpoint:before,
+.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:before,
+.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:before {
+ background-color: #d24625
+}
+
+.elfinder-cwd-icon-vnd-oasis-opendocument-chart:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-database:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-formula:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-graphics:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-image:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-presentation:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-master:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-template:before,
+.elfinder-cwd-icon-vnd-oasis-opendocument-text-web:before,
+.elfinder-cwd-icon-vnd-openofficeorg-extension:before {
+ background-color: #00a500
+}
+
+.elfinder-cwd-icon-postscript:before {
+ background-color: #ff5722
+}
+
+/* list view*/
+.elfinder-cwd table thead td.ui-state-hover {
+ background: #ddd;
+}
+
+.elfinder-cwd table tr:nth-child(odd) {
+ background-color: #edf3fe;
+}
+
+.elfinder-cwd table tr {
+ border: 1px solid transparent;
+ border-top: 1px solid #fff;
+}
+
+.elfinder-cwd .elfinder-droppable-active td {
+ background: #A7C6E5;
+}
+
+.elfinder-cwd.elfinder-table-header-sticky table {
+ border-top-color: #fff;
+}
+
+.elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table {
+ border-top-color: #A7C6E5;
+}
+
+/* common selected background/color */
+.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover,
+.elfinder-cwd table td.ui-state-hover,
+.elfinder-button-menu .ui-state-hover {
+ background: #3875d7;
+ color: #fff;
+}
+
+/* disabled elfinder */
+.elfinder-disabled .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover,
+.elfinder-disabled .elfinder-cwd table td.ui-state-hover {
+ background: #dadada;
+}
+
+/* statusbar */
+.elfinder .elfinder-statusbar {
+ color: #555;
+}
+
+.elfinder .elfinder-statusbar a {
+ text-decoration: none;
+ color: #555;
+}
+
+/* contextmenu */
+.elfinder-contextmenu .ui-state-active {
+ background: #6293df;
+ color: #fff;
+}
+
+.elfinder-contextmenu .ui-state-hover {
+ background: #3875d7;
+ color: #fff;
+}
+
+.elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow {
+ background-image: url('../img/arrows-active.png');
+}
+
+/* dialog */
+.elfinder .ui-dialog input:text.ui-state-hover,
+.elfinder .ui-dialog textarea.ui-state-hover {
+ background-image: none;
+ background-color: inherit;
+}
+
+/* edit dialog */
+.elfinder-dialog-edit select.elfinder-edit-changed {
+ border-bottom: 2px solid #13ae10;
+}
+
+/* tooltip */
+.ui-widget-content.elfinder-ui-tooltip {
+ background-color: #fff;
+}
+
+.elfinder-ui-tooltip.ui-widget-shadow,
+.elfinder .elfinder-ui-tooltip.ui-widget-shadow {
+ box-shadow: 2px 6px 4px -4px #cecdcd;
+}
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="1800" viewBox="0 0 480 18000"><defs><linearGradient id="a"><stop offset="0" stop-color="#85b1d9"/><stop offset="1" stop-color="#dff0fe"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" y2="12.5" x2="20.2" y1="35.7" x1="20.2" id="f" xlink:href="#a" gradientTransform="translate(-1.2 27) scale(1.23846)"/><linearGradient y2="7.4" x2="21.9" y1="35.4" x1="21.7" gradientUnits="userSpaceOnUse" id="e" xlink:href="#a" gradientTransform="matrix(1.27105 0 0 1.27105 -1.2 -24.2)"/><filter id="g" color-interpolation-filters="sRGB"><feColorMatrix values="1 0 0 -0.2 -0 0 1 0 -0.2 -0 0 0 1 -0.2 -0 0 0 0 1 0"/></filter><filter id="o" color-interpolation-filters="sRGB"><feColorMatrix type="hueRotate" values="203" result="color1"/><feColorMatrix type="saturate" values=".7" result="color2"/></filter><filter id="n" color-interpolation-filters="sRGB"><feColorMatrix type="hueRotate" values="135" result="color1"/><feColorMatrix type="saturate" values=".7" result="color2"/></filter><linearGradient id="b"><stop offset="0" stop-color="#18a303"/><stop offset="1" stop-color="#43c330"/></linearGradient><linearGradient id="p" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" y1="991.7" y2="977"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><linearGradient id="q" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" xlink:href="#c" y1="991.7" y2="977"/><linearGradient id="c"><stop offset="0" stop-color="#a33e03"/><stop offset="1" stop-color="#d36118"/></linearGradient><linearGradient id="r" gradientUnits="userSpaceOnUse" x1="41" x2="5" xlink:href="#c" y1="46" y2="2"/><linearGradient id="s" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" xlink:href="#b" y1="991.7" y2="977"/><linearGradient id="t" gradientUnits="userSpaceOnUse" x1="41" x2="7" xlink:href="#b" y1="47" y2="3"/><linearGradient id="u" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" xlink:href="#d" y1="991.7" y2="977"/><linearGradient id="d"><stop offset="0" stop-color="#0369a3"/><stop offset="1" stop-color="#1c99e0"/></linearGradient><linearGradient id="v" gradientTransform="matrix(1.55551 0 0 1.66668 -316 1319)" gradientUnits="userSpaceOnUse" x1="230.1" x2="204.4" xlink:href="#d" y1="-762.6" y2="-791.4"/></defs><g transform="translate(0 -8369.4) scale(9.93789)"><path d="M42 854.6v35.2H6V843h24.4z" fill="#fff"/><path d="M30.2 843.4l11.3 11.2V889H6.8v-45.5h23.5m.6-1.3H5.3v48.3H43v-36.3z" fill="#788b9c"/><path d="M42 854.6v.4H30v-12h.4z" fill="#eef0f2"/><path d="M30.9 844.2l10 10h-10v-10m0-2h-1.3v13.5H43v-1.3z" fill="#788b9c"/><path word-spacing="0" letter-spacing="0" font-size="8.5" font-weight="400" aria-label="?" d="M21 880h4v4h-4zm3.8-2.2h-3.6v-2.5q0-1.6.5-2.6t2.3-2.4l1.7-1.4q1-.8 1.6-1.6.5-.7.5-1.5 0-1.4-1.3-2.2-1.3-1-3.3-1-1.5 0-3.3.6-1.7.6-3.6 1.6v-3q1.9-.8 3.7-1.3 1.9-.4 3.8-.4 3.6 0 5.7 1.5 2.2 1.6 2.2 4 0 1.3-.7 2.4-.7 1-2.4 2.4l-1.8 1.4-1.3 1q-.4.5-.5.9l-.2.8v1.3z" font-family="sans-serif" fill="navy"/><path d="M.6 937.2v-39.5h13l4 3.8h30.1v35.7z" fill="#b6dcfe"/><path d="M13.5 898.3l3.8 3.8h29.8v34.4H1.3v-38.2h12m.7-1.2H0v40.7h48.3v-36.9H17.8z" fill="#4788c7"/><path d="M.7 21v-33.1h13.6l3.8-2.6h29.6V21z" fill="url(#e)" transform="translate(0 916.2)"/><path d="M47 902.1v34.4H1.4v-31.8h13l.4-.2 3.5-2.4h28.9m1.2-1.2H17.8l-3.8 2.6H0v34.2h48.3z" fill="#4788c7"/><path d="M.6 987.5V949h12.8l3.7 3.8h25.7v34.7z" fill="#b6dcfe"/><path d="M13 949.6l3.8 3.8h25.5v33.5h-41v-37.3H13m.6-1.2H0v39.7h43.3v-36H17.4z" fill="#4788c7"/><path d="M.8 71l4.7-26h13.4l3.7-2.5h25L42.9 71z" fill="url(#f)" transform="translate(0 916.5)"/><path d="M46.9 959.6l-4.5 27.2H1.5L6 962h13l.3-.2 3.3-2.2h24.2m1.5-1.4h-26l-3.7 2.5H5L0 988h43.3z" fill="#4788c7"/><path d="M6 1040.8v-47h24.5l11.6 11.7v35.1z" fill="#fff"/><path d="M30.2 994.5l11.3 11v34.5H6.8v-45.6h23.5m.6-1.3H5.3v48.3H43v-36.2z" fill="#4788c7"/><path d="M30 1006v-12h.5l11.6 11.6v.4z" fill="#dff0fe"/><path d="M30.8 995.1l10 10h-10v-10m0-2h-1.3v13.6h13.4v-1.3z" fill="#4788c7"/><path stroke-miterlimit="10" d="M15.3 1015.3h1.5v6m6.6-.6c-.7 0-1.3-.7-1.3-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .7-.6 1.3-1.4 1.3zm8 0c-.7 0-1.3-.7-1.3-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .7-.6 1.3-1.4 1.3zm0 4h1.5v6m-8.1-.6c-.8 0-1.4-.6-1.4-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .8-.6 1.4-1.3 1.4zm-8 0c-.9 0-1.5-.6-1.5-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .8-.6 1.4-1.3 1.4z" fill="none" stroke="#4788c7" stroke-width="1.3"/><g id="k"><path d="M6.5 37.5v-35h18.3l8.7 8.7v26.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#fff"/><path d="M24.6 3l8.4 8.4V37H7V3h17.6m.4-1H6v36h28V11z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#4788c7"/><path d="M24.5 11.5v-9h.3l8.7 8.7v.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#dff2fe"/><path d="M25 3.4l7.6 7.6H25V3.4M25 2h-1v10h10v-1z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#4788c7"/><path d="M27.5 17h-15a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h15c.3 0 .5.2.5.5s-.2.5-.5.5zm-4 3h-11a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h11c.3 0 .5.2.5.5s-.2.5-.5.5zm4 3h-15a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h15c.3 0 .5.2.5.5s-.2.5-.5.5zm-4 3h-11a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h11c.3 0 .5.2.5.5s-.2.5-.5.5zm4 3h-15a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h15c.3 0 .5.2.5.5s-.2.5-.5.5z" transform="matrix(1.34766 0 0 1.34167 -2.8 1042)" fill="#4788c7"/></g><path d="M6 1094.5h24.5l11.7 11.7v35.2H6z" fill="#fff"/><path d="M30.2 1095.2l11.3 11.1v34.4H6.8V1095h23.5m.6-1.3H5.3v48.3H43v-36.2z" fill="#2ea26c"/><path d="M30.1 1094.5h.4l11.7 11.7v.4h-12z" fill="#e8f8f1"/><path d="M30.8 1095.7l10.1 10.1h-10v-10m0-2h-1.4v13.5H43v-1.3z" fill="#2ea26c"/><g transform="matrix(1.34166 0 0 1.34166 -2.8 1093.8)" filter="url(#g)"><path d="M28 29v-3l-5-4.8-3 2.8 4.6 5z" fill="#79efa8"/><circle cx="26" cy="17" r="2" fill="#b5ffc9"/><path d="M26 29H12v-4l5-5z" fill="#b5ffc9"/></g><path d="M6 1191.8v-47h24.5l11.7 11.7v35.2z" fill="#fff"/><path d="M30.2 1145.6l11.3 11.1v34.3H6.8v-45.5h23.5m.6-1.5H5.3v48.3H43v-36.2z" fill="#7bad2a"/><path d="M42.2 1157h-12v-12.2h.3l11.7 11.7z" fill="#f2f9e7"/><path d="M30.8 1146l10.2 10.2H31v-10.1m0-2h-1.5v13.6H43v-1.4z" fill="#7bad2a"/><path d="M24.8 1177.9v-12.7c3.4 0 5.3 1.3 5.3 1.3v2.7s-2.4-1.4-4.7-1.4" fill="#c9e69a"/><path d="M25.4 1177.9h-1.3v-13.4h.7c3.7 0 5.6 1.5 5.7 1.5h.3v4.2l-1-.5s-2.4-1.2-4.4-1.2zm0-10.7c1.5 0 3.1.5 4 .9v-1.2c-.5-.3-1.8-1-4-1z" fill="#7bad2a"/><g transform="matrix(1.34166 0 0 1.34166 -2.8 1143)"><circle cx="18" cy="26" r="2.5" fill="#c4e490"/><path d="M18 24a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1.1.9-2 2-2m0-1a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3z" fill="#7bad2a"/></g><path d="M30.5 1195l11.7 11.7v35.2H6V1195z" fill="#fff"/><path d="M30.2 1195.8l11.3 11.2v34.2H6.8v-45.4h23.5m.6-1.3H5.3v48.2H43v-36.2z" fill="#788b9c"/><path d="M30.5 1195l11.7 11.7v.4h-12v-12z" fill="#eef0f2"/><path d="M30.8 1196.3l10.1 10.1h-10v-10.1m0-2h-1.4v13.5H43v-1.3z" fill="#788b9c"/><path d="M18.8 1231.8l14.8-8.3-14.8-8.4z" fill="#8bb7f0"/><g><path d="M6 1443.4v-47h24.5l11.7 11.7v35.2z" fill="#fff"/><path d="M30.2 1397.1l11.3 11v34.5H6.8v-45.7h23.5m.6-1.3H5.3v48.3H43v-36.2z" fill="#4788c7"/><path d="M30.1 1408.5v-12h.4l11.7 11.6v.4z" fill="#dff0fe"/><path d="M30.8 1397.6l10.1 10h-10v-10m0-2h-1.4v13.6H43v-1.3z" fill="#4788c7"/><path d="M36.7 1426.3a12.5 12.5 0 0 1-25 0c0-6.8 5.6-12.4 12.5-12.4 7 0 12.5 5.6 12.5 12.4z" fill="#c2e8ff"/><path d="M31.5 1436l-.4-1.2a8 8 0 0 1-.6-1.8v-.5c0-.4-.2-.9-.6-1.3l-.6-.4h-.2c-.5-.3-1-.3-1.4-.3-.8 0-1.2 0-1.6-.6v-1.1l.3-.6.3-.6.4-.9.5-1.3.1-.6v-.3l.6-.3h.1l.1-.2c.1 0 .3-.1.3-.4v-.4l.1-.2 1-1a30 30 0 0 0 1.4-1.3v-.5c0-.1-.2-.3-.4-.3a3 3 0 0 0-.4-.1l-.3-.2v-.1l.4-.7.5-.8.3-.3c.1-.3.3-.5.5-.6a1 1 0 0 1 .8 0 12.4 12.4 0 0 1-1 19.3z" fill="#bae0bd"/><path d="M32.4 1417.4a12 12 0 0 1 3.9 8.9c0 3.7-1.6 7.1-4.5 9.5a2 2 0 0 1-.3-1v-.2c-.4-.6-.5-1-.6-1.7v-.4c-.2-.4-.3-1-.7-1.5-.2-.3-.6-.5-.8-.5h-.2l-1.5-.4c-.8 0-1 0-1.3-.3V1429l.3-.6.3-.6.4-.8.6-1.4V1424.7l.5-.2.2-.1c.1-.1.4-.3.4-.8v-.4l1-1 1-1c.3 0 .4-.2.5-.4v-.7a1 1 0 0 0-.6-.5l-.4-.1.7-1.3.3-.3.4-.5h.4m0-.7h-.5c-.4.2-.7.8-1 1.1l-1 1.5c0 .2-.3.5 0 .6h.2l.7.4c.1 0 .3.2.1.3v.2l-2.3 2-.3.6s.2 0 .2.3l-.3.3-.7.4c-.2.3 0 .7-.2 1 0 .8-.6 1.3-.9 2l-.7 1.4c0 .6 0 1 .2 1.4.7 1 2 .5 3 1 .3 0 .6 0 .7.3.5.5.5 1.2.6 1.6l.6 1.9c.1.7.4 1.4.6 2l.3-.2a12.9 12.9 0 0 0 1-19.9h-.3z" fill="#5e9c76"/><path d="M24.3 1419.3l-.1-1.2.1-.7c.1-.4.2-.8.1-1.3l-.1-1.2v-.3h-1.1v-.4l.2-.4a12.3 12.3 0 0 1 5 .7l-.6 1.1v.2c-.2.5-.5 1-.8 1.1l-1 1-.8.6-.7.6a2.7 2.7 0 0 0-.3.2z" fill="#bae0bd"/><path d="M24.1 1414.1c1.3 0 2.6.2 4 .6l-.5.8v.2a2 2 0 0 1-.7 1l-1 1-.8.5-.6.6v-.7l.1-.6c.1-.4.3-.8.2-1.4l-.2-1.3v-.4l-.5-.2h-.4.4m0-.8h-.8l-.4.8c-.1.7.5.6 1 .7l.2 1.3c.2.7-.3 1.2-.3 2 0 .3 0 1.2.3 1.5h.2l.5-.3 1.3-1 1.2-1 1-1.5c0-.3.5-1 .4-1.6a13 13 0 0 0-4.6-.9z" fill="#5e9c76"/><path d="M20.4 1438.4a12.5 12.5 0 0 1-2.2-1v-.5l-.2-.6-.2-.8a18.8 18.8 0 0 0-.6-1.5c-.2-.5-.5-1-.5-1.5v-.5c0-.5 0-1-.3-1.7h2.9l.3.1c.3.1.7.2.9.4v.3l.3.5c.6.7 1.3.8 2 1l.6.2c.1 0 .2 0 .2.3.2.4 0 1 0 1.1l-.2.3c0 .4-.2.8-.4 1l-.8.5-.8.9-.4.5h-.1v.2l-.5.7zm-5-8.8l-.7-.3c-.3 0-.6-.2-.8-.3-1-.6-1.7-1.5-2-2.2 0-.2-.3-.3-.4-.4 0-3.5 1.4-6.7 3.8-9a12 12 0 0 1 3.6-.8h.7c.4.2.8.4 1 .7.3.3.7.6.7 1H20l-.6-.6a1 1 0 0 0-.4 0c-1 0-2.3 1.8-2.4 2.5a2 2 0 0 0 0 1.4c.2.3.5.5.8.6.5 0 1-.4 1.5-1l.5-.2.4-.3.2-.1h.2c.9 0 1.5.8 1.7 1.6v.5c-.3.6-1.4 1-2.4 1.4h-.7c-1 .4-1.8 1.4-1.8 2.4l-.1.8a1 1 0 0 0-.6-.5c-.1-.2-.2-.2-.5-.2l-.4-.1-.6-.2a1 1 0 0 0-.5.2c-.3.2-.8.8-.8 1.4 0 .2 0 .5.3.7l.4.2h.6v.1a57.3 57.3 0 0 0 .5.7z" fill="#bae0bd"/><path d="M18.9 1417h.6l1 .6.3.4h-.5l-.5-.5H19.5l-.4-.2c-1.3 0-2.6 2-2.8 2.7-.1.5-.1 1.3.2 1.8.2.4.5.6 1 .7.6 0 1-.4 1.7-1l.5-.2.3-.3.2-.1c.7 0 1.3.7 1.5 1.4v.2c-.2.4-1 1-2.1 1.3h-.4a1 1 0 0 0-.5 0c-1 .4-2 1.5-2 2.6v.1a1 1 0 0 0-.8-.2l-.3-.1a2 2 0 0 0-.7-.2c-.3 0-.5 0-.7.2v.1c-.4.2-.9.9-.9 1.6v.2c-.5-.5-1-1-1.2-1.5a7 7 0 0 0-.2-.3 12 12 0 0 1 3.6-8.8c1.3-.3 2.5-.6 3.4-.6m.3 13.8a16.5 16.5 0 0 0 1 .3v.2l.2.5v.2c.8.7 1.6 1 2.2 1l.7.2v1h-.1l-.1.3-.3.9-.7.4h-.2l-1 1-.3.5-.2.2-.2.5-1.8-.7v-.4l-.1-.5v-.2l-.3-.7-.2-.8a8 8 0 0 0-.4-.8 3 3 0 0 1-.4-1.3v-.5l-.1-1.3H19m-.2-14.5c-1 0-2.5.2-3.8.6-2.4 2.5-3.9 5.8-3.9 9.4v.2l.3.4c.4 1 1.3 1.8 2.2 2.4.6.4 1.7.4 2.3 1.1.5.6.4 1.3.4 2 0 1 .6 1.7.9 2.5l.4 1.4.2 1.2c.8.6 1.7.9 2.5 1 .2 0 .8-.7.8-1 .4-.3.7-1 1.2-1.2l.8-.5c.3-.3.5-1 .6-1.4.2-.3.3-1 .2-1.4-.1-.2-.2-.4-.5-.5-.8-.3-1.7-.3-2.4-1l-.3-1-1.5-.5h-3c-.4-.2-.7-.7-1-1.2 0 0 0-.4-.3-.4H14.1v-.5c0-.4.2-.8.4-1.1l.4-.1 1 .2.4.2c.4.1.5.7.5 1.1v.3c0 .2.2.2.3.2l.3-2.2c0-1 .9-1.8 1.6-2h.7c1-.3 3-1.2 2.7-2.4-.3-1-1-2-2.1-2h-.4l-.7.6c-.4.3-1.3 1-1.7 1-.8 0-.8-1-.6-1.5 0-.5 1.3-2.3 2-2.3h.3l.6.6c.3.3.7.3 1.2.3l.4-.3v-.3c0-.4-.3-.8-.6-1-.3-.4-.7-.7-1.2-.8a3 3 0 0 0-.8 0z" fill="#5e9c76"/><g><path d="M24.1 1414.1a12.2 12.2 0 1 1 0 24.4 12.2 12.2 0 0 1 0-24.4m0-.7a12.9 12.9 0 1 0 0 25.8 12.9 12.9 0 0 0 0-25.8z" fill="#7496c4"/></g></g><g><path d="M6 1292.5v-47h24.5l11.7 11.6v35.3z" fill="#fff"/><path d="M30.2 1246.2l11.3 11v34.5H6.8V1246h23.5m.6-1.3H5.3v48.3H43v-36.3z" fill="#4788c7"/><path d="M30.1 1257.5v-12h.4l11.7 11.6v.4z" fill="#dff0fe"/><path d="M30.8 1246.7l10.1 10h-10v-10m0-2h-1.4v13.6H43v-1.4z" fill="#4788c7"/><path d="M34.2 1266.2H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h20.2c.4 0 .7.3.7.6 0 .4-.3.7-.7.7z" fill="purple"/><path d="M28.8 1270.2H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h15c.2 0 .5.3.5.6 0 .4-.3.7-.6.7z" fill="#f55"/><path d="M34.2 1274.3H14a.7.7 0 0 1-.7-.8c0-.3.3-.6.7-.6h20.2c.4 0 .7.3.7.6 0 .5-.3.8-.7.8z" fill="green"/><path d="M28.8 1278.3H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h15c.2 0 .5.3.5.6 0 .4-.3.7-.6.7z" fill="olive"/><path d="M34.2 1282.3H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h20.2c.4 0 .7.3.7.6 0 .4-.3.7-.7.7z" fill="#500"/></g><g><path d="M42.2 1307.4v35.2H6v-47h24.5z" fill="#fff"/><path d="M30.2 1296.3l11.3 11.3v34.4H6.8v-45.7h23.5m.6-1.3H5.3v48.3H43V1307z" fill="#c74343"/><path d="M42.2 1307.4v.4h-12v-12.1h.3z" fill="#ffd9d9"/><path d="M30.8 1296.9L41 1307H31v-10.2m0-2h-1.5v13.5H43v-1.3zm-16 40.7c-1 0-1.7-.6-1.7-1.3 0-1.9 2.4-3.3 5.6-4.4a38.2 38.2 0 0 0 3.5-8c-.8-2-1.2-3.7-1.2-5 0-.7 0-1.4.4-1.8.2-.5.8-.9 1.4-.9.6 0 1.1.3 1.4.8.2.4.2 1 .2 1.6 0 1.2-.4 3-.9 5a26.2 26.2 0 0 0 3.7 6.3 13 13 0 0 1 5.6.3c1.3.4 1.6 1.2 1.6 1.7s-.3 2-2.6 2a7 7 0 0 1-5.2-2.8c-2.4.3-5 .8-7.2 1.5-1.2 3-3 5-4.7 5zm-.3-1.3h.2c.7 0 1.9-1 2.9-2.5-1.9.8-3 1.7-3 2.5zm14.2-5a5 5 0 0 0 3.4 1.5c1.2 0 1.2-.4 1.2-.5 0-.3-.5-.4-.6-.5-1-.4-2.4-.6-4-.4zm-5.7-5.5a40.3 40.3 0 0 1-2.4 5.4c1.7-.4 3.4-.8 5-1a35.2 35.2 0 0 1-2.6-4.4zm0-8.3c-.2 0-.3 0-.3.2l-.1 1c0 .8 0 1.8.4 2.8.2-1 .4-2 .4-2.9 0-.7-.2-1-.2-1h-.2z" fill="#c74343"/></g><g id="l"><path d="M6.2 474v-46.7h24.4l11.6 11.6v35z" fill="#fff" transform="translate(-.3 916.1) scale(1.00625)"/><path d="M30.2 439.3v-12h.4l11.6 11.6v.4z" fill="#ffd5d5" transform="translate(-.3 916.1) scale(1.00625)"/><path d="M30.3 428l11.2 11v34.2H7v-45.4h23.4m.6-1.3H5.5v48H43v-36z" fill="#e64a19" transform="translate(-.3 916.1) scale(1.00625)"/><path d="M30.9 428.5l10 10H31v-10m0-2h-1.4V440H43v-1.3zM12.8 449l14.5-5.3 7.9 2v22.4l-8 2-14.4-5.3 14.5 2v-19.1l-9.3 2v13.1l-5.2 2z" fill="#e64a19" transform="translate(-.3 916.1) scale(1.00625)"/></g><g id="h"><path d="M6.5 37.5v-35h18.3l8.7 8.7v26.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#fff"/><path d="M24.6 3l8.4 8.4V37H7V3h17.6m.4-1H6v36h28V11z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#4788c7"/><path d="M24.5 11.5v-9h.3l8.7 8.7v.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#dff0fe"/><path d="M25 3.4l7.6 7.6H25V3.4M25 2h-1v10h10v-1z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#4788c7"/><path d="M25.5 19.5l2 4-2 4m-11-8l-2 4 2 4m8-11l-5 14" transform="matrix(1.34766 0 0 1.34167 -2.8 1444.5)" stroke-miterlimit="10" fill="none" stroke="#4788c7" stroke-linecap="round"/></g><g id="j" transform="matrix(1.01074 0 0 1.00625 -.3 916)"><path d="M6.5 2.5h27v35h-27z" transform="translate(-2.5 974) scale(1.33333)" fill="#ffeea3"/><path d="M33 3v34H7V3h26m1-1H6v36h28z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M20 30.5c-2 0-3.5-1.6-3.5-3.5 0-.6.4-2.5 1-5.3.1-.7.7-1.2 1.4-1.2h2.2c.7 0 1.3.5 1.4 1.2l1 5.3c0 2-1.6 3.5-3.5 3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#fffae0"/><path d="M21 21c.5 0 1 .3 1 .8 1 4 1 5 1 5.2a3 3 0 0 1-6 0c0-.2 0-1.1 1-5.2a1 1 0 0 1 1-.8h2m0-1h-2a2 2 0 0 0-2 1.6c-.4 1.8-1 4.6-1 5.4a4 4 0 0 0 8 0c0-.8-.6-3.6-1-5.4a2 2 0 0 0-2-1.6z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="20" cy="27" r="1.5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 19H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="18.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 20H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="19.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 17H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="16.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 18H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="17.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 15H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="14.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 16H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="15.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 13H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="12.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 14H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="13.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 11H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="10.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 12H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="11.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 9H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="8.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 10H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="9.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 7H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="6.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 8H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="7.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 5H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="4.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 6H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="5.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 4H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="3.5" r=".5" fill="#ba9b48" transform="translate(-2.5 974) scale(1.33333)"/></g><g><path d="M6 2147.6v-47h24.5l11.7 11.7v35.2z" fill="#fff"/><path d="M30.2 2101.4l11.3 11.2v34.3H6.8v-45.4h23.5m.6-1.4H5.3v48.2H43V2112z" fill="#f44336"/><path d="M30.1 2112.7v-12h.4l11.7 11.6v.4z" fill="#fde4e3"/><path d="M30.8 2101.9L41 2112H31v-10m0-2h-1.5v13.4H43v-1.4z" fill="#f44336"/><g><path d="M11 2121a2.9 3 0 0 1 3-2.9h20.2a2.9 3 0 0 1 3 2.9v20.4a2.9 3 0 0 1-2.9 2.9H14a2.9 3 0 0 1-3-3z" fill="#f44336"/><path d="M13.2 2120.2v22H35v-22zm12.4 7.5H22v2.6h3.3v1.7H22v4.3h-2.1V2126h5.7zm3 8.6h-1.9V2126h2z" fill="#210403"/></g></g><g><path d="M22.7 2186v-35.2h17l8 8.7v26.5z" fill="#fff"/><path d="M39.5 2151.3l7.8 8.4v25.8H23.2v-34.2h16.3m.4-1H22.2v36.2h26.1v-27z" fill="#4788c7"/><path d="M39.4 2159.8v-9.1h.3l8 8.8v.3z" fill="#dff0fe"/><path d="M39.9 2151.7l7 7.6h-7v-7.6m0-1.4h-1v10.1h9.3v-1z" fill="#4788c7"/><path d="M12 2191.5v-35.3h17.1l8 8.8v26.4z" fill="#fff"/><path d="M29 2156.7l7.7 8.5v25.8H12.6v-34.3h16.3m.4-1H11.6v36.2h26v-27.1z" fill="#4788c7"/><path d="M28.8 2165.3v-9.1h.2l8 8.8v.3z" fill="#dff0fe"/><path d="M29.2 2157l7 7.8h-7v-7.7m0-1.4h-.9v10.1h9.3v-1z" fill="#4788c7"/><g><path d="M.5 2198v-35.2h17l8 8.8v26.4z" fill="#fff"/><path d="M17.3 2163.3l7.7 8.5v25.8H.9v-34.3h16.4m.4-1H0v36.3h26v-27.2z" fill="#4788c7"/><path d="M17.2 2172v-9.2h.3l8 8.8v.3z" fill="#dff0fe"/><path d="M17.7 2163.8l7 7.6h-7v-7.6m0-1.4h-1v10H26v-1z" fill="#4788c7"/></g></g><g id="i"><path d="M6.5 37.5v-35h18.3l8.7 8.7v26.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#fff"/><path d="M24.6 3l8.4 8.4V37H7V3h17.6m.4-1H6v36h28V11z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#4788c7"/><path d="M24.5 11.5v-9h.3l8.7 8.7v.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#dff0fe"/><path d="M25 3.4l7.6 7.6H25V3.4M25 2h-1v10h10v-1z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#4788c7"/><path d="M2.5 3.5h35v33h-35z" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="#fff"/><path d="M37 4v32H3V4h34m1-1H2v34h36z" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="#4788c7"/><path d="M3 4h34v5H3z" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="#98ccfd"/><path d="M14.6 24.6c.5 1.1 1.3 1.9 2.2 1.9 2.1 0 3.2-2 3.2-4.5s-1.2-4.5-3.2-4.5c-1 0-1.7.8-2.2 2m10.8 5.1c-.5 1.1-1.3 1.9-2.2 1.9-2.1 0-3.2-2-3.2-4.5s1.2-4.5 3.2-4.5c1 0 1.7.8 2.2 2m3.1 9a20.6 20.6 0 0 0 0-13m-17 0a20.6 20.6 0 0 0 0 13" stroke-miterlimit="10" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="none" stroke="#4788c7" stroke-linecap="round"/></g><use height="100%" width="100%" transform="translate(0 402.5)" xlink:href="#h"/><use height="100%" width="100%" transform="translate(0 50.3)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 100.6)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 151)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 201.2)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 251.6)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 301.9)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 50.3)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(0 100.6)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(0 151)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(0 1157.2)" xlink:href="#k"/><g transform="translate(0 -201.3)"><g transform="matrix(1.07692 0 0 1.07692 -2.2 -191.4)" id="m"><use transform="translate(2 1205.6) scale(.92857)" height="100%" width="100%" xlink:href="#l"/><path fill="#fff" stroke-width="1.1" d="M11.3 2469.7h26.2v28H11.3z"/></g><path d="M36.5 2474.2H24.9v20.3h11.6c.4 0 .7-.3.7-.7V2475c0-.4-.3-.7-.7-.7z" fill="#ff8a65"/><g fill="#fbe9e7"><path d="M24.1 2488h10.2v1.5H24.1zM24.1 2491h10.2v1.4H24.1zM28.5 2477.8a4.4 4.4 0 1 0 4.4 4.4h-4.4z"/><path d="M30 2476.4v4.3h4.3c0-2.4-2-4.3-4.3-4.3z"/></g><path fill="#e64a19" d="M26.3 2497.5l-15.2-3v-20.3l15.2-3z"/><path d="M19 2479.3h-3.6v10.2h2.2v-3.5h1.1c1.2 0 2.2-.4 3-1 .6-.6 1-1.5 1-2.5 0-2.1-1.3-3.2-3.8-3.2zm-.5 5h-.9v-3.3h1c1.1 0 1.7.6 1.7 1.6s-.6 1.6-1.8 1.6z" fill="#fff"/></g><g transform="translate(0 -201.3)"><use xlink:href="#m" width="100%" height="100%" transform="translate(0 50.3)" fill="none" filter="url(#n)"/><path d="M36.5 2524.5H24.9v20.4h11.6c.4 0 .7-.4.7-.8v-18.9c0-.4-.3-.7-.7-.7z" fill="#4caf50"/><path d="M30 2528.1h5v2.2h-5zM30 2535.4h5v2.2h-5zM30 2539h5v2.2h-5zM30 2531.8h5v2.2h-5zM24.9 2528.1h3.6v2.2H25zM24.9 2535.4h3.6v2.2H25zM24.9 2539h3.6v2.2H25zM24.9 2531.8h3.6v2.2H25z" fill="#fff"/><path d="M26.3 2547.8l-15.2-3v-20.3l15.2-2.9z" fill="#2e7d32"/><path d="M20.6 2539.8l-1.7-3.3-.2-.7-.3.7-1.8 3.3H14l3.2-5.1-3-5.1H17l1.4 3 .3.9.4-.9 1.6-3h2.5l-3 5 3.1 5.2h-2.7z" fill="#fff"/></g><g transform="translate(0 -201.3)"><use transform="translate(0 100.6)" height="100%" width="100%" xlink:href="#m" filter="url(#o)"/><path d="M36.5 2574.8H24.9v20.4h11.6c.4 0 .7-.4.7-.8v-18.9c0-.4-.3-.7-.7-.7z" fill="#2196f3"/><path d="M24.9 2578.5H35v1.4H24.9zM24.9 2581.4H35v1.4H24.9zM24.9 2584.3H35v1.4H24.9zM24.9 2587.2H35v1.4H24.9zM24.9 2590H35v1.5H24.9z" fill="#fff"/><path d="M26.3 2598l-15.2-2.8v-20.4l15.2-2.9z" fill="#0d47a1"/><path d="M22 2590h-1.9l-1.3-6.4-.1-1.2-.2 1.2-1.3 6.5h-2l-2.2-10.2h2l1.1 6.8.1 1.2.2-1.2 1.4-6.8h2l1.2 6.8.2 1.1v-1.1l1.2-6.8h1.8z" fill="#fff"/></g><g><path d="M6 2449.5v-47h24.6l11.7 11.7v35.3z" fill="#fff"/><path d="M30.3 2403.2l11.4 11.3v34.3h-35v-45.6h23.6m.6-1.3H5.3v48.3H43v-36.3z" fill="#ff5722"/><path d="M30.2 2414.6v-12h.4l11.7 11.6v.4z" fill="#ffe8e1"/><path d="M30.9 2403.7L41 2414H31v-10.2m0-1.8h-1.4v13.4H43v-1.4zM11 2422.9a3 3 0 0 1 3-3h20.3a3 3 0 0 1 3 3v20.3a3 3 0 0 1-3 3H14a3 3 0 0 1-3-3z" fill="#ff5722"/><path d="M13.2 2422.1v21.9h21.9V2422zm10.7 16l-.5-2h-2.9l-.5 2h-2.2l3.2-10.3h1.9l3.3 10.3zm5.2 0h-2v-7.6h2zm-.2-8.9a1 1 0 0 1-.8.3 1 1 0 0 1-.8-.3 1 1 0 0 1-.3-.7c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .3 0 .5-.3.7z" fill="#1c0802"/><path d="M21 2434.3h2l-1-3.7z" fill="#1c0802"/></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#p)" transform="translate(0 2452.2) scale(1.00625)"/><path d="M7 2455.2v42.3h34.3v-26.2l-16.1-16.1z" fill="#fff"/></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#q)" transform="translate(0 2502.5) scale(1.00625)"/><path d="M7 2505.5v42.3h34.3v-26.2l-16.1-16.1z" fill="#fff"/><path d="M13 20a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h22a2 2 0 0 0 2-2V22a2 2 0 0 0-2-2zm0 2h22v16H13zm2 3v2h18v-2zm2 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm3 0v2h13v-2zm-3 4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm3 0v2h13v-2z" fill="url(#r)" transform="translate(0 2502.5) scale(1.00625)"/></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#s)" transform="translate(0 2552.8) scale(1.00625)"/><path d="M7 2555.8v42.3h34.3v-26.2l-16.1-16z" fill="#fff"/><path d="M12 19v21h13v1h11V30h-2V19h-1zm1 1h6v3h-6zm7 0h6v3h-6zm7 0h6v3h-6zm-14 4h6v3h-6zm7 0h6v3h-6zm7 0h6v3h-6zm-14 4h6v3h-6zm7 0h6v2h-1v1h-5zm7 0h6v2h-6zm-1 3h9v9h-9v-8zm-13 1h6v3h-6zm7 0h5v3h-5zm-7 4h6v3h-6zm7 0h5v3h-5z" fill="url(#t)" transform="translate(0 2552.8) scale(1.00625)"/><g fill="#43c330"><path d="M26.2 2588h3v5h-3zM29.2 2585h3v8h-3zM32.2 2590h3v3h-3z"/></g><g fill="#ccf4c6"><path d="M27.2 2589h1v4h-1zM30.2 2586h1v7h-1zM33.2 2591h1v2h-1z"/></g></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#u)" transform="translate(0 2603.1) scale(1.00625)"/><path d="M7 2606.1v42.3h34.3v-26.2l-16.1-16z" fill="#fff"/><path d="M12 18v2h8v-2zm10 0v10h14V18zm1 1h12v8-1l-2.5-3-2.5 2-3.5-4.5L23 26v-7zm-11 3v2h8v-2zm0 4v2h8v-2zm0 4v2h24v-2zm0 4v2h24v-2zm0 4v2h18v-2z" fill="url(#v)" transform="translate(0 2603.1) scale(1.00625)"/></g></g></svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs>
+ <circle id="a" cx="16" cy="16" r="16"/>
+ </defs><symbol id="icon-a-ic-apply" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#434343" d="M4 12.011l5 5L20.011 6"/>
+ </g>
+</symbol><symbol id="icon-a-ic-cancel" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#434343" d="M6 6l12 12M18 6L6 18"/>
+ </g>
+</symbol><symbol id="icon-a-ic-color-transparent-w" viewBox="0 0 32 32">
+
+ <g fill="none" fill-rule="evenodd">
+ <g>
+ <use fill="#FFF" xlink:href="#a"/>
+ <circle cx="16" cy="16" r="15.5" stroke="#D5D5D5"/>
+ </g>
+ <path stroke="#FF4040" stroke-width="1.5" d="M27 5L5 27"/>
+ </g>
+</symbol><symbol id="icon-a-ic-crop" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#434343" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
+ <path fill="#434343" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-delete-all" viewBox="0 0 24 24">
+ <g fill="#434343" fill-rule="evenodd">
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-delete" viewBox="0 0 24 24">
+ <g fill="#434343" fill-rule="evenodd">
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-draw-free" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
+ </g>
+</symbol><symbol id="icon-a-ic-draw-line" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" d="M2 15.5h28"/>
+ </g>
+</symbol><symbol id="icon-a-ic-draw" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#434343" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
+ <path fill="#434343" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-filter" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#434343" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
+ <path fill="#434343" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-flip-reset" viewBox="0 0 31 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M31 0H0v32h31z"/>
+ <path fill="#434343" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
+ <path stroke="#434343" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
+ </g>
+</symbol><symbol id="icon-a-ic-flip-x" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M32 32H0V0h32z"/>
+ <path fill="#434343" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-flip-y" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0v32h32V0z"/>
+ <path fill="#434343" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-flip" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#434343" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-arrow-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-arrow-3" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-arrow" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-bubble" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-heart" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill-rule="nonzero" stroke="#434343" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
+ <path fill="#434343" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
+ <path fill="#434343" d="M25 3h1v9h-1z"/>
+ <path stroke="#434343" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-location" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <g stroke="#434343">
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
+ <circle cx="16" cy="13" r="4.5"/>
+ </g>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-polygon" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-star-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon-star" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-icon" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-mask-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#434343" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
+ <path fill="#434343" d="M25 3h1v9h-1z"/>
+ <path stroke="#434343" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-a-ic-mask" viewBox="0 0 24 24">
+ <g fill="none">
+ <circle cx="12" cy="12" r="4.5" stroke="#434343"/>
+ <path fill="#434343" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-redo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#434343" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
+ <path stroke="#434343" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
+ </g>
+</symbol><symbol id="icon-a-ic-reset" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#434343" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
+ <path stroke="#434343" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
+ </g>
+</symbol><symbol id="icon-a-ic-rotate-clockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#434343" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
+ <path stroke="#434343" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
+ <path fill="#434343" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-rotate-counterclockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#434343" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
+ <path fill="#434343" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
+ <path stroke="#434343" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
+ </g>
+</symbol><symbol id="icon-a-ic-rotate" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#434343" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
+ <path stroke="#434343" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
+ </g>
+</symbol><symbol id="icon-a-ic-shape-circle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="16" cy="16" r="14.5" stroke="#434343"/>
+ </g>
+</symbol><symbol id="icon-a-ic-shape-rectangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#434343" rx="1"/>
+ </g>
+</symbol><symbol id="icon-a-ic-shape-triangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-shape" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#434343" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-text-align-center" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#434343" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-text-align-left" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#434343" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-text-align-right" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#434343" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-text-bold" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#434343" d="M7 2h2v2H7zM7 28h2v2H7z"/>
+ <path stroke="#434343" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-text-italic" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#434343" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-text-underline" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#434343" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
+ <path fill="#434343" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-text" viewBox="0 0 24 24">
+ <g fill="#434343" fill-rule="evenodd">
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
+ <path d="M11 3h1v18h-1z"/>
+ <path d="M10 20h3v1h-3z"/>
+ </g>
+</symbol><symbol id="icon-a-ic-undo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M24 0H0v24h24z" opacity=".5"/>
+ <path fill="#434343" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
+ <path stroke="#434343" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
+ </g>
+</symbol><symbol id="icon-a-img-bi" viewBox="0 0 257 26">
+ <g fill="#FDBA3B">
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
+ </g>
+</symbol></svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-b-ic-apply" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#555555" d="M4 12.011l5 5L20.011 6"/>
+ </g>
+</symbol><symbol id="icon-b-ic-cancel" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#555555" d="M6 6l12 12M18 6L6 18"/>
+ </g>
+</symbol><symbol id="icon-b-ic-crop" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#555555" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
+ <path fill="#555555" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-delete-all" viewBox="0 0 24 24">
+ <g fill="#555555" fill-rule="evenodd">
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-delete" viewBox="0 0 24 24">
+ <g fill="#555555" fill-rule="evenodd">
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-draw-free" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
+ </g>
+</symbol><symbol id="icon-b-ic-draw-line" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" d="M2 15.5h28"/>
+ </g>
+</symbol><symbol id="icon-b-ic-draw" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#555555" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
+ <path fill="#555555" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-filter" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#555555" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
+ <path fill="#555555" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-flip-reset" viewBox="0 0 31 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M31 0H0v32h31z"/>
+ <path fill="#555555" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
+ <path stroke="#555555" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
+ </g>
+</symbol><symbol id="icon-b-ic-flip-x" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M32 32H0V0h32z"/>
+ <path fill="#555555" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-flip-y" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0v32h32V0z"/>
+ <path fill="#555555" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-flip" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#555555" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-arrow-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-arrow-3" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-arrow" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-bubble" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-heart" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill-rule="nonzero" stroke="#555555" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
+ <path fill="#555555" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
+ <path fill="#555555" d="M25 3h1v9h-1z"/>
+ <path stroke="#555555" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-location" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <g stroke="#555555">
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
+ <circle cx="16" cy="13" r="4.5"/>
+ </g>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-polygon" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-star-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon-star" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-icon" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-mask-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#555555" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
+ <path fill="#555555" d="M25 3h1v9h-1z"/>
+ <path stroke="#555555" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-b-ic-mask" viewBox="0 0 24 24">
+ <g fill="none">
+ <circle cx="12" cy="12" r="4.5" stroke="#555555"/>
+ <path fill="#555555" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-redo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#555555" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
+ <path stroke="#555555" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
+ </g>
+</symbol><symbol id="icon-b-ic-reset" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#555555" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
+ <path stroke="#555555" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
+ </g>
+</symbol><symbol id="icon-b-ic-rotate-clockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#555555" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
+ <path stroke="#555555" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
+ <path fill="#555555" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-rotate-counterclockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#555555" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
+ <path fill="#555555" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
+ <path stroke="#555555" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
+ </g>
+</symbol><symbol id="icon-b-ic-rotate" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#555555" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
+ <path stroke="#555555" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
+ </g>
+</symbol><symbol id="icon-b-ic-shape-circle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="16" cy="16" r="14.5" stroke="#555555"/>
+ </g>
+</symbol><symbol id="icon-b-ic-shape-rectangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#555555" rx="1"/>
+ </g>
+</symbol><symbol id="icon-b-ic-shape-triangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-shape" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#555555" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-text-align-center" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#555555" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-text-align-left" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#555555" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-text-align-right" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#555555" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-text-bold" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#555555" d="M7 2h2v2H7zM7 28h2v2H7z"/>
+ <path stroke="#555555" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-text-italic" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#555555" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-text-underline" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#555555" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
+ <path fill="#555555" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-text" viewBox="0 0 24 24">
+ <g fill="#555555" fill-rule="evenodd">
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
+ <path d="M11 3h1v18h-1z"/>
+ <path d="M10 20h3v1h-3z"/>
+ </g>
+</symbol><symbol id="icon-b-ic-undo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M24 0H0v24h24z" opacity=".5"/>
+ <path fill="#555555" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
+ <path stroke="#555555" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
+ </g>
+</symbol><symbol id="icon-b-img-bi" viewBox="0 0 257 26">
+ <g fill="#FDBA3B">
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
+ </g>
+</symbol></svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-c-ic-apply" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#e9e9e9" d="M4 12.011l5 5L20.011 6"/>
+ </g>
+</symbol><symbol id="icon-c-ic-cancel" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#e9e9e9" d="M6 6l12 12M18 6L6 18"/>
+ </g>
+</symbol><symbol id="icon-c-ic-crop" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#e9e9e9" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
+ <path fill="#e9e9e9" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-delete-all" viewBox="0 0 24 24">
+ <g fill="#e9e9e9" fill-rule="evenodd">
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-delete" viewBox="0 0 24 24">
+ <g fill="#e9e9e9" fill-rule="evenodd">
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-draw-free" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
+ </g>
+</symbol><symbol id="icon-c-ic-draw-line" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" d="M2 15.5h28"/>
+ </g>
+</symbol><symbol id="icon-c-ic-draw" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#e9e9e9" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
+ <path fill="#e9e9e9" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-filter" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#e9e9e9" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
+ <path fill="#e9e9e9" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-flip-reset" viewBox="0 0 31 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M31 0H0v32h31z"/>
+ <path fill="#e9e9e9" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
+ </g>
+</symbol><symbol id="icon-c-ic-flip-x" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M32 32H0V0h32z"/>
+ <path fill="#e9e9e9" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-flip-y" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0v32h32V0z"/>
+ <path fill="#e9e9e9" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-flip" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#e9e9e9" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-arrow-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-arrow-3" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-arrow" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-bubble" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-heart" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill-rule="nonzero" stroke="#e9e9e9" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
+ <path fill="#e9e9e9" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
+ <path fill="#e9e9e9" d="M25 3h1v9h-1z"/>
+ <path stroke="#e9e9e9" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-location" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <g stroke="#e9e9e9">
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
+ <circle cx="16" cy="13" r="4.5"/>
+ </g>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-polygon" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-star-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon-star" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-icon" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-mask-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#e9e9e9" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
+ <path fill="#e9e9e9" d="M25 3h1v9h-1z"/>
+ <path stroke="#e9e9e9" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-c-ic-mask" viewBox="0 0 24 24">
+ <g fill="none">
+ <circle cx="12" cy="12" r="4.5" stroke="#e9e9e9"/>
+ <path fill="#e9e9e9" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-redo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#e9e9e9" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
+ </g>
+</symbol><symbol id="icon-c-ic-reset" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#e9e9e9" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
+ </g>
+</symbol><symbol id="icon-c-ic-rotate-clockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#e9e9e9" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
+ <path fill="#e9e9e9" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-rotate-counterclockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#e9e9e9" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
+ <path fill="#e9e9e9" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
+ </g>
+</symbol><symbol id="icon-c-ic-rotate" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#e9e9e9" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
+ </g>
+</symbol><symbol id="icon-c-ic-shape-circle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="16" cy="16" r="14.5" stroke="#e9e9e9"/>
+ </g>
+</symbol><symbol id="icon-c-ic-shape-rectangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#e9e9e9" rx="1"/>
+ </g>
+</symbol><symbol id="icon-c-ic-shape-triangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-shape" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#e9e9e9" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-text-align-center" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#e9e9e9" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-text-align-left" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#e9e9e9" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-text-align-right" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#e9e9e9" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-text-bold" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#e9e9e9" d="M7 2h2v2H7zM7 28h2v2H7z"/>
+ <path stroke="#e9e9e9" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-text-italic" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#e9e9e9" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-text-underline" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#e9e9e9" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
+ <path fill="#e9e9e9" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-text" viewBox="0 0 24 24">
+ <g fill="#e9e9e9" fill-rule="evenodd">
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
+ <path d="M11 3h1v18h-1z"/>
+ <path d="M10 20h3v1h-3z"/>
+ </g>
+</symbol><symbol id="icon-c-ic-undo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M24 0H0v24h24z" opacity=".5"/>
+ <path fill="#e9e9e9" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
+ </g>
+</symbol><symbol id="icon-c-img-bi" viewBox="0 0 257 26">
+ <g fill="#FDBA3B">
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
+ </g>
+</symbol></svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-d-ic-apply" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#8a8a8a" d="M4 12.011l5 5L20.011 6"/>
+ </g>
+</symbol><symbol id="icon-d-ic-cancel" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path stroke="#8a8a8a" d="M6 6l12 12M18 6L6 18"/>
+ </g>
+</symbol><symbol id="icon-d-ic-crop" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#8a8a8a" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
+ <path fill="#8a8a8a" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-delete-all" viewBox="0 0 24 24">
+ <g fill="#8a8a8a" fill-rule="evenodd">
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-delete" viewBox="0 0 24 24">
+ <g fill="#8a8a8a" fill-rule="evenodd">
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-draw-free" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
+ </g>
+</symbol><symbol id="icon-d-ic-draw-line" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" d="M2 15.5h28"/>
+ </g>
+</symbol><symbol id="icon-d-ic-draw" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#8a8a8a" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
+ <path fill="#8a8a8a" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-filter" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#8a8a8a" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
+ <path fill="#8a8a8a" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-flip-reset" viewBox="0 0 31 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M31 0H0v32h31z"/>
+ <path fill="#8a8a8a" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
+ </g>
+</symbol><symbol id="icon-d-ic-flip-x" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M32 32H0V0h32z"/>
+ <path fill="#8a8a8a" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-flip-y" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0v32h32V0z"/>
+ <path fill="#8a8a8a" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-flip" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#8a8a8a" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-arrow-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-arrow-3" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-arrow" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-bubble" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-heart" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill-rule="nonzero" stroke="#8a8a8a" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
+ <path fill="#8a8a8a" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
+ <path fill="#8a8a8a" d="M25 3h1v9h-1z"/>
+ <path stroke="#8a8a8a" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-location" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <g stroke="#8a8a8a">
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
+ <circle cx="16" cy="13" r="4.5"/>
+ </g>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-polygon" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-star-2" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon-star" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-icon" viewBox="0 0 24 24">
+ <g fill="none">
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-mask-load" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#8a8a8a" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
+ <path fill="#8a8a8a" d="M25 3h1v9h-1z"/>
+ <path stroke="#8a8a8a" d="M22 6l3.5-3.5L29 6"/>
+ </g>
+</symbol><symbol id="icon-d-ic-mask" viewBox="0 0 24 24">
+ <g fill="none">
+ <circle cx="12" cy="12" r="4.5" stroke="#8a8a8a"/>
+ <path fill="#8a8a8a" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-redo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#8a8a8a" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
+ </g>
+</symbol><symbol id="icon-d-ic-reset" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z" opacity=".5"/>
+ <path fill="#8a8a8a" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
+ </g>
+</symbol><symbol id="icon-d-ic-rotate-clockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#8a8a8a" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
+ <path fill="#8a8a8a" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-rotate-counterclockwise" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#8a8a8a" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
+ <path fill="#8a8a8a" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
+ </g>
+</symbol><symbol id="icon-d-ic-rotate" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h24v24H0z"/>
+ <path fill="#8a8a8a" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
+ </g>
+</symbol><symbol id="icon-d-ic-shape-circle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="16" cy="16" r="14.5" stroke="#8a8a8a"/>
+ </g>
+</symbol><symbol id="icon-d-ic-shape-rectangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#8a8a8a" rx="1"/>
+ </g>
+</symbol><symbol id="icon-d-ic-shape-triangle" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-shape" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path fill="#8a8a8a" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-text-align-center" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#8a8a8a" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-text-align-left" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#8a8a8a" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-text-align-right" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#8a8a8a" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-text-bold" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#8a8a8a" d="M7 2h2v2H7zM7 28h2v2H7z"/>
+ <path stroke="#8a8a8a" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-text-italic" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#8a8a8a" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-text-underline" viewBox="0 0 32 32">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M0 0h32v32H0z"/>
+ <path fill="#8a8a8a" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
+ <path fill="#8a8a8a" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-text" viewBox="0 0 24 24">
+ <g fill="#8a8a8a" fill-rule="evenodd">
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
+ <path d="M11 3h1v18h-1z"/>
+ <path d="M10 20h3v1h-3z"/>
+ </g>
+</symbol><symbol id="icon-d-ic-undo" viewBox="0 0 24 24">
+ <g fill="none" fill-rule="evenodd">
+ <path d="M24 0H0v24h24z" opacity=".5"/>
+ <path fill="#8a8a8a" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
+ </g>
+</symbol><symbol id="icon-d-img-bi" viewBox="0 0 257 26">
+ <g fill="#FDBA3B">
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
+ </g>
+</symbol></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48"><g fill="#0288d1"><path d="M25.6 18c-3 0-5.8 1.8-7.2 4.5a8 8 0 0 0-12.2-2.9V12c0-.8-.8-1.7-1.6-1.7-1 0-1.6.7-1.6 1.7v14.5C3 31 6.7 35 11 35c3.2 0 6-1.8 7.4-4.5 1.4 2.7 4 4.5 7.2 4.5 4.6 0 8.1-3.9 8.1-8.4 0-4.7-3.5-8.6-8-8.6M11 31.6a5 5 0 0 1-4.9-5 5 5 0 0 1 4.9-5.2c2.6 0 4.8 2.4 4.8 5.1.2 2.7-2 5-4.8 5zm14.5 0a5 5 0 0 1-4.8-5 5 5 0 0 1 4.8-5.2 5 5 0 0 1 4.9 5.1c0 2.7-2.3 5-4.9 5z"/><path d="M44.8 32.4l-4.3-6 4.3-5.8c.5-.7.3-1.9-.3-2.4-.7-.5-1.8-.3-2.3.3l-3.6 5.1-3.6-5c-.5-.7-1.7-.9-2.3-.4-.7.5-.8 1.7-.3 2.4l4.2 5.9-4.2 5.9c-.5.6-.4 1.8.3 2.3.6.5 1.8.3 2.3-.3l3.6-5 3.6 5c.5.6 1.6.8 2.3.3.6-.5.8-1.7.3-2.3"/></g></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48"><g fill="#1e88e5"><path d="M42 14L31.4 7.3l-7.4 6 11 6.4zM6 25.6l11 6.5 7-5.5L13.5 20zM17 7.3l-11 7 7.5 5.7L24 13.3zM24 26.6l7.2 5.5L42 25.6l-7-5.9z"/><path d="M32.2 33.8l-1.2.7-1-.8-6-4.5-5.8 4.4-1.1.9-1.2-.7L13 32v2.6L24 42l11-7.2V32z"/></g></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 48 48" overflow="visible"><path d="M36.66 41.52h-8.89a1.55 1.52 0 0 0-.75-.65v-8.8h-5.05v8.81a1.55 1.52 0 0 0-.75.64h-8.9v4.94h8.74a1.55 1.52 0 0 0 1.49 1.14h3.88c.72 0 1.32-.49 1.5-1.14h8.72v-4.94z" opacity=".2" stroke-width="1.02"/><path d="M36.47 41.34h-8.9a1.55 1.52 0 0 0-.75-.65v-8.81h-5.04v8.81a1.55 1.52 0 0 0-.76.65h-8.9v4.93h8.74a1.55 1.52 0 0 0 1.5 1.15h3.88c.72 0 1.32-.5 1.5-1.15h8.73z" opacity=".2" stroke-width="1.02"/><path d="M36.27 41.15h-8.9a1.55 1.52 0 0 0-.75-.65v-8.8H21.6v8.8a1.55 1.52 0 0 0-.77.65h-8.88v4.93h8.73a1.55 1.52 0 0 0 1.5 1.14h3.87c.73 0 1.34-.48 1.5-1.14h8.73z" opacity=".2" stroke-width="1.02"/><path d="M35.38 40.95H11.74v4.95H36.1v-4.95z" fill="#616161" stroke-width="1.02"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="23.72" y1="41.11" x2="23.72" y2="44.64" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#cecedb"/><stop offset=".19" stop-color="#fff"/><stop offset=".48" stop-color="#cecedb"/><stop offset=".75" stop-color="#b3b3c6"/><stop offset=".99" stop-color="#828282"/></linearGradient><path d="M12.44 41.63h22.95v3.58H12.44z" fill="url(#a)" stroke-width="1.02"/><path d="M21.4 31.88v12.64h5.04V31.5h-5.05z" fill="#616161" stroke-width="1.02"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="291.57" y1="864.85" x2="291.57" y2="868.38" gradientTransform="matrix(0 -1.01271 1.0339 0 -872.08 333.28)"><stop offset="0" stop-color="#cecedb"/><stop offset=".19" stop-color="#fff"/><stop offset=".48" stop-color="#cecedb"/><stop offset=".75" stop-color="#b3b3c6"/><stop offset=".99" stop-color="#828282"/></linearGradient><path d="M22.08 31.88h3.65v12.26h-3.65z" fill="url(#b)" stroke-width="1.02"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="23.72" y1="46.44" x2="23.72" y2="39.69" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#cf0000"/><stop offset=".99" stop-color="#ff6d00"/></linearGradient><path d="M27.4 45.51c0 .84-.7 1.52-1.54 1.52h-3.89a1.55 1.52 0 0 1-1.55-1.52v-3.79c0-.84.7-1.52 1.55-1.52h3.88c.86 0 1.55.68 1.55 1.52v3.8z" fill="url(#c)" stroke-width="1.02"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="23.72" y1="37.07" x2="23.72" y2="49.63" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff030"/><stop offset=".99" stop-color="#ffae00"/></linearGradient><path d="M21.97 40.95a.78.76 0 0 0-.78.76v3.8c0 .43.36.76.78.76h3.88c.43 0 .77-.33.77-.76v-3.79a.78.76 0 0 0-.77-.76h-3.88z" fill="url(#d)" stroke-width="1.02"/><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="23.72" y1="41" x2="23.72" y2="43.82" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff"/><stop offset=".5" stop-color="#ffe3a9"/><stop offset=".99" stop-color="#ffc957"/></linearGradient><path d="M21.97 41.52c-.1 0-.19.1-.19.2v3.8c0 .1.09.18.19.18h3.88c.1 0 .2-.08.2-.19v-3.79c0-.1-.1-.19-.2-.19h-3.88z" fill="url(#e)" stroke-width="1.02"/><path d="M25.5 1.3L11.94 10l-.04.02-.05.04-.04.03-.18.2-.02.04-.04.08-.02.04-.03.1-.02.03-.02.08v.05l-.02.1v23.13c0 .44.3.84.72.98l10.1 3.3c.33.1.7.05.97-.15l13.46-9.9c.27-.2.43-.5.43-.83V4.15l-.01-.06v-.04l-.02-.03-.02-.08-.02-.06-.05-.07-.03-.06-.04-.07-.04-.05-.04-.06-.02-.02-.03-.04-.05-.04-.07-.05-.06-.03-.07-.05-.07-.03-.07-.02a7.24 7.09 0 0 0-.08-.03h-.05l-10-2.12c-.28-.06-.57 0-.8.16zm-14.02 9.36" opacity=".2" stroke-width="1.02"/><path d="M36.75 4.25V4.13l-.02-.02a.9.88 0 0 0-.05-.13l-.02-.04-.03-.04-.02-.05-.03-.03-.03-.03-.04-.03-.03-.03a.86.84 0 0 0-.05-.03l-.04-.02-.04-.02-.05-.02-.05-.01-.03-.01-10-2.11a.68.67 0 0 0-.52.1L12.16 10.3h-.01l-.02.02-.03.02-.02.02a.73.72 0 0 0-.12.13l-.02.02c0 .02-.02.04-.03.05v.03l-.03.05v.03l-.02.06v.04l-.01.06v23.1c0 .28.18.53.46.62l10.1 3.3c.2.07.44.04.61-.1l13.47-9.89a.68.67 0 0 0 .26-.53V4.25z" opacity=".2" stroke-width="1.02"/><path d="M25.3 1.1L11.76 9.8l-.06.02-.05.04-.03.03-.19.2-.02.05-.04.08-.02.04-.03.09v.04l-.04.1v.04l-.01.1v23.11c0 .45.29.84.72 1l10.1 3.29c.32.1.7.05.98-.15l13.46-9.9c.26-.2.41-.5.41-.83V3.85l-.03-.03-.02-.08-.02-.06-.03-.07-.03-.07-.06-.06-.04-.06-.04-.05-.05-.05-.05-.05-.06-.04-.07-.04-.07-.04-.06-.03-.07-.03a7.24 7.09 0 0 0-.08-.02l-.06-.02-10-2.1c-.27-.05-.56 0-.8.15zm-14.01 9.38" opacity=".2" stroke-width="1.02"/><path d="M36.56 4.05v-.04l-.01-.05v-.01l-.01-.02-.01-.05-.02-.04a.35.34 0 0 0-.02-.04l-.02-.04-.04-.04-.02-.04-.03-.03-.03-.03-.04-.04-.03-.03a.86.84 0 0 0-.12-.07l-.05-.02h-.05l-.03-.02-10-2.1a.68.67 0 0 0-.52.1l-13.55 8.69-.03.02-.03.02-.02.02a.73.72 0 0 0-.11.13l-.03.02-.02.05-.02.03-.02.05v.03l-.02.06V33.75c0 .29.18.54.46.63l10.09 3.3c.2.06.44.03.62-.1l13.46-9.9a.68.67 0 0 0 .27-.52V4.06z" opacity=".2" stroke-width="1.02"/><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="32.27" y1="26.92" x2="14.03" y2="8.67" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#585868"/><stop offset="1" stop-color="#494949"/></linearGradient><path d="M25.1.78l-13.54 8.7-.05.03-.05.04-.04.03-.17.2-.03.04-.04.08-.02.04-.04.09v.04l-.03.1v.04l-.02.1v23.12c0 .45.3.84.73.98l10.1 3.3c.33.1.69.05.97-.15l13.46-9.9c.27-.2.42-.5.42-.82V3.64l-.02-.08V3.5l-.04-.07-.02-.06a14.7 14.4 0 0 0-.06-.13l-.04-.07-.04-.05-.04-.05-.02-.02-.05-.04-.05-.04-.06-.05-.06-.04-.07-.04-.07-.03-.07-.04-.07-.02h-.06L25.9.63c-.28-.06-.57 0-.8.14zm-14 9.38" fill="url(#f)" stroke-width="1.02"/><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="15.17" y1="9.81" x2="33.41" y2="28.05" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#494949"/></linearGradient><path d="M36.36 3.75V3.6l-.03-.06-.02-.04a.35.34 0 0 0-.02-.05l-.02-.03-.02-.04-.03-.04-.03-.03c0-.02-.02-.03-.03-.04a1.13 1.1 0 0 0-.04-.03l-.04-.02-.04-.03-.04-.02-.04-.02-.04-.02-.05-.01-.04-.01-10-2.1a.68.67 0 0 0-.52.08L11.77 9.8h-.01l-.03.01-.03.03-.02.02a.73.72 0 0 0-.11.14l-.01.02-.03.05-.02.03-.01.05-.01.03-.02.05v23.19c0 .3.17.55.45.64l10.1 3.29c.2.07.44.03.61-.1l13.46-9.89a.68.67 0 0 0 .27-.52z" fill="url(#g)" stroke-width="1.02"/><radialGradient id="h" cx="105.2" cy="47.28" r="139.09" fx="105.2" fy="47.28" gradientTransform="matrix(.19386 0 0 .18988 19.55 19.75)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset=".28" stop-color="#cecedb"/><stop offset=".64" stop-color="#bdbdcf"/><stop offset="1" stop-color="#9a9ab1"/></radialGradient><path d="M12.14 10.35l10.09 3.3 13.46-9.9v23.09l-13.46 9.88-10.1-3.29z" fill="url(#h)" stroke-width="1.02"/><linearGradient id="i" gradientUnits="userSpaceOnUse" x1="23.72" y1="13.22" x2="23.72" y2="3.36" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#cecedb"/><stop offset="1" stop-color="#eee"/></linearGradient><path d="M25.7 1.66l-13.56 8.69 10.09 3.3 13.46-9.9z" fill="url(#i)" stroke-width="1.02"/><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="15.04" y1="16.69" x2="22.17" y2="38.24" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M12.14 33.42l10.09 3.3V13.65l-10.1-3.3z" fill="url(#j)" stroke-width="1.02"/><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="16.64" y1="35.2" x2="17.78" y2="28.48" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#bdbdcf"/></linearGradient><path d="M12.14 27.75v5.67l10.09 3.3V30.9z" fill="url(#k)" stroke-width="1.02"/><linearGradient id="l" gradientUnits="userSpaceOnUse" x1="13.81" y1="16.36" x2="20.09" y2="16.36" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M13.66 16.37l6.51 2.12v-1.73l-6.51-2.13z" fill="url(#l)" stroke-width="1.02"/><linearGradient id="m" gradientUnits="userSpaceOnUse" x1="13.81" y1="18.78" x2="20.09" y2="18.78" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M13.66 18.84l6.51 2.11v-1.74l-6.51-2.13z" fill="url(#m)" stroke-width="1.02"/><linearGradient id="n" gradientUnits="userSpaceOnUse" x1="14.63" y1="18.9" x2="18.67" y2="22.93" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M13.66 21.29l6.51 2.12v-1.74l-6.51-2.12z" fill="url(#n)" stroke-width="1.02"/><linearGradient id="o" gradientUnits="userSpaceOnUse" x1="271.32" y1="478.92" x2="271.32" y2="477.59" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset=".01" stop-color="#fff"/><stop offset="1" stop-color="#b6b6b6"/></linearGradient><path d="M19.84 33.83c-.48-.12-.84.1-.84.51 0 .4.36.81.83.94l.5.13c.47.13.83-.1.83-.5s-.36-.81-.82-.94z" fill="url(#o)" stroke-width="1.02"/><linearGradient id="p" gradientUnits="userSpaceOnUse" x1="271.32" y1="478.86" x2="271.32" y2="477.72" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset=".01" stop-color="#b6b6b6"/><stop offset=".37" stop-color="#9d9d9d"/><stop offset=".74" stop-color="#898989"/><stop offset="1" stop-color="#828282"/></linearGradient><path d="M19.84 34.03c-.36-.1-.65.07-.65.36 0 .3.29.6.65.7l.5.13c.35.1.65-.07.65-.36 0-.3-.3-.61-.65-.7z" fill="url(#p)" stroke-width="1.02"/><linearGradient id="q" gradientUnits="userSpaceOnUse" x1="-890.74" y1="529.26" x2="-890.74" y2="528.08" gradientTransform="matrix(-.99864 -.26209 0 .78637 -869.45 -614.56)"><stop offset=".01" stop-color="#9f6"/><stop offset=".24" stop-color="#68de56"/><stop offset=".48" stop-color="#3bc147"/><stop offset=".7" stop-color="#1bab3c"/><stop offset=".88" stop-color="#079e35"/><stop offset="1" stop-color="#093"/></linearGradient><path d="M20.93 34.84c0 .26-.27.4-.6.31l-.49-.13c-.33-.08-.59-.35-.59-.6 0-.27.26-.41.59-.32l.5.12c.32.1.59.36.59.63z" fill="url(#q)" stroke-width="1.02"/><linearGradient id="r" gradientUnits="userSpaceOnUse" x1="271.31" y1="478.52" x2="271.34" y2="477.65" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset=".01" stop-color="#3c3"/><stop offset=".36" stop-color="#1bb433"/><stop offset=".74" stop-color="#07a033"/><stop offset="1" stop-color="#093"/></linearGradient><path d="M19.84 34.23c-.26-.07-.48.03-.48.22 0 .2.22.4.48.48l.5.13c.24.06.46-.04.46-.23 0-.2-.2-.4-.46-.48l-.5-.13z" fill="url(#r)" stroke-width="1.02"/><linearGradient id="s" gradientUnits="userSpaceOnUse" x1="271.32" y1="477.78" x2="271.32" y2="478.35" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset="0" stop-color="#fff"/><stop offset=".09" stop-color="#e8f7d6"/><stop offset=".23" stop-color="#c8ed9e"/><stop offset=".36" stop-color="#ade46d"/><stop offset=".5" stop-color="#97dc46"/><stop offset=".63" stop-color="#85d627"/><stop offset=".76" stop-color="#79d212"/><stop offset=".89" stop-color="#72d004"/><stop offset="1" stop-color="#6fcf00"/></linearGradient><path d="M19.82 34.14c-.2-.05-.37.04-.37.15 0 .11.16.3.37.35l.54.15c.2.05.36-.04.36-.16 0-.1-.16-.3-.36-.35z" fill="url(#s)" stroke-width="1.02"/><path d="M-.61 48.61V0h49.63v48.61" fill="none" stroke-width="1.02"/></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" version="1" width="48" height="48"><path d="M17 6h14l14 24H31z" fill="#ffc107"/><path d="M10 42l7-12h28l-7 12z" fill="#1976d2"/><path d="M3 30l7 12 14-24-7-12z" fill="#4caf50"/></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64" viewBox="0 0 48 48" overflow="visible"><defs><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="24" y1="39.07" x2="24" y2="8.93" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#585868"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="24" y1="41.44" x2="24" y2="6.56" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#cecedb"/><stop offset=".58" stop-color="#b1b1c5"/><stop offset="1" stop-color="#9a9ab1"/></linearGradient><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="42.8" y1="3.42" x2="18.71" y2="27.51"><stop offset="0" stop-color="#fff"/><stop offset=".07" stop-color="#f5f5f7"/><stop offset=".31" stop-color="#d7d7e1"/><stop offset=".55" stop-color="#c2c2d2"/><stop offset=".78" stop-color="#b5b5c8"/><stop offset="1" stop-color="#b1b1c5"/></linearGradient><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="4.39" y1="28.4" x2="43.61" y2="28.4" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#9a9ab1"/><stop offset=".26" stop-color="#7d7d99"/><stop offset="1" stop-color="#585868"/></linearGradient><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="4.39" y1="28.4" x2="43.61" y2="28.4" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#ccc"/></linearGradient><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="24" y1="28.28" x2="24" y2="38.75" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#ccc"/></linearGradient><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="24" y1="38.25" x2="24" y2="27.38" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#ccc"/></linearGradient><linearGradient id="i" gradientUnits="userSpaceOnUse" x1="39.51" y1="37.32" x2="39.51" y2="35.18" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset=".01" stop-color="#fff"/><stop offset="1" stop-color="#b6b6b6"/></linearGradient><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="39.51" y1="37.22" x2="39.51" y2="35.38" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset=".01" stop-color="#b6b6b6"/><stop offset=".37" stop-color="#9d9d9d"/><stop offset=".74" stop-color="#898989"/><stop offset="1" stop-color="#828282"/></linearGradient><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="-323.35" y1="37.99" x2="-323.35" y2="36.08" gradientTransform="matrix(-1.09746 0 0 .8231 -313.94 6.86)"><stop offset=".01" stop-color="#9f6"/><stop offset=".24" stop-color="#68de56"/><stop offset=".48" stop-color="#3bc147"/><stop offset=".7" stop-color="#1bab3c"/><stop offset=".88" stop-color="#079e35"/><stop offset="1" stop-color="#093"/></linearGradient><linearGradient id="l" gradientUnits="userSpaceOnUse" x1="39.49" y1="36.68" x2="39.54" y2="35.27" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset=".01" stop-color="#3c3"/><stop offset=".36" stop-color="#1bb433"/><stop offset=".74" stop-color="#07a033"/><stop offset="1" stop-color="#093"/></linearGradient><linearGradient id="m" gradientUnits="userSpaceOnUse" x1="39.51" y1="35.48" x2="39.51" y2="36.4" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset=".09" stop-color="#e8f7d6"/><stop offset=".23" stop-color="#c8ed9e"/><stop offset=".36" stop-color="#ade46d"/><stop offset=".5" stop-color="#97dc46"/><stop offset=".63" stop-color="#85d627"/><stop offset=".76" stop-color="#79d212"/><stop offset=".89" stop-color="#72d004"/><stop offset="1" stop-color="#6fcf00"/></linearGradient><linearGradient id="n" gradientUnits="userSpaceOnUse" x1="8.18" y1="35.36" x2="20.94" y2="35.36" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#dfdfdf"/><stop offset="1" stop-color="#a2a2a2"/></linearGradient><linearGradient id="o" gradientUnits="userSpaceOnUse" x1="14.56" y1="33.7" x2="14.56" y2="37.03" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#828282"/><stop offset="1" stop-color="#a2a2a2"/></linearGradient><linearGradient xlink:href="#a" id="d" x1="41.87" y1="9.41" x2="5.74" y2="29.21" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"/></defs><path d="M8.96 7.64a3.13 3.13 0 0 0-3.13 2.85l.04-.18-.11.55.04-.2-.1.54.04-.2-.1.55.03-.19-.1.53.03-.18-.1.53.04-.18-.09.53.03-.19-.1.54.04-.19-.11.53.04-.17-.1.52.04-.17-.1.52.03-.18-.1.53.03-.18-.1.52.04-.17-.09.53.03-.18-.1.53.04-.18-.1.53.03-.18-.1.53.04-.18-.1.52.03-.18-.1.53.03-.17-.08.52.02-.17-.09.52.03-.17-.1.51.04-.16-.1.51.03-.17-.1.53.04-.18-.1.53.03-.18-.09.53.03-.18-.1.52.04-.17-.1.52.03-.17-.1.52.04-.17-.1.51.03-.16-.09.51.03-.16-.1.51.03-.16-.09.51.03-.16-.1.52.04-.18-.1.52.03-.17-.1.52.04-.17-.09.52.02-.17-.09.52.03-.17-.1.51.03-.15-.09.5.03-.16-.1.51.04-.16-.1.51.03-.16-.08.51.02-.16-.09.5.02-.15-.09.5.04-.15-.1.5.03-.15-.1.5.03-.16-.1.52.04-.17-.09.52.02-.16-.08.5.02-.15-.09.5.03-.15-.1.5.04-.16-.1.5.02-.15-.09.5.03-.15-.1.5.04-.16-.09.5.02-.15-.08.5.02-.15-.09.5.02-.15-.09.5.03-.14-.1.49.04-.15-.1.5.04-.15c-.08.3-.11.59-.11.88v6.47a3.6 3.6 0 0 0 3.6 3.6h38.02a3.6 3.6 0 0 0 3.6-3.6v-6.47a4 4 0 0 0-.1-.88l.01.15-.08-.5.02.15-.09-.5.02.16-.09-.5.03.15-.1-.5.03.15-.09-.5.02.16-.08-.5-.07-.36.03.15-.1-.5.04.16-.09-.51.02.16-.09-.51.03.16-.1-.5.03.15-.09-.5.02.16-.08-.52.02.16-.09-.5.03.16-.1-.5.04.15-.1-.5.03.15-.1-.5.04.16-.1-.52.03.16-.09-.51.02.16-.08-.51.02.16-.09-.51.02.17-.08-.51.03.15-.1-.5.03.16-.1-.52.04.17-.1-.52.03.17-.1-.52.03.18-.1-.53.04.18-.09-.52.02.16-.08-.51.02.16-.1-.51.04.16-.1-.51.04.17-.1-.52.03.17-.1-.53.03.18-.1-.52.04.17-.1-.52.03.18-.08-.53.02.17-.1-.52.03.18-.09-.53.04.17-.1-.52.03.17-.1-.52.03.18-.07-.52.03.17-.1-.52.04.17-.1-.53.03.18-.1-.53.03.19-.1-.53.04.18-.09-.53.02.18-.09-.53.03.18-.1-.53.04.19-.1-.53.04.17-.1-.52.03.17-.1-.52.03.17-.1-.52.04.17-.1-.53.03.2-.1-.55.04.19-.1-.53.03.19-.09-.55.04.2-.11-.54.04.19-.11-.54.04.19-.1-.54.04.18-.1-.53.03.2a3.12 3.12 0 0 0-3.12-2.87H8.95z" font-size="12" opacity=".2" stroke-width="1.1"/><path d="M8.75 7.23a3.13 3.13 0 0 0-3.12 2.86l.03-.19-.1.54.03-.2-.1.55.04-.2-.1.54.03-.19-.09.54.04-.19-.11.54.04-.18-.1.52.03-.17-.1.52.04-.17-.1.52.03-.18-.1.54.04-.2-.1.54.03-.18-.09.53.04-.18-.11.53.04-.19-.1.53.03-.18-.1.53.04-.18-.1.53.03-.17-.08.52.02-.17-.1.51.04-.17-.1.52.04-.17-.1.52.03-.17-.1.53.03-.18-.1.52.04-.17-.1.52.03-.17-.08.52.02-.18-.1.53.04-.18-.1.53.04-.17-.1.51.03-.16-.1.51.03-.16-.08.51.02-.17-.09.52.03-.17-.1.51.04-.16-.1.52.03-.17-.1.52.04-.17-.1.52.03-.17-.09.52.02-.18-.08.52.03-.16-.1.51.03-.16-.1.51.03-.16-.1.51.04-.16-.1.51.04-.16-.1.52.03-.17-.09.5.02-.16-.08.52.02-.17-.09.52.03-.17-.1.5.04-.14-.1.5.03-.15-.1.5.04-.16-.1.51.03-.16-.09.51.02-.16-.08.5.02-.15-.09.5.02-.15-.08.5.03-.15-.1.5.03-.16-.1.5.04-.15-.1.5.03-.15-.09.51.02-.15-.08.5.03-.15-.1.5.03-.16-.1.5.04-.15-.1.5.03-.15-.09.5.03-.15c-.08.29-.11.58-.11.88v6.47a3.6 3.6 0 0 0 3.6 3.6h38.02a3.6 3.6 0 0 0 3.6-3.6v-6.48c0-.29-.04-.58-.1-.88l.02.16-.1-.5.03.15-.09-.5.02.15-.08-.5.02.15-.09-.5.02.16-.09-.5.04.15-.1-.5-.07-.36.04.16-.1-.5.03.16-.09-.5.02.15-.08-.5.02.14-.09-.5.02.16-.09-.5.03.15-.1-.5.04.15-.1-.5.04.15-.1-.5.03.16-.1-.51.03.16-.08-.52.02.17-.09-.52.02.17-.09-.5.03.15-.1-.5.03.16-.09-.52.04.16-.1-.51.03.16-.1-.5.03.15-.1-.5.04.16-.1-.51.03.16-.09-.51.03.16-.08-.52.03.17-.1-.52.04.17-.1-.52.03.17-.1-.52.03.18-.1-.53.04.17-.09-.52.02.17-.08-.51.03.17-.1-.52.03.17-.1-.52.04.17-.1-.51.03.16-.1-.53.03.18-.1-.53.04.19-.09-.53.02.18-.08-.53.03.18-.11-.53.04.17-.1-.51.04.16-.1-.51.03.16-.1-.51.03.17-.1-.52.04.17-.1-.53.03.18-.1-.53.04.19-.1-.53.03.18-.09-.53.04.18-.11-.53.04.19-.1-.54.03.19-.1-.53.04.17-.1-.52.03.17-.1-.52.04.18-.1-.53.03.18-.1-.54.04.2-.1-.55.04.19-.1-.53.03.19-.1-.55.04.2-.11-.55.04.2a3.13 3.13 0 0 0-3.12-2.86z" font-size="12" opacity=".2" stroke-width="1.1"/><path d="M8.35 6.82A3.13 3.13 0 0 0 5.2 9.67l.03-.19-.09.55.04-.2-.11.54.04-.18-.1.52.03-.17-.1.52.04-.17-.1.53.03-.18-.1.53.04-.19-.1.54.03-.19-.09.53.04-.18-.11.53.04-.19-.1.54.04-.18-.1.53.03-.19-.1.53.03-.17-.08.52.02-.17-.09.52.03-.17-.1.51.04-.17-.1.54.03-.18-.1.52.04-.18-.1.53.03-.18-.09.53.02-.18-.08.53.02-.18-.09.52.03-.16-.1.51.04-.17-.1.52.03-.17-.1.52.04-.17-.1.52.03-.17-.09.52.02-.17-.08.52.03-.17-.1.52.03-.18-.1.52.04-.17-.1.52.03-.17-.09.52.03-.16-.1.51.04-.16-.1.51.03-.16-.1.51.04-.17-.1.51.03-.16-.09.52.03-.17-.1.52.03-.17-.09.52.03-.17-.1.5.04-.15-.1.5.03-.16-.1.52.04-.16-.1.5.03-.15-.1.5.04-.15-.1.5.03-.16-.09.51.03-.16-.1.51.03-.16-.09.52.03-.17-.1.5.04-.15-.1.5.03-.15-.08.5.02-.16-.1.52.03-.16-.09.5.03-.15-.1.5.03-.15-.09.5.03-.16-.1.5.04-.15-.09.5.02-.15-.08.5.02-.15-.1.5.03-.16-.09.5.03-.15-.1.5.03-.15c-.07.3-.11.6-.11.88v6.48a3.6 3.6 0 0 0 3.61 3.6h38.02a3.6 3.6 0 0 0 3.6-3.6V31.3c0-.3-.04-.58-.11-.88l.03.16-.1-.5.03.15-.1-.5.04.16-.1-.5.03.15-.09-.51.03.15-.1-.5.03.16-.09-.5-.06-.35.02.15-.09-.5.03.16-.1-.51.04.16-.1-.52.03.17-.1-.5.04.15-.1-.5.03.16-.09-.52.02.16-.08-.51.02.16-.09-.5.02.15-.09-.5.04.15-.1-.5.03.16-.1-.51.04.16-.1-.51.03.16-.09-.5.02.16-.1-.53.04.18-.09-.52.02.16-.09-.5.03.16-.1-.52.04.17-.1-.52.04.16-.1-.5.03.16-.1-.52.03.17-.1-.51.04.16-.09-.51.02.16-.09-.52.03.17-.1-.52.03.18-.09-.53.04.18-.1-.52.03.17-.1-.52.03.17-.1-.52.04.17-.08-.52.03.16-.1-.51.04.17-.1-.52.03.18-.1-.52.04.16-.1-.52.03.18-.1-.53.04.18-.1-.53.03.18-.09-.53.02.18-.08-.53.03.19-.11-.53.04.18-.1-.53.04.17-.1-.52.03.17-.1-.52.04.18-.1-.52.03.17-.1-.53.03.18-.1-.53.04.18-.09-.53.03.18-.1-.53.04.19-.11-.54.04.19-.1-.53.04.19-.1-.55.03.2-.1-.54.03.18-.1-.53.04.18-.09-.54.03.2-.1-.55.05.19a3.13 3.13 0 0 0-3.14-2.85z" font-size="12" fill="url(#b)" stroke-width="1.1"/><path d="M45.34 30.7a2.52 2.52 0 0 0-.06-.34 1.8 1.8 0 0 0-.07-.35 1.98 1.98 0 0 0-.06-.36 2.41 2.41 0 0 0-.07-.35c0-.1-.03-.22-.07-.34 0-.12-.03-.24-.06-.35 0-.1-.04-.23-.06-.35l-.06-.35-.07-.34a1.8 1.8 0 0 0-.06-.35l-.07-.35-.07-.35-.06-.34a2.41 2.41 0 0 0-.07-.36c0-.1-.03-.23-.05-.35l-.07-.35-.06-.34a1.8 1.8 0 0 0-.07-.35l-.07-.35a2.3 2.3 0 0 0-.06-.35c0-.11-.04-.22-.07-.34 0-.12-.03-.24-.06-.35 0-.12-.04-.24-.06-.35l-.06-.36-.07-.34a1.8 1.8 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.35l-.07-.35a2.2 2.2 0 0 0-.06-.35c0-.11-.04-.22-.07-.34 0-.12-.03-.24-.07-.35 0-.11-.03-.23-.05-.35l-.07-.35-.06-.34a1.8 1.8 0 0 0-.07-.36 1.8 1.8 0 0 0-.06-.35 2.2 2.2 0 0 0-.07-.35c0-.1-.03-.23-.07-.35 0-.1-.03-.23-.06-.34 0-.12-.03-.24-.06-.35 0-.12-.04-.24-.06-.35l-.07-.35-.06-.35-.07-.34a1.8 1.8 0 0 0-.07-.36c0-.1-.03-.23-.06-.35 0-.1-.03-.23-.07-.35 0-.1-.03-.23-.05-.34-.01-.12-.05-.24-.07-.35a1.8 1.8 0 0 0-.06-.35l-.07-.35-.07-.35a1.86 1.86 0 0 0-.06-.34c0-.12-.03-.24-.07-.35 0-.12-.03-.25-.06-.36 0-.1-.04-.23-.06-.35l-.06-.35a1.86 1.86 0 0 0-.07-.34 1.8 1.8 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.35 2.05 2.05 0 0 0-2.04-1.87H8.35c-1.08 0-1.96.83-2.04 1.87-.04.11-.06.22-.07.35l-.07.35a1.7 1.7 0 0 0-.06.34 1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35l-.06.36c-.03.1-.05.21-.06.35-.04.1-.06.22-.07.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.35l-.06.35a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.36a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35l-.06.35a1.8 1.8 0 0 0-.06.35c-.04.11-.06.22-.07.35l-.07.34-.06.35-.06.35c-.03.11-.05.22-.06.35-.03.11-.06.22-.07.36a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.35l-.07.35-.06.35-.06.34a1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.35a1.7 1.7 0 0 0-.07.34l-.07.35-.06.36-.06.35c-.03.1-.05.22-.06.35-.03.1-.06.22-.07.35-.02.1-.05.22-.06.34-.03.11-.06.23-.07.35l-.05.35c-.04.11-.06.22-.07.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.36c-.02.1-.05.22-.06.35l-.07.34-.07.35-.05.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.02.11-.05.23-.06.35l-.07.34-.05.36a1.8 1.8 0 0 0-.07.35c-.03.1-.06.22-.07.35a2.52 2.52 0 0 0-.07.6v6.48a2.5 2.5 0 0 0 2.5 2.5H42.9a2.5 2.5 0 0 0 2.5-2.5V31.3c0-.2-.02-.4-.07-.6z" font-size="12" fill="url(#c)" stroke-width="1.1"/><path d="M10.7 7.91L3.5 30.35c13.7-1.65 27.04-1.65 40.54-.91L37.1 7.9z" font-size="12" fill="url(#d)" stroke-width="1.1"/><path d="M2.77 29.18l-.05.34a1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.36a1.7 1.7 0 0 0-.07.34c-.02.1-.06.23-.07.35a2.52 2.52 0 0 0-.07.61v2.66c.47.44 1.1.7 1.79.7h39.46c.7 0 1.32-.26 1.79-.7v-2.66c0-.22-.03-.42-.08-.61a2.52 2.52 0 0 0-.06-.35 1.86 1.86 0 0 0-.07-.34 1.8 1.8 0 0 0-.06-.36 2.41 2.41 0 0 0-.07-.35c0-.1-.03-.23-.07-.35 0-.1-.03-.23-.06-.34 0-.12-.04-.24-.06-.35l-.06-.35-.07-.35a1.86 1.86 0 0 0-.06-.34 1.8 1.8 0 0 0-.07-.35 1.98 1.98 0 0 0-.07-.35l-.06-.36a2.41 2.41 0 0 0-.07-.34c0-.12-.03-.24-.05-.35a2.3 2.3 0 0 0-.07-.35l-.06-.35-.07-.34a2.3 2.3 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.35c0-.11-.04-.23-.07-.35 0-.11-.03-.23-.06-.34 0-.1-.03-.19-.05-.28H3.92a2.3 2.3 0 0 0-.04.28 1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.02.1-.05.22-.06.35-.02.11-.06.22-.07.34l-.05.35a1.8 1.8 0 0 0-.07.35l-.07.35a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.36c-.02.1-.05.23-.06.35l-.07.35-.06.34-.06.35a1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.35l-.06.34z" font-size="12" fill="url(#e)" stroke-width="1.1"/><path d="M45.28 30.36a1.8 1.8 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.36 2.41 2.41 0 0 0-.07-.35c0-.1-.03-.23-.07-.34 0-.12-.03-.24-.05-.35l-.07-.35-.06-.35a1.86 1.86 0 0 0-.07-.34 1.8 1.8 0 0 0-.06-.35 1.8 1.8 0 0 0-.07-.35l-.07-.35c0-.11-.03-.23-.06-.34a2.41 2.41 0 0 0-.06-.36l-.06-.35-.07-.35a1.86 1.86 0 0 0-.06-.34 1.8 1.8 0 0 0-.07-.35 1.98 1.98 0 0 0-.07-.35 2.3 2.3 0 0 0-.06-.35c0-.09-.02-.19-.05-.28-.33-.16-.7-.26-1.1-.26H4.9c-.4 0-.77.1-1.1.26l-.05.28c-.02.1-.06.23-.07.35l-.06.35-.06.35a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.36-.02.1-.06.22-.07.34l-.06.35-.06.35c-.03.1-.05.22-.06.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.07.35 1.8 1.8 0 0 0-.06.35c-.02.11-.06.22-.07.35l-.06.34-.06.35a1.8 1.8 0 0 0-.06.36c-.04.1-.06.22-.07.35a1.7 1.7 0 0 0-.07.34c-.04.2-.07.4-.07.61v.86a2.5 2.5 0 0 0 2.5 2.51H42.9a2.5 2.5 0 0 0 2.5-2.51v-.86c0-.22-.02-.42-.08-.61 0-.11-.03-.23-.05-.34z" font-size="12" fill="url(#f)" stroke-width="1.1"/><path d="M2.39 37.79a2.5 2.5 0 0 0 2.5 2.5h38.02a2.5 2.5 0 0 0 2.5-2.5V31.3a2.5 2.5 0 0 0-2.5-2.51H4.89a2.5 2.5 0 0 0-2.51 2.51v6.48z" font-size="12" fill="url(#g)" stroke-width="1.1"/><path d="M4.89 30.12c-.66 0-1.2.53-1.2 1.2v6.47c0 .66.54 1.2 1.2 1.2h38.02c.65 0 1.2-.56 1.2-1.21V31.3a1.2 1.2 0 0 0-1.2-1.18z" font-size="12" fill="url(#h)" stroke-width="1.1"/><path d="M40.47 36.12c-.82 0-1.48.53-1.48 1.22s.66 1.23 1.5 1.23h.87c.83 0 1.5-.55 1.5-1.23 0-.68-.67-1.23-1.5-1.23h-.88z" font-size="12" fill="url(#i)" stroke-width="1.1"/><path d="M40.47 36.44c-.64 0-1.15.4-1.15.9s.51.9 1.16.9h.88c.65 0 1.16-.4 1.16-.9s-.52-.9-1.16-.9h-.88z" font-size="12" fill="url(#j)" stroke-width="1.1"/><path d="M42.41 37.34c0 .44-.47.79-1.05.79h-.88c-.58 0-1.05-.35-1.05-.8 0-.43.47-.78 1.05-.78h.88c.58 0 1.05.35 1.05.79z" font-size="12" fill="url(#k)" stroke-width="1.1"/><path d="M40.47 36.77c-.44 0-.82.27-.82.6 0 .33.38.6.83.6h.88c.45 0 .83-.28.83-.6 0-.33-.38-.6-.83-.6h-.88z" font-size="12" fill="url(#l)" stroke-width="1.1"/><path d="M40.45 36.65c-.38 0-.66.22-.66.41 0 .2.28.43.66.43h.94c.39 0 .66-.22.66-.43 0-.2-.27-.41-.66-.41z" font-size="12" fill="url(#m)" stroke-width="1.1"/><path font-size="12" d="M6.54 34.75h14v3.64h-14z" fill="url(#n)" stroke-width="1.1"/><path font-size="12" d="M6.54 34.75v.44H20.1v3.2h.44v-3.64z" fill="url(#o)" stroke-width="1.1"/><path font-size="12" d="M17.2 34.75h.87v3.64h-.88zm-4.58 0h.87v3.64h-.87zm2.28 0h.88v3.64h-.88zm-4.57 0h.88v3.64h-.88z" fill="#949494" stroke-width="1.1"/><path font-size="12" d="M16.97 34.75h.88v3.64h-.88zm-4.57 0h.87v3.64h-.87zm2.28 0h.88v3.64h-.88zm-4.57 0H11v3.64h-.88z" fill="#f0f0f0" stroke-width="1.1"/><path font-size="12" d="M-2.44 50.44V-2.24h52.68v52.68" fill="none" stroke-width="1.1"/></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 42.33 42.33" id="svg8"><g id="layer1" transform="translate(-48.98 -204.72)"><g id="XMLID_16103_" transform="matrix(1.05625 0 0 1.0371 44.78 200.04)"><ellipse ry="1.9" rx="14.6" cy="43.1" cx="24" id="XMLID_16108_" opacity=".15" fill="#45413c"/><path d="M43.3 27.4c0-2.5-1.5-4.6-3.6-5.6.1-.6.2-1.1.2-1.7a6.8 6.8 0 0 0-9.4-6.3c-.8-4.8-5-8.5-10-8.5-5.6 0-10.2 4.6-10.2 10.2v.7a9.13 9.13 0 0 0-5.5 8.3c0 5 4 9 9 9h23.5c3.3 0 6-2.7 6-6.1z" id="XMLID_16107_" fill="#fff"/><path d="M37.2 29.2H13.7a9.1 9.1 0 0 1-8.8-6.9c-.2.7-.3 1.4-.3 2.1 0 5 4 9 9 9h23.5a6.06 6.06 0 0 0 5.7-8.2c-.8 2.4-3 4-5.6 4z" id="XMLID_16106_" fill="#f0f0f0"/><path d="M43.3 27.4c0-2.5-1.5-4.6-3.6-5.6.1-.6.2-1.1.2-1.7a6.8 6.8 0 0 0-9.4-6.3c-.8-4.8-5-8.5-10-8.5-5.6 0-10.2 4.6-10.2 10.2v.7a9.13 9.13 0 0 0-5.5 8.3c0 5 4 9 9 9h23.5c3.3 0 6-2.7 6-6.1z" class="st4" id="XMLID_16105_" fill="none" stroke="#45413c" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/><path d="M30.4 13.8a7.68 7.68 0 0 0-4.1 6.5" class="st4" id="XMLID_16104_" fill="none" stroke="#45413c" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/></g><g id="g3965" transform="matrix(.81344 0 0 .81344 50.86 206.3)" overflow="visible"><g id="Layer_1"><g id="g1182"><path id="path1183" d="M36.05 41h-8.6a1.5 1.5 0 0 0-.73-.64v-8.69h-4.88v8.69a1.5 1.5 0 0 0-.73.64h-8.6v4.88h8.45A1.5 1.5 0 0 0 22.4 47h3.75c.7 0 1.28-.48 1.45-1.12h8.44z" opacity=".2"/><path id="path1184" d="M35.86 40.82h-8.59a1.5 1.5 0 0 0-.74-.64v-8.7h-4.87v8.7a1.5 1.5 0 0 0-.74.64h-8.6v4.87h8.45a1.5 1.5 0 0 0 1.45 1.13h3.75c.7 0 1.28-.48 1.45-1.13h8.44z" opacity=".2"/><path id="path1185" d="M35.67 40.63h-8.59a1.5 1.5 0 0 0-.74-.64V31.3h-4.87v8.69a1.5 1.5 0 0 0-.74.64h-8.59v4.87h8.44a1.5 1.5 0 0 0 1.45 1.13h3.75c.7 0 1.29-.48 1.45-1.13h8.44z" opacity=".2"/><path id="polygon1186" fill="#616161" d="M11.95 40.44v4.88H35.5v-4.88h-.68z"/><linearGradient y2="44.64" x2="23.72" y1="41.11" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_20_"><stop id="stop1188" offset="0" stop-color="#cecedb"/><stop id="stop1189" offset=".19" stop-color="#fff"/><stop id="stop1190" offset=".48" stop-color="#cecedb"/><stop id="stop1191" offset=".75" stop-color="#b3b3c6"/><stop id="stop1192" offset=".99" stop-color="#828282"/></linearGradient><path id="rect1202" fill="url(#XMLID_20_)" d="M12.62 41.11h22.19v3.53H12.62z"/><path id="polygon1203" fill="#616161" d="M21.28 43.96h4.88V31.1h-4.88v.37z"/><linearGradient gradientTransform="rotate(-90 -256.9 586)" y2="868.38" x2="291.57" y1="864.85" x1="291.57" gradientUnits="userSpaceOnUse" id="XMLID_21_"><stop id="stop1205" offset="0" stop-color="#cecedb"/><stop id="stop1206" offset=".19" stop-color="#fff"/><stop id="stop1207" offset=".48" stop-color="#cecedb"/><stop id="stop1208" offset=".75" stop-color="#b3b3c6"/><stop id="stop1209" offset=".99" stop-color="#828282"/></linearGradient><path id="rect1219" fill="url(#XMLID_21_)" d="M21.95 31.48h3.53v12.11h-3.53z"/><linearGradient y2="39.69" x2="23.72" y1="46.44" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_22_"><stop id="stop1221" offset="0" stop-color="#cf0000"/><stop id="stop1222" offset=".99" stop-color="#ff6d00"/></linearGradient><path id="path1226" d="M27.1 44.94c0 .83-.68 1.5-1.5 1.5h-3.76a1.5 1.5 0 0 1-1.5-1.5V41.2c0-.83.68-1.5 1.5-1.5h3.75c.83 0 1.5.67 1.5 1.5z" fill="url(#XMLID_22_)"/><linearGradient y2="49.63" x2="23.72" y1="37.07" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_23_"><stop id="stop1228" offset="0" stop-color="#fff030"/><stop id="stop1229" offset=".99" stop-color="#ffae00"/></linearGradient><path id="path1233" d="M21.84 40.44a.75.75 0 0 0-.75.75v3.75c0 .42.34.75.75.75h3.75c.42 0 .75-.33.75-.75V41.2a.75.75 0 0 0-.75-.75z" fill="url(#XMLID_23_)"/><linearGradient y2="43.82" x2="23.72" y1="41" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_24_"><stop id="stop1235" offset="0" stop-color="#fff"/><stop id="stop1236" offset=".5" stop-color="#ffe3a9"/><stop id="stop1237" offset=".99" stop-color="#ffc957"/></linearGradient><path id="path1241" d="M21.84 41c-.1 0-.18.09-.18.2v3.74c0 .1.08.19.18.19h3.75c.1 0 .2-.08.2-.19V41.2c0-.1-.1-.19-.2-.19z" fill="url(#XMLID_24_)"/></g><path id="path1242" d="M25.25 1.28L12.14 9.87l-.04.02-.05.04-.04.03-.17.2-.02.04-.04.08-.02.04-.03.09-.02.04-.02.08v.05l-.01.1V33.51c0 .44.28.83.7.97l9.76 3.26c.32.1.67.05.94-.15l13.02-9.77c.26-.2.41-.5.41-.82V4.22v-.05-.07l-.01-.06V4l-.02-.03-.02-.08-.02-.06-.03-.07-.04-.06-.04-.07-.04-.05-.04-.05-.02-.02-.03-.04a4.33 4.33 0 0 1-.11-.09l-.06-.03-.07-.05-.07-.03-.06-.02a7 7 0 0 0-.08-.03l-.05-.01-9.67-2.08c-.27-.06-.55 0-.78.15zM11.69 10.53" opacity=".2"/><path id="path1243" d="M36.14 4.2v-.05l-.01-.05v-.02l-.01-.02a.87.87 0 0 0-.05-.13l-.02-.04-.03-.04L36 3.8l-.03-.03a.94.94 0 0 0-.07-.06l-.03-.03a.83.83 0 0 0-.04-.03l-.04-.02h-.01l-.03-.02-.05-.02-.05-.01-.03-.01-9.67-2.08a.66.66 0 0 0-.5.1l-13.1 8.58h-.01l-.02.02-.03.02-.02.02a.71.71 0 0 0-.11.13l-.02.02c0 .02-.02.04-.03.05v.03l-.03.05v.03l-.02.06v.03l-.01.06V33.5c0 .28.18.53.45.62l9.76 3.25c.2.07.43.04.6-.1l13.02-9.76a.66.66 0 0 0 .26-.52V4.22 4.2z" opacity=".2"/><path id="path1244" d="M25.06 1.09l-13.1 8.59-.05.03-.05.03-.03.03-.18.2-.02.04-.04.08-.02.04-.03.09-.01.04-.03.09v.05l-.01.1v22.82c0 .44.28.83.7.98l9.76 3.25c.32.1.68.05.95-.15l13.02-9.77c.25-.19.4-.5.4-.82V4.03v-.05-.06l-.01-.07V3.8c0-.02-.01-.01-.02-.03l-.02-.08-.02-.06a14.21 14.21 0 0 0-.1-.2l-.05-.05-.04-.05-.01-.01-.04-.04-.05-.05-.06-.04-.06-.04-.07-.04-.06-.03-.07-.03-.08-.02-.05-.02L25.84.94c-.27-.05-.55 0-.78.15zM11.5 10.35" opacity=".2"/><path id="path1245" d="M35.95 4v-.04l-.01-.05V3.9l-.01-.02-.01-.05-.02-.04a.34.34 0 0 0-.02-.04l-.02-.04-.03-.04-.02-.04-.03-.03-.03-.03a.33.33 0 0 0-.04-.03l-.03-.03a.83.83 0 0 0-.12-.07l-.05-.02-.04-.01-.03-.01-9.68-2.08a.66.66 0 0 0-.5.1l-13.1 8.58h-.01l-.02.02-.03.02-.02.02a.71.71 0 0 0-.11.13l-.02.02-.02.05-.02.03-.02.05v.03l-.02.06v.09l-.01.02v22.79c0 .28.18.53.45.62l9.76 3.25c.2.07.43.04.6-.1l13.02-9.76a.66.66 0 0 0 .26-.52V4.03v-.02z" opacity=".2"/><linearGradient y2="8.67" x2="14.03" y1="26.92" x1="32.27" gradientUnits="userSpaceOnUse" id="XMLID_25_"><stop id="stop1247" offset="0" stop-color="#585868"/><stop id="stop1248" offset="1" stop-color="#494949"/></linearGradient><path id="path1252" d="M24.87.77l-13.1 8.6-.05.02-.04.04-.04.03-.17.2-.03.04-.04.08-.02.04-.03.08-.01.04-.02.1-.01.04-.01.1V33.01c0 .44.28.83.7.97l9.77 3.26c.32.1.67.05.94-.15l13.02-9.77c.26-.2.41-.5.41-.82V3.7v-.04-.07l-.02-.07V3.5l-.01-.04-.03-.07-.02-.06-.03-.07L36 3.2l-.04-.07-.04-.05-.04-.05a.3.3 0 0 0-.02-.02l-.04-.04a3.78 3.78 0 0 1-.16-.13l-.08-.04-.06-.03-.07-.03-.07-.02-.06-.01L25.65.63c-.27-.06-.55 0-.78.14zM11.32 10.03" fill="url(#XMLID_25_)"/><linearGradient y2="28.05" x2="33.41" y1="9.81" x1="15.17" gradientUnits="userSpaceOnUse" id="XMLID_26_"><stop id="stop1254" offset="0" stop-color="#7d7d99"/><stop id="stop1255" offset="1" stop-color="#494949"/></linearGradient><path id="path1259" d="M35.76 3.7v-.05-.05l-.01-.02v-.02l-.02-.05-.02-.04a.34.34 0 0 0-.02-.05l-.02-.03-.02-.04-.03-.04-.03-.03-.03-.04-.03-.03-.04-.02-.04-.03-.04-.02-.04-.02-.04-.02-.05-.02h-.03L25.57 1a.66.66 0 0 0-.5.09l-13.1 8.59h-.01l-.02.01-.03.03-.02.02a.71.71 0 0 0-.11.13l-.01.02-.03.05-.02.03-.01.05-.01.03-.02.05V33c0 .29.17.54.44.63l9.76 3.25c.2.07.43.03.6-.1l13.02-9.76a.66.66 0 0 0 .26-.53V3.72v-.03z" fill="url(#XMLID_26_)"/><radialGradient gradientUnits="userSpaceOnUse" gradientTransform="translate(19.5 19.5) scale(.1875)" fy="47.28" fx="105.2" r="139.09" cy="47.28" cx="105.2" id="XMLID_27_"><stop id="stop1261" offset="0" stop-color="#fff"/><stop id="stop1262" offset=".28" stop-color="#cecedb"/><stop id="stop1263" offset=".64" stop-color="#bdbdcf"/><stop id="stop1264" offset="1" stop-color="#9a9ab1"/></radialGradient><path id="polygon1272" fill="url(#XMLID_27_)" d="M12.33 10.22l9.76 3.26L35.11 3.7V26.5l-13.02 9.76-9.76-3.25z"/><linearGradient y2="3.36" x2="23.72" y1="13.22" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_28_"><stop id="stop1274" offset="0" stop-color="#cecedb"/><stop id="stop1275" offset="1" stop-color="#eee"/></linearGradient><path id="polygon1279" fill="url(#XMLID_28_)" d="M25.44 1.64l-13.11 8.58 9.76 3.26L35.11 3.7z"/><linearGradient y2="38.24" x2="22.17" y1="16.69" x1="15.04" gradientUnits="userSpaceOnUse" id="XMLID_29_"><stop id="stop1281" offset="0" stop-color="#fff"/><stop id="stop1282" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1286" fill="url(#XMLID_29_)" d="M12.33 33l9.76 3.26V13.48l-9.76-3.26z"/><linearGradient y2="28.48" x2="17.78" y1="35.2" x1="16.64" gradientUnits="userSpaceOnUse" id="XMLID_30_"><stop id="stop1288" offset="0" stop-color="#fff"/><stop id="stop1289" offset="1" stop-color="#bdbdcf"/></linearGradient><path id="polygon1293" fill="url(#XMLID_30_)" d="M12.33 27.4V33l9.76 3.26V30.5z"/><linearGradient y2="16.36" x2="20.09" y1="16.36" x1="13.81" gradientUnits="userSpaceOnUse" id="XMLID_31_"><stop id="stop1295" offset="0" stop-color="#7d7d99"/><stop id="stop1296" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1300" fill="url(#XMLID_31_)" d="M13.8 16.16l6.3 2.1v-1.71l-6.3-2.1z"/><linearGradient y2="18.78" x2="20.09" y1="18.78" x1="13.81" gradientUnits="userSpaceOnUse" id="XMLID_32_"><stop id="stop1302" offset="0" stop-color="#7d7d99"/><stop id="stop1303" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1307" fill="url(#XMLID_32_)" d="M13.8 18.6l6.3 2.09v-1.71l-6.3-2.1z"/><linearGradient y2="22.93" x2="18.67" y1="18.9" x1="14.63" gradientUnits="userSpaceOnUse" id="XMLID_33_"><stop id="stop1309" offset="0" stop-color="#7d7d99"/><stop id="stop1310" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1314" fill="url(#XMLID_33_)" d="M13.8 21.02l6.3 2.1V21.4l-6.3-2.1z"/><g id="g1315"><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="477.59" x2="271.32" y1="478.92" x1="271.32" gradientUnits="userSpaceOnUse" id="XMLID_34_"><stop id="stop1317" offset=".01" stop-color="#fff"/><stop id="stop1318" offset="1" stop-color="#b6b6b6"/></linearGradient><path id="path1322" d="M19.78 33.41c-.46-.12-.81.1-.81.5s.35.8.8.93l.49.13c.45.12.8-.1.8-.5s-.35-.8-.8-.93z" fill="url(#XMLID_34_)"/><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="477.72" x2="271.32" y1="478.86" x1="271.32" gradientUnits="userSpaceOnUse" id="XMLID_35_"><stop id="stop1324" offset=".01" stop-color="#b6b6b6"/><stop id="stop1325" offset=".37" stop-color="#9d9d9d"/><stop id="stop1326" offset=".74" stop-color="#898989"/><stop id="stop1327" offset="1" stop-color="#828282"/></linearGradient><path id="path1331" d="M19.78 33.6c-.35-.1-.63.07-.63.36s.28.6.63.69l.48.13c.34.09.63-.07.63-.36 0-.28-.29-.6-.63-.69z" fill="url(#XMLID_35_)"/><linearGradient gradientTransform="matrix(-.9659 -.2588 0 .7765 -840.35 -606.85)" y2="528.08" x2="-890.74" y1="529.26" x1="-890.74" gradientUnits="userSpaceOnUse" id="XMLID_36_"><stop id="stop1333" offset=".01" stop-color="#9f6"/><stop id="stop1334" offset=".24" stop-color="#68de56"/><stop id="stop1335" offset=".48" stop-color="#3bc147"/><stop id="stop1336" offset=".7" stop-color="#1bab3c"/><stop id="stop1337" offset=".88" stop-color="#079e35"/><stop id="stop1338" offset="1" stop-color="#093"/></linearGradient><path id="path1342" d="M20.83 34.4c0 .26-.26.4-.57.31l-.48-.13c-.32-.08-.57-.35-.57-.6 0-.26.25-.4.57-.31l.48.12c.31.09.57.36.57.62z" fill="url(#XMLID_36_)"/><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="477.65" x2="271.34" y1="478.52" x1="271.31" gradientUnits="userSpaceOnUse" id="XMLID_37_"><stop id="stop1344" offset=".01" stop-color="#3c3"/><stop id="stop1345" offset=".36" stop-color="#1bb433"/><stop id="stop1346" offset=".74" stop-color="#07a033"/><stop id="stop1347" offset="1" stop-color="#093"/></linearGradient><path id="path1351" d="M19.78 33.8c-.25-.07-.46.03-.46.22s.21.4.46.47l.48.13c.24.06.45-.04.45-.23s-.2-.4-.45-.47z" fill="url(#XMLID_37_)"/><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="478.35" x2="271.32" y1="477.78" x1="271.32" gradientUnits="userSpaceOnUse" id="XMLID_38_"><stop id="stop1353" offset="0" stop-color="#fff"/><stop id="stop1354" offset=".09" stop-color="#e8f7d6"/><stop id="stop1355" offset=".23" stop-color="#c8ed9e"/><stop id="stop1356" offset=".36" stop-color="#ade46d"/><stop id="stop1357" offset=".5" stop-color="#97dc46"/><stop id="stop1358" offset=".63" stop-color="#85d627"/><stop id="stop1359" offset=".76" stop-color="#79d212"/><stop id="stop1360" offset=".89" stop-color="#72d004"/><stop id="stop1361" offset="1" stop-color="#6fcf00"/></linearGradient><path id="path1365" d="M19.76 33.71c-.2-.05-.36.04-.36.15 0 .12.16.3.36.35l.52.14c.2.05.35-.04.35-.15 0-.12-.15-.3-.35-.35z" fill="url(#XMLID_38_)"/></g><path id="_x3C_Slice_x3E_" fill="none" d="M0 48V0h48v48"/></g></g></g><style id="style3713">.st4{fill:none;stroke:#45413c;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10}</style></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48"><path d="M40.4 36s3-.4 3.5-3.2a5 5 0 0 0 0-1.7c-.4-3.1-3.8-3.8-3.8-3.8s.6-3.4-2.5-5.2c-3.2-1.8-6 0-6 0s-1.7-3.4-6.3-3.4c-5.8 0-6.8 6.6-6.8 6.6s-5.5.3-5.5 5.2 5 5.5 5 5.5h22.4z" fill="#1565c0"/><path d="M11 30.5c0-4.4 3.3-6.3 5.9-7 .9-3 3.4-6.8 8.4-6.8a9 9 0 0 1 7 3c.6-.3 1.4-.4 2.3-.4A8 8 0 0 0 26 12c-5.5 0-7.4 4.7-7.4 4.7s-4-3-8.1 1.1c-2.1 2.1-1.6 5.4-1.6 5.4S4 23.6 4 28.8C4 33.5 9 34 9 34h2.8c-.5-1-.8-2.1-.8-3.5z" fill="#1565c0"/></svg>
\ No newline at end of file
--- /dev/null
+<svg viewBox="0 0 233.1 286.6" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="b" x1="1618.4" x2="1701.1" gradientUnits="userSpaceOnUse" spreadMethod="reflect"><stop stop-color="#497bb3" offset="0"/><stop stop-color="#a5c4e6" offset=".2"/><stop stop-color="#3b5d8b" offset="1"/></linearGradient><linearGradient id="c" x1="282.4" x2="286.6" y1="518.6" y2="527.3" gradientUnits="userSpaceOnUse"><stop stop-color="#a5c4e6" offset="0"/><stop stop-color="#497bb3" offset="1"/></linearGradient><linearGradient id="d" x1="1702.8" x2="1783.8" y1="-868.3" y2="-877.9" gradientUnits="userSpaceOnUse" xlink:href="#a" spreadMethod="reflect"/><linearGradient id="e" x1="1702.8" x2="1783.8" y1="-821.2" y2="-830.8" gradientUnits="userSpaceOnUse" xlink:href="#a" spreadMethod="reflect"/><linearGradient id="f" x1="1702.8" x2="1783.8" y1="-777" y2="-786.6" gradientUnits="userSpaceOnUse" xlink:href="#a" spreadMethod="reflect"/></defs><g class="Graphic"><path d="M183 16.4c2.3 3.9 1.5 189.2-1.6 196.5-2.4 5.8-80.6 70.8-84.7 72.5-52.9-.3-88.5-19.6-94.5-29.8C0 242.8 2 45.6 4 41.6 6 37.8 106 2 109.5 1.1c3.2-.7 70.7 10.9 73.4 15.2z" fill="#c7c7c7"/><path d="M181.9 17l.3-.2h-.1l-.3.1h.3-.1l-.1.1zm0 0l.2-.1v-.1l.3-.1-.2.2.2-.2-.2.1-.2.2zm.5-.3l.5-.3-.5.2zm.6-.2l-.6.2.6-.2zm.9-.7c0-.2-.2-.3-.3-.5l-.4-.3-1-.6-1-.5-1.5-.5c-1-.4-2.2-.8-3.6-1.1l-4.5-1.2A858.9 858.9 0 0 0 124 1.8l-9-1.3-3-.4h-1l-.5-.1h-.9l-.2.1h-.4l-.3.2-.6.1-.6.3-1.6.5-2.1.7-5.5 2-6.8 2.4a3492.8 3492.8 0 0 0-71 26.4l-6.7 2.7a210.2 210.2 0 0 0-8.8 4l-.6.4-.5.3c-.1.2-.3.3-.4.3L3 41l-.2.4v.4l-.1.5-.1.7c0 .4 0 1-.2 1.5v2a326.8 326.8 0 0 0-.6 12A6597.9 6597.9 0 0 0 .2 237l.2 6.9.2 5.4.2 4 .1 1.5v.6l.1.4v.2l.2.2a19 19 0 0 0 3.8 4.5c1.7 1.5 3.8 3.1 6.4 4.8 5 3.3 11.8 6.7 20 9.8a190.2 190.2 0 0 0 65.3 11.3h.5l.4-.3.3-.2.5-.3.6-.5 1.4-1 1.8-1.3 4.4-3.5 5.5-4.4a1569.7 1569.7 0 0 0 56.5-47.8l5.3-4.8 4.2-4 1.6-1.7 1.4-1.4.9-1 .3-.5c0-.2.2-.4.3-.5v-.4l.2-.4a19 19 0 0 0 .3-2.4l.2-1.7.3-4.2.3-5.3.9-30.7a4531.2 4531.2 0 0 0 .1-139 202.1 202.1 0 0 0-.5-11.1v-.8l-.2-.6v-.5l-.2-.2-.1-.3zm-1.7 1l.5-.6-.5.6zm-.3.4v.5l.1.7.2 1.9v2.4l.4 6.6a2727.6 2727.6 0 0 1 .5 56.4c0 27.4-.2 58.1-.7 82.5a1759.8 1759.8 0 0 1-1.5 40.1c0 .6 0 1.2-.2 1.7l-.1 1.2-.2.8v.4l-.1.2-.2.3-.8 1-1.3 1.3-1.6 1.6-4.1 3.9a1419.9 1419.9 0 0 1-61.7 52.5l-5.5 4.4-4.4 3.5c-.6.5-1.2 1-1.8 1.3l-1.3 1a4 4 0 0 1-.6.4l-.3.3-.3.1a194.1 194.1 0 0 1-64.1-11.1c-8-3-14.6-6.4-19.6-9.6a46.8 46.8 0 0 1-8.1-6.7c-.5-.5-.9-1-1.2-1.6v-.7l-.2-1.3-.3-4a724.6 724.6 0 0 1-.2-12.2A6591.7 6591.7 0 0 1 4.2 58.6c0-2.5.2-4.7.3-6.8l.2-5.1.1-2 .2-1.5v-.5l.1-.5.1-.1.3-.3.6-.3 1.4-.7 2-1 5.1-2.1 6.7-2.7a2431 2431 0 0 1 71-26.4L99 6l5.4-1.9 2.1-.7 1.7-.6.6-.1.5-.2.3-.1h.2l-.1-.5v.4h1l1 .2 3.1.3 8.9 1.3a816.2 816.2 0 0 1 47.4 9.2l4.3 1.2 3.5 1 1.3.6 1 .4.6.4v.2zm-85.6 267h.4v.7l-.4-.6.4.6v.5l-.5-1 .1-.1zM3.3 255v.2l.1.2-1.2.2 1-.5h.2-.1zM5 42v.2l-.3-.3-.8-.2.8.2h-.1.2l.2.1zm-.3 0zm-.8-.5l.7.4-.7-.4zm.7.4l-.5-.6.5.6zM109.7 2l-.1-.8V2zm-.2-.8l.2.8-.2-.8z"/><path d="M179 20.2l-2.4 1-2.5 1.2-2.4 1-2.5 1.2-2.5 1.2-2.5 1.2-2.6 1.3-2.5 1.3-2.6 1.2-2.5 1.4-2.6 1.3-2.6 1.4-2.6 1.3-2.6 1.4-5.3 2.8-5.3 2.9-5.3 2.8-5.3 3-5.4 2.8-5.4 2.8-5.4 2.8-2.7 1.4-2.7 1.3-2.8 1.4-2.7 1.3-1.2-.3-1.4-.3-2.6-.6-2.8-.7-2.8-.6-2.8-.7-2.9-.6-2.9-.7-3-.7-2.9-.6-3-.7-6-1.4-6-1.3-3-.7-3-.6-3-.6-2.9-.6-2.9-.7-2.8-.6-2.9-.6-2.7-.6-2.7-.5-1.3-.3-1.4-.3-1.2-.2-1.3-.3-1.3-.2-1.2-.2-1.3-.3-1.2-.3-1.1-.2-1.2-.2-1.1-.2-1.1-.2-1.1-.2-1-.2-1.1-.2-1-.2-1-.2-1-.2 2.5.8 2.5.8 2.5.7 2.5.7 2.6.8 2.6.7 2.7.8 2.7.7 2.7.7 2.7.7 5.5 1.5 5.6 1.4 5.6 1.5 5.6 1.5 5.5 1.4 5.5 1.4 2.7.8 2.7.7 2.7.7 2.7.8 2.6.7 2.6.8 2.6.7 2.5.7 2.4.8 2.5.7v2.9l.1 2.9v2.9l.1 3v3l.2 3v6.2l.1 3.2v3.2l.1 3.2v6.5l.1 3.3v6.7l.1 3.4v10.2l.1 7v14l.1 7 .1 14.2v14.2l.1 7v7l.1 7v7l.1 3.4v6.8l.1 3.4v6.7l.1 3.3v6.5l.1 3.2v6.4l.1 3.1v3l.1 3.2.1 3v3l.1 2.9.1 2.8v2.9l.1-2.9v-5.9l.1-3v-3l.1-3v-3.2l.1-3.2v-6.4l.1-3.2.1-3.3v-3.3l.1-3.4v-3.3l.1-3.4v-3.5l.2-3.4v-6.9l.2-7 .1-7 .1-7.2.2-7.2.3-14.3.2-14.4.1-7.1.2-7.1v-7.1l.2-7V126l.2-3.5v-6.8l.1-3.4v-3.4l.1-3.3.1-3.3v-6.6l.1-3.2v-3.2l.1-3.1V83l.1-3v-3l.1-3.1V68l.1-2.8 5.2-2.8 5.2-2.8 5.2-2.7L120 54l5.1-2.7 5.1-2.7 5-2.7 5.1-2.8 5-2.7 5-2.7 4.9-2.9 4.9-2.8 2.4-1.5 2.4-1.4 2.4-1.5 2.3-1.5 2.4-1.4 2.4-1.5 2.3-1.6 2.4-1.5z" fill="#fff" fill-opacity=".5"/><path d="M179 20.2C153 31.2 124.4 49 95.4 63a1898 1898 0 0 0-87-18.8c25.7 8 59.5 15.5 85.2 23.5 1.5 60.2.8 151.4 2.3 211.6.7-60.7 2.8-153.4 3.5-214 27.8-15 55-28.5 79.8-45z" fill="none"/><path d="M18 218.5l.4.6.5.7.5.6.6.6.6.6.5.5.7.6.6.6.7.5.7.5.7.6.7.5.8.5.8.5.7.5.8.5.9.4.8.5.9.4.8.4 1 .4.8.4 1 .4.8.3 2 .8 1.8.6 2 .6 2 .5 1.9.5 2 .4 2 .4 1.9.3 2 .3 1.9.1h1l.9.1H63l1-.1.7-.1.9-.1.8-.1.8-.2.8-.2.8-.2.7-.1.7-.2.7-.3.7-.2h-.1l-.3-.1H71l-.4-.2h-.4l-.4-.2-.5-.2-.6-.1-.6-.2-.7-.1-.7-.2-.7-.3-.8-.2-.8-.2-.9-.2-.9-.3-1-.3-.9-.2-1-.3-1-.3-1-.2-1.1-.3-1-.4-1.2-.2-2.3-.7-2.3-.6-2.4-.7-2.4-.6-2.3-.7-2.4-.6-2.3-.7-2.3-.6-1.1-.3-1.2-.3-1-.4-1-.2-1.1-.3-1-.3-1-.3-1-.2-.9-.3-.9-.2-.8-.3-.8-.2-.8-.2-.7-.2-.7-.2-.6-.2-.6-.2-.6-.1-.4-.2H19l-.3-.2h-.3l-.3-.2H18z" fill-opacity=".2"/><path d="M18 218.5c9.5 13.7 39.4 20.4 53.6 14.9-2.5-.7-50.5-13.9-53.6-15z" fill="none"/><path d="M67 193.1l-44.4-17-.4.1-.4.2-.4.2-.3.2-.3.3-.2.3-.3.3-.2.3-.2.4-.2.3-.1.3-.2.4-.1.4-.1.3-.2.7v.7l-.1.7v2.2l7 2.4v.1l.1.2h.1v.2l.2.2v.1l.2.2.2.2.1.2.2.2.2.2.2.3.2.2.5.5.5.6.6.5.6.6.7.6.7.6.8.6.8.6.9.5.9.5 1 .6 1 .4.5.2.6.3.5.2.6.1.6.2.6.1.6.2.6.1.6.1h.6l.7.2h3.5l.7-.1.7-.1.7-.1.8-.2.8-.2.7-.2.8-.2.8-.3h.4l.3.1h.3l.3.1h.4l.4.1h.5l.5.1h.6l.5.1h4.4l.6-.2h.6l.6-.2.6-.2.5-.1.5-.2.5-.3.5-.3.3-.3.4-.3.2-.2.1-.2.1-.2.1-.2.1-.2.1-.3z" fill="#fff" fill-opacity=".4"/><path d="M67 193.1l-44.4-17c-4.6 1.6-3.7 8.3-3.7 8.3l7 2.4s9.6 15.1 26.7 9.2c0 0 12.8 2.3 14.3-2.9z" fill="none"/><path d="M66.5 187.4l-44.1-11.5c-.6 2-.7 5 .2 6.6 2.3 1.1 6.8 2 9 3 6.4 6.3 12 6.8 22.3 6l12 2.2c1.2-2.4 1.5-3.4.6-6.3z" fill="#606060"/><path d="M66.5 187.4l-44.1-11.5c-.6 2-.7 5 .2 6.6 2.3 1.1 6.8 2 9 3 6.4 6.3 12 6.8 22.3 6l12 2.2c1.2-2.4 1.5-3.4.6-6.3z" fill="none"/><path d="M180.7 18.9L94.8 67.1l.4 215.4 84-70.7 1.5-192.9z" fill="#fff" fill-opacity=".4"/><path d="M180.7 18.9L94.8 67.1l.4 215.4 84-70.7 1.5-192.9z" fill="none"/><path d="M23 232.1l.4.6.5.6.5.6.5.5.5.6.6.5.5.5.6.5.6.5.5.5.6.4.6.5.6.4.6.4 1.3.8 1.4.7 1.3.7 1.3.6 1.4.5 1.4.5 1.4.4 1.4.4 1.4.4 1.4.3 1.4.2 1.4.2 1.4.1 1.5.1 1.3.1h2.8l1.3-.1 1.3-.1 1.3-.1 1.2-.3 1.2-.2 1.1-.3 1.2-.3 1-.4h-.3l-.2-.1H63l-.3-.1-.4-.1-.3-.1-.5-.1-.4-.2-.5-.1-.5-.2-.6-.1-.6-.2-.6-.1-.7-.2-.7-.2-.7-.2-.7-.2-.8-.2-.8-.3-.8-.2-.8-.2-1.7-.5-1.7-.4-1.8-.5-1.8-.5-1.8-.5-3.6-1-1.7-.5-1.8-.5-1.7-.5-.8-.2-.8-.2-.8-.2-.8-.2-.7-.3-.7-.1-.7-.2-.7-.2-.7-.2-.6-.2-.5-.1-.6-.2-.5-.1-.5-.2-.4-.1-.4-.1-.4-.2h-.6l-.2-.2h-.4z" fill-opacity=".2"/><path d="M23 232.1c9.8 13 29.6 15.3 40.7 11.3a3565 3565 0 0 1-40.8-11.3z" fill="none"/><path d="M30.3 245.5l.5.7.6.7.6.7.7.5.6.6.7.6.7.5.8.5.7.4.8.5.8.4.8.3.8.3.8.4.9.2.8.2.9.3.9.1.8.2 1 .1.8.1h4.5l.8-.2.9-.1.8-.2.9-.2.8-.2.8-.3h-.2l-.2-.1h-.2l-.2-.2h-.2l-.3-.1h-.3l-.3-.1-.3-.1-.4-.1-.4-.1-.4-.2H52l-.4-.2-1-.2-.9-.3-1-.3-1-.3-1.1-.2-1.1-.4-2.3-.6-2.3-.6-1-.3-1.2-.3-1-.3-1-.3-1-.3-1-.2-.4-.1-.4-.2h-.4l-.4-.2h-.4l-.3-.2h-.3l-.3-.2h-.3l-.2-.1H31l-.2-.1h-.2l-.1-.1h-.2z" fill-opacity=".2"/><path d="M30.3 245.5c5.7 7.7 16.8 10.1 25.5 7l-25.5-7z" fill="none"/><path d="M15 59l-4.4.5-.8 103 67.4 18.8L79 176l-64.8-17.3L15 59z" fill="#fcfcfc" fill-opacity=".4"/><path d="M15 59l-4.4.5-.8 103 67.4 18.8L79 176l-64.8-17.3L15 59z" fill="none"/><path d="M78.6 97l-.1 3L15 81.7l63.6 15.4zm.9 21l-.1 3L16 102.5 79.5 118zm-.9 19.4l-.1 2.9L15 122l63.6 15.4zm0 19l-.1 3L15 141l63.6 15.4z" fill-opacity=".2"/><path d="M15.2 61.3l63 15.8-.5 104h1l.6-104.4v-.4l-.4-.1-63.5-16-.1.6-.1.5zm63.4 15.9l-.4-.1v-.4h.6l-.2.5z" fill="#9e9e9e"/></g><path d="M1618.4-890.9v126.4h.5c-.3 1-.5 2-.5 3 0 15.3 37 27.6 82.7 27.6s82.6-12.3 82.6-27.6c0-1-.1-2-.5-3h.5v-126.4h-165.3z" fill="url(#b)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path transform="matrix(4.58315 0 0 4.28653 -1157 -2110.6)" d="M303.3 521.8c0 3-7.5 5.5-16.7 5.5s-16.6-2.5-16.6-5.5 7.4-5.6 16.6-5.6 16.7 2.5 16.7 5.6z" fill="url(#c)"/><path d="M80.2 205.2c.6 13 34.7 23.4 76.5 23.4 41.7 0 75.6-10.4 76.4-23.3-13.4 10.6-42.5 18-76.4 18-34 0-63.1-7.4-76.5-18.1z" fill="#3b5d8b"/><path d="M1618.3-891.5c.6 15 37.5 27.2 82.8 27.2 45.2 0 81.9-12 82.7-27l-3 2.2c-9.7 11.7-41.6 20.3-79.7 20.3-38.3 0-70.5-8.7-80-20.5 0 0 0-.2-.2-.2l-2.6-2z" fill="url(#d)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path d="M80.2 167c.6 13 34.7 23.5 76.5 23.5 41.7 0 75.6-10.4 76.4-23.4-13.4 10.7-42.5 18-76.4 18-34 0-63.1-7.4-76.5-18z" fill="#3b5d8b"/><path d="M1618.3-844.4c.6 15 37.5 27.2 82.8 27.2 45.2 0 81.9-12 82.7-27l-.7.5c-5.2 13.5-40 24-82 24-42.5 0-77.5-10.5-82.3-24.3l-.5-.4z" fill="url(#e)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path d="M1618.3-800.2c.6 15 37.5 27.2 82.8 27.2 45.2 0 81.9-12 82.7-27l-.7.5c-5.2 13.5-40 24-82 24-42.5 0-77.5-10.6-82.3-24.3l-.5-.4z" fill="url(#f)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path d="M80.7 244.5c4.4 11.9 36.8 21 76 21 38.8 0 71-9 75.7-20.8-13.6 10.4-42.4 17.6-75.7 17.6-33.6 0-62.5-7.3-76-17.8z" fill="#3b5d8b"/></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="175" height="200" viewBox="0 0 46 53" version="1"><defs><linearGradient gradientTransform="translate(643 -1191) scale(4.95289)" gradientUnits="userSpaceOnUse" y2="357" x2="482" y1="357" x1="413" id="j" xlink:href="#a"/><linearGradient id="a"><stop offset="0" stop-color="#60a016"/><stop offset="0" stop-color="#98e90d"/><stop offset="0" stop-color="#64a616"/><stop offset="1" stop-color="#99ea0c"/><stop offset="1" stop-color="#61a017"/></linearGradient><radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.9529 0 0 .83705 643 267)" r="34" fy="354" fx="448" cy="354" cx="448" id="k" xlink:href="#b"/><linearGradient id="b"><stop offset="0" stop-color="#aff637"/><stop offset="1" stop-color="#5f9f16"/></linearGradient><linearGradient gradientTransform="translate(-46 -1244) scale(4.95289)" gradientUnits="userSpaceOnUse" y2="336" x2="580" y1="288" x1="580" id="l" xlink:href="#c"/><linearGradient id="c"><stop offset="0" stop-color="#a4bcc3"/><stop offset="1" stop-color="#b9d1da" stop-opacity="0"/></linearGradient><linearGradient gradientTransform="matrix(4.9529 0 0 4.84448 -46 -1201)" gradientUnits="userSpaceOnUse" y2="284" x2="631" y1="284" x1="543" id="m" xlink:href="#d"/><linearGradient id="d"><stop offset="0" stop-color="#9beb0a"/><stop offset="0" stop-color="#90e612"/><stop offset="0" stop-color="#6fbb16"/><stop offset="1" stop-color="#8ee518"/><stop offset="1" stop-color="#89e31f"/></linearGradient><linearGradient gradientTransform="matrix(3.07055 0 0 3.13001 2739 257)" y2="141" x2="86" y1="7" x1="23" gradientUnits="userSpaceOnUse" id="n" xlink:href="#e"/><linearGradient id="e"><stop offset="0" stop-color="#6eb314"/><stop offset="1" stop-color="#97e70d" stop-opacity="0"/></linearGradient><linearGradient gradientTransform="translate(464 39)" gradientUnits="userSpaceOnUse" y2="361" x2="567" y1="275" x1="560" id="o" xlink:href="#f"/><linearGradient id="f"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><filter height="1" y="0" width="1" x="0" id="p" color-interpolation-filters="sRGB"><feGaussianBlur/></filter><linearGradient gradientTransform="translate(471 39)" gradientUnits="userSpaceOnUse" y2="362" x2="608" y1="275" x1="618" id="q" xlink:href="#f"/><filter height="1" y="0" width="1" x="0" id="r" color-interpolation-filters="sRGB"><feGaussianBlur/></filter><linearGradient y2="357" x2="482" y1="357" x1="413" gradientTransform="matrix(6.30935 0 0 6.17125 37 -2027)" gradientUnits="userSpaceOnUse" id="s" xlink:href="#a"/><linearGradient y2="361" x2="567" y1="275" x1="560" gradientTransform="translate(-76 -1276) scale(4.95289)" gradientUnits="userSpaceOnUse" id="t" xlink:href="#f"/><linearGradient y2="835" x2="2087" y1="1161" x1="2121" gradientTransform="matrix(.33568 0 0 .28176 2133 -120)" gradientUnits="userSpaceOnUse" id="u" xlink:href="#g"/><linearGradient id="g"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#89d30e"/></linearGradient><linearGradient y2="362" x2="608" y1="275" x1="618" gradientTransform="translate(-24 -1270) scale(4.95289)" gradientUnits="userSpaceOnUse" id="v" xlink:href="#f"/><linearGradient gradientTransform="matrix(4.9529 0 0 4.84448 -46 -1201)" gradientUnits="userSpaceOnUse" y2="281" x2="629" y1="281" x1="545" id="w" xlink:href="#h"/><linearGradient id="h"><stop offset="0" stop-color="#5f9d16"/><stop offset="0" stop-color="#8fdd0f"/><stop offset="1" stop-color="#65a816"/><stop offset="1" stop-color="#88d40f"/><stop offset="1" stop-color="#5f9d16"/></linearGradient><linearGradient gradientTransform="matrix(1.2687 0 0 1.12163 2134 -136)" gradientUnits="userSpaceOnUse" y2="237" x2="557" y1="374" x1="571" id="x" xlink:href="#i"/><linearGradient id="i"><stop offset="0"/><stop offset="1" stop-opacity="0"/></linearGradient><filter height="1" y="0" width="1" x="0" id="y" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="3"/></filter></defs><g transform="matrix(.10238 0 0 .10238 -32 8.8)"><path d="M540 339a171 30 0 0 0-172 30 171 30 0 0 0 0 1l4 21v2h1a167 30 0 0 0 167 28 167 30 0 0 0 167-29l4-23a171 30 0 0 0-171-30z" fill="url(#j)"/><ellipse cx="540" cy="369" rx="171" ry="30" fill="#599714"/><ellipse ry="28" rx="166" cy="368" cx="540" fill="url(#k)"/><path d="M746-28H335l38 398c0 2 2 3 4 5l10 5c8 4 21 7 36 9a764 764 0 0 0 271-9l10-5 3-4z" fill="url(#l)"/><path d="M539-72a218 38 0 0 0-218 37 218 38 0 0 0 0 1l5 26a213 38 0 0 0 0 1l1 1a213 38 0 0 0 212 36A213 38 0 0 0 752-6h1l5-29a218 38 0 0 0-219-37z" fill="url(#m)"/><path d="M580 67h-68c14 4 23 15 31 29l21 39-16 10h56l30-49-18 9-12-23c-4-8-15-16-24-15zm-76 2c-5 0-10 2-15 6l-28 44 53 31 28-46c-8-17-23-35-38-35zm136 77l-52 32 25 48c25 1 57-8 51-33zm-162 1h-58l17 13-16 30c-7 14 6 27 14 32 9 4 22 5 34 4l21-35 17 9zm98 65l-28 50 28 50v-20h26c9 1 21-5 25-14l33-61c-11 11-25 13-41 13h-42zm-153 4l35 65c7 9 20 11 34 11h38v-62h-71c-11 1-25-2-36-14z" fill="url(#n)" fill-rule="evenodd"/><path transform="translate(-2366 -1440) scale(4.95289)" d="M553 292l7 71h9l-8-70z" fill="url(#o)" filter="url(#p)"/><path transform="translate(-2366 -1440) scale(4.95289)" d="M622 292l-7 71h-9l7-70z" fill="url(#q)" filter="url(#r)"/><path d="M321-35a218 38 0 0 0 0 1l5 26a213 38 0 0 0 0 1l1 1a213 38 0 0 0 212 36A213 38 0 0 0 752-6h1l4-24A219 37 0 0 1 541 1a219 37 0 0 1-220-36z" fill="url(#s)"/><path d="M363-14l3 28a213 38 0 0 0 44 8l-3-29a219 37 0 0 1-44-7z" fill="url(#t)" filter="url(#p)"/><path d="M321-35a218 38 0 0 0 0 1l1 4c3 5 11 9 22 13 12 3 27 7 43 9a1064 1064 0 0 0 345-7c11-4 19-7 24-11l1-4A219 37 0 0 1 541 1a219 37 0 0 1-220-36z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" font-weight="400" overflow="visible" color="#000" font-family="sans-serif" white-space="normal" fill="url(#u)" enable-background="accumulate"/><path d="M725-16a219 37 0 0 1-44 8l-3 29a213 38 0 0 0 44-9z" fill="url(#v)" filter="url(#r)"/><ellipse cx="541" cy="-37" rx="209" ry="31" fill="url(#w)"/><path d="M321-35a218 38 0 0 0 0 1l1 1a223 37 0 0 0 1 1 219 37 0 0 1-2-3zM751-3a217 38 0 0 1-212 29A217 38 0 0 1 328-3a213 38 0 0 0 211 33A213 38 0 0 0 751-3z" fill="#5f9d16"/><ellipse ry="31" rx="209" cy="-36" cx="542" fill="url(#x)"/><path d="M541-68a209 31 0 0 0-209 31 209 31 0 0 0 0 1 209 31 0 0 1 209-30 209 31 0 0 1 209 30 209 31 0 0 0 0-1 209 31 0 0 0-209-31z" fill="#609f16"/><path d="M721-21a209 31 0 0 1-46 8l6 5a219 37 0 0 0 43-8zm-349 2l-8 5 44 7 9-5c-17-2-33-4-45-7z" fill="#fff"/><g fill="#fff"><path d="M728 0l-4-13-13 3 12-4-2-14 4 13 13-3-13 4z"/><path d="M733-7l-9-6-7 8 7-9-8-7 8 6 7-7-6 8z"/><path d="M730-4l-6-9-9 5 9-6-5-9 5 8 10-4-9 5z"/><path d="M722-3l2-10-10-3 10 2 2-11-1 11 10 2-10-1z"/></g><path d="M720-28l2 9-3-4 3 6-6-4 6 6-8-1v1l7 1-11 4h1l9-2-5 4 6-3-4 5 1 1 5-6-1 8h1l2-8 3 11h1l-3-9 4 5-3-7 6 5v-1l-6-6 8 2v-1l-7-2 10-3v-1l-9 2 5-3v-1l-7 4 5-6h-1l-5 6 1-9h-1l-2 8-3-11z" fill="#fff" filter="url(#y)"/></g></svg>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1" width="96" height="96"><defs><linearGradient id="i"><stop offset="0" stop-color="#2f2f2f"/><stop offset=".4" stop-color="#fff"/><stop offset=".6" stop-color="#979797"/><stop offset=".8" stop-color="#505050"/><stop offset="1" stop-color="#e6e6e6"/></linearGradient><linearGradient id="h"><stop offset="0" stop-color="#ededed"/><stop offset="1" stop-color="#b0b0b0"/></linearGradient><linearGradient id="g"><stop offset="0" stop-color="#a2a2a2"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="e"><stop offset="0" stop-color="#b4b4b4"/><stop offset=".2" stop-color="#646464"/><stop offset=".5" stop-color="#fff"/><stop offset="1" stop-color="#3c3c3c"/></linearGradient><linearGradient id="f"><stop offset="0" stop-color="#fff"/><stop offset=".5" stop-color="#8c8c8c"/><stop offset=".5" stop-color="#cfcfcf"/><stop offset=".6" stop-color="#fff"/><stop offset=".8" stop-color="#c8c8c8"/><stop offset="1" stop-color="#505050"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#818181"/><stop offset=".2" stop-color="#f9f9f9"/><stop offset="1" stop-color="#dcdcdc" stop-opacity="0"/></linearGradient><linearGradient id="c"><stop offset="0" stop-color="#dcdcdc"/><stop offset="1" stop-color="#fafafa"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="d"><stop offset="0" stop-color="#b4b4b4"/><stop offset="1" stop-color="#dcdcdc"/></linearGradient><linearGradient x1="19" y1="74" x2="87.5" y2="27.4" id="t" xlink:href="#a" gradientUnits="userSpaceOnUse"/><linearGradient x1="6" y1="73" x2="24" y2="73" id="q" xlink:href="#b" gradientUnits="userSpaceOnUse"/><linearGradient x1="6" y1="73" x2="24" y2="73" id="r" xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 96 0)"/><linearGradient x1="38.7" y1="65.6" x2="38.7" y2="5.8" id="s" xlink:href="#c" gradientUnits="userSpaceOnUse"/><radialGradient cx="90" cy="90" r="42" fx="90" fy="90" id="p" xlink:href="#d" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0 -1.08503 2 0 -90 187.7)"/><clipPath id="v"><path d="M66 6v55a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V6h-4v2h-4V6h-4z" fill="#fff"/></clipPath><filter x="-.2" y="0" width="1.3" height="1.1" color-interpolation-filters="sRGB" id="w"><feGaussianBlur stdDeviation=".9"/></filter><linearGradient x1="68.8" y1="59" x2="75.3" y2="59" id="u" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -1)"/><linearGradient x1="69" y1="54" x2="73" y2="54" id="x" xlink:href="#f" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -1)"/><linearGradient x1="63.5" y1="64.2" x2="79" y2="65" id="M" xlink:href="#g" gradientUnits="userSpaceOnUse"/><filter x="-.2" y="-.1" width="1.3" height="1.2" color-interpolation-filters="sRGB" id="N"><feGaussianBlur stdDeviation=".5"/></filter><linearGradient x1="69" y1="17.5" x2="75.1" y2="17.5" id="P" xlink:href="#h" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 144 -2)"/><linearGradient x1="68" y1="17.8" x2="76" y2="17.8" id="O" xlink:href="#h" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -2)"/><linearGradient x1="68.8" y1="59" x2="72.3" y2="59" id="Q" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.12627 0 0 1 -7.4 -49.5)"/><linearGradient x1="69" y1="54" x2="73" y2="54" id="F" xlink:href="#i" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 144 -4)"/><linearGradient x1="45.4" y1="92.5" x2="45.4" y2="7" id="j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.00587 0 0 .99417 100 0)"><stop offset="0"/><stop offset="1" stop-opacity=".6"/></linearGradient><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="l" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="m" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="n" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="o" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -97)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="k" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/></defs><g transform="scale(1 -1)"><path d="M12-95A10 10 0 0 0 2-85v71A10 10 0 0 0 12-4h72a10 10 0 0 0 10-10v-71a10 10 0 0 0-10-10H12z" opacity=".1" fill="url(#k)"/><path d="M12-94c-5 0-9 4-9 9v71c0 5 4 9 9 9h72c5 0 9-4 9-9v-71c0-5-4-9-9-9H12z" opacity=".1" fill="url(#l)"/><path d="M12-93a8 8 0 0 0-8 8v71a8 8 0 0 0 8 8h72a8 8 0 0 0 8-8v-71a8 8 0 0 0-8-8H12z" opacity=".2" fill="url(#m)"/><rect width="86" height="85" rx="7" ry="7" x="5" y="-92" opacity=".3" fill="url(#n)"/><rect width="84" height="84" rx="6" ry="6" x="6" y="-91" opacity=".5" fill="url(#o)"/></g><path d="M12 6a6 6 0 0 0-6 6v72a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V12a6 6 0 0 0-6-6h-9v3h-6V6H12z" fill="url(#p)"/><path d="M6 56v28a6 6 0 0 0 6 6h12V56H6z" fill="url(#q)"/><path d="M90 56v28a6 6 0 0 1-6 6H72V56h18z" fill="url(#r)"/><path d="M6 82v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".1"/><path d="M6 78v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".8" fill="#fff"/><path d="M6 76v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".1"/><path d="M6 72v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".8" fill="#fff"/><path d="M6 70v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".1"/><path d="M12 6a6 6 0 0 0-6 6v56a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V12a6 6 0 0 0-6-6h-9v3h-6V6H12z" fill="url(#s)"/><path d="M12 6a6 6 0 0 0-6 6v56a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V12a6 6 0 0 0-6-6h-9v2h9a4 4 0 0 1 4 4v56a4 4 0 0 1-4 4H12a4 4 0 0 1-4-4V12a4 4 0 0 1 4-4h57V6H12z" fill="url(#t)"/><path d="M66 6v55a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V6h-4v2h-4V6h-4z" fill="#252525"/><path fill="#4d4d4d" d="M70 8h4v49h-4z"/><rect width="6" height="4" rx="1" ry="1" x="69" y="56" fill="url(#u)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6"/><path d="M66 6v55a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V6h-4v2h-4V6h-4z" clip-path="url(#v)" fill="none" stroke="#000" stroke-width="2" stroke-linecap="square" filter="url(#w)"/><path d="M69.5 51c-.3 0-.5.2-.5.5v3c0 .3.2.5.5.5h1c.3 0 .5-.2.5-.5V54h1.5c.3 0 .5-.2.5-.5v-1c0-.3-.2-.5-.5-.5H71v-.5c0-.3-.2-.5-.5-.5h-1z" id="y" fill="url(#x)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6"/><use transform="translate(0 -6)" id="z" width="96" height="96" xlink:href="#y"/><use transform="translate(0 -6)" id="A" width="96" height="96" xlink:href="#z"/><use transform="translate(0 -6)" id="B" width="96" height="96" xlink:href="#A"/><use transform="translate(0 -6)" id="C" width="96" height="96" xlink:href="#B"/><use transform="translate(0 -6)" id="D" width="96" height="96" xlink:href="#C"/><use transform="translate(0 -6)" id="E" width="96" height="96" xlink:href="#D"/><use transform="translate(0 -6)" width="96" height="96" xlink:href="#E"/><path d="M74.5 48c.3 0 .5.2.5.5v3c0 .3-.2.5-.5.5h-1a.5.5 0 0 1-.5-.5V51h-1.5a.5.5 0 0 1-.5-.5v-1c0-.3.2-.5.5-.5H73v-.5c0-.3.2-.5.5-.5h1z" id="G" fill="url(#F)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6"/><use transform="translate(0 -6)" id="H" width="96" height="96" xlink:href="#G"/><use transform="translate(0 -6)" id="I" width="96" height="96" xlink:href="#H"/><use transform="translate(0 -6)" id="J" width="96" height="96" xlink:href="#I"/><use transform="translate(0 -6)" id="K" width="96" height="96" xlink:href="#J"/><use transform="translate(0 -6)" id="L" width="96" height="96" xlink:href="#K"/><use transform="translate(0 -6)" width="96" height="96" xlink:href="#L"/><path d="M65 6v55a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V6h-1v55a3 3 0 0 1-3 3h-6a3 3 0 0 1-3-3V6h-1z" fill="url(#M)"/><path d="M69.5 10.5c-1 0-2 .8-2 1.8v10.9c0 1 1 1.8 2 1.8h5c1 0 2-.8 2-1.8V12.3c0-1-1-1.8-2-1.8h-5zm1 9h3v1.8h-3v-1.7z" transform="translate(0 -2)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6" filter="url(#N)"/><path d="M69.2 9c-.7 0-1.2.5-1.2 1.1v10.8c0 .6.5 1.1 1.2 1.1h5.6c.7 0 1.2-.5 1.2-1V10c0-.6-.5-1-1.2-1h-5.6zm.7 8H74v3h-4v-3z" fill="url(#O)"/><path d="M74.6 10c.2 0 .5.2.5.5v10c0 .3-.3.5-.5.5h-5.1a.5.5 0 0 1-.5-.5v-10c0-.3.2-.5.5-.5h5zm-.5 7H70v3h4.1v-3z" fill="url(#P)"/><rect width="3.4" height="5" rx=".6" ry=".5" x="70.3" y="7.5" fill="url(#Q)" stroke="#000" stroke-linecap="square" stroke-opacity=".6"/><path opacity=".3" d="M70 16h4v1h-4z"/></svg>
\ No newline at end of file
--- /dev/null
+/*!
+ * elFinder - file manager for web
+ * Version 2.1.46 (2019-01-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 = $(elm),
+
+ /**
+ * Object of events originally registered in this node
+ *
+ * @type Object
+ */
+ prevEvents = $.extend(true, {}, $._data(node.get(0), 'events')),
+
+ /**
+ * Store node contents.
+ *
+ * @see this.destroy
+ * @type jQuery
+ **/
+ prevContent = $('<div/>').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 | $(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 = $(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) {
+ $.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 = [];
+ $.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)) {
+ $.each(parents, function() {
+ changedParents[this] = true;
+ });
+ }
+ }
+ }
+
+ if (files[f.hash]) {
+ $.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
+ $.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
+ $.each(self.leafRoots, function(phash, roots) {
+ var idx, pdir;
+ if ((idx = $.inArray(hash, roots))!== -1) {
+ if (roots.length === 1) {
+ if ((pdir = Object.assign({}, files[phash])) && pdir._realStats) {
+ $.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) {
+ $.each(files, function(h, f) {
+ f.phash == hash && rm(h);
+ });
+ }
+ }
+ if (file.phash) {
+ if (parents = self.parents(file.phash)) {
+ $.each(parents, function() {
+ changedParents[this] = true;
+ });
+ }
+ }
+ deleteCache(files[hash]);
+ }
+ },
+ changedParents = {},
+ parents;
+
+ $.each(self.roots, function(k, v) {
+ roots[v] = k;
+ });
+ while (l--) {
+ rm(removed[l]);
+ }
+ // delete sizeInfo cache
+ $.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) {
+ $.each(changed, function(i, file) {
+ var hash = file.hash;
+ if (files[hash]) {
+ $.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) {
+
+ $.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 == $.ui.keyCode.TAB && !$(e.target).is(':input')) {
+ e.preventDefault();
+ }
+
+ // cancel any actions by [Esc] key
+ if (e.type === 'keydown' && code == $.ui.keyCode.ESCAPE) {
+ // copy or cut
+ if (! node.find('.ui-widget:visible').length) {
+ self.clipboard().length && self.clipboard([]);
+ }
+ // dragging
+ if ($.ui.ddmanager) {
+ ddm = $.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 = $('iframe', window.parent.document);
+ if (ifms.length) {
+ $.each(ifms, function(i, ifm) {
+ if (ifm.contentWindow === window) {
+ pifm = $(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) {
+ $(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 = $.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 ($.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 ($.isPlainObject(obj)) {
+ $.each(obj, function(k, v) {
+ if ($.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 = $.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 = $.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 $.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) {
+ $.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 = $('head > script[src$="js/elfinder.min.js"],script[src$="js/elfinder.full.js"]:first');
+ myTag = null;
+ $('head > script').each(function() {
+ if (this.src && this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js$/i)) {
+ myTag = $(this);
+ return false;
+ }
+ });
+ if (myTag) {
+ myCss = $('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 <base> tag
+ if (base = $('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', $('<style>.elfinder{visibility:hidden;overflow:hidden}</style>'));
+ $('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: $.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 && $('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 = {};
+ $.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() {
+ $.each(conflictChecks, function(i, p) {
+ if ($.fn[p] && typeof $.fn[p].noConflict === 'function') {
+ self.noConflicts[p] = $.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 (!$.isPlainObject(self.options.customHeaders)) {
+ self.options.customHeaders = {};
+ }
+ if (!$.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 = $.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 = $.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {};
+
+ /**
+ * Any custom xhrFields to send across every ajax request
+ *
+ * @type Object
+ * @default {}
+ */
+ this.xhrFields = $.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) {
+ $.each(self.customHeaders, function(key) {
+ xhr.setRequestHeader(key, this);
+ });
+ }
+ // set xhrFields
+ if (self.xhrFields) {
+ $.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 = $.extend(true, {}, this._sortRules, this.options.sortRules);
+
+ $.each(this.sortRules, function(name, method) {
+ if (typeof method != 'function') {
+ delete self.sortRules[name];
+ }
+ });
+
+ this.compare = $.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 = $(this),
+ targets = $.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) {
+ $.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 = '';
+ $.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 ];
+ }
+ $.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 {};
+ }
+ $.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 = $.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)? $.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 + $.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 ? '?' : '&') + $.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 + $.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';
+ }
+
+ $.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 ($.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 $.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 $.Deferred
+ */
+ this.request = function(opts) {
+ var self = this,
+ o = this.options,
+ dfrd = $.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)) {
+ $.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 (!$.isPlainObject(response)) {
+ return dfrd.reject({error :['errResponse', 'errDataNotJSON']}, xhr, response);
+ } else if (response.error) {
+ if (isOpen) {
+ // check leafRoots
+ $.each(self.leafRoots, function(phash, roots) {
+ self.leafRoots[phash] = $.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]) {
+ $.each(self.leafRoots[data.target], function(i, h) {
+ var root;
+ if (root = self.file(h)) {
+ response[name].push(root);
+ }
+ });
+ }
+ },
+ setTextMimes = function() {
+ self.textMimes = {};
+ $.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 $.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 = $('<div/>')
+ .append(
+ $('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"><span class="ui-button-text">'
+ +self.i18n(msg)
+ +'</span></button>')
+ .on('mouseenter mouseleave', function(e) {
+ $(this).toggleClass('ui-state-hover', e.type == 'mouseenter');
+ })
+ .on('click', function() {
+ self.exec(cmd, data || hashes, {_userAction: true, _currentType: 'toast', _currentNode: $(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 ? $.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 ($.isPlainObject(navigate.toast.incwd)) {
+ self.toast(makeToast(navigate.toast.incwd));
+ }
+ } else {
+ if ($.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 = $.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 ($.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 = $.inArray(xhr, queue);
+ data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort);
+ ndx !== -1 && queue.splice(ndx, 1);
+ });
+ } else if ($.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 = $.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 ($.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;
+ }
+ }
+ };
+
+ $.each(incoming, function(i, f) {
+ raw[f.hash] = f;
+ });
+
+ // make excludes object
+ if (excludeProps && excludeProps.length) {
+ excludes = {};
+ $.each(excludeProps, function() {
+ excludes[this] = true;
+ });
+ }
+
+ // find removed
+ $.each(files, function(hash, f) {
+ if (! raw[hash] && (! onlydir || f.phash === onlydir)) {
+ removed.push(hash);
+ }
+ });
+
+ // compare files
+ $.each(raw, function(hash, file) {
+ var origin = files[hash],
+ orgKeys = {},
+ chkKeyLen;
+
+ if (!origin) {
+ added.push(file);
+ } else {
+ // make orgKeys object
+ $.each(Object.keys(origin), function() {
+ orgKeys[this] = true;
+ });
+ $.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) {
+ $.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)
+ $.each(removed, function(i, hash) {
+ var file = files[hash],
+ phash = file.phash;
+
+ if (phash
+ && file.mime == 'directory'
+ && $.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) {
+ $.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 = $.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
+ }));
+ $.each(exParents(), function(i, data) {
+ opts.push(self.request({
+ data : {cmd : data.cmd, target : data.target},
+ preventDefault : true
+ }));
+ });
+ }
+ $.when.apply($, opts)
+ .fail(function(error, xhr) {
+ if (! polling || $.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 && $.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 : $.ui.keyCode[code]);
+
+ if (code && !shortcuts[pattern]) {
+ shortcuts[pattern] = {
+ keyCode : code,
+ altKey : $.inArray('ALT', parts) != -1,
+ ctrlKey : $.inArray('CTRL', parts) != -1,
+ shiftKey : $.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 = [];
+
+ $.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 $.map(clipboard, function(f) { return f.hash; }); };
+
+ if (hashes !== void(0)) {
+ clipboard.length && this.trigger('unlockfiles', {files : map()});
+ remember = {};
+
+ clipboard = $.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 $.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 ($.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)
+ : $.Deferred().reject('No such command');
+
+ resType = typeof dfrd;
+ if (!(resType === 'object' && dfrd.promise)) {
+ self.debug('warning', '"cmd.exec()" should be returned "$.Deferred" but cmd "' + cmd + '" returned "' + resType + '"');
+ dfrd = $.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 = $('<div/>').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 $('<div class="ui-front"/>').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? $() : 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 = $(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 = $.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 = {};
+ $(window).off('.' + namespace);
+ $(document).off('.' + namespace);
+ self.trigger = function(){};
+ $(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
+ $.each(prevEvents, function(n, arr) {
+ $.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) && $.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', '');
+ $(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 = $(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;
+ $.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) {
+ var $d = $(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;
+
+ $(window).off('resize.' + namespace, resize);
+ if (bodyOvf !== void(0)) {
+ $('body').css('overflow', bodyOvf);
+ }
+ bodyOvf = void(0);
+
+ if (orgStyle) {
+ elm = orgStyle.elm;
+ restoreStyle(elm);
+ $(elm).trigger('resize', {fullscreen: 'off'});
+ }
+
+ $(window).trigger('resize');
+ },
+
+ toFull: function(elem) {
+ bodyOvf = $('body').css('overflow') || '';
+ $('body').css('overflow', 'hidden');
+
+ $(elem).css(self.getMaximizeCss())
+ .addClass(cls)
+ .trigger('resize', {fullscreen: 'on'});
+
+ checkDialog();
+
+ $(window).on('resize.' + namespace, resize).trigger('resize');
+
+ return true;
+ }
+ },
+ restoreStyle = function(elem) {
+ if (orgStyle && orgStyle.elm == elem) {
+ $(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()) {
+ $(elm).trigger('resize', {fullscreen: 'on'});
+ }
+ });
+ }
+ };
+
+ $(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){
+ if (self.UA.Fullscreen) {
+ var elm = funcObj.fullElm(),
+ win = $(window);
+
+ resizeTm && cancelAnimationFrame(resizeTm);
+ if (elm === null) {
+ win.off('resize.' + namespace, resize);
+ if (orgStyle) {
+ elm = orgStyle.elm;
+ restoreStyle(elm);
+ $(elm).trigger('resize', {fullscreen: 'off'});
+ }
+ } else {
+ $(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 = $(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: $(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) {
+ $(window).off('resize.' + namespace, resize);
+ $('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', $('body').css('overflow') || '')
+ .data('orgStyle', elm.attr('style'))
+ .addClass(cls)
+ .css(self.getMaximizeCss());
+ $('body').css('overflow', 'hidden');
+ $(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 = $(target),
+ maximized = elm.hasClass(cls);
+
+ if (maximized) {
+ if (max === true) {
+ return;
+ }
+ exitMax(elm);
+ } else {
+ if (max === false) {
+ return;
+ }
+ toMax(elm);
+ }
+ };
+ })();
+
+ /************* init stuffs ****************/
+ Object.assign($.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 $.ajax(opts);
+ };
+ }
+
+ if (this.transport.upload == 'iframe') {
+ this.transport.upload = $.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 = $.proxy(this.uploads.xhr, this);
+ this.dragUpload = true;
+ } else {
+ this.transport.upload = $.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<len; i++) {
+ arr.push(str.charCodeAt(i));
+ }
+ return arr;
+ },
+ scalarValues = function(arr) {
+ var scalars = [], i, len, c;
+ if (typeof arr === 'string') {arr = charCodes(arr);}
+ for (i=0,len=arr.length; c=arr[i],i<len; i++) {
+ if (c >= 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<len; i++) {
+ if (c <= 0x7f) {
+ str += char(c);
+ } else if (c <= 0xdf && c >= 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 = $.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 = $.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 = $.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 = $.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 = $.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();
+ }
+ }
+ );
+ }
+ }
+
+ $.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) {
+ $.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 ($.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
+ $.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, $.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 = $.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() { $(this).elfinderdialog('close'); };
+
+ if (e.data.opts && $.isPlainObject(e.data.opts)) {
+ Object.assign(opts, e.data.opts);
+ }
+
+ self.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-error"/>'+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 = $('<span class="elfinder-error-counter">'+ self.i18n(['moreErrors', 1]) +'</span>').data('cnt', 1);
+ last.append('<br/>', counter);
+ }
+ }
+ })
+ .bind('tmb', function(e) {
+ $.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;
+ }
+ $.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' && $(beeper).html('<source src="' + soundPath + file + '" type="audio/wav">')[0].play();
+ });
+ }
+
+ // bind external event handlers
+ $.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 ($.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 = $(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
+ $(document)
+ // disable elfinder on click outside elfinder
+ .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !$(e.target).closest(node).length && self.disable(); })
+ // exec shortcuts
+ .on(keydown+' '+keypress+' '+keyup+' '+mousedown, execShortcut);
+
+ // attach events to window
+ self.options.useBrowserHistory && $(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
+ $('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')) {
+ $(document).trigger($.Event('keydown', { keyCode: $.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($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false }));
+ }
+ } else {
+ if (hasThash) {
+ !$.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);
+ }
+ });
+ }
+ }
+ });
+
+ $(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 && $.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) {
+ msg = self.i18n('ntfsmth');
+ } else if (node.find('.'+self.res('class', 'editing')).length && $.inArray('editingFile', self.options.windowCloseConfirm) !== -1) {
+ msg = self.i18n('editingFile');
+ } else if ((cnt = Object.keys(self.selected()).length) && $.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) {
+ msg = self.i18n('hasSelected', ''+cnt);
+ } else if ((cnt = Object.keys(self.clipboard()).length) && $.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
+ $(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) {
+ $(window).on('focus.' + namespace, function(e){
+ (e.target === this) && self.enable();
+ });
+ if (inFrame) {
+ $(window.top).on('focus.' + namespace, function() {
+ if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) {
+ requestAnimationFrame(function() {
+ $(window).trigger('focus');
+ });
+ }
+ });
+ }
+ } else if (inFrame) {
+ $(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) {
+ $(window).trigger('focus');
+ });
+ }
+
+ // elFinder to enable by mouse over
+ if (self.options.enableByMouseOver) {
+ node.on('mouseenter touchstart', function(e) {
+ (inFrame) && $(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 = $.Deferred().done(function() {
+ if (self.i18[lang]) {
+ self.lang = lang;
+ }
+ self.trigger('i18load');
+ i18n = self.lang === 'en'
+ ? self.i18['en']
+ : $.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 (!($.fn.selectable && $.fn.draggable && $.fn.droppable && $.fn.resizable && $.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 = $.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') && $(this).elfUiWidgetInstance('draggable')) {
+ if (helper.data('refreshPositions') > 0) {
+ $(this).draggable('option', { refreshPositions : true, elfRefresh : true });
+ helper.data('refreshPositions', -1);
+ } else {
+ $(this).draggable('option', { refreshPositions : false, elfRefresh : false });
+ helper.data('refreshPositions', null);
+ }
+ }
+ },
+ stop : function(e, ui) {
+ var helper = ui.helper,
+ files;
+
+ $(document).off(keyEvt);
+ $(this).elfUiWidgetInstance('draggable') && $(this).draggable('option', { refreshPositions : false });
+ self.draggingUiHelper = null;
+ self.trigger('focus').trigger('dragstop');
+ if (! helper.data('droped')) {
+ files = $.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 ? $(this) : $(this).parents('[id]:first'),
+ helper = $('<div class="elfinder-drag-helper"><span class="elfinder-drag-helper-icon-status"/></div>'),
+ icon = function(f) {
+ var mime = f.mime, i, tmb = self.tmb(f);
+ i = '<div class="elfinder-cwd-icon elfinder-cwd-icon-drag '+self.mime2class(mime)+' ui-corner-all"/>';
+ if (tmb) {
+ i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML;
+ } else if (f.icon) {
+ i = $(i).css(self.getIconStyle(f, true)).get(0).outerHTML;
+ }
+ if (f.csscls) {
+ i = '<div class="'+f.csscls+'">' + i + '</div>';
+ }
+ 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]]) + '<span class="elfinder-drag-num">'+l+'</span>');
+ }
+
+ $(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
+ $.each(self.commands, function(name, cmd) {
+ var proto = Object.assign({}, cmd.prototype),
+ extendsCmd, opts;
+ if ($.isFunction(cmd) && !self._commands[name] && (cmd.prototype.forceLoad || $.inArray(name, self.options.commands) !== -1)) {
+ extendsCmd = cmd.prototype.extendsCmd || '';
+ if (extendsCmd) {
+ if ($.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 = $.extend(true, {}, self.options.commandsOptions[extendsCmd], opts);
+ }
+ self._commands[name].setup(name, opts);
+ // setup linked commands
+ if (self._commands[name].linkedCmds.length) {
+ $.each(self._commands[name].linkedCmds, function(i, n) {
+ var lcmd = self.commands[n];
+ if ($.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 : $('<div/>').appendTo(node).elfinderworkzone(self),
+ // container for folders tree / places
+ navbar : $('<div/>').appendTo(node).elfindernavbar(self, self.options.uiOptions.navbar || {}),
+ // container for for preview etc at below the navbar
+ navdock : $('<div/>').appendTo(node).elfindernavdock(self, self.options.uiOptions.navdock || {}),
+ // contextmenu
+ contextmenu : $('<div/>').appendTo(node).elfindercontextmenu(self),
+ // overlay
+ overlay : $('<div/>').appendTo(node).elfinderoverlay({
+ show : function() { self.disable(); },
+ hide : function() { prevEnabled && self.enable(); }
+ }),
+ // current folder container
+ cwd : $('<div/>').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 : $('<div class="ui-widget-header ui-helper-clearfix ui-corner-bottom elfinder-statusbar"/>').hide().appendTo(node),
+ toast : $('<div class="elfinder-toast"/>').appendTo(node),
+ bottomtray : $('<div class="elfinder-bottomtray">').appendTo(node)
+ };
+
+ self.trigger('uiready');
+
+ // load required ui
+ $.each(self.options.ui || [], function(i, ui) {
+ var name = 'elfinder'+ui,
+ opts = self.options.uiOptions[ui] || {};
+
+ if (!self.ui[ui] && $.fn[name]) {
+ // regist to self.ui before make instance
+ self.ui[ui] = $('<'+(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' && $(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 = $(e.currentTarget),
+ id = e.currentTarget.id || null,
+ cwd = null,
+ elfFrom;
+ if (!id) { // target is cwd
+ cwd = self.cwd();
+ $elm.data(disable, false);
+ try {
+ $.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 = $(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 = $(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 = $(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 = {};
+ $(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) {
+ $(window).trigger('focus');
+ }
+
+ // check self.trashes
+ $.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) {
+ $.each(data.files, function(i, dir) {
+ if (dir.mime === 'directory' && dir.write) {
+ delete toChkTh[dir.hash];
+ }
+ });
+ }
+ }).always(function() {
+ $.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
+ $.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 && $.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 && ($.isPlainObject(data.images) || Array.isArray(data.images)); },
+ upload : function(data) { return data && ($.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 (!$.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 = $.merge((data.removed || []), $.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 = $.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 = $.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 : $.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 = $.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 = $.grep(names, function(name){
+ return $.inArray(name.name, existed) !== -1 ? true : false ;
+ });
+ if (exists.length && existed.length && target == fm.cwd().hash) {
+ cwdItems = $.map(fm.files(target), function(file) { return file.name; } );
+ if ($.grep(existed, function(n) {
+ return $.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 = $.Deferred(),
+ scanDfd = $.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 = $.map(data.files.items, function(item){
+ return item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry();
+ });
+ $.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 = $.grep(items, function(item){
+ var i, bak, hash, dfd, hi;
+ if (item.isDirectory && renames.length) {
+ i = $.inArray(item.name, renames);
+ if (i !== -1) {
+ renames.splice(i, 1);
+ bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, '');
+ $.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;
+ });
+ }
+ $.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 = $("<html/>").append($.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))),
+ atag;
+ $('img[_elfsrc]', tmp).each(function(){
+ var url, purl,
+ self = $(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) {
+ $.inArray(purl, ret) == -1 && ret.push(purl);
+ $.inArray(url, check) == -1 && check.push(url);
+ } else {
+ $.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 = $('a[href]', tmp);
+ atag.each(function(){
+ var text, loc,
+ parseUrl = function(url) {
+ var a = document.createElement('a');
+ a.href = url;
+ return a;
+ };
+ if (text = $(this).text()) {
+ loc = parseUrl($(this).attr('href'));
+ if (loc.href && loc.href.match(/^(?:ht|f)tp/i) && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i) || $.trim(text).match(/\.[a-z0-9-]{1,10}$/i))) {
+ if ($.inArray(loc.href, ret) == -1 && $.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 ($.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 = $.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 = $.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)) {
+ $.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);
+ $(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 = $();
+
+ // regist fnAbort function
+ node.one('uploadabort', fnAbort);
+ $(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 && $.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 && $.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 = $.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) {
+ $.each(fm.customHeaders, function(key) {
+ xhr.setRequestHeader(key, this);
+ });
+ }
+
+ // set xhrFields
+ if (fm.xhrFields) {
+ $.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) {
+ $.each(renames, function(i, v) {
+ formData.append('renames[]', v);
+ });
+ formData.append('suffix', fm.options.backupSuffix);
+ }
+ if (hashes) {
+ $.each(hashes, function(i, v) {
+ formData.append('hashes['+ i +']', v);
+ });
+ }
+ $.each(self.customData, function(key, val) {
+ formData.append(key, val);
+ });
+ $.each(self.options.onlyMimes, function(i, mime) {
+ formData.append('mimes[]', mime);
+ });
+
+ $.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) {
+ $.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) {
+ $.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;
+ $.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 && $.inArray(relPath, mkdirs) === -1) {
+ mkdirs.push(relPath);
+ // checking the root directory to supports <input type="file" webkitdirectory> see #2378
+ idx = relPath.substr(1).indexOf('/');
+ if (idx !== -1 && (rootDir = relPath.substr(0, idx + 1)) && $.inArray(rootDir, mkdirs) === -1) {
+ mkdirs.unshift(rootDir);
+ }
+ }
+ }
+ paths.push(relPath);
+ });
+ renames = [];
+ hashes = {};
+ if (mkdirs.length) {
+ (function() {
+ var checkDirs = $.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 = $.map(checkDirs, function(dir) { return dir._remove? dir.name : null ;} );
+ checkDirs = $.grep(checkDirs, function(dir) { return !dir._remove? true : false ;} );
+ }
+ if (cancelDirs.length) {
+ $.each(paths.concat(), function(i, path) {
+ if ($.inArray(path, cancelDirs) === 0) {
+ files[i]._remove = true;
+ paths[i] = void(0);
+ }
+ });
+ }
+ files = $.grep(files, function(file) { return file._remove? false : true; });
+ paths = $.grep(paths, function(path) { return path === void 0 ? false : true; });
+ if (checkDirs.length) {
+ dfd = $.Deferred();
+ if (res.length) {
+ $.each(res, function(i, existName) {
+ // backup
+ bak = fm.uniqueName(existName + fm.options.backupSuffix , null, '');
+ $.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);
+ }
+
+ $.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 = $.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 = $.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 = $.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] = $.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] = $.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] = $.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 = $.Deferred()
+ .fail(function(error) {
+ error && self.error(error);
+ }),
+ name = 'iframe-'+fm.namespace+(++self.iframeCnt),
+ form = $('<form action="'+self.uploadURL+'" method="post" enctype="multipart/form-data" encoding="multipart/form-data" target="'+name+'" style="display:none"><input type="hidden" name="cmd" value="upload" /></form>'),
+ 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 && $('<iframe src="javascript:false;"/>').appendTo(form);
+ form.remove();
+ iframe.remove();
+ }, 100);
+ },
+ iframe = $('<iframe src="'+(msie ? 'javascript:false;' : 'about:blank')+'" name="'+name+'" style="position:absolute;left:-1000px;top:-1000px" />')
+ .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) {
+ $.each(files, function(i, val) {
+ form.append('<input type="hidden" name="upload[]" value="'+val+'"/>');
+ });
+ cnt = 1;
+ } else if (input && $(input).is(':file') && $(input).val()) {
+ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) {
+ names = input.files? input.files : [{ name: $(input).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/, '$1') }];
+ //names = $.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 = $.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();
+ }
+
+ $.when.apply($, dfds).done(function() {
+ if (cnt < 1) {
+ return dfrd.reject();
+ }
+ form.append('<input type="hidden" name="'+(self.newAPI ? 'target' : 'current')+'" value="'+target+'"/>')
+ .append('<input type="hidden" name="html" value="1"/>')
+ .append('<input type="hidden" name="node" value="'+self.id+'"/>')
+ .append($(input).attr('name', 'upload[]'));
+
+ if (renames.length > 0) {
+ $.each(renames, function(i, rename) {
+ form.append('<input type="hidden" name="renames[]" value="'+self.escape(rename)+'"/>');
+ });
+ form.append('<input type="hidden" name="suffix" value="'+fm.options.backupSuffix+'"/>');
+ }
+ if (hashes) {
+ $.each(renames, function(i, v) {
+ form.append('<input type="hidden" name="['+i+']" value="'+self.escape(v)+'"/>');
+ });
+ }
+
+ if (data.overwrite === 0) {
+ form.append('<input type="hidden" name="overwrite" value="0"/>');
+ }
+
+ $.each(self.options.onlyMimes||[], function(i, mime) {
+ form.append('<input type="hidden" name="mimes[]" value="'+self.escape(mime)+'"/>');
+ });
+
+ $.each(self.customData, function(key, val) {
+ form.append('<input type="hidden" name="'+key+'" value="'+self.escape(val)+'"/>');
+ });
+
+ 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;
+ $.each(s, function(key) {
+ if (key.substr(0, precnt) === prefix && key.substr(sufcnt) === suffix) {
+ clrs.push(key);
+ }
+ });
+ $.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;
+ },
+
+ /**
+ * 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 (document.cookie && document.cookie != '') {
+ c = document.cookie.split(';');
+ name += '=';
+ for (i=0; i<c.length; i++) {
+ c[i] = $.trim(c[i]);
+ if (c[i].substring(0, name.length) == name) {
+ retval = decodeURIComponent(c[i].substring(name.length));
+ if (retval.substr(0,1) === '{' || retval.substr(0,1) === '[') {
+ try {
+ return JSON.parse(retval);
+ } catch(e) {}
+ }
+ return retval;
+ }
+ }
+ }
+ return null;
+ }
+
+ o = Object.assign({}, this.options.cookie);
+ if (value === null) {
+ value = '';
+ o.expires = -1;
+ } else {
+ t = typeof value;
+ if (t !== 'string' && t !== 'number') {
+ value = JSON.stringify(value);
+ }
+ }
+ if (typeof(o.expires) == 'number') {
+ d = new Date();
+ d.setTime(d.getTime()+(o.expires * 86400000));
+ o.expires = d;
+ }
+ document.cookie = name+'='+encodeURIComponent(value)+'; expires='+o.expires.toUTCString()+(o.path ? '; path='+o.path : '')+(o.domain ? '; domain='+o.domain : '')+(o.secure ? '; secure' : '');
+ if (value && (value.substr(0,1) === '{' || value.substr(0,1) === '[')) {
+ try {
+ return JSON.parse(value);
+ } catch(e) {}
+ }
+ return value;
+ },
+
+ /**
+ * Get start directory (by location.hash or last opened directory)
+ *
+ * @return String
+ */
+ startDir : function() {
+ var locHash = window.location.hash;
+ if (locHash && locHash.match(/^#elf_/)) {
+ return locHash.replace(/^#elf_/, '');
+ } else if (this.options.startPathHash) {
+ return this.options.startPathHash;
+ } else {
+ return this.lastDir();
+ }
+ },
+
+ /**
+ * Get/set last opened directory
+ *
+ * @param String|undefined dir hash
+ * @return String
+ */
+ lastDir : function(hash) {
+ return this.options.rememberLastDir ? this.storage('lastdir', hash) : '';
+ },
+
+ /**
+ * Node for escape html entities in texts
+ *
+ * @type jQuery
+ */
+ _node : $('<span/>'),
+
+ /**
+ * 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 ($.isPlainObject(opts.uiCmdMap) && Object.keys(opts.uiCmdMap).length) {
+ if (!opts.disabledFlip) {
+ opts.disabledFlip = {};
+ }
+ disabled = opts.disabledFlip;
+ $.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;
+ };
+ $.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);
+ } 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 ($.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
+ $.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 = [];
+ $.each(self.files(), function(h, f) {
+ $.each(self.parents(h), function(i, ph) {
+ if ($.inArray(ph, hashes) !== -1 && $.inArray(h, hashes) === -1) {
+ res.push(h);
+ return false;
+ }
+ });
+ });
+ return res;
+ },
+ applyLeafRootStats = function(dataArr, type) {
+ $.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 {
+ $.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 && data.customData !== self.prevCustomData) {
+ self.prevCustomData = data.customData;
+ try {
+ cData = JSON.parse(data.customData);
+ if ($.isPlainObject(cData)) {
+ self.prevCustomData = cData;
+ $.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 = $.grep(data.files, filter);
+ }
+ if (data.tree) {
+ data.tree = $.grep(data.tree, filter);
+ }
+ if (data.added) {
+ data.added = $.grep(data.added, filter);
+ }
+ if (data.changed) {
+ data.changed = $.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 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')),
+ ndialog = this.ui.notify,
+ notify = ndialog.children('.elfinder-notify-'+type+(id? ('.'+id) : '')),
+ button = notify.children('div.elfinder-notify-cancel').children('button'),
+ ntpl = '<div class="elfinder-notify elfinder-notify-{type}'+(id? (' '+id) : '')+'"><span class="elfinder-dialog-icon elfinder-dialog-icon-{type}"/><span class="elfinder-notify-msg">{msg}</span> <span class="elfinder-notify-cnt"/><div class="elfinder-notify-progressbar"><div class="elfinder-notify-progress"/></div><div class="elfinder-notify-cancel"/></div>',
+ delta = opts.cnt,
+ size = (typeof opts.size != 'undefined')? parseInt(opts.size) : null,
+ progress = (typeof opts.progress != 'undefined' && opts.progress >= 0) ? opts.progress : null,
+ cancel = opts.cancel,
+ clhover = 'ui-state-hover',
+ close = function() {
+ notify._esc && $(document).off('keydown', notify._esc);
+ notify.remove();
+ !ndialog.children().length && ndialog.elfinderdialog('close');
+ },
+ cnt, total, prc;
+
+ if (!type) {
+ return this;
+ }
+
+ if (!notify.length) {
+ notify = $(ntpl.replace(/\{type\}/g, type).replace(/\{msg\}/g, msg))
+ .appendTo(ndialog)
+ .data('cnt', 0);
+
+ if (progress != null) {
+ notify.data({progress : 0, total : 0});
+ }
+
+ if (cancel) {
+ button = $('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text">'+this.i18n('btnCancel')+'</span></button>')
+ .on('mouseenter mouseleave', function(e) {
+ $(this).toggleClass(clhover, e.type === 'mouseenter');
+ });
+ notify.children('div.elfinder-notify-cancel').append(button);
+ }
+ } 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 ($.isFunction(cancel) || (typeof cancel === 'object' && cancel.promise)) {
+ notify._esc = function(e) {
+ if (e.type == 'keydown' && e.keyCode != $.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);
+ });
+ $(document).on('keydown.' + this.namespace, notify._esc);
+ }
+ }
+
+ !opts.hideCnt && notify.children('.elfinder-notify-cnt').text('('+cnt+')');
+ ndialog.is(':hidden') && 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 = parseInt(prc/total);
+
+ notify.find('.elfinder-notify-progress')
+ .animate({
+ width : (progress < 100 ? progress : 100)+'%'
+ }, 20);
+ }
+
+ } 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();
+ $(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;
+ $(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;
+ $(this).elfinderdialog('close');
+ };
+ options.buttons[this.i18n(opts.reject.label)]._cssClass = 'elfinder-confirm-reject';
+ }
+
+ if (opts.buttons && opts.buttons.length > 0) {
+ btnNum = 1;
+ $.each(opts.buttons, function(i, v){
+ options.buttons[self.i18n(v.label)] = function() {
+ v.callback(!!(checkbox && checkbox.prop('checked')));
+ complete = true;
+ $(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() {
+ $(this).elfinderdialog('close');
+ };
+ options.buttons[this.i18n(opts.cancel.label)]._cssClass = 'elfinder-confirm-cancel';
+
+ if (opts.all) {
+ options.create = function() {
+ var base = $('<div class="elfinder-dialog-confirm-applyall"/>');
+ checkbox = $('<input type="checkbox" />');
+ $(this).next().find('.ui-dialog-buttonset')
+ .prepend(base.append($('<label>'+apply+'</label>').prepend(checkbox)));
+ };
+ }
+
+ if (opts.optionsCallback && $.isFunction(opts.optionsCallback)) {
+ opts.optionsCallback(options);
+ }
+
+ return this.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-confirm"/>' + 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 ($.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 = '<span class="elfinder-err-var elfinder-err-var' + placeholder + '">' + res + '</span>';
+ }
+ return res;
+ });
+ } else {
+ // get HTML from jQuery object
+ m = m.get(0).outerHTML;
+ }
+
+ input[i] = m;
+ }
+
+ return $.grep(input, function(m, i) { return $.inArray(i, ignore) === -1 ? true : false; }).join('<br>');
+ },
+
+ /**
+ * 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="';
+ $.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];
+ }
+ }
+ 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 = $.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 ($.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) {
+ $.each(checker, function(i, v) {
+ v = v.toLowerCase();
+ if (v === 'all' || mime.indexOf(v) === 0) {
+ ret = true;
+ return false;
+ }
+ });
+ }
+ return ret;
+ };
+ if (mime && $.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 = $.Deferred(),
+ ifm;
+ try {
+ ifm = $('<iframe width="1" height="1" scrolling="no" frameborder="no" style="position:absolute; top:-1px; left:-1px" crossorigin="use-credentials">')
+ .attr('src', url)
+ .one('load', function() {
+ var ifm = $(this);
+ try {
+ this.contentDocument.location.reload(true);
+ ifm.one('load', function() {
+ ifm.remove();
+ dfd.resolve();
+ });
+ } catch(e) {
+ ifm.attr('src', '').attr('src', url).one('load', function() {
+ ifm.remove();
+ dfd.resolve();
+ });
+ }
+ })
+ .appendTo('body');
+ } catch(e) {
+ ifm && ifm.remove();
+ dfd.reject();
+ }
+ return dfd;
+ },
+
+ /**
+ * Make netmount option for OAuth2
+ *
+ * @param String protocol
+ * @param String name
+ * @param String host
+ * @param Object opts Default {noOffline: false, root: 'root', pathI18n: 'folderId', folders: true}
+ }
+ *
+ * @return Object
+ */
+ makeNetmountOptionOauth : function(protocol, name, host, opt) {
+ var noOffline = typeof opt === 'boolean'? opt : null, // for backward compat
+ opts = Object.assign({
+ noOffline : false,
+ root : 'root',
+ pathI18n : 'folderId',
+ folders : true
+ }, (noOffline === null? (opt || {}) : {noOffline : noOffline})),
+ addFolders = function(fm, bro, folders) {
+ var self = this,
+ cnt = Object.keys($.isPlainObject(folders)? folders : {}).length,
+ select;
+
+ bro.next().remove();
+ if (cnt) {
+ select = $('<select class="ui-corner-all elfinder-tabstop" style="max-width:200px;">').append(
+ $($.map(folders, function(n,i){return '<option value="'+fm.escape((i+'').trim())+'">'+fm.escape(n)+'</option>';}).join(''))
+ ).on('change click', function(e){
+ var node = $(this),
+ path = node.val(),
+ spn;
+ self.inputs.path.val(path);
+ if (opts.folders && (e.type === 'change' || node.data('current') !== path)) {
+ node.next().remove();
+ node.data('current', path);
+ if (path != opts.root) {
+ spn = spinner();
+ if (xhr && xhr.state() === 'pending') {
+ fm.abortXHR(xhr, { quiet: true , abort: true });
+ }
+ node.after(spn);
+ xhr = fm.request({
+ data : {cmd : 'netmount', protocol: protocol, host: host, user: 'init', path: path, pass: 'folders'},
+ preventDefault : true
+ }).done(function(data){
+ addFolders.call(self, fm, node, data.folders);
+ }).always(function() {
+ fm.abortXHR(xhr, { quiet: true });
+ spn.remove();
+ }).xhr;
+ }
+ }
+ });
+ bro.after($('<div/>').append(select))
+ .closest('.ui-dialog').trigger('tabstopsInit');
+ select.trigger('focus');
+ }
+ },
+ spinner = function() {
+ return $('<div class="elfinder-netmount-spinner"/>').append('<span class="elfinder-spinner"/>');
+ },
+ xhr;
+ return {
+ vars : {},
+ name : name,
+ inputs: {
+ offline : $('<input type="checkbox"/>').on('change', function() {
+ $(this).parents('table.elfinder-netmount-tb').find('select:first').trigger('change', 'reset');
+ }),
+ host : $('<span><span class="elfinder-spinner"/></span><input type="hidden"/>'),
+ path : $('<input type="text" value="'+opts.root+'"/>'),
+ user : $('<input type="hidden"/>'),
+ pass : $('<input type="hidden"/>')
+ },
+ select: function(fm, ev, d){
+ var f = this.inputs,
+ oline = f.offline,
+ f0 = $(f.host[0]),
+ data = d || null;
+ this.vars.mbtn = f.host.closest('.ui-dialog').children('.ui-dialog-buttonpane:first').find('button.elfinder-btncnt-0');
+ if (! f0.data('inrequest')
+ && (f0.find('span.elfinder-spinner').length
+ || data === 'reset'
+ || (data === 'winfocus' && ! f0.siblings('span.elfinder-button-icon-reload').length))
+ )
+ {
+ if (oline.parent().children().length === 1) {
+ f.path.parent().prev().html(fm.i18n(opts.pathI18n));
+ oline.attr('title', fm.i18n('offlineAccess'));
+ oline.uniqueId().after($('<label/>').attr('for', oline.attr('id')).html(' '+fm.i18n('offlineAccess')));
+ }
+ f0.data('inrequest', true).empty().addClass('elfinder-spinner')
+ .parent().find('span.elfinder-button-icon').remove();
+ fm.request({
+ data : {cmd : 'netmount', protocol: protocol, host: host, user: 'init', options: {id: fm.id, offline: oline.prop('checked')? 1:0, pass: f.host[1].value}},
+ preventDefault : true
+ }).done(function(data){
+ f0.removeClass("elfinder-spinner").html(data.body.replace(/\{msg:([^}]+)\}/g, function(whole,s1){return fm.i18n(s1, host);}));
+ });
+ opts.noOffline && oline.closest('tr').hide();
+ } else {
+ oline.closest('tr')[(opts.noOffline || f.user.val())? 'hide':'show']();
+ f0.data('funcexpup') && f0.data('funcexpup')();
+ }
+ this.vars.mbtn[$(f.host[1]).val()? 'show':'hide']();
+ },
+ done: function(fm, data){
+ var f = this.inputs,
+ p = this.protocol,
+ f0 = $(f.host[0]),
+ f1 = $(f.host[1]),
+ expires = ' ';
+
+ opts.noOffline && f.offline.closest('tr').hide();
+ if (data.mode == 'makebtn') {
+ f0.removeClass('elfinder-spinner').removeData('expires').removeData('funcexpup');
+ f.host.find('input').on('mouseenter mouseleave', function(){$(this).toggleClass('ui-state-hover');});
+ f1.val('');
+ f.path.val(opts.root).next().remove();
+ f.user.val('');
+ f.pass.val('');
+ ! opts.noOffline && f.offline.closest('tr').show();
+ this.vars.mbtn.hide();
+ } else if (data.mode == 'folders') {
+ if (data.folders) {
+ addFolders.call(this, fm, f.path.nextAll(':last'), data.folders);
+ }
+ } else {
+ if (data.expires) {
+ expires = '()';
+ f0.data('expires', data.expires);
+ }
+ f0.html(host + expires).removeClass('elfinder-spinner');
+ if (data.expires) {
+ f0.data('funcexpup', function() {
+ var rem = Math.floor((f0.data('expires') - (+new Date()) / 1000) / 60);
+ if (rem < 3) {
+ f0.parent().children('.elfinder-button-icon-reload').click();
+ } else {
+ f0.text(f0.text().replace(/\(.*\)/, '('+fm.i18n(['minsLeft', rem])+')'));
+ setTimeout(function() {
+ if (f0.is(':visible')) {
+ f0.data('funcexpup')();
+ }
+ }, 60000);
+ }
+ });
+ f0.data('funcexpup')();
+ }
+ if (data.reset) {
+ p.trigger('change', 'reset');
+ return;
+ }
+ f0.parent().append($('<span class="elfinder-button-icon elfinder-button-icon-reload" title="'+fm.i18n('reAuth')+'">')
+ .on('click', function() {
+ f1.val('reauth');
+ p.trigger('change', 'reset');
+ }));
+ f1.val(protocol);
+ this.vars.mbtn.show();
+ if (data.folders) {
+ addFolders.call(this, fm, f.path, data.folders);
+ }
+ f.user.val('done');
+ f.pass.val('done');
+ f.offline.closest('tr').hide();
+ }
+ f0.removeData('inrequest');
+ },
+ fail: function(fm, err){
+ $(this.inputs.host[0]).removeData('inrequest');
+ this.protocol.trigger('change', 'reset');
+ },
+ integrateInfo: opts.integrate
+ };
+ },
+
+ /**
+ * Find cwd's nodes from files
+ *
+ * @param Array files
+ * @param Object opts {firstOnly: true|false}
+ */
+ findCwdNodes : function(files, opts) {
+ var self = this,
+ cwd = this.getUI('cwd'),
+ cwdHash = this.cwd().hash,
+ newItem = $();
+
+ opts = opts || {};
+
+ $.each(files, function(i, f) {
+ if (f.phash === cwdHash || self.searchStatus.state > 1) {
+ newItem = newItem.add(self.cwdHash2Elm(f.hash));
+ if (opts.firstOnly) {
+ return false;
+ }
+ }
+ });
+
+ return newItem;
+ },
+
+ /**
+ * Convert from relative URL to abstract URL based on current URL
+ *
+ * @param String URL
+ * @return String
+ */
+ convAbsUrl : function(url) {
+ if (url.match(/^http/i)) {
+ return url;
+ }
+ if (url.substr(0,2) === '//') {
+ return window.location.protocol + url;
+ }
+ var root = window.location.protocol + '//' + window.location.host,
+ reg = /[^\/]+\/\.\.\//,
+ ret;
+ if (url.substr(0, 1) === '/') {
+ ret = root + url;
+ } else {
+ ret = root + window.location.pathname.replace(/\/[^\/]+$/, '/') + url;
+ }
+ ret = ret.replace('/./', '/');
+ while(reg.test(ret)) {
+ ret = ret.replace(reg, '');
+ }
+ return ret;
+ },
+
+ /**
+ * Is same origin to current site
+ *
+ * @param String check url
+ * @return Boolean
+ */
+ isSameOrigin : function (checkUrl) {
+ var url;
+ checkUrl = this.convAbsUrl(checkUrl);
+ if (location.origin && window.URL) {
+ try {
+ url = new URL(checkUrl);
+ return location.origin === url.origin;
+ } catch(e) {}
+ }
+ url = document.createElement('a');
+ url.href = checkUrl;
+ return location.protocol === url.protocol && location.host === url.host && location.port && url.port;
+ },
+
+ navHash2Id : function(hash) {
+ return this.navPrefix + hash;
+ },
+
+ navId2Hash : function(id) {
+ return typeof(id) == 'string' ? id.substr(this.navPrefix.length) : false;
+ },
+
+ cwdHash2Id : function(hash) {
+ return this.cwdPrefix + hash;
+ },
+
+ cwdId2Hash : function(id) {
+ return typeof(id) == 'string' ? id.substr(this.cwdPrefix.length) : false;
+ },
+
+ /**
+ * navHash to jQuery element object
+ *
+ * @param String hash nav hash
+ * @return Object jQuery element object
+ */
+ navHash2Elm : function(hash) {
+ return $(document.getElementById(this.navHash2Id(hash)));
+ },
+
+ /**
+ * cwdHash to jQuery element object
+ *
+ * @param String hash cwd hash
+ * @return Object jQuery element object
+ */
+ cwdHash2Elm : function(hash) {
+ return $(document.getElementById(this.cwdHash2Id(hash)));
+ },
+
+ isInWindow : function(elem, nochkHide) {
+ var elm, rect;
+ if (! (elm = elem.get(0))) {
+ return false;
+ }
+ if (! nochkHide && elm.offsetParent === null) {
+ return false;
+ }
+ rect = elm.getBoundingClientRect();
+ return document.elementFromPoint(rect.left, rect.top)? true : false;
+ },
+
+ /**
+ * calculate elFinder node z-index
+ *
+ * @return void
+ */
+ zIndexCalc : function() {
+ var self = this,
+ node = this.getUI(),
+ ni = node.css('z-index');
+ if (ni && ni !== 'auto' && ni !== 'inherit') {
+ self.zIndex = ni;
+ } else {
+ node.parents().each(function(i, n) {
+ var z = $(n).css('z-index');
+ if (z !== 'auto' && z !== 'inherit' && (z = parseInt(z))) {
+ self.zIndex = z;
+ return false;
+ }
+ });
+ }
+ },
+
+ /**
+ * Load JavaScript files
+ *
+ * @param Array urls to load JavaScript file URLs
+ * @param Function callback call back function on script loaded
+ * @param Object opts Additional options to $.ajax OR {loadType: 'tag'} to load by script tag
+ * @param Object check { obj: (Object)ParentObject, name: (String)"Attribute name", timeout: (Integer)milliseconds }
+ * @return elFinder
+ */
+ loadScript : function(urls, callback, opts, check) {
+ var defOpts = {
+ dataType : 'script',
+ cache : true
+ },
+ success, cnt, scripts = {}, results = {};
+
+ opts = opts || {};
+ if (opts.tryRequire && this.hasRequire) {
+ require(urls, callback, opts.error);
+ } else {
+ success = function() {
+ var cnt, fi, hasError;
+ $.each(results, function(i, status) {
+ if (status !== 'success' && status !== 'notmodified') {
+ hasError = true;
+ return false;
+ }
+ });
+ if (!hasError) {
+ if ($.isFunction(callback)) {
+ if (check) {
+ if (typeof check.obj[check.name] === 'undefined') {
+ cnt = check.timeout? (check.timeout / 10) : 1;
+ fi = setInterval(function() {
+ if (--cnt < 0 || typeof check.obj[check.name] !== 'undefined') {
+ clearInterval(fi);
+ callback();
+ }
+ }, 10);
+ } else {
+ callback();
+ }
+ } else {
+ callback();
+ }
+ }
+ } else {
+ if (opts.error && $.isFunction(opts.error)) {
+ opts.error({ loadResults: results });
+ }
+ }
+ };
+
+ if (opts.loadType === 'tag') {
+ $('head > script').each(function() {
+ scripts[this.src] = this;
+ });
+ cnt = urls.length;
+ $.each(urls, function(i, url) {
+ var done = false,
+ script;
+
+ if (scripts[url]) {
+ results[i] = scripts[url]._error || 'success';
+ (--cnt < 1) && success();
+ } else {
+ script = document.createElement('script');
+ script.charset = opts.charset || 'UTF-8';
+ $('head').append(script);
+ script.onload = script.onreadystatechange = function() {
+ if ( !done && (!this.readyState ||
+ this.readyState === 'loaded' || this.readyState === 'complete') ) {
+ done = true;
+ results[i] = 'success';
+ (--cnt < 1) && success();
+ }
+ };
+ script.onerror = function(err) {
+ results[i] = script._error = (err && err.type)? err.type : 'error';
+ (--cnt < 1) && success();
+ };
+ script.src = url;
+ }
+ });
+ } else {
+ opts = $.isPlainObject(opts)? Object.assign(defOpts, opts) : defOpts;
+ cnt = 0;
+ (function appendScript(d, status) {
+ if (d !== void(0)) {
+ results[cnt++] = status;
+ }
+ if (urls.length) {
+ $.ajax(Object.assign({}, opts, {
+ url: urls.shift(),
+ success: appendScript,
+ error: appendScript
+ }));
+ } else {
+ success();
+ }
+ })();
+ }
+ }
+ return this;
+ },
+
+ /**
+ * Load CSS files
+ *
+ * @param Array to load CSS file URLs
+ * @param Object options
+ * @return elFinder
+ */
+ loadCss : function(urls, opts) {
+ var self = this,
+ clName, dfds;
+ if (typeof urls === 'string') {
+ urls = [ urls ];
+ }
+ if (opts) {
+ if (opts.className) {
+ clName = opts.className;
+ }
+ if (opts.dfd && opts.dfd.promise) {
+ dfds = [];
+ }
+ }
+ $.each(urls, function(i, url) {
+ var link, df;
+ url = self.convAbsUrl(url).replace(/^https?:/i, '');
+ if (dfds) {
+ dfds[i] = $.Deferred();
+ }
+ if (! $("head > link[href='+url+']").length) {
+ link = document.createElement('link');
+ link.type = 'text/css';
+ link.rel = 'stylesheet';
+ link.href = url;
+ if (clName) {
+ link.className = clName;
+ }
+ if (dfds) {
+ link.onload = function() {
+ dfds[i].resolve();
+ };
+ link.onerror = function() {
+ dfds[i].reject();
+ };
+ }
+ $('head').append(link);
+ } else {
+ dfds && dfds[i].resolve();
+ }
+ });
+ if (dfds) {
+ $.when.apply(null, dfds).done(function() {
+ opts.dfd.resolve();
+ }).fail(function() {
+ opts.dfd.reject();
+ });
+ }
+ return this;
+ },
+
+ /**
+ * Abortable async job performer
+ *
+ * @param func Function
+ * @param arr Array
+ * @param opts Object
+ *
+ * @return Object $.Deferred that has an extended method _abort()
+ */
+ asyncJob : function(func, arr, opts) {
+ var dfrd = $.Deferred(),
+ abortFlg = false,
+ parms = Object.assign({
+ interval : 0,
+ numPerOnce : 1
+ }, opts || {}),
+ resArr = [],
+ vars =[],
+ curVars = [],
+ exec,
+ tm;
+
+ dfrd._abort = function(resolve) {
+ tm && clearTimeout(tm);
+ vars = [];
+ abortFlg = true;
+ if (dfrd.state() === 'pending') {
+ dfrd[resolve? 'resolve' : 'reject'](resArr);
+ }
+ };
+
+ dfrd.fail(function() {
+ dfrd._abort();
+ }).always(function() {
+ dfrd._abort = function() {};
+ });
+
+ if (typeof func === 'function' && Array.isArray(arr)) {
+ vars = arr.concat();
+ exec = function() {
+ var i, len, res;
+ if (abortFlg) {
+ return;
+ }
+ curVars = vars.splice(0, parms.numPerOnce);
+ len = curVars.length;
+ for (i = 0; i < len; i++) {
+ if (abortFlg) {
+ break;
+ }
+ res = func(curVars[i]);
+ (res !== null) && resArr.push(res);
+ }
+ if (abortFlg) {
+ return;
+ }
+ if (vars.length) {
+ tm = setTimeout(exec, parms.interval);
+ } else {
+ dfrd.resolve(resArr);
+ }
+ };
+ if (vars.length) {
+ tm = setTimeout(exec, 0);
+ } else {
+ dfrd.resolve(resArr);
+ }
+ } else {
+ dfrd.reject();
+ }
+ return dfrd;
+ },
+
+ getSize : function(targets) {
+ var self = this,
+ reqs = [],
+ tgtlen = targets.length,
+ dfrd = $.Deferred().fail(function() {
+ $.each(reqs, function(i, req) {
+ if (req) {
+ req.syncOnFail && req.syncOnFail(false);
+ req.reject();
+ }
+ });
+ }),
+ getLeafRoots = function(file) {
+ var targets = [];
+ if (file.mime === 'directory') {
+ $.each(self.leafRoots, function(hash, roots) {
+ var phash;
+ if (hash === file.hash) {
+ targets.push.apply(targets, roots);
+ } else {
+ phash = (self.file(hash) || {}).phash;
+ while(phash) {
+ if (phash === file.hash) {
+ targets.push.apply(targets, roots);
+ }
+ phash = (self.file(phash) || {}).phash;
+ }
+ }
+ });
+ }
+ return targets;
+ },
+ checkPhash = function(hash) {
+ var dfd = $.Deferred(),
+ dir = self.file(hash),
+ target = dir? dir.phash : hash;
+ if (target && ! self.file(target)) {
+ self.request({
+ data : {
+ cmd : 'parents',
+ target : target
+ },
+ preventFail : true
+ }).done(function() {
+ self.one('parentsdone', function() {
+ dfd.resolve();
+ });
+ }).fail(function() {
+ dfd.resolve();
+ });
+ } else {
+ dfd.resolve();
+ }
+ return dfd;
+ },
+ cache = function() {
+ var dfd = $.Deferred(),
+ cnt = Object.keys(self.leafRoots).length;
+
+ if (cnt > 0) {
+ $.each(self.leafRoots, function(hash) {
+ checkPhash(hash).done(function() {
+ --cnt;
+ if (cnt < 1) {
+ dfd.resolve();
+ }
+ });
+ });
+ } else {
+ dfd.resolve();
+ }
+ return dfd;
+ };
+
+ self.autoSync('stop');
+ cache().done(function() {
+ var files = [], grps = {}, dfds = [], cache = [], singles = {};
+
+ $.each(targets, function() {
+ files.push.apply(files, getLeafRoots(self.file(this)));
+ });
+ targets.push.apply(targets, files);
+
+ $.each(targets, function() {
+ var root = self.root(this),
+ file = self.file(this);
+ if (file && (file.sizeInfo || file.mime !== 'directory')) {
+ cache.push($.Deferred().resolve(file.sizeInfo? file.sizeInfo : {size: file.size, dirCnt: 0, fileCnt : 1}));
+ } else {
+ if (! grps[root]) {
+ grps[root] = [ this ];
+ } else {
+ grps[root].push(this);
+ }
+ }
+ });
+
+ $.each(grps, function() {
+ var idx = dfds.length;
+ if (this.length === 1) {
+ singles[idx] = this[0];
+ }
+ dfds.push(self.request({
+ data : {cmd : 'size', targets : this},
+ preventDefault : true
+ }));
+ });
+ reqs.push.apply(reqs, dfds);
+ dfds.push.apply(dfds, cache);
+
+ $.when.apply($, dfds).fail(function() {
+ dfrd.reject();
+ }).done(function() {
+ var cache = function(h, data) {
+ var file;
+ if (file = self.file(h)) {
+ file.sizeInfo = { isCache: true };
+ $.each(['size', 'dirCnt', 'fileCnt'], function() {
+ file.sizeInfo[this] = data[this] || 0;
+ });
+ file.size = parseInt(file.sizeInfo.size);
+ changed.push(file);
+ }
+ },
+ size = 0,
+ fileCnt = 0,
+ dirCnt = 0,
+ argLen = arguments.length,
+ cnts = [],
+ cntsTxt = '',
+ changed = [],
+ i, file, data;
+
+ for (i = 0; i < argLen; i++) {
+ data = arguments[i];
+ file = null;
+ if (!data.isCache) {
+ if (singles[i] && (file = self.file(singles[i]))) {
+ cache(singles[i], data);
+ } else if (data.sizes && $.isPlainObject(data.sizes)) {
+ $.each(data.sizes, function(h, sizeInfo) {
+ cache(h, sizeInfo);
+ });
+ }
+ }
+ size += parseInt(data.size);
+ if (fileCnt !== false) {
+ if (typeof data.fileCnt === 'undefined') {
+ fileCnt = false;
+ }
+ fileCnt += parseInt(data.fileCnt || 0);
+ }
+ if (dirCnt !== false) {
+ if (typeof data.dirCnt === 'undefined') {
+ dirCnt = false;
+ }
+ dirCnt += parseInt(data.dirCnt || 0);
+ }
+ }
+ changed.length && self.change({changed: changed});
+
+ if (dirCnt !== false){
+ cnts.push(self.i18n('folders') + ': ' + (dirCnt - (tgtlen > 1? 0 : 1)));
+ }
+ if (fileCnt !== false){
+ cnts.push(self.i18n('files') + ': ' + fileCnt);
+ }
+ if (cnts.length) {
+ cntsTxt = '<br>' + cnts.join(', ');
+ }
+ dfrd.resolve({
+ size: size,
+ fileCnt: fileCnt,
+ dirCnt: dirCnt,
+ formated: (size >= 0 ? self.formatSize(size) : self.i18n('unknown')) + cntsTxt
+ });
+ });
+
+ self.autoSync();
+ });
+
+ return dfrd;
+ },
+
+ /**
+ * Gets the theme object by settings of options.themes
+ *
+ * @param String themeid The themeid
+ * @return Object jQuery.Deferred
+ */
+ getTheme : function(themeid) {
+ var self = this,
+ dfd = $.Deferred(),
+ absUrl = function(url, base) {
+ if (!base) {
+ base = self.convAbsUrl(self.baseUrl);
+ }
+ if (Array.isArray(url)) {
+ return $.map(url, function(v) {
+ return absUrl(v, base);
+ });
+ } else {
+ return url.match(/^(?:http|\/\/)/i)? url : base + url.replace(/^(?:\.\/|\/)/, '');
+ }
+ },
+ themeObj, m;
+ if (themeid && (themeObj = self.options.themes[themeid])) {
+ if (typeof themeObj === 'string') {
+ url = absUrl(themeObj);
+ if (m = url.match(/^(.+\/)[^/]+\.json$/i)) {
+ $.getJSON(url).done(function(data) {
+ themeObj = data;
+ themeObj.id = themeid;
+ if (themeObj.cssurls) {
+ themeObj.cssurls = absUrl(themeObj.cssurls, m[1]);
+ }
+ dfd.resolve(themeObj);
+ }).fail(function() {
+ dfd.reject();
+ });
+ } else {
+ dfd.resolve({
+ id: themeid,
+ name: themeid,
+ cssurls: [url]
+ });
+ }
+ } else if ($.isPlainObject(themeObj) && themeObj.cssurls) {
+ themeObj.id = themeid;
+ themeObj.cssurls = absUrl(themeObj.cssurls);
+ if (!Array.isArray(themeObj.cssurls)) {
+ themeObj.cssurls = [themeObj.cssurls];
+ }
+ if (!themeObj.name) {
+ themeObj.name = themeid;
+ }
+ dfd.resolve(themeObj);
+ } else {
+ dfd.reject();
+ }
+ } else {
+ dfd.reject();
+ }
+ return dfd;
+ },
+
+ /**
+ * Change current theme
+ *
+ * @param String themeid The themeid
+ * @return Object this elFinder instance
+ */
+ changeTheme : function(themeid) {
+ var self = this;
+ if (themeid) {
+ if (self.options.themes[themeid] && (!self.theme || self.theme.id !== themeid)) {
+ self.getTheme(themeid).done(function(themeObj) {
+ if (themeObj.cssurls) {
+ $('head>link.elfinder-theme-ext').remove();
+ self.loadCss(themeObj.cssurls, {
+ className: 'elfinder-theme-ext',
+ dfd: $.Deferred().done(function() {
+ self.theme = themeObj;
+ self.trigger && self.trigger('themechange');
+ })
+ });
+ }
+ });
+ } else if (themeid === 'default' && self.theme) {
+ $('head>link.elfinder-theme-ext').remove();
+ self.theme = null;
+ self.trigger && self.trigger('themechange');
+ }
+ }
+ return this;
+ },
+
+ /**
+ * Apply leaf root stats to target directory
+ *
+ * @param object dir object of target directory
+ * @param boolean update is force update
+ *
+ * @return boolean dir object was chenged
+ */
+ applyLeafRootStats : function(dir, update) {
+ var self = this,
+ prev = update? dir : (self.file(dir.hash) || dir),
+ prevTs = prev.ts,
+ change = false;
+ // backup original stats
+ if (update || !dir._realStats) {
+ dir._realStats = {
+ locked: dir.locked || 0,
+ dirs: dir.dirs || 0,
+ ts: dir.ts
+ };
+ }
+ // set lock
+ dir.locked = 1;
+ if (!prev.locked) {
+ change = true;
+ }
+ // has leaf root to `dirs: 1`
+ dir.dirs = 1;
+ if (!prev.dirs) {
+ change = true;
+ }
+ // set ts
+ $.each(self.leafRoots[dir.hash], function() {
+ var f = self.file(this);
+ if (f && f.ts && (dir.ts || 0) < f.ts) {
+ dir.ts = f.ts;
+ }
+ });
+ if (prevTs !== dir.ts) {
+ change = true;
+ }
+
+ return change;
+ },
+
+ /**
+ * To aborted XHR object
+ *
+ * @param Object xhr
+ * @param Object opts
+ *
+ * @return void
+ */
+ abortXHR : function(xhr, o) {
+ var opts = o || {};
+
+ if (xhr) {
+ opts.quiet && (xhr.quiet = true);
+ if (opts.abort && xhr._requestId) {
+ this.request({
+ data: {
+ cmd: 'abort',
+ id: xhr._requestId
+ },
+ preventDefault: true
+ });
+ }
+ xhr.abort();
+ xhr = void 0;
+ }
+ },
+
+ /**
+ * Gets the request identifier
+ *
+ * @return String The request identifier.
+ */
+ getRequestId : function() {
+ return (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16);
+ },
+
+ /**
+ * Flip key and value of array or object
+ *
+ * @param Array | Object { a: 1, b: 1, c: 2 }
+ * @param Mixed Static value
+ * @return Object { 1: "b", 2: "c" }
+ */
+ arrayFlip : function (trans, val) {
+ var key,
+ tmpArr = {},
+ isArr = $.isArray(trans);
+ for (key in trans) {
+ if (isArr || trans.hasOwnProperty(key)) {
+ tmpArr[trans[key]] = val || key;
+ }
+ }
+ return tmpArr;
+ },
+
+ /**
+ * Return array ["name without extention", "extention"]
+ *
+ * @param String name
+ *
+ * @return Array
+ *
+ */
+ splitFileExtention : function(name) {
+ var m;
+ if (m = name.match(/^(.+?)?\.((?:tar\.(?:gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(?:gz|bz2)|[a-z0-9]{1,10})$/i)) {
+ if (typeof m[1] === 'undefined') {
+ m[1] = '';
+ }
+ return [m[1], m[2]];
+ } else {
+ return [name, ''];
+ }
+ },
+
+ /**
+ * Slice the ArrayBuffer by sliceSize
+ *
+ * @param arraybuffer arrayBuffer The array buffer
+ * @param Number sliceSize The slice size
+ * @return Array Array of sleced arraybuffer
+ */
+ sliceArrayBuffer : function(arrayBuffer, sliceSize) {
+ var segments= [],
+ fi = 0;
+ while(fi * sliceSize < arrayBuffer.byteLength){
+ segments.push(arrayBuffer.slice(fi * sliceSize, (fi + 1) * sliceSize));
+ fi++;
+ }
+ return segments;
+ },
+
+ arrayBufferToBase64 : function(ab) {
+ if (!window.btoa) {
+ return '';
+ }
+ var dView = new Uint8Array(ab), // Get a byte view
+ arr = Array.prototype.slice.call(dView), // Create a normal array
+ arr1 = arr.map(function(item) {
+ return String.fromCharCode(item); // Convert
+ });
+ return window.btoa(arr1.join('')); // Form a string
+ },
+
+ log : function(m) { window.console && window.console.log && window.console.log(m); return this; },
+
+ debug : function(type, m) {
+ var d = this.options.debug;
+
+ if (d && (d === 'all' || d[type])) {
+ window.console && window.console.log && window.console.log('elfinder debug: ['+type+'] ['+this.id+']', m);
+ }
+
+ if (type === 'backend-error') {
+ if (! this.cwd().hash || (d && (d === 'all' || d['backend-error']))) {
+ m = Array.isArray(m)? m : [ m ];
+ this.error(m);
+ }
+ } else if (type === 'backend-debug') {
+ this.trigger('backenddebug', m);
+ }
+
+ return this;
+ },
+ time : function(l) { window.console && window.console.time && window.console.time(l); },
+ timeEnd : function(l) { window.console && window.console.timeEnd && window.console.timeEnd(l); }
+
+
+};
+
+/**
+ * for conpat ex. ie8...
+ *
+ * Object.keys() - JavaScript | MDN
+ * https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
+ */
+if (!Object.keys) {
+ Object.keys = (function () {
+ var hasOwnProperty = Object.prototype.hasOwnProperty,
+ hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
+ dontEnums = [
+ 'toString',
+ 'toLocaleString',
+ 'valueOf',
+ 'hasOwnProperty',
+ 'isPrototypeOf',
+ 'propertyIsEnumerable',
+ 'constructor'
+ ],
+ dontEnumsLength = dontEnums.length;
+
+ return function (obj) {
+ if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
+
+ var result = [];
+
+ for (var prop in obj) {
+ if (hasOwnProperty.call(obj, prop)) result.push(prop);
+ }
+
+ if (hasDontEnumBug) {
+ for (var i=0; i < dontEnumsLength; i++) {
+ if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
+ }
+ }
+ return result;
+ };
+ })();
+}
+// Array.isArray
+if (!Array.isArray) {
+ Array.isArray = function(arr) {
+ return jQuery.isArray(arr);
+ };
+}
+// Object.assign
+if (!Object.assign) {
+ Object.assign = function() {
+ return jQuery.extend.apply(null, arguments);
+ };
+}
+// String.repeat
+if (!String.prototype.repeat) {
+ String.prototype.repeat = function(count) {
+ 'use strict';
+ if (this == null) {
+ throw new TypeError('can\'t convert ' + this + ' to object');
+ }
+ var str = '' + this;
+ count = +count;
+ if (count != count) {
+ count = 0;
+ }
+ if (count < 0) {
+ throw new RangeError('repeat count must be non-negative');
+ }
+ if (count == Infinity) {
+ throw new RangeError('repeat count must be less than infinity');
+ }
+ count = Math.floor(count);
+ if (str.length == 0 || count == 0) {
+ return '';
+ }
+ // Ensuring count is a 31-bit integer allows us to heavily optimize the
+ // main part. But anyway, most current (August 2014) browsers can't handle
+ // strings 1 << 28 chars or longer, so:
+ if (str.length * count >= 1 << 28) {
+ throw new RangeError('repeat count must not overflow maximum string size');
+ }
+ var rpt = '';
+ for (var i = 0; i < count; i++) {
+ rpt += str;
+ }
+ return rpt;
+ };
+}
+// String.trim
+if (!String.prototype.trim) {
+ String.prototype.trim = function() {
+ return this.replace(/^\s+|\s+$/g, '');
+ };
+}
+// Array.apply
+(function () {
+ try {
+ Array.apply(null, {});
+ return;
+ } catch (e) { }
+
+ var toString = Object.prototype.toString,
+ arrayType = '[object Array]',
+ _apply = Function.prototype.apply,
+ slice = /*@cc_on @if (@_jscript_version <= 5.8)
+ function () {
+ var a = [], i = this.length;
+ while (i-- > 0) a[i] = this[i];
+ return a;
+ }@else@*/Array.prototype.slice/*@end@*/;
+
+ Function.prototype.apply = function apply(thisArg, argArray) {
+ return _apply.call(this, thisArg,
+ toString.call(argArray) === arrayType ? argArray : slice.call(argArray));
+ };
+})();
+// Array.from
+if (!Array.from) {
+ Array.from = function(obj) {
+ return obj.length === 1 ? [obj[0]] : Array.apply(null, obj);
+ };
+}
+// window.requestAnimationFrame and window.cancelAnimationFrame
+if (!window.cancelAnimationFrame) {
+// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
+// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
+// MIT license
+(function() {
+ var lastTime = 0;
+ var vendors = ['ms', 'moz', 'webkit', 'o'];
+ for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
+ window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
+ window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']
+ || window[vendors[x]+'CancelRequestAnimationFrame'];
+ }
+
+ if (!window.requestAnimationFrame)
+ window.requestAnimationFrame = function(callback, element) {
+ var currTime = new Date().getTime();
+ var timeToCall = Math.max(0, 16 - (currTime - lastTime));
+ var id = window.setTimeout(function() { callback(currTime + timeToCall); },
+ timeToCall);
+ lastTime = currTime + timeToCall;
+ return id;
+ };
+
+ if (!window.cancelAnimationFrame)
+ window.cancelAnimationFrame = function(id) {
+ clearTimeout(id);
+ };
+}());
+}
+
+
+/*
+ * File: /js/elFinder.version.js
+ */
+
+/**
+ * Application version
+ *
+ * @type String
+ **/
+elFinder.prototype.version = '2.1.46';
+
+
+
+/*
+ * File: /js/jquery.elfinder.js
+ */
+
+/*** jQuery UI droppable performance tune for elFinder ***/
+(function(){
+if ($.ui) {
+ if ($.ui.ddmanager) {
+ var origin = $.ui.ddmanager.prepareOffsets;
+ $.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 = $.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.js
+ *
+ * @description. jQuery ajax transport for making binary data type requests.
+ * @version 1.0
+ * @author Henry Algus <henryalgus@gmail.com>
+ *
+ */
+
+// use this transport for "binary" data type
+$.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 xhr;
+ return {
+ // create new XMLHttpRequest
+ send: function(headers, callback){
+ // setup all variables
+ xhr = new XMLHttpRequest();
+ var url = options.url,
+ type = options.type,
+ async = options.async || true,
+ // blob or arraybuffer. Default is blob
+ dataType = options.responseType || 'blob',
+ data = options.data || null,
+ username = options.username,
+ password = options.password;
+
+ xhr.addEventListener('load', function(){
+ var data = {};
+ data[options.dataType] = xhr.response;
+ // make callback and send data
+ callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders());
+ });
+
+ xhr.open(type, url, async, username, password);
+
+ // setup custom headers
+ for (var i in headers ) {
+ xhr.setRequestHeader(i, headers[i] );
+ }
+
+ // setuo xhrFields
+ if (options.xhrFields) {
+ for (var key in options.xhrFields) {
+ if (key in xhr) {
+ xhr[key] = options.xhrFields[key];
+ }
+ }
+ }
+
+ xhr.responseType = dataType;
+ xhr.send(data);
+ },
+ abort: function(){
+ xhr.abort();
+ }
+ };
+ }
+});
+
+/*!
+ * 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
+ $.support.touch = 'ontouchend' in document;
+
+ // Ignore browsers without touch support
+ if (!$.support.touch) {
+ return;
+ }
+
+ var mouseProto = $.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 (! $(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 $.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: $.proxy(self, '_touchStart'),
+ touchmove: $.proxy(self, '_touchMove'),
+ touchend: $.proxy(self, '_touchEnd')
+ });
+ }
+
+ // Call the original $.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: $.proxy(self, '_touchStart'),
+ touchmove: $.proxy(self, '_touchMove'),
+ touchend: $.proxy(self, '_touchEnd')
+ });
+ }
+
+ // Call the original $.ui.mouse destroy method
+ _mouseDestroy.call(self);
+ };
+
+})(jQuery);
+
+$.fn.elfinder = function(o, o2) {
+
+ if (o === 'instance') {
+ return this.getElFinder();
+ }
+
+ return this.each(function() {
+
+ var cmd = typeof o === 'string' ? o : '',
+ bootCallback = typeof o2 === 'function'? o2 : void(0),
+ opts;
+
+ if (!this.elfinder) {
+ if ($.isPlainObject(o)) {
+ new elFinder(this, o, bootCallback);
+ }
+ } else {
+ switch(cmd) {
+ case 'close':
+ case 'hide':
+ this.elfinder.hide();
+ break;
+
+ case 'open':
+ case 'show':
+ this.elfinder.show();
+ break;
+
+ case 'destroy':
+ this.elfinder.destroy();
+ break;
+
+ case 'reload':
+ case 'restart':
+ if (this.elfinder) {
+ opts = this.elfinder.options;
+ bootCallback = this.elfinder.bootCallback;
+ this.elfinder.destroy();
+ new elFinder(this, $.extend(true, opts, $.isPlainObject(o2)? o2 : {}), bootCallback);
+ }
+ break;
+ }
+ }
+ });
+};
+
+$.fn.getElFinder = function() {
+ var instance;
+
+ this.each(function() {
+ if (this.elfinder) {
+ instance = this.elfinder;
+ return false;
+ }
+ });
+
+ return instance;
+};
+
+$.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 (! $.fn.scrollRight) {
+ $.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 (! $.fn.scrollBottom) {
+ $.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);
+ }
+ });
+}
+
+
+/*
+ * File: /js/elFinder.mimetypes.js
+ */
+
+elFinder.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","application\/plt":"plt","application\/sat":"sat","application\/step":"step","text\/x-httpd-cgi":"cgi","text\/x-asap":"asp","text\/x-jsp":"jsp"};
+
+/*
+ * File: /js/elFinder.options.js
+ */
+
+/**
+ * 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.1',
+ codemirror : 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.40.2',
+ ckeditor : 'https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.10.0',
+ ckeditor5 : 'https://cdn.ckeditor.com/ckeditor5/11.1.1',
+ tinymce : 'https://cdnjs.cloudflare.com/ajax/libs/tinymce/4.8.3',
+ simplemde : 'https://cdnjs.cloudflare.com/ajax/libs/simplemde/1.11.2',
+ 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/0.10.1/hls.min.js',
+ dash : 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.9.1/dash.all.min.js',
+ flv : 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.4.2/flv.min.js',
+ prettify : 'https://cdn.jsdelivr.net/gh/google/code-prettify@453bd5f51e61245339b738b1bbdd42d7848722ba/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',
+ marked : 'https://cdnjs.cloudflare.com/ajax/libs/marked/0.5.1/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/2.3.1/sha.js',
+ amr : 'https://cdn.jsdelivr.net/gh/yxl/opencore-amr-js@dcf3d2b5f384a1d9ded2a54e4c137a81747b222b/js/amrnb.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,
+
+ /**
+ * 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 $.Deferred() object
+ *
+ * @type Object
+ * @default null
+ * @example
+ * transport : {
+ * init : function(elfinderInstance) { },
+ * send : function(options) {
+ * var dfrd = $.Deferred();
+ * // connect to backend ...
+ * return dfrd;
+ * },
+ * upload : function(data) {
+ * var dfrd = $.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 : '',
+
+ /**
+ * 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 <embed> tag)
+ pdfToolbar : true,
+ // Maximum characters length to preview
+ textMaxlen : 2000,
+ // 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']
+ },
+ // 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 (byte) threshold when using the dim command for obtain the image size necessary to image preview
+ getDimThreshold : 200000,
+ // MIME-Type regular expression that does not check empty files
+ mimeRegexNotEmptyCheck : /^application\/vnd\.google-apps\./
+ },
+ // "quicklook" command options.
+ edit : {
+ // dialog width, integer(px) or integer+'%' (example: 650, '80%' ...)
+ dialogWidth : void(0),
+ // list of allowed mimetypes to edit of text files
+ // if empty - any text files can be edited
+ mimes : [],
+ // MIME-types of text file to make as empty files
+ 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 : '<textarea></textarea>',
+ // /**
+ // * 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) {
+ // $(this).attr('id', id + '-text').val(content);
+ // },
+ // /**
+ // * Get edited contents (optional for text editor)
+ // * @type Function
+ // */
+ // getContent : function() {
+ // return $(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 : {
+ // 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: ''
+ },
+ // Specify the Creative Cloud API key when using Creative SDK image editor of Creative Cloud.
+ // You can get the API key at https://console.adobe.io/.
+ creativeCloudApiKey : '',
+ // Browsing manager URL for CKEditor, TinyMCE
+ // Uses self location with the empty value or not defined.
+ //managerUrl : 'elfinder.html'
+ managerUrl : null,
+ // CKEditor5' builds mode - 'classic', 'inline' or 'balloon'
+ ckeditor5Mode : 'balloon',
+ // Setting for Online-Convert.com
+ onlineConvert : {
+ maxSize : 100, // (MB) Max 100MB on free account
+ showLink : true // It must be enabled with free account
+ }
+ }
+ },
+ 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()
+ }
+ }
+ },
+ // "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'],
+ 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 : '<div class="elfinder-info-desc"><span class="elfinder-spinner"></span></div>',
+ //
+ // /**
+ // * 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
+ },
+ 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']
+ }
+ },
+
+ /**
+ * 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', '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'],
+ ['preference', 'help'],
+ ['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: true
+ },
+ // directories tree options
+ tree : {
+ // 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'],
+
+ // 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,
+
+ /**
+ * Base node object or selector
+ * Element which is the reference of the height percentage
+ *
+ * @type Object|String
+ * @default null | $(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},
+
+ /**
+ * 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
+ },
+
+ /**
+ * 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', '|', 'preference'],
+ // 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 <body> 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' && $.isFunction(Encoding.convert)? function(str) {
+ return Encoding.convert(str, {
+ to: 'UNICODE',
+ type: 'string'
+ });
+ } : null,
+
+ /**
+ * Debug config
+ *
+ * @type Array|String('auto')|Boolean(true|false)
+ */
+ // debug : true
+ debug : ['error', 'warning', 'event-destroy']
+};
+
+
+/*
+ * File: /js/elFinder.options.netmount.js
+ */
+
+/**
+ * Default elFinder config of commandsOptions.netmount
+ *
+ * @type Object
+ */
+
+elFinder.prototype._options.commandsOptions.netmount = {
+ ftp: {
+ name : 'FTP',
+ inputs: {
+ host : $('<input type="text"/>'),
+ port : $('<input type="number" placeholder="21" class="elfinder-input-optional"/>'),
+ path : $('<input type="text" value="/"/>'),
+ user : $('<input type="text"/>'),
+ pass : $('<input type="password" autocomplete="new-password"/>'),
+ FTPS : $('<input type="checkbox" value="1" title="File Transfer Protocol over SSL/TLS"/>'),
+ encoding : $('<input type="text" placeholder="Optional" class="elfinder-input-optional"/>'),
+ locale : $('<input type="text" placeholder="Optional" class="elfinder-input-optional"/>')
+ }
+ },
+ 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'
+ }
+ })
+};
+
+
+/*
+ * File: /js/elFinder.history.js
+ */
+
+/**
+ * @class elFinder.history
+ * Store visited folders
+ * and provide "back" and "forward" methods
+ *
+ * @author Dmitry (dio) Levashov
+ */
+elFinder.prototype.history = function(fm) {
+ 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 $.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);
+
+};
+
+
+/*
+ * File: /js/elFinder.command.js
+ */
+
+/**
+ * elFinder command prototype
+ *
+ * @type elFinder.command
+ * @author Dmitry (dio) Levashov
+ */
+elFinder.prototype.command = function(fm) {
+ /**
+ * elFinder instance
+ *
+ * @type elFinder
+ */
+ this.fm = fm;
+
+ /**
+ * Command name, same as class name
+ *
+ * @type String
+ */
+ this.name = '';
+
+ /**
+ * Dialog class name
+ *
+ * @type String
+ */
+ this.dialogClass = '';
+
+ /**
+ * Command icon class name with out 'elfinder-button-icon-'
+ * Use this.name if it is empty
+ *
+ * @type String
+ */
+ this.className = '';
+
+ /**
+ * Short command description
+ *
+ * @type String
+ */
+ this.title = '';
+
+ /**
+ * Linked(Child) commands name
+ * They are loaded together when tthis command is loaded.
+ *
+ * @type Array
+ */
+ this.linkedCmds = [];
+
+ /**
+ * Current command state
+ *
+ * @example
+ * this.state = -1; // command disabled
+ * this.state = 0; // command enabled
+ * this.state = 1; // command active (for example "fullscreen" command while elfinder in fullscreen mode)
+ * @default -1
+ * @type Number
+ */
+ this.state = -1;
+
+ /**
+ * If true, command can not be disabled by connector.
+ * @see this.update()
+ *
+ * @type Boolen
+ */
+ this.alwaysEnabled = false;
+
+ /**
+ * Do not change dirctory on removed current work directory
+ *
+ * @type Boolen
+ */
+ this.noChangeDirOnRemovedCwd = false;
+
+ /**
+ * If true, this means command was disabled by connector.
+ * @see this.update()
+ *
+ * @type Boolen
+ */
+ this._disabled = false;
+
+ /**
+ * If true, this command is disabled on serach results
+ *
+ * @type Boolean
+ */
+ this.disableOnSearch = false;
+
+ /**
+ * Call update() when event select fired
+ *
+ * @type Boolean
+ */
+ this.updateOnSelect = true;
+
+ /**
+ * Sync toolbar button title on change
+ *
+ * @type Boolean
+ */
+ this.syncTitleOnChange = false;
+
+ /**
+ * Keep display of the context menu when command execution
+ *
+ * @type Boolean
+ */
+ this.keepContextmenu = false;
+
+ /**
+ * elFinder events defaults handlers.
+ * Inside handlers "this" is current command object
+ *
+ * @type Object
+ */
+ this._handlers = {
+ enable : function() { this.update(void(0), this.value); },
+ disable : function() { this.update(-1, this.value); },
+ 'open reload load sync' : function() {
+ this._disabled = !(this.alwaysEnabled || this.fm.isCommandEnabled(this.name));
+ this.update(void(0), this.value);
+ this.change();
+ }
+ };
+
+ /**
+ * elFinder events handlers.
+ * Inside handlers "this" is current command object
+ *
+ * @type Object
+ */
+ this.handlers = {};
+
+ /**
+ * Shortcuts
+ *
+ * @type Array
+ */
+ this.shortcuts = [];
+
+ /**
+ * Command options
+ *
+ * @type Object
+ */
+ this.options = {ui : 'button'};
+
+ /**
+ * Callback functions on `change` event
+ *
+ * @type Array
+ */
+ this.listeners = [];
+
+ /**
+ * Prepare object -
+ * bind events and shortcuts
+ *
+ * @return void
+ */
+ this.setup = function(name, opts) {
+ var self = this,
+ fm = this.fm,
+ setCallback = function(s) {
+ var cb = s.callback || function(e) {
+ fm.exec(self.name, void(0), {
+ _userAction: true,
+ _currentType: 'shortcut'
+ });
+ };
+ s.callback = function(e) {
+ var enabled, checks = {};
+ if (self.enabled()) {
+ if (fm.searchStatus.state < 2) {
+ enabled = fm.isCommandEnabled(self.name);
+ } else {
+ $.each(fm.selected(), function(i, h) {
+ if (fm.optionsByHashes[h]) {
+ checks[h] = true;
+ } else {
+ $.each(fm.volOptions, function(id) {
+ if (!checks[id] && h.indexOf(id) === 0) {
+ checks[id] = true;
+ return false;
+ }
+ });
+ }
+ });
+ $.each(checks, function(h) {
+ enabled = fm.isCommandEnabled(self.name, h);
+ if (! enabled) {
+ return false;
+ }
+ });
+ }
+ if (enabled) {
+ self.event = e;
+ cb.call(self);
+ delete self.event;
+ }
+ }
+ };
+ },
+ i, s, sc;
+
+ this.name = name;
+ this.title = fm.messages['cmd'+name] ? fm.i18n('cmd'+name)
+ : ((this.extendsCmd && fm.messages['cmd'+this.extendsCmd]) ? fm.i18n('cmd'+this.extendsCmd) : name);
+ this.options = Object.assign({}, this.options, opts);
+ this.listeners = [];
+ this.dialogClass = 'elfinder-dialog-' + name;
+
+ if (opts.shortcuts) {
+ if (typeof opts.shortcuts === 'function') {
+ sc = opts.shortcuts(this.fm, this.shortcuts);
+ } else if (Array.isArray(opts.shortcuts)) {
+ sc = opts.shortcuts;
+ }
+ this.shortcuts = sc || [];
+ }
+
+ if (this.updateOnSelect) {
+ this._handlers.select = function() { this.update(void(0), this.value); };
+ }
+
+ $.each(Object.assign({}, self._handlers, self.handlers), function(cmd, handler) {
+ fm.bind(cmd, $.proxy(handler, self));
+ });
+
+ for (i = 0; i < this.shortcuts.length; i++) {
+ s = this.shortcuts[i];
+ setCallback(s);
+ !s.description && (s.description = this.title);
+ fm.shortcut(s);
+ }
+
+ if (this.disableOnSearch) {
+ fm.bind('search searchend', function() {
+ self._disabled = this.type === 'search'? true : ! (this.alwaysEnabled || fm.isCommandEnabled(name));
+ self.update(void(0), self.value);
+ });
+ }
+
+ this.init();
+ };
+
+ /**
+ * Command specific init stuffs
+ *
+ * @return void
+ */
+ this.init = function() {};
+
+ /**
+ * Exec command
+ *
+ * @param Array target files hashes
+ * @param Array|Object command value
+ * @return $.Deferred
+ */
+ this.exec = function(files, opts) {
+ return $.Deferred().reject();
+ };
+
+ this.getUndo = function(opts, resData) {
+ return false;
+ };
+
+ /**
+ * Return true if command disabled.
+ *
+ * @return Boolen
+ */
+ this.disabled = function() {
+ return this.state < 0;
+ };
+
+ /**
+ * Return true if command enabled.
+ *
+ * @return Boolen
+ */
+ this.enabled = function() {
+ return this.state > -1;
+ };
+
+ /**
+ * Return true if command active.
+ *
+ * @return Boolen
+ */
+ this.active = function() {
+ return this.state > 0;
+ };
+
+ /**
+ * Return current command state.
+ * Must be overloaded in most commands
+ *
+ * @return Number
+ */
+ this.getstate = function() {
+ return -1;
+ };
+
+ /**
+ * Update command state/value
+ * and rize 'change' event if smth changed
+ *
+ * @param Number new state or undefined to auto update state
+ * @param mixed new value
+ * @return void
+ */
+ this.update = function(s, v) {
+ var state = this.state,
+ value = this.value;
+
+ if (this._disabled && this.fm.searchStatus === 0) {
+ this.state = -1;
+ } else {
+ this.state = s !== void(0) ? s : this.getstate();
+ }
+
+ this.value = v;
+
+ if (state != this.state || value != this.value) {
+ this.change();
+ }
+ };
+
+ /**
+ * Bind handler / fire 'change' event.
+ *
+ * @param Function|undefined event callback
+ * @return void
+ */
+ this.change = function(c) {
+ var cmd, i;
+
+ if (typeof(c) === 'function') {
+ this.listeners.push(c);
+ } else {
+ for (i = 0; i < this.listeners.length; i++) {
+ cmd = this.listeners[i];
+ try {
+ cmd(this.state, this.value);
+ } catch (e) {
+ this.fm.debug('error', e);
+ }
+ }
+ }
+ return this;
+ };
+
+
+ /**
+ * With argument check given files hashes and return list of existed files hashes.
+ * Without argument return selected files hashes.
+ *
+ * @param Array|String|void hashes
+ * @return Array
+ */
+ this.hashes = function(hashes) {
+ return hashes
+ ? $.grep(Array.isArray(hashes) ? hashes : [hashes], function(hash) { return fm.file(hash) ? true : false; })
+ : fm.selected();
+ };
+
+ /**
+ * Return only existed files from given fils hashes | selected files
+ *
+ * @param Array|String|void hashes
+ * @return Array
+ */
+ this.files = function(hashes) {
+ var fm = this.fm;
+
+ return hashes
+ ? $.map(Array.isArray(hashes) ? hashes : [hashes], function(hash) { return fm.file(hash) || null; })
+ : fm.selectedFiles();
+ };
+
+ /**
+ * Wrapper to fm.dialog()
+ *
+ * @param String|DOMElement content
+ * @param Object options
+ * @return Object jQuery element object
+ */
+ this.fmDialog = function(content, options) {
+ if (options.cssClass) {
+ options.cssClass += ' ' + this.dialogClass;
+ } else {
+ options.cssClass = this.dialogClass;
+ }
+ return this.fm.dialog(content, options);
+ };
+};
+
+
+/*
+ * File: /js/elFinder.resources.js
+ */
+
+/**
+ * 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 : '<span class="elfinder-perms"/>',
+ lock : '<span class="elfinder-lock"/>',
+ symlink : '<span class="elfinder-symlink"/>',
+ navicon : '<span class="elfinder-nav-icon"/>',
+ navspinner : '<span class="elfinder-spinner elfinder-navbar-spinner"/>',
+ navdir : '<div class="elfinder-navbar-wrapper{root}"><span id="{id}" class="ui-corner-all elfinder-navbar-dir {cssclass}"><span class="elfinder-navbar-arrow"/><span class="elfinder-navbar-icon" {style}/>{symlink}{permissions}{name}</span><div class="elfinder-navbar-subtree" style="display:none"/></div>',
+ placedir : '<div class="elfinder-navbar-wrapper"><span id="{id}" class="ui-corner-all elfinder-navbar-dir {cssclass}" title="{title}"><span class="elfinder-navbar-arrow"/><span class="elfinder-navbar-icon" {style}/>{symlink}{permissions}{name}</span><div class="elfinder-navbar-subtree" style="display:none"/></div>'
+
+ },
+ // 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() {
+ 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);
+ }
+ 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 = $.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 = $(tarea? '<textarea/>' : '<input type="text"/>')
+ .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 == $.ui.keyCode.ESCAPE) {
+ dfrd.reject();
+ } else if (e.keyCode == $.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 = $.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;
+
+ $.when(cut)
+ .done(function() {
+ var toast = {},
+ nextAct = {};
+
+ rest();
+ input.hide().before($('<span>').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) && $.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] || $.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 ($.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 && $(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) {
+ 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();
+ }
+};
+
+
+/*
+ * File: /js/jquery.dialogelfinder.js
+ */
+
+/**
+ * @class dialogelfinder - open elFinder in dialog window
+ *
+ * @param Object elFinder options with dialog options
+ * @example
+ * $(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
+ **/
+$.fn.dialogelfinder = function(opts) {
+ var position = 'elfinderPosition',
+ destroy = 'elfinderDestroyOnClose',
+ node;
+
+ this.not('.elfinder').each(function() {
+
+
+ var doc = $(document),
+ toolbar = $('<div class="ui-widget-header dialogelfinder-drag ui-corner-top">'+(opts.title || 'Files')+'</div>'),
+ button = $('<a href="#" class="dialogelfinder-drag-close ui-corner-all"><span class="ui-icon ui-icon-closethick"> </span></a>')
+ .appendTo(toolbar)
+ .on('click', function(e) {
+ e.preventDefault();
+
+ node.dialogelfinder('close');
+ }),
+ node = $(this).addClass('dialogelfinder')
+ .css('position', 'absolute')
+ .hide()
+ .appendTo('body')
+ .draggable({
+ handle : '.dialogelfinder-drag',
+ containment : 'window',
+ stop : function() {
+ node.trigger('resize');
+ elfinder.trigger('resize');
+ }
+ })
+ .elfinder(opts)
+ .prepend(toolbar),
+ elfinder = node.elfinder('instance');
+
+
+ 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 && $(this).dialogelfinder('open');
+
+ });
+
+ if (opts == 'open') {
+ var node = $(this),
+ pos = node.data(position) || {
+ top : parseInt($(document).scrollTop() + ($(window).height() < node.height() ? 2 : ($(window).height() - node.height())/2)),
+ left : parseInt($(document).scrollLeft() + ($(window).width() < node.width() ? 2 : ($(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 = $(this).removeClass('ui-front');
+
+ if (node.is(':visible')) {
+ !!node.data(destroy)
+ ? node.elfinder('destroy').remove()
+ : node.elfinder('close');
+ }
+ } else if (opts == 'instance') {
+ return $(this).getElFinder();
+ }
+
+ return this;
+};
+
+
+/*
+ * File: /js/i18n/elfinder.en.js
+ */
+
+/**
+ * English translation
+ * @author Troex Nevelin <troex@fury.scancode.ru>
+ * @author Naoki Sawada <hypweb+elfinder@gmail.com>
+ * @version 2018-12-09
+ */
+// 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 : {
+
+ /********************************** 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',
+ '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?<br/>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<br/>Convert to UTF-8?<br/>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.<br/>Please select character encoding of this file.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'It has been modified.<br/>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
+ '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 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
+ '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
+ '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?<br/>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
+
+ /********************************** 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'
+ }
+ };
+}
+
+
+
+/*
+ * File: /js/ui/button.js
+ */
+
+/**
+ * @class elFinder toolbar button widget.
+ * If command has variants - create menu
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfinderbutton = function(cmd) {
+ 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 = $('<span class="elfinder-button-text">'+cmd.title+'</span>'),
+ prvCname = 'elfinder-button-icon-' + (cmd.className? cmd.className : cmd.name),
+ button = $(this).addClass('ui-state-default elfinder-button')
+ .attr('title', cmd.title)
+ .append('<span class="elfinder-button-icon ' + prvCname + '"/>', 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 = $('<div class="ui-front ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>')
+ .hide()
+ .appendTo(fm.getUI())
+ .on('mouseenter mouseleave', '.'+item, function() { $(this).toggleClass(hover); })
+ .on('click', '.'+item, function(e) {
+ var opts = $(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('');
+ $.each(cmd.variants, function(i, variant) {
+ menu.append($('<div class="'+item+'">'+variant[1]+'</div>').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 = 'elfinder-button-icon-' + (cmd.className? cmd.className : cmd.name);
+ if (prvCname !== cName) {
+ button.children('.elfinder-button-icon').removeClass(prvCname).addClass(cName);
+ prvCname = cName;
+ }
+ text.html(cmd.title);
+ button.attr('title', cmd.title);
+ }
+ });
+ })
+ .change();
+ });
+};
+
+
+/*
+ * File: /js/ui/contextmenu.js
+ */
+
+/**
+ * @class elFinder contextmenu
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfindercontextmenu = function(fm) {
+ return this.each(function() {
+ var self = $(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 = $(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) {
+ $(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) {
+ $(this).parent().toggleClass(cHover, e.type === 'mouseleave');
+ })
+ .on('mouseenter mouseleave', '.'+cmItem+',.'+smItem, function(e) {
+ var setIndex = function(target, sub) {
+ $.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 = $(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 = '<div class="'+cmItem+'{className}"><span class="elfinder-button-icon {icon} elfinder-contextmenu-icon"{style}/><span>{label}</span></div>',
+ 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 $(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 = $(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 = $.ui.keyCode.ESCAPE,
+ ENT = $.ui.keyCode.ENTER,
+ LEFT = $.ui.keyCode.LEFT,
+ RIGHT = $.ui.keyCode.RIGHT,
+ UP = $.ui.keyCode.UP,
+ DOWN = $.ui.keyCode.DOWN,
+ subent = fm.direction === 'ltr'? RIGHT : LEFT,
+ sublev = subent === RIGHT? LEFT : RIGHT;
+
+ if ($.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();
+ }
+ } 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) {
+ $('div.elfinder div.overflow-scrolling-touch').css('-webkit-overflow-scrolling', 'auto');
+ }
+
+ selected = null;
+ subnodes = null;
+ subselected = null;
+ $(document).on('keydown.' + fm.namespace, keyEvts);
+ evts = $._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);
+ $(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) {
+ $('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('<div class="ui-corner-top ui-widget-header elfinder-contextmenu-header"><span>'
+ + fm.i18n('selectedItems', ''+selcnt)
+ + '</span></div>');
+ }
+
+ nodes = $();
+ $.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] ? $.inArray(name, disabled) === -1 && (!useMap || !disabled[cmdName]) : false));
+ $.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 = $('<div class="ui-front ui-corner-all elfinder-contextmenu-sub"/>')
+ .hide()
+ .css('max-height', fm.getUI().height() - 30)
+ .appendTo(node.append('<span class="elfinder-contextmenu-arrow"/>'));
+
+ 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 = $(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 (!$(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));
+ }
+ }
+ }
+ });
+
+ $.each(cmd.variants, function(i, variant) {
+ var item = variant === '|' ? '<div class="elfinder-contextmenu-separator"/>' :
+ $('<div class="'+cmItem+' '+smItem+'"><span>'+variant[1]+'</span></div>').data('exec', variant[0]),
+ iconClass, icon;
+ if (typeof variant[2] !== 'undefined') {
+ icon = $('<span/>').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) {
+ $('<span class="elfinder-button-icon elfinder-button-icon-'+(cmd.extra.icon || '')+' '+exIcon+'"/>')
+ .append(cmd.extra.node).appendTo(node);
+ $(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('<div class="elfinder-contextmenu-separator"/>');
+ }
+ menu.append(node);
+ sep = true;
+ insSep = false;
+ }
+
+ if (cmd && typeof cmd.__disabled !== 'undefined') {
+ cmd._disabled = cmd.__disabled;
+ delete cmd.__disabled;
+ $.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';
+ $.each(raw, function(i, data) {
+ var node;
+
+ if (data === '|') {
+ menu.append('<div class="elfinder-contextmenu-separator"/>');
+ } 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(), $(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();
+ $(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
+ });
+ }
+ });
+
+ });
+
+};
+
+
+/*
+ * File: /js/ui/cwd.js
+ */
+
+/**
+ * elFinder current working directory ui.
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfindercwd = function(fm, options) {
+ 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 += '<td class="elfinder-col-'+customCols[i]+'">{' + customCols[i] + '}</td>';
+ }
+ return cols;
+ },
+
+ /**
+ * Make template.row from customCols
+ *
+ * @type Function
+ */
+ makeTemplateRow = function() {
+ return '<tr id="{id}" class="'+clFile+' {permsclass} {dirclass}" title="{tooltip}"{css}><td class="elfinder-col-name"><div class="elfinder-cwd-file-wrapper"><span class="elfinder-cwd-icon {mime}"{style}/>{marker}<span class="elfinder-cwd-filename">{name}</span></div>'+selectCheckbox+'</td>'+customColsBuild()+'</tr>';
+ },
+
+ selectCheckbox = ($.map(options.showSelectCheckboxUA, function(t) {return (fm.UA[t] || t.match(/^all$/i))? true : null;}).length)? '<div class="elfinder-cwd-select"><input type="checkbox" class="'+clSelChk+'"></div>' : '',
+
+ colResizing = false,
+
+ colWidth = null,
+
+ /**
+ * Table header height
+ */
+ thHeight,
+
+ /**
+ * File templates
+ *
+ * @type Object
+ **/
+ templates = {
+ icon : '<div id="{id}" class="'+clFile+' {permsclass} {dirclass} ui-corner-all" title="{tooltip}"><div class="elfinder-cwd-file-wrapper ui-corner-all"><div class="elfinder-cwd-icon {mime} ui-corner-all" unselectable="on"{style}/>{marker}</div><div class="elfinder-cwd-filename" title="{nametitle}">{name}</div>'+selectCheckbox+'</div>',
+ 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 ($('#elfinderAddBadgeStyle'+fm.namespace).length) {
+ $('#elfinderAddBadgeStyle'+fm.namespace).remove();
+ }
+ addBadgeStyleSheet = $('<style id="addBadgeStyle'+fm.namespace+'"/>').insertBefore($('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 = $(),
+
+ /**
+ * 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 = $.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 = $.map(incHashes || cwdHashes, function(hash) { return fm.file(hash) || null; });
+ files = files.slice(0, fm.maxTargets);
+ selectedFiles = {};
+ $.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 {
+ $.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) { $(ui.selected).trigger(evtSelect); },
+ unselected : function(e, ui) { $(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 = $(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 : $(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 = $(document.elementFromPoint(rec.left , rec.top));
+ widget.show();
+ } else {
+ widget = null;
+ }
+ }
+ setTarget();
+ if (!tgt.length) {
+ // try search 5px down
+ widget && widget.hide();
+ tgt = $(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 = $(itemhtml($.extend(true, {}, pdir, {name : '..', i18 : '..', mime : 'directory'})))
+ .addClass('elfinder-cwd-parent')
+ .on('dblclick', function() {
+ var hash = fm.cwdId2Hash(this.id);
+ fm.trigger('select', {selected : [hash]}).exec('open', hash);
+ });
+ (list ? oldSchoolItem.children('td:first') : oldSchoolItem).children('.elfinder-cwd-select').remove();
+ (list ? cwd.find('tbody') : cwd).prepend(oldSchoolItem);
+ fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1);
+ }
+ };
+ if (pdir) {
+ set(pdir);
+ } else {
+ 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 = $.htmlPrefilter? true : false,
+ tempDom = docFlag? $(document.createDocumentFragment()) : $('<div/>'),
+ 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 = $.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($(this));
+ });
+ }
+
+ // append to cwd
+ place.append(docFlag? tempDom : tempDom.children());
+
+ // trigger select
+ if (selected.length) {
+ $.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 = $();
+ }
+ }
+ 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 = $('<div class="elfinder-table-header-sticky"/>').addClass(cwd.attr('class')).append($('<table/>').append(thead));
+ cwd.after(tableHeader);
+ wrapper.on('resize.fixheader', function(e) {
+ e.stopPropagation();
+ fixTableHeader({fitWidth: true});
+ });
+ } else {
+ base = $('<div/>').addClass(cwd.attr('class')).append($('<table/>').append(thead));
+ tableHeader = $('<div/>').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 = $('#'+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');
+ $.each($.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 = $(this),
+ helper = ui.helper,
+ ctr = (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) {
+ $.each(helper.data('files'), function(i, h) {
+ if (h === hash || (inParent && !ctr && !helper.hasClass('elfinder-drag-helper-plus'))) {
+ dst.removeClass(clDropActive);
+ return false; // break $.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));
+ $(this).removeData('dropover')
+ .removeClass(clDropActive);
+ },
+ deactivate : function() {
+ $(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 = $(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) {
+ $('<img/>')
+ .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 ($.isPlainObject(tmbs) && Object.keys(tmbs).length) {
+ Object.assign(bufferExt.attachTmbs, tmbs);
+ $.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]]) {
+ $.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) {
+ $.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) {
+ $.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 = $.htmlPrefilter? true : false,
+ tempDom = docFlag? $(document.createDocumentFragment()) : $('<div/>'),
+ file, hash, node, nodes, ndx, stmb;
+
+ if (l > showFiles) {
+ // re-render for performance tune
+ content();
+ selectedFiles = fm.arrayFlip($.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);
+ }
+ }
+
+ 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);
+ }
+ }
+ },
+
+ /**
+ * 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) {
+ $.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 = $.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 +='<td class="elfinder-cwd-view-th-'+customCols[i]+' sortable-item">'+name+'</td>';
+ }
+ 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 = $();
+ 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('<table><thead/><tbody/></table>');
+ thtr = $('<tr class="ui-state-default"><td class="elfinder-cwd-view-th-name">'+fm.getColumnName('name')+'</td>'+customColsNameBuild()+'</tr>');
+ cwd.find('thead').hide().append(thtr).find('td:first').append(selectAllCheckbox);
+ if ($.fn.sortable) {
+ thtr.addClass('touch-punch touch-punch-keep-default')
+ .sortable({
+ axis: 'x',
+ distance: 8,
+ items: '> .sortable-item',
+ start: function(e, ui) {
+ $(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 = $(ui.item[0]).attr('class').split(' ')[0].replace('elfinder-cwd-view-th-', ''),
+ prev, done;
+ customCols = $.map($(this).children(), function(n) {
+ var name = $(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 = $(this);
+ $this.children(prev).after($this.children(target));
+ });
+ });
+ },
+ stop: function(e, ui) {
+ setTimeout(function() {
+ $(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() {
+ $(this).width($(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 = $(this).attr('class').split(' ')[0].replace('elfinder-col-', '');
+ colWidth[name] = $(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 = $.map(incHashes || cwdHashes, function(hash) { return fm.file(hash) || null; });
+
+ buffer = fm.sortFiles(buffer);
+
+ if (incHashes) {
+ incHashes = $.map(buffer, function(f) { return f.hash; });
+ } else {
+ cwdHashes = $.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 = $(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 ? $(this) : $(this).parents('[id]:first'),
+ tgt = $(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.add(p).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) {
+ $(this).trigger(evtUnselect);
+ $('#'+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 ? $(this) : $(this).parents('[id]:first'),
+ tgt = $(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 = $(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 ? $(this) : $(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 = $(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)) {
+ 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 = e.shiftKey || e.altKey,
+ disable = false;
+ if (metaKey && !fm.UA.IE && 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 = $(e.target).closest('span,tr').is('tr');
+ } else {
+ disable = $(e.target).hasClass('elfinder-cwd-file');
+ }
+ }
+ if (disable) {
+ $this.draggable('option', 'disabled', true);
+ } else {
+ $this.draggable('option', 'disabled', false)
+ .removeAttr('draggable')
+ .draggable('option', 'cursorAt', {left: 50 - parseInt($(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 ? $(this) : $(this).parents('[id]:first'),
+ elm = $('<span>'),
+ url = '',
+ durl = null,
+ murl = null,
+ files = [],
+ icon = function(f) {
+ var mime = f.mime, i, tmb = fm.tmb(f);
+ i = '<div class="elfinder-cwd-icon elfinder-cwd-icon-drag '+fm.mime2class(mime)+' ui-corner-all"/>';
+ if (tmb) {
+ i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML;
+ }
+ return i;
+ }, l, geturl = [];
+ p.trigger(evtSelect);
+ trigger();
+ $.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);
+ $('<a>').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) {
+ $.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 = $('<div class="elfinder-drag-helper html5-native"></div>').append(icon(fm.file(files[0]))).appendTo($(document.body));
+ if ((l = files.length) > 1) {
+ helper.append(icon(fm.file(files[l-1])) + '<span class="elfinder-drag-num">'+l+'</span>');
+ }
+ 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 = $(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 = $(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 = $(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 = $(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($(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($(this).attr('id')), type : e.type});
+ $(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; }
+ $(this).closest(fileSelector).children('.elfinder-cwd-file-wrapper,.elfinder-cwd-filename').toggleClass(clActive, (e.type == 'mouseenter'));
+ })
+ .on('contextmenu.'+fm.namespace, function(e) {
+ var file = $(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 = $(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 = $('<div class="elfinder-cwd-wrapper"/>')
+ // 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 || $(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 = $('<div> </div>')
+ .css({position: 'absolute', width: '1px', height: '1px'})
+ .hide(),
+
+ selectAllCheckbox = selectCheckbox? $('<div class="elfinder-cwd-selectall"><input type="checkbox"/></div>')
+ .attr('title', fm.i18n('selectall'))
+ .on('touchstart mousedown click', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ if ($(this).data('pending') || e.type === 'click') {
+ return false;
+ }
+ selectAllCheckbox.data('pending', true);
+ if (cwd.hasClass('elfinder-cwd-allselected')) {
+ selectAllCheckbox.find('input').prop('checked', false);
+ requestAnimationFrame(function() {
+ unselectAll();
+ });
+ } else {
+ selectAll();
+ }
+ }) : $(),
+
+ 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 += $(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 = $(this).parent().on('resize', resize),
+
+ // workzone node
+ wz = parent.children('.elfinder-workzone').append(wrapper.append(this).append(bottomMarker)),
+
+ // message board
+ mBoard = $('<div class="elfinder-cwd-message-board"/>').insertAfter(cwd),
+
+ // Volume expires
+ vExpires = $('<div class="elfinder-cwd-expires" />'),
+
+ 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($('<div class="elfinder-cwd-trash" />').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 = $.grep(customCols, function(n) {
+ return (options.listView.columns.indexOf(n) !== -1)? true : false;
+ });
+ if (options.listView.columns.length > customCols.length) {
+ $.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 = $.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
+ $('body').on('touchstart touchmove touchend', function(e){});
+ }
+
+ selectCheckbox && cwd.addClass('elfinder-has-checkbox');
+
+ $(window).on('scroll.'+fm.namespace, function() {
+ winScrTm && cancelAnimationFrame(winScrTm);
+ winScrTm = requestAnimationFrame(function() {
+ wrapper.trigger(scrollEvent);
+ });
+ });
+
+ $(document).on('keydown.'+fm.namespace, function(e) {
+ if (e.keyCode == $.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') || 0) {
+ 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 = $('<div style="position:absolute"/>');
+ 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 = $.map(fm.files(phash), function(f) { return f.hash; });
+ fm.trigger('cwdhasheschange', cwdHashes);
+ }
+ if (type === 'open') {
+ var inTrash = function() {
+ var isIn = false;
+ $.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 = $.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
+ $.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 = $.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) {
+ selectedFiles = {};
+ fm.lazy(function() {
+ // incremental search
+ var regex, q, fst = '';
+ q = query = e.data.query || '';
+ if (q) {
+ if (q.substr(0,1) === '/') {
+ q = q.substr(1);
+ fst = '^';
+ }
+ regex = new RegExp(fst + q.replace(/([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g, '\\$1'), 'i');
+ incHashes = $.grep(cwdHashes, function(hash) {
+ var file = fm.file(hash);
+ return (file && (file.name.match(regex) || (file.i18 && file.i18.match(regex))))? true : false;
+ });
+ 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.storage('view') == '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) {
+ $.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;
+
+ $.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 = $.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 = $.grep(e.data.added || [], function(f) { return inTarget(f)? true : false ;});
+ add(files);
+ if (fm.searchStatus.state === 2) {
+ $.each(files, function(i, f) {
+ if ($.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) {
+ $.each(e.data.changed || [], function(i, file) {
+ if (fm.cwdHash2Elm(file.hash).length) {
+ remove([file.hash]);
+ add([file], 'change');
+ $.inArray(file.hash, sel) !== -1 && selectFile(file.hash);
+ added = true;
+ }
+ });
+ } else {
+ $.each($.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');
+ $.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).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 = $(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 || $(),
+ parents, ctr, add;
+
+ if (l > 0) {
+ parents = fm.parents(files[0]);
+ }
+ if (event === evtSelect || event === evtUnselect) {
+ add = (event === evtSelect),
+ $.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 });
+
+ $.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;
+};
+
+
+/*
+ * File: /js/ui/dialog.js
+ */
+
+/**
+ * @class elFinder dialog
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfinderdialog = function(opts, fm) {
+ 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 : $(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 (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({}, $.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 = $(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 = $('<div class="ui-dialog-titlebar ui-widget-header ui-corner-top ui-helper-clearfix"><span class="elfinder-dialog-title">'+opts.title+'</span></div>'),
+ buttonset = $('<div class="ui-dialog-buttonset"/>'),
+ buttonpane = $('<div class=" ui-helper-clearfix ui-dialog-buttonpane ui-widget-content"/>')
+ .append(buttonset),
+ btnWidth = 0,
+ btnCnt = 0,
+ tabstops = $(),
+ evCover = $('<div style="width:100%;height:100%;position:absolute;top:0px;left:0px;"/>').hide(),
+ numberToTel = function() {
+ if (opts.optimizeNumber) {
+ dialog.find('input[type=number]').each(function() {
+ $(this).attr('inputmode', 'numeric');
+ $(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) {
+ $.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();
+ $.each(elms, function(i, elm) {
+ if (elm === cur && elms[i-1]) {
+ node = elms.eq(i-1);
+ return false;
+ }
+ });
+ return node;
+ },
+ makeHeaderBtn = function() {
+ $.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($('<span class="ui-widget-header ui-dialog-titlebar-close ui-corner-all elfinder-titlebar-button"><span class="ui-icon ui-icon-closethick"/></span>')
+ .on('mousedown', 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});
+ }
+ });
+ titlebar.prepend($('<span class="ui-widget-header ui-corner-all elfinder-titlebar-button elfinder-titlebar-full"><span class="ui-icon ui-icon-plusthick"/></span>')
+ .on('mousedown', function(e) {
+ var elm = $(this);
+ e.preventDefault();
+ e.stopPropagation();
+ if (!dialog.hasClass('elfinder-maximized') && typeof elm.data('style') === 'undefined') {
+ self.height(self.height());
+ elm.data('style', self.attr('style') || '');
+ }
+ fm.toggleMaximize(dialog);
+ typeof(opts.maximize) === 'function' && opts.maximize.call(self[0]);
+ })
+ );
+ }
+
+ },
+ minimize: function() {
+ var btn, mnode, doffset;
+ if (opts.allowMinimize) {
+ btn = $('<span class="ui-widget-header ui-corner-all elfinder-titlebar-button elfinder-titlebar-minimize"><span class="ui-icon ui-icon-minusthick"/></span>')
+ .on('mousedown', function(e) {
+ var $this = $(this),
+ tray = fm.getUI('bottomtray'),
+ dumStyle = { width: 70, height: 24 },
+ dum = $('<div/>').css(dumStyle).addClass(dialog.get(0).className + ' elfinder-dialog-minimized'),
+ pos = {};
+
+ e.preventDefault();
+ e.stopPropagation();
+ if (!dialog.data('minimized')) {
+ // minimize
+ doffset = dialog.data('minimized', true).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();
+ mnode.remove();
+ dialog.show();
+ self.elfinderdialog('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) {
+ $(this).children('.elfinder-titlebar-minimize').trigger('mousedown');
+ }).prepend(btn);
+ dialog.on('togleminimize', function() {
+ btn.trigger('mousedown');
+ });
+ }
+ }
+ },
+ dialog = $('<div class="ui-front ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable std42-dialog touch-punch '+cldialog+' '+opts.cssClass+'"/>')
+ .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 = $(':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 = $(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' && $.proxy(opts.open, self[0])();
+
+ if (opts.closeOnEscape) {
+ $(document).on('keydown.'+id, function(e) {
+ if (e.keyCode == $.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? $.Deferred().reject() : $.Deferred().resolve();
+ }
+ } else {
+ dfd = $.Deferred().resolve();
+ }
+
+ dfd.done(function() {
+ syncSize.enabled && elfNode.off('resize.'+fm.namespace, syncFunc);
+
+ if (opts.closeOnEscape) {
+ $(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') {
+ $.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');
+ 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 = $(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;
+ 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 += $(this).outerHeight(true);
+ });
+ if (!init && syncSize.enabled && !e.originalEvent && !dialog.hasClass('elfinder-maximized')) {
+ h = Math.min(syncSize.defaultSize.height, Math.max(parseInt(dialog.css('max-height')), parseInt(dialog.css('min-height'))) - oh - dialog.data('margin-y'));
+ } else {
+ h = dialog.height() - oh - dialog.data('margin-y');
+ }
+ self.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') {
+ $.proxy(opts.resize, self[0])(e, data);
+ }
+ })
+ .on('tabstopsInit', tabstopsInit)
+ .on('focus', '.'+cltabstop, function() {
+ $(this).addClass(clhover).parent('label').addClass(clhover);
+ this.id && $(this).parent().find('label[for='+this.id+']').addClass(clhover);
+ })
+ .on('click', 'select.'+cltabstop, function() {
+ var node = $(this);
+ node.data('keepFocus')? node.removeData('keepFocus') : node.data('keepFocus', true);
+ })
+ .on('blur', '.'+cltabstop, function() {
+ $(this).removeClass(clhover).removeData('keepFocus').parent('label').removeClass(clhover);
+ this.id && $(this).parent().find('label[for='+this.id+']').removeClass(clhover);
+ })
+ .on('mouseenter mouseleave', '.'+cltabstop+',label', function(e) {
+ var $this = $(this), labelfor;
+ if (this.nodeName === 'LABEL') {
+ if (!$this.children('.'+cltabstop).length && (!(labelfor = $this.attr('for')) || !$('#'+labelfor).hasClass(cltabstop))) {
+ return;
+ }
+ }
+ if (opts.btnHoverFocus && dialog.data('focusOnMouseOver')) {
+ if (e.type === 'mouseenter' && ! $(':focus').data('keepFocus')) {
+ $this.trigger('focus');
+ }
+ } else {
+ $this.toggleClass(clhover, e.type == 'mouseenter');
+ }
+ })
+ .on('keydown', '.'+cltabstop, function(e) {
+ var $this = $(this),
+ esc, move, moveTo;
+ if ($this.is(':focus')) {
+ esc = e.keyCode === $.ui.keyCode.ESCAPE;
+ if (e.keyCode === $.ui.keyCode.ENTER) {
+ e.preventDefault();
+ $this.trigger('click');
+ } else if (((e.keyCode === $.ui.keyCode.TAB) && e.shiftKey) || e.keyCode === $.ui.keyCode.LEFT || e.keyCode == $.ui.keyCode.UP) {
+ move = 'prev';
+ } else if (e.keyCode === $.ui.keyCode.TAB || e.keyCode == $.ui.keyCode.RIGHT || e.keyCode == $.ui.keyCode.DOWN) {
+ move = 'next';
+ }
+ if (move
+ &&
+ (
+ ($this.is('textarea') && !(e.ctrlKey || e.metaKey))
+ ||
+ ($this.is('select,span.ui-slider-handle') && e.keyCode !== $.ui.keyCode.TAB)
+ ||
+ ($this.is('input:not(:checkbox,:radio)') && (!(e.ctrlKey || e.metaKey) && e.keyCode === $.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();
+
+ $.each(opts.buttons, function(name, cb) {
+ var button = $('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only '
+ +'elfinder-btncnt-'+(btnCnt++)+' '
+ +cltabstop
+ +'"><span class="ui-button-text">'+name+'</span></button>')
+ .on('click', $.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 += $(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' && $.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;
+};
+
+$.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']
+};
+
+
+/*
+ * File: /js/ui/fullscreenbutton.js
+ */
+
+/**
+ * @class elFinder toolbar button to switch full scrren mode.
+ *
+ * @author Naoki Sawada
+ **/
+
+$.fn.elfinderfullscreenbutton = function(cmd) {
+ return this.each(function() {
+ var button = $(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' : '';
+ });
+ });
+ });
+};
+
+
+/*
+ * File: /js/ui/navbar.js
+ */
+
+/**
+ * @class elfindernav - elFinder container for diretories tree and places
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfindernavbar = function(fm, opts) {
+ this.not('.elfinder-navbar').each(function() {
+ var nav = $(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 && $.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 = $('<div class="elfinder-navbar-swipe-handle"/>').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 ($(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 = $(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('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());
+ $(window).on('resize.' + fm.namespace, set);
+ set();
+ });
+ }
+ }
+
+ });
+
+ return this;
+};
+
+
+/*
+ * File: /js/ui/navdock.js
+ */
+
+/**
+ * @class elfindernavdock - elFinder container for preview etc at below the navbar
+ *
+ * @author Naoki Sawada
+ **/
+$.fn.elfindernavdock = function(fm, opts) {
+ this.not('.elfinder-navdock').each(function() {
+ var self = $(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);
+ $.each(sizeSyncs, function(id, n) {
+ n.height(n.height() + calc).trigger('resize.' + fm.namespace);
+ });
+ fm.trigger('wzresize');
+ self.css('overflow', ovf);
+ }
+ },
+ handle = $('<div class="ui-front ui-resizable-handle ui-resizable-n"/>').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 = $('#'+nodeId);
+ delete sizeSyncs[nodeId];
+ self.height(self.height() - $('#'+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;
+};
+
+/*
+ * File: /js/ui/overlay.js
+ */
+
+
+$.fn.elfinderoverlay = function(opts) {
+ var fm = this.parent().elfinder('instance'),
+ o, cnt, show, hide;
+
+ this.filter(':not(.elfinder-overlay)').each(function() {
+ opts = Object.assign({}, opts);
+ $(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;
+};
+
+
+/*
+ * File: /js/ui/panel.js
+ */
+
+$.fn.elfinderpanel = function(fm) {
+ return this.each(function() {
+ var panel = $(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)));
+ });
+ });
+ });
+};
+
+
+/*
+ * File: /js/ui/path.js
+ */
+
+/**
+ * @class elFinder ui
+ * Display current folder path in statusbar.
+ * Click on folder name in path - open folder
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfinderpath = function(fm, options) {
+ return this.each(function() {
+ var query = '',
+ target = '',
+ mimes = [],
+ place = 'statusbar',
+ clHover= fm.res('class', 'hover'),
+ prefix = 'path' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-',
+ wzbase = $('<div class="ui-widget-header ui-helper-clearfix elfinder-workzone-path"/>'),
+ path = $(this).addClass('elfinder-path').html(' ')
+ .on('mousedown', 'span.elfinder-path-dir', function(e) {
+ var hash = $(this).attr('id').substr(prefix.length);
+ e.preventDefault();
+ if (hash != fm.cwd().hash) {
+ $(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 = $('<div class="elfinder-path-roots"/>').on('click', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+
+ var roots = $.map(fm.roots, function(h) { return fm.file(h); }),
+ raw = [];
+
+ $.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('<span class="elfinder-button-icon elfinder-button-icon-menu" />').appendTo(wzbase),
+ render = function(cwd) {
+ var dirs = [],
+ names = [];
+ $.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('<span id="'+prefix+hash+'" class="'+c+'" title="'+names.join(fm.option('separator'))+'">'+name+'</span>');
+ });
+ return dirs.join('<span class="elfinder-path-other">'+fm.option('separator')+'</span>');
+ },
+ toWorkzone = function() {
+ var prev;
+ path.children('span.elfinder-path-dir').attr('style', '');
+ prev = fm.direction === 'ltr'? $('#'+prefix + fm.cwd().hash).prevAll('span.elfinder-path-dir:first') : $();
+ 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 -= $(this).width();
+ });
+ ids = [];
+ dirs.each(function(i) {
+ var dir = $(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;
+ $.each(ids, function(i, k) {
+ var d = $(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('<span class="elfinder-path-other">'+fm.i18n('searcresult') + ': </span>' + 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);
+ });
+};
+
+
+/*
+ * File: /js/ui/places.js
+ */
+
+/**
+ * @class elFinder places/favorites ui
+ *
+ * @author Dmitry (dio) Levashov
+ * @author Naoki Sawada
+ **/
+$.fn.elfinderplaces = function(fm, opts) {
+ 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 = $(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 $(document.getElementById(hash2id(hash))); },
+
+ /**
+ * Save current places state
+ *
+ * @return void
+ **/
+ save = function() {
+ var hashes = [], data = {};
+
+ hashes = $.map(subtree.children().find('[id]'), function(n) {
+ return id2hash(n.id);
+ });
+ if (hashes.length) {
+ $.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 = $.grep(dat.split(','), function(hash) { return hash? true : false;});
+ $.each(dat, function(i, d) {
+ var dir = d.split('#');
+ dirs[dir[0]] = dir[1]? dir[1] : dir[0];
+ });
+ } else if ($.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);
+
+ $.each(data.files, function(i, f) {
+ var hash = f.hash;
+ exists[hash] = f;
+ });
+ $.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 $(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 && dir.path)? fm.escape(dir.path) : '')
+ .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() {
+ $.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) {
+ $.each(subtree.children(), function() {
+ var current = $(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 = $('<span class="elfinder-button-icon elfinder-button-icon-sort elfinder-places-root-icon" title="'+fm.i18n('cmdsort')+'"/>')
+ .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 = $(this).addClass(fm.res(c, 'tree')+' elfinder-places ui-corner-all')
+ .hide()
+ .append(wrapper)
+ .appendTo(fm.getUI('navbar'))
+ .on('mouseenter mouseleave', '.'+navdir, function(e) {
+ $(this).toggleClass('ui-state-hover', (e.type == 'mouseenter'));
+ })
+ .on('click', '.'+navdir, function(e) {
+ var p = $(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 = $(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 = $.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 {
+ $(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));
+ $(this).removeData('dropover')
+ .removeClass(dropover);
+ },
+ drop : function(e, ui) {
+ var helper = ui.helper,
+ resolve = true;
+
+ $.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 = $(this).attr('id').substr(6),
+ p = $(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($(this).data('tmlongtap'));
+ if (e.type == 'touchmove') {
+ $(this).removeClass(hover);
+ }
+ });
+
+ if ($.fn.sortable) {
+ subtree.addClass('touch-punch')
+ .sortable({
+ appendTo : fm.getUI(),
+ revert : false,
+ helper : function(e) {
+ var dir = $(e.target).parent();
+
+ dir.children().removeClass('ui-state-hover');
+
+ return $('<div class="ui-widget elfinder-place-drag elfinder-'+fm.direction+'"/>')
+ .append($('<div class="elfinder-navbar"/>').show().append(dir.clone()));
+
+ },
+ stop : function(e, ui) {
+ var target = $(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
+ $(this).on('regist', function(e, files){
+ var added = false;
+ $.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;
+ $.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) {
+ $.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) {
+ $.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) {
+ $.each(e.data.added, function(i, file) {
+ if ($.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;
+ $.each(data.files || [], function(i, file) {
+ var hash = file.hash;
+ exists[hash] = file;
+ if (!fm.files().hasOwnProperty(file.hash)) {
+ // update cache
+ fm.trigger('tree', {tree: [file]});
+ }
+ });
+ $.each(dirs, function(h, f) {
+ if (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();
+ });
+ }
+ });
+
+ });
+
+ });
+};
+
+
+/*
+ * File: /js/ui/searchbutton.js
+ */
+
+/**
+ * @class elFinder toolbar search button widget.
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfindersearchbutton = function(cmd) {
+ 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 = $(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 = $.trim(input.val()),
+ from = !$('#' + id('SearchFromAll')).prop('checked'),
+ mime = $('#' + id('SearchMime')).prop('checked'),
+ type = '';
+ if (from) {
+ if ($('#' + 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 = $('<input type="text" size="42"/>')
+ .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 === $.ui.keyCode.ENTER) {
+ search();
+ } else if (e.keyCode === $.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 });
+ 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 === $.ui.keyCode.ENTER && input.trigger('compositionend');
+ } else {
+ input.trigger('input');
+ }
+ });
+ }
+ }
+
+ $('<span class="ui-icon ui-icon-search" title="'+cmd.title+'"/>')
+ .appendTo(button)
+ .on('mousedown', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ if (button.hasClass('ui-state-active')) {
+ search();
+ } else {
+ input.trigger('focus');
+ }
+ });
+
+ $('<span class="ui-icon ui-icon-close"/>')
+ .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 : $('<div class="ui-front ui-widget ui-widget-content elfinder-button-menu elfinder-button-search-menu ui-corner-all"/>')
+ .append(
+ $('<div class="buttonset"/>')
+ .append(
+ $('<input id="'+id('SearchFromCwd')+'" name="serchfrom" type="radio" checked="checked"/><label for="'+id('SearchFromCwd')+'">'+fm.i18n('btnCwd')+'</label>'),
+ $('<input id="'+id('SearchFromVol')+'" name="serchfrom" type="radio"/><label for="'+id('SearchFromVol')+'">'+fm.i18n('btnVolume')+'</label>'),
+ $('<input id="'+id('SearchFromAll')+'" name="serchfrom" type="radio"/><label for="'+id('SearchFromAll')+'">'+fm.i18n('btnAll')+'</label>')
+ ),
+ $('<div class="buttonset elfinder-search-type"/>')
+ .append(
+ $('<input id="'+id('SearchName')+'" name="serchcol" type="radio" checked="checked" value="SearchName"/><label for="'+id('SearchName')+'">'+fm.i18n('btnFileName')+'</label>')
+ )
+ )
+ .hide()
+ .appendTo(fm.getUI());
+ if (opts) {
+ if (sTypes) {
+ typeSet = opts.find('.elfinder-search-type');
+ $.each(cmd.options.searchTypes, function(i, v) {
+ typeSet.append($('<input id="'+id(i)+'" name="serchcol" type="radio" value="'+fm.escape(i)+'"/><label for="'+id(i)+'">'+fm.i18n(v.name)+'</label>'));
+ });
+ }
+ opts.find('div.buttonset').buttonset();
+ $('#'+id('SearchFromAll')).next('label').attr('title', fm.i18n('searchTarget', fm.i18n('btnAll')));
+ if (sTypes) {
+ $.each(sTypes, function(i, v) {
+ if (v.title) {
+ $('#'+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();
+ $.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) {
+ $.each(fm.parents(fm.cwd().hash), function(i, hash) {
+ dirs.push(fm.file(hash).name);
+ });
+
+ $('#'+id('SearchFromCwd')).next('label').attr('title', fm.i18n('searchTarget', dirs.join(fm.option('separator'))));
+ $('#'+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 = $.ui.keyCode[(!sel.length || fm.cwdHash2Elm(sel[0]).next('[id]').length)? 'RIGHT' : 'HOME'];
+ $(document).trigger($.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();
+ }
+ }
+ });
+
+ });
+};
+
+
+/*
+ * File: /js/ui/sortbutton.js
+ */
+
+/**
+ * @class elFinder toolbar button menu with sort variants.
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfindersortbutton = function(cmd) {
+ 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 = $('<span class="elfinder-button-text">'+cmd.title+'</span>'),
+ button = $(this).addClass('ui-state-default elfinder-button elfinder-menubutton elfiner-button-'+name)
+ .attr('title', cmd.title)
+ .append('<span class="elfinder-button-icon elfinder-button-icon-'+name+'"/>', 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 = $('<div class="ui-front ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>')
+ .hide()
+ .appendTo(fm.getUI())
+ .on('mouseenter mouseleave', '.'+item, function(e) { $(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();
+
+ $.each(fm.sortRules, function(name, value) {
+ menu.append($('<div class="'+item+'" rel="'+name+'"><span class="ui-icon ui-icon-arrowthick-1-n"/><span class="ui-icon ui-icon-arrowthick-1-s"/>'+fm.i18n('sort'+name)+'</div>').data('type', name));
+ });
+
+ menu.children().on('click', function(e) {
+ cmd.exec([], $(this).removeClass(hover).attr('rel'));
+ });
+
+ $('<div class="'+item+' '+item+'-separated elfinder-sort-ext elfinder-sort-stick"><span class="ui-icon ui-icon-check"/>'+fm.i18n('sortFoldersFirst')+'</div>')
+ .appendTo(menu)
+ .on('click', function() {
+ cmd.exec([], 'stick');
+ });
+
+ fm.one('init', function() {
+ if (fm.ui.tree && fm.options.sortAlsoTreeview !== null) {
+ $('<div class="'+item+' '+item+'-separated elfinder-sort-ext elfinder-sort-tree"><span class="ui-icon ui-icon-check"/>'+fm.i18n('sortAlsoTreeview')+'</div>')
+ .appendTo(menu)
+ .on('click', function() {
+ cmd.exec([], 'tree');
+ });
+ }
+ })
+ .bind('disable select', hide)
+ .bind('open', function() {
+ menu.children('[rel]').each(function() {
+ var $this = $(this);
+ $this.toggle(fm.sorters[$this.attr('rel')]);
+ });
+ }).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);
+ }
+
+ });
+
+};
+
+
+/*
+ * File: /js/ui/stat.js
+ */
+
+/**
+ * @class elFinder ui
+ * Display number of files/selected files and its size in statusbar
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfinderstat = function(fm) {
+ return this.each(function() {
+ var size = $(this).addClass('elfinder-stat-size'),
+ sel = $('<div class="elfinder-stat-selected"/>')
+ .on('click', 'a', function(e) {
+ var hash = $(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;
+ }
+ $.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+': <span class="elfinder-stat-incsearch"></span>'+c+', <span class="elfinder-stat-size'+(hasSize? ' elfinder-stat-size-recursive' : '')+'">'+fm.i18n(hasSize? 'sum' : 'size')+': '+fm.formatSize(s)+'</span>')
+ .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('<a href="#elf_'+file.phash+'" data-hash="'+file.hash+'" title="'+path+'">'+path+'</a>');
+ }
+ dirs.push(fm.escape(file.i18 || file.name));
+ sel.html(dirs.join('/') + (s > 0 ? ', '+fm.formatSize(s) : ''));
+ } else if (files.length) {
+ $.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 && $.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($.map(e.data, function(h) { return fm.file(h); }));
+ })
+ .change(function(e) {
+ var files = e.data.changed || [],
+ cwdHash = fm.cwd().hash;
+ $.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();
+ })
+ ;
+ });
+};
+
+
+/*
+ * File: /js/ui/toast.js
+ */
+
+/**
+ * @class elFinder toast
+ *
+ * This was created inspired by the toastr. Thanks to developers of toastr.
+ * CodeSeven/toastr: http://johnpapa.net <https://github.com/CodeSeven/toastr>
+ *
+ * @author Naoki Sawada
+ **/
+$.fn.elfindertoast = function(opts, fm) {
+ 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
+ }, $.isPlainObject(fm.options.uiOptions.toast.defaults)? fm.options.uiOptions.toast.defaults : {});
+ return this.each(function() {
+ opts = Object.assign({}, defOpts, opts || {});
+
+ var self = $(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($('<div class="elfinder-toast-msg"/>').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(
+ $('<button class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"/>')
+ .append($('<span class="ui-button-text"/>').text(fm.i18n(opts.button.text)))
+ .on('mouseenter mouseleave', function(e) {
+ $(this).toggleClass('ui-state-hover', e.type == 'mouseenter');
+ })
+ .on('click', opts.button.click || function(){})
+ );
+ }
+
+ if (opts.width) {
+ self.css('max-width', opts.width);
+ }
+
+ show();
+ });
+};
+
+/*
+ * File: /js/ui/toolbar.js
+ */
+
+/**
+ * @class elFinder toolbar
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfindertoolbar = function(fm, opts) {
+ this.not('.elfinder-toolbar').each(function() {
+ var commands = fm._commands,
+ self = $(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 $.grep(opts, function(v) {
+ if ($.isPlainObject(v)) {
+ options = Object.assign(options, v);
+ return false;
+ }
+ return true;
+ });
+ },
+ render = function(disabled){
+ var name,cmdPref;
+
+ $.each(buttons, function(i, b) { b.detach(); });
+ self.empty();
+ l = panels.length;
+ while (l--) {
+ if (panels[l]) {
+ panel = $('<div class="ui-widget-content ui-corner-all elfinder-buttonset"/>');
+ 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] && $.fn[button]) {
+ buttons[name] = $('<div/>')[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('<span class="ui-widget-content elfinder-toolbar-button-separator"/>');
+
+ }
+ }
+
+ 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 = $('<div class="ui-widget-content ui-corner-all elfinder-buttonset"/>');
+ name = 'preference';
+ button = 'elfinder'+cmd.options.ui;
+ buttons[name] = $('<div/>')[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 || ! $.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 = {};
+ $.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);
+ }
+ }
+
+ $.each(userHides, function(n) {
+ if (!disabled[n]) {
+ disabled[n] = true;
+ }
+ });
+
+ if (Object.keys(fm.commandMap).length) {
+ $.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
+ $.each($('div.elfinder-button'), function(){
+ var origin = $(this).data('origin');
+ if (origin) {
+ $(this).after(origin).detach();
+ }
+ });
+ }
+ if (Object.keys(fm.commandMap).length) {
+ $.each(fm.commandMap, function(from, to){
+ var cmd = fm._commands[to],
+ button = cmd? 'elfinder'+cmd.options.ui : null,
+ btn;
+ if (button && $.fn[button]) {
+ btn = buttons[from];
+ if (btn) {
+ if (! buttons[to] && $.fn[button]) {
+ buttons[to] = $('<div/>')[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 && $.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 = $('<div class="elfinder-toolbar-swipe-handle"/>').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;
+};
+
+
+/*
+ * File: /js/ui/tree.js
+ */
+
+/**
+ * @class elFinder folders tree
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfindertree = function(fm, opts) {
+ 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 = [];
+ $.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) {
+ $.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($('#'+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 = $.extend(true, {}, fm.droppable, {
+ // show subfolders on dropover
+ over : function(e, ui) {
+ var dst = $(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);
+ $.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 $.each
+ }
+ });
+ if (helper.data('locked')) {
+ status = 'elfinder-drag-helper-plus';
+ } else {
+ status = 'elfinder-drag-helper-move';
+ if (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 = $(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() {
+ $(this).removeData('dropover')
+ .removeClass(hover+' '+dropover);
+ },
+ drop : function(e, ui) {
+ insideNavbar(e.clientX) && drop.call(this, e, ui);
+ }
+ }),
+
+ spinner = $(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;
+ },
+ root : function(dir) {
+ var cls = '';
+ if (!dir.phash || dir.isroot) {
+ cls += ' '+wrapperRoot;
+ if (!dir.disabled || dir.disabled.length < 1) {
+ cls += ' '+pastable+' '+uploadable;
+ } else {
+ if ($.inArray('paste', dir.disabled) === -1) {
+ cls += ' '+pastable;
+ }
+ if ($.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 $.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 = $(),
+ 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 = {};
+ $.each(dirs, function(i, d) {
+ hashes[d.hash] = i;
+ });
+ },
+ change = function(mode) {
+ if (mode === 'prepare') {
+ $.each(dirs, function(i, d) {
+ d.node && parent.append(d.node.hide());
+ });
+ } else if (mode === 'done') {
+ $.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 = $.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($.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);
+ }
+ $.each(parts || dirs, function(i, d) {
+ html.push(itemhtml(d));
+ if (d.node) {
+ nodes[d.hash] = d.node;
+ }
+ });
+ if (prev > -1) {
+ prevBtn = $('<button class="elfinder-navbar-pager elfinder-navbar-pager-prev"/>')
+ .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 = $();
+ }
+ if (next) {
+ nextBtn = $('<button class="elfinder-navbar-pager elfinder-navbar-pager-next"/>')
+ .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 = $();
+ }
+ detach();
+ parent.empty()[parts? 'addClass' : 'removeClass']('elfinder-navbar-hasmore').append(prevBtn, html.join(''), nextBtn);
+ $.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() {
+ $.each(parent.children('.elfinder-navbar-wrapper'), function(i, elm) {
+ var n = $(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,
+ firstVol = true; // check for netmount volume
+
+ 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) {
+ if (dir.phash && ((init = !parent.children().length) || 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);
+ parent[firstVol || dir.phash ? 'append' : 'prepend'](node);
+ firstVol = false;
+ 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){
+ $.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 = $.Deferred(),
+ current, parent, top, treeH, bottom, tgtTop;
+ autoScrTm && clearTimeout(autoScrTm);
+ autoScrTm = setTimeout(function() {
+ current = $(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 = $.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 = $.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 = $('#'+baseId);
+ spinner = $(fm.res('tpl', 'navspinner')).insertBefore(baseNode.children('.'+arrow));
+ baseNode.removeClass(collapsed);
+
+ $.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) {
+ $.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 = $.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 $.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 = $();
+ }
+ if (node) {
+ // check leaf roots
+ node.children('div.'+wrapperRoot).each(function() {
+ updateDroppable(null, $(this));
+ });
+ }
+ }
+
+ // make droppable on async
+ if (target.length) {
+ fm.asyncJob(function(elm) {
+ $(elm).droppable(droppableopts);
+ }, $.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+')';
+
+ $.each(dirs, function(i, dir) {
+ fm.navHash2Elm(dir.phash).filter(sel)
+ .filter(function() { return $.grep($(this).next('.'+subtree).children(), function(n) {
+ return ($(n).children().hasClass(root))? false : true;
+ }).length > 0; })
+ .addClass(cls);
+ });
+ },
+
+
+
+ /**
+ * Navigation tree
+ *
+ * @type JQuery
+ */
+ tree = $(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 = $(this);
+
+ 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', fm.navId2Hash(link.attr('id')))) {
+ link.draggable(fm.draggable);
+ }
+ }
+ link.toggleClass(hover, enter);
+ }
+ })
+ // native drag enter
+ .on('dragenter', selNavdir, function(e) {
+ if (e.originalEvent.dataTransfer) {
+ var dst = $(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 = $(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 = $(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 = $(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($(this).data('tmlongtap'));
+ if (e.type == 'touchmove') {
+ $(this).removeClass(hover);
+ }
+ })
+ // toggle subfolders in tree
+ .on('click', selNavdir+'.'+collapsed+' .'+arrow, function(e) {
+ var arrow = $(this),
+ link = arrow.parent(selNavdir),
+ stree = link.next('.'+subtree),
+ dfrd = $.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) {
+ var self = $(this);
+
+ // now dirname editing
+ if (self.find('input:text').length) {
+ e.stopPropagation();
+ return;
+ }
+
+ e.preventDefault();
+
+ fm.trigger('contextmenu', {
+ 'type' : 'navbar',
+ 'targets' : [fm.navId2Hash($(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 = $(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 = $(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 = $(),
+ changed = {},
+ dir, phash, node, tmp, realParent, reqParent, realSibling, reqSibling, isExpanded, isLoaded, parent, subdirs;
+
+ $.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 = $(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();
+ }
+
+ $.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;
+
+ $.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');
+
+ $.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 = $.grep(e.data.files||[], function(h) {
+ var dir = fm.file(h);
+ return dir && dir.mime == 'directory' ? true : false;
+ });
+
+ $.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($.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) {
+ $.each(ends, function(i, end) {
+ var vid = fm.file(fm.root(end)).volumeid;
+ if (i === 0) {
+ topVid = vid;
+ }
+ endsVid[vid] = end;
+ endsMap[end] = [];
+ });
+ $.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) {
+ $.each(ends, function(i, endHash) {
+ updateTree(dirs);
+ current = selectPages(fm.file(endHash));
+ updateArrows(dirs, loaded);
+ });
+ } else {
+ $.each(endsMap, function(endHash, dirs) {
+ updateTree(dirs);
+ current = selectPages(fm.file(endHash));
+ updateArrows(dirs, loaded);
+ });
+ }
+ }
+
+ sync();
+ }, 100);
+ }
+ });
+
+ });
+
+ return this;
+};
+
+
+/*
+ * File: /js/ui/uploadButton.js
+ */
+
+/**
+ * @class elFinder toolbar's button tor upload file
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfinderuploadbutton = function(cmd) {
+ return this.each(function() {
+ var fm = cmd.fm,
+ button = $(this).elfinderbutton(cmd)
+ .off('click'),
+ form = $('<form/>').appendTo(button),
+ input = $('<input type="file" multiple="true" title="'+cmd.fm.i18n('selectForUpload')+'"/>')
+ .on('change', function() {
+ var _input = $(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();
+ });
+};
+
+
+/*
+ * File: /js/ui/viewbutton.js
+ */
+
+/**
+ * @class elFinder toolbar button to switch current directory view.
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfinderviewbutton = function(cmd) {
+ return this.each(function() {
+ var button = $(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);
+ });
+ });
+ });
+};
+
+
+/*
+ * File: /js/ui/workzone.js
+ */
+
+/**
+ * @class elfinderworkzone - elFinder container for nav and current directory
+ * @author Dmitry (dio) Levashov
+ **/
+$.fn.elfinderworkzone = function(fm) {
+ var cl = 'elfinder-workzone';
+
+ this.not('.'+cl).each(function() {
+ var wz = $(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 = $(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;
+};
+
+
+/*
+ * File: /js/commands/archive.js
+ */
+
+/**
+ * @class elFinder command "archive"
+ * Archive selected files
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.archive = function() {
+ var self = this,
+ fm = self.fm,
+ mimes = [],
+ dfrd;
+
+ this.variants = [];
+
+ this.disableOnSearch = false;
+
+ this.nextAction = {};
+
+ /**
+ * Update mimes on open/reload
+ *
+ * @return void
+ **/
+ fm.bind('open reload', function() {
+ self.variants = [];
+ $.each((mimes = fm.option('archivers')['create'] || []), function(i, mime) {
+ self.variants.push([mime, fm.mime2kind(mime)]);
+ });
+ self.change();
+ });
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length,
+ chk = (cnt && ! fm.isRoot(sel[0]) && (fm.file(sel[0].phash) || {}).write && ! $.grep(sel, function(f){ return f.read ? false : true; }).length),
+ cwdId;
+
+ if (chk && fm.searchStatus.state > 1) {
+ cwdId = fm.cwd().volumeid;
+ chk = (cnt === $.grep(sel, function(f) { return f.read && f.hash.indexOf(cwdId) === 0 ? true : false; }).length);
+ }
+
+ return chk && !this._disabled && mimes.length && (cnt || (dfrd && dfrd.state() == 'pending')) ? 0 : -1;
+ };
+
+ this.exec = function(hashes, type) {
+ var files = this.files(hashes),
+ cnt = files.length,
+ mime = type || mimes[0],
+ cwd = fm.file(files[0].phash) || null,
+ error = ['errArchive', 'errPerm', 'errCreatingTempDir', 'errFtpDownloadFile', 'errFtpUploadFile', 'errFtpMkdir', 'errArchiveExec', 'errExtractExec', 'errRm'],
+ i, open;
+
+ dfrd = $.Deferred().fail(function(error) {
+ error && fm.error(error);
+ });
+
+ if (! (cnt && mimes.length && $.inArray(mime, mimes) !== -1)) {
+ return dfrd.reject();
+ }
+
+ if (!cwd.write) {
+ return dfrd.reject(error);
+ }
+
+ for (i = 0; i < cnt; i++) {
+ if (!files[i].read) {
+ return dfrd.reject(error);
+ }
+ }
+
+ self.mime = mime;
+ self.prefix = ((cnt > 1)? 'Archive' : files[0].name) + (fm.option('archivers')['createext']? '.' + fm.option('archivers')['createext'][mime] : '');
+ self.data = {targets : self.hashes(hashes), type : mime};
+
+ if (fm.cwd().hash !== cwd.hash) {
+ open = fm.exec('open', cwd.hash).done(function() {
+ fm.one('cwdrender', function() {
+ fm.selectfiles({files : hashes});
+ dfrd = $.proxy(fm.res('mixin', 'make'), self)();
+ });
+ });
+ } else {
+ fm.selectfiles({files : hashes});
+ dfrd = $.proxy(fm.res('mixin', 'make'), self)();
+ }
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/back.js
+ */
+
+/**
+ * @class elFinder command "back"
+ * Open last visited folder
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+(elFinder.prototype.commands.back = function() {
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+ this.shortcuts = [{
+ pattern : 'ctrl+left backspace'
+ }];
+
+ this.getstate = function() {
+ return this.fm.history.canBack() ? 0 : -1;
+ };
+
+ this.exec = function() {
+ return this.fm.history.back();
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/chmod.js
+ */
+
+/**
+ * @class elFinder command "chmod".
+ * Chmod files.
+ *
+ * @type elFinder.command
+ * @author Naoki Sawada
+ */
+elFinder.prototype.commands.chmod = function() {
+ this.updateOnSelect = false;
+ var fm = this.fm,
+ level = {
+ 0 : 'owner',
+ 1 : 'group',
+ 2 : 'other'
+ },
+ msg = {
+ read : fm.i18n('read'),
+ write : fm.i18n('write'),
+ execute : fm.i18n('execute'),
+ perm : fm.i18n('perm'),
+ kind : fm.i18n('kind'),
+ files : fm.i18n('files')
+ },
+ isPerm = function(perm){
+ return (!isNaN(parseInt(perm, 8) && parseInt(perm, 8) <= 511) || perm.match(/^([r-][w-][x-]){3}$/i));
+ };
+
+ this.tpl = {
+ main : '<div class="ui-helper-clearfix elfinder-info-title"><span class="elfinder-cwd-icon {class} ui-corner-all"/>{title}</div>'
+ +'{dataTable}',
+ itemTitle : '<strong>{name}</strong><span id="elfinder-info-kind">{kind}</span>',
+ groupTitle : '<strong>{items}: {num}</strong>',
+ dataTable : '<table id="{id}-table-perm"><tr><td>{0}</td><td>{1}</td><td>{2}</td></tr></table>'
+ +'<div class="">'+msg.perm+': <input class="elfinder-tabstop elfinder-focus" id="{id}-perm" type="text" size="4" maxlength="3" value="{value}"></div>',
+ fieldset : '<fieldset id="{id}-fieldset-{level}"><legend>{f_title}{name}</legend>'
+ +'<input type="checkbox" value="4" class="elfinder-tabstop" id="{id}-read-{level}-perm"{checked-r}> <label for="{id}-read-{level}-perm">'+msg.read+'</label><br>'
+ +'<input type="checkbox" value="6" class="elfinder-tabstop" id="{id}-write-{level}-perm"{checked-w}> <label for="{id}-write-{level}-perm">'+msg.write+'</label><br>'
+ +'<input type="checkbox" value="5" class="elfinder-tabstop" id="{id}-execute-{level}-perm"{checked-x}> <label for="{id}-execute-{level}-perm">'+msg.execute+'</label><br>'
+ };
+
+ this.shortcuts = [{
+ //pattern : 'ctrl+p'
+ }];
+
+ this.getstate = function(sel) {
+ var fm = this.fm;
+ sel = sel || fm.selected();
+ if (sel.length == 0) {
+ sel = [ fm.cwd().hash ];
+ }
+ return this.checkstate(this.files(sel)) ? 0 : -1;
+ };
+
+ this.checkstate = function(sel) {
+ var cnt = sel.length;
+ if (!cnt) return false;
+ var chk = $.grep(sel, function(f) {
+ return (f.isowner && f.perm && isPerm(f.perm) && (cnt == 1 || f.mime != 'directory')) ? true : false;
+ }).length;
+ return (cnt == chk)? true : false;
+ };
+
+ this.exec = function(select) {
+ var hashes = this.hashes(select),
+ files = this.files(hashes);
+ if (! files.length) {
+ hashes = [ this.fm.cwd().hash ];
+ files = this.files(hashes);
+ }
+ var fm = this.fm,
+ dfrd = $.Deferred().always(function() {
+ fm.enable();
+ }),
+ tpl = this.tpl,
+ cnt = files.length,
+ file = files[0],
+ id = fm.namespace + '-perm-' + file.hash,
+ view = tpl.main,
+ checked = ' checked="checked"',
+ buttons = function() {
+ var buttons = {};
+ buttons[fm.i18n('btnApply')] = save;
+ buttons[fm.i18n('btnCancel')] = function() { dialog.elfinderdialog('close'); };
+ return buttons;
+ },
+ save = function() {
+ var perm = $.trim($('#'+id+'-perm').val()),
+ reqData;
+
+ if (!isPerm(perm)) return false;
+
+ dialog.elfinderdialog('close');
+
+ reqData = {
+ cmd : 'chmod',
+ targets : hashes,
+ mode : perm
+ };
+ fm.request({
+ data : reqData,
+ notify : {type : 'chmod', cnt : cnt}
+ })
+ .fail(function(error) {
+ dfrd.reject(error);
+ })
+ .done(function(data) {
+ if (data.changed && data.changed.length) {
+ data.undo = {
+ cmd : 'chmod',
+ callback : function() {
+ var reqs = [];
+ $.each(prevVals, function(perm, hashes) {
+ reqs.push(fm.request({
+ data : {cmd : 'chmod', targets : hashes, mode : perm},
+ notify : {type : 'undo', cnt : hashes.length}
+ }));
+ });
+ return $.when.apply(null, reqs);
+ }
+ };
+ data.redo = {
+ cmd : 'chmod',
+ callback : function() {
+ return fm.request({
+ data : reqData,
+ notify : {type : 'redo', cnt : hashes.length}
+ });
+ }
+ };
+ }
+ dfrd.resolve(data);
+ });
+ },
+ setperm = function() {
+ var perm = '';
+ var _perm;
+ for (var i = 0; i < 3; i++){
+ _perm = 0;
+ if ($("#"+id+"-read-"+level[i]+'-perm').is(':checked')) {
+ _perm = (_perm | 4);
+ }
+ if ($("#"+id+"-write-"+level[i]+'-perm').is(':checked')) {
+ _perm = (_perm | 2);
+ }
+ if ($("#"+id+"-execute-"+level[i]+'-perm').is(':checked')) {
+ _perm = (_perm | 1);
+ }
+ perm += _perm.toString(8);
+ }
+ $('#'+id+'-perm').val(perm);
+ },
+ setcheck = function(perm) {
+ var _perm;
+ for (var i = 0; i < 3; i++){
+ _perm = parseInt(perm.slice(i, i+1), 8);
+ $("#"+id+"-read-"+level[i]+'-perm').prop("checked", false);
+ $("#"+id+"-write-"+level[i]+'-perm').prop("checked", false);
+ $("#"+id+"-execute-"+level[i]+'-perm').prop("checked", false);
+ if ((_perm & 4) == 4) {
+ $("#"+id+"-read-"+level[i]+'-perm').prop("checked", true);
+ }
+ if ((_perm & 2) == 2) {
+ $("#"+id+"-write-"+level[i]+'-perm').prop("checked", true);
+ }
+ if ((_perm & 1) == 1) {
+ $("#"+id+"-execute-"+level[i]+'-perm').prop("checked", true);
+ }
+ }
+ setperm();
+ },
+ makeperm = function(files) {
+ var perm = '777', ret = '', chk, _chk, _perm;
+ var len = files.length;
+ for (var i2 = 0; i2 < len; i2++) {
+ chk = getPerm(files[i2].perm);
+ if (! prevVals[chk]) {
+ prevVals[chk] = [];
+ }
+ prevVals[chk].push(files[i2].hash);
+ ret = '';
+ for (var i = 0; i < 3; i++){
+ _chk = parseInt(chk.slice(i, i+1), 8);
+ _perm = parseInt(perm.slice(i, i+1), 8);
+ if ((_chk & 4) != 4 && (_perm & 4) == 4) {
+ _perm -= 4;
+ }
+ if ((_chk & 2) != 2 && (_perm & 2) == 2) {
+ _perm -= 2;
+ }
+ if ((_chk & 1) != 1 && (_perm & 1) == 1) {
+ _perm -= 1;
+ }
+ ret += _perm.toString(8);
+ }
+ perm = ret;
+ }
+ return perm;
+ },
+ makeName = function(name) {
+ return name? ':'+name : '';
+ },
+ makeDataTable = function(perm, f) {
+ var _perm, fieldset;
+ var value = '';
+ var dataTable = tpl.dataTable;
+ for (var i = 0; i < 3; i++){
+ _perm = parseInt(perm.slice(i, i+1), 8);
+ value += _perm.toString(8);
+ fieldset = tpl.fieldset.replace('{f_title}', fm.i18n(level[i])).replace('{name}', makeName(f[level[i]])).replace(/\{level\}/g, level[i]);
+ dataTable = dataTable.replace('{'+i+'}', fieldset)
+ .replace('{checked-r}', ((_perm & 4) == 4)? checked : '')
+ .replace('{checked-w}', ((_perm & 2) == 2)? checked : '')
+ .replace('{checked-x}', ((_perm & 1) == 1)? checked : '');
+ }
+ dataTable = dataTable.replace('{value}', value).replace('{valueCaption}', msg['perm']);
+ return dataTable;
+ },
+ getPerm = function(perm){
+ if (isNaN(parseInt(perm, 8))) {
+ var mode_array = perm.split('');
+ var a = [];
+
+ for (var i = 0, l = mode_array.length; i < l; i++) {
+ if (i === 0 || i === 3 || i === 6) {
+ if (mode_array[i].match(/[r]/i)) {
+ a.push(1);
+ } else if (mode_array[i].match(/[-]/)) {
+ a.push(0);
+ }
+ } else if ( i === 1 || i === 4 || i === 7) {
+ if (mode_array[i].match(/[w]/i)) {
+ a.push(1);
+ } else if (mode_array[i].match(/[-]/)) {
+ a.push(0);
+ }
+ } else {
+ if (mode_array[i].match(/[x]/i)) {
+ a.push(1);
+ } else if (mode_array[i].match(/[-]/)) {
+ a.push(0);
+ }
+ }
+ }
+
+ a.splice(3, 0, ",");
+ a.splice(7, 0, ",");
+
+ var b = a.join("");
+ var b_array = b.split(",");
+ var c = [];
+
+ for (var j = 0, m = b_array.length; j < m; j++) {
+ var p = parseInt(b_array[j], 2).toString(8);
+ c.push(p);
+ }
+
+ perm = c.join('');
+ } else {
+ perm = parseInt(perm, 8).toString(8);
+ }
+ return perm;
+ },
+ opts = {
+ title : this.title,
+ width : 'auto',
+ buttons : buttons(),
+ close : function() { $(this).elfinderdialog('destroy'); }
+ },
+ dialog = fm.getUI().find('#'+id),
+ prevVals = {},
+ tmb = '', title, dataTable;
+
+ if (dialog.length) {
+ dialog.elfinderdialog('toTop');
+ return $.Deferred().resolve();
+ }
+
+ view = view.replace('{class}', cnt > 1 ? 'elfinder-cwd-icon-group' : fm.mime2class(file.mime));
+ if (cnt > 1) {
+ title = tpl.groupTitle.replace('{items}', fm.i18n('items')).replace('{num}', cnt);
+ } else {
+ title = tpl.itemTitle.replace('{name}', file.name).replace('{kind}', fm.mime2kind(file));
+ tmb = fm.tmb(file);
+ }
+
+ dataTable = makeDataTable(makeperm(files), files.length == 1? files[0] : {});
+
+ view = view.replace('{title}', title).replace('{dataTable}', dataTable).replace(/{id}/g, id);
+
+ dialog = this.fmDialog(view, opts);
+ dialog.attr('id', id);
+
+ // load thumbnail
+ if (tmb) {
+ $('<img/>')
+ .on('load', function() { dialog.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); })
+ .attr('src', tmb.url);
+ }
+
+ $('#' + id + '-table-perm :checkbox').on('click', function(){setperm('perm');});
+ $('#' + id + '-perm').on('keydown', function(e) {
+ var c = e.keyCode;
+ if (c == $.ui.keyCode.ENTER) {
+ e.stopPropagation();
+ save();
+ return;
+ }
+ }).on('focus', function(e){
+ $(this).trigger('select');
+ }).on('keyup', function(e) {
+ if ($(this).val().length == 3) {
+ $(this).trigger('select');
+ setcheck($(this).val());
+ }
+ });
+
+ return dfrd;
+ };
+};
+
+
+/*
+ * File: /js/commands/colwidth.js
+ */
+
+/**
+ * @class elFinder command "colwidth"
+ * CWD list table columns width to auto
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.colwidth = function() {
+ 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 $.Deferred().resolve();
+ };
+
+};
+
+/*
+ * File: /js/commands/copy.js
+ */
+
+/**
+ * @class elFinder command "copy".
+ * Put files in filemanager clipboard.
+ *
+ * @type elFinder.command
+ * @author Dmitry (dio) Levashov
+ */
+elFinder.prototype.commands.copy = function() {
+ this.shortcuts = [{
+ pattern : 'ctrl+c ctrl+insert'
+ }];
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length;
+
+ return cnt && $.grep(sel, function(f) { return f.read ? true : false; }).length == cnt ? 0 : -1;
+ };
+
+ this.exec = function(hashes) {
+ var fm = this.fm,
+ dfrd = $.Deferred()
+ .fail(function(error) {
+ fm.error(error);
+ });
+
+ $.each(this.files(hashes), function(i, file) {
+ if (! file.read) {
+ return !dfrd.reject(['errCopy', file.name, 'errPerm']);
+ }
+ });
+
+ return dfrd.state() == 'rejected' ? dfrd : dfrd.resolve(fm.clipboard(this.hashes(hashes)));
+ };
+
+};
+
+
+/*
+ * File: /js/commands/cut.js
+ */
+
+/**
+ * @class elFinder command "copy".
+ * Put files in filemanager clipboard.
+ *
+ * @type elFinder.command
+ * @author Dmitry (dio) Levashov
+ */
+elFinder.prototype.commands.cut = function() {
+ var fm = this.fm;
+
+ this.shortcuts = [{
+ pattern : 'ctrl+x shift+insert'
+ }];
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length;
+
+ return cnt && $.grep(sel, function(f) { return f.read && ! f.locked && ! fm.isRoot(f) ? true : false; }).length == cnt ? 0 : -1;
+ };
+
+ this.exec = function(hashes) {
+ var dfrd = $.Deferred()
+ .fail(function(error) {
+ fm.error(error);
+ });
+
+ $.each(this.files(hashes), function(i, file) {
+ if (!(file.read && ! file.locked && ! fm.isRoot(file)) ) {
+ return !dfrd.reject(['errCopy', file.name, 'errPerm']);
+ }
+ if (file.locked) {
+ return !dfrd.reject(['errLocked', file.name]);
+ }
+ });
+
+ return dfrd.state() == 'rejected' ? dfrd : dfrd.resolve(fm.clipboard(this.hashes(hashes), true));
+ };
+
+};
+
+
+/*
+ * File: /js/commands/download.js
+ */
+
+/**
+ * @class elFinder command "download".
+ * Download selected files.
+ * Only for new api
+ *
+ * @author Dmitry (dio) Levashov, dio@std42.ru
+ **/
+elFinder.prototype.commands.zipdl = function() {};
+elFinder.prototype.commands.download = function() {
+ var self = this,
+ fm = this.fm,
+ czipdl = null,
+ zipOn = false,
+ mixed = false,
+ dlntf = false,
+ cpath = window.location.pathname || '/',
+ filter = function(hashes, inExec) {
+ var volumeid, mixedCmd;
+
+ if (czipdl !== null) {
+ if (fm.searchStatus.state > 1) {
+ mixed = fm.searchStatus.mixed;
+ } else if (fm.leafRoots[fm.cwd().hash]) {
+ volumeid = fm.cwd().volumeid;
+ $.each(hashes, function(i, h) {
+ if (h.indexOf(volumeid) !== 0) {
+ mixed = true;
+ return false;
+ }
+ });
+ }
+ zipOn = (fm.isCommandEnabled('zipdl', hashes[0]));
+ }
+
+ if (mixed) {
+ mixedCmd = czipdl? 'zipdl' : 'download';
+ hashes = $.grep(hashes, function(h) {
+ var f = fm.file(h),
+ res = (! f || (! czipdl && f.mime === 'directory') || ! fm.isCommandEnabled(mixedCmd, h))? false : true;
+ if (f && inExec && ! res) {
+ fm.cwdHash2Elm(f.hash).trigger('unselect');
+ }
+ return res;
+ });
+ if (! hashes.length) {
+ return [];
+ }
+ } else {
+ if (!fm.isCommandEnabled('download', hashes[0])) {
+ return [];
+ }
+ }
+
+ return $.grep(self.files(hashes), function(f) {
+ var res = (! f.read || (! zipOn && f.mime == 'directory')) ? false : true;
+ if (inExec && ! res) {
+ fm.cwdHash2Elm(f.hash).trigger('unselect');
+ }
+ return res;
+ });
+ };
+
+ this.linkedCmds = ['zipdl'];
+
+ this.shortcuts = [{
+ pattern : 'shift+enter'
+ }];
+
+ this.getstate = function(select) {
+ var sel = this.hashes(select),
+ cnt = sel.length,
+ maxReq = this.options.maxRequests || 10,
+ mixed = false,
+ croot = '';
+
+ if (cnt < 1) {
+ return -1;
+ }
+ cnt = filter(sel).length;
+
+ return (cnt && (zipOn || (cnt <= maxReq && ((!fm.UA.IE && !fm.UA.Mobile) || cnt == 1))) ? 0 : -1);
+ };
+
+ fm.bind('contextmenu', function(e){
+ var fm = self.fm,
+ helper = null,
+ targets, file, link,
+ getExtra = function(file) {
+ var link = file.url || fm.url(file.hash);
+ return {
+ icon: 'link',
+ node: $('<a/>')
+ .attr({href: link, target: '_blank', title: fm.i18n('link')})
+ .text(file.name)
+ .on('mousedown click touchstart touchmove touchend contextmenu', function(e){
+ e.stopPropagation();
+ })
+ .on('dragstart', function(e) {
+ var dt = e.dataTransfer || e.originalEvent.dataTransfer || null;
+ helper = null;
+ if (dt) {
+ var icon = function(f) {
+ var mime = f.mime, i, tmb = fm.tmb(f);
+ i = '<div class="elfinder-cwd-icon '+fm.mime2class(mime)+' ui-corner-all"/>';
+ if (tmb) {
+ i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML;
+ }
+ return i;
+ };
+ dt.effectAllowed = 'copyLink';
+ if (dt.setDragImage) {
+ helper = $('<div class="elfinder-drag-helper html5-native">').append(icon(file)).appendTo($(document.body));
+ dt.setDragImage(helper.get(0), 50, 47);
+ }
+ if (!fm.UA.IE) {
+ dt.setData('elfinderfrom', window.location.href + file.phash);
+ dt.setData('elfinderfrom:' + dt.getData('elfinderfrom'), '');
+ }
+ }
+ })
+ .on('dragend', function(e) {
+ helper && helper.remove();
+ })
+ };
+ };
+ self.extra = null;
+ if (e.data) {
+ targets = e.data.targets || [];
+ if (targets.length === 1 && (file = fm.file(targets[0])) && file.mime !== 'directory') {
+ if (file.url != '1') {
+ self.extra = getExtra(file);
+ } else {
+ // Get URL ondemand
+ var node;
+ self.extra = {
+ icon: 'link',
+ node: $('<a/>')
+ .attr({href: '#', title: fm.i18n('getLink'), draggable: 'false'})
+ .text(file.name)
+ .on('click touchstart', function(e){
+ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) {
+ return;
+ }
+ var parent = node.parent();
+ e.stopPropagation();
+ e.preventDefault();
+ parent.removeClass('ui-state-disabled').addClass('elfinder-button-icon-spinner');
+ fm.request({
+ data : {cmd : 'url', target : file.hash},
+ preventDefault : true
+ })
+ .always(function(data) {
+ parent.removeClass('elfinder-button-icon-spinner');
+ if (data.url) {
+ var rfile = fm.file(file.hash);
+ rfile.url = data.url;
+ node.replaceWith(getExtra(file).node);
+ } else {
+ parent.addClass('ui-state-disabled');
+ }
+ });
+
+ })
+ };
+ node = self.extra.node;
+ node.ready(function(){
+ requestAnimationFrame(function(){
+ node.parent().addClass('ui-state-disabled').css('pointer-events', 'auto');
+ });
+ });
+ }
+ }
+ }
+ }).one('open', function() {
+ if (fm.api >= 2.1012) {
+ czipdl = fm.getCommand('zipdl');
+ }
+ dlntf = fm.api > 2.1038 && !fm.isCORS;
+ });
+
+ this.exec = function(select) {
+ var hashes = this.hashes(select),
+ fm = this.fm,
+ base = fm.options.url,
+ files = filter(hashes, true),
+ dfrd = $.Deferred(),
+ iframes = '',
+ cdata = '',
+ targets = {},
+ i, url,
+ linkdl = false,
+ getTask = function(hashes) {
+ return function() {
+ var dfd = $.Deferred(),
+ root = fm.file(fm.root(hashes[0])),
+ single = (hashes.length === 1),
+ volName = root? (root.i18 || root.name) : null,
+ dir, dlName, phash;
+ if (single) {
+ if (dir = fm.file(hashes[0])) {
+ dlName = (dir.i18 || dir.name);
+ }
+ } else {
+ $.each(hashes, function() {
+ var d = fm.file(this);
+ if (d && (!phash || phash === d.phash)) {
+ phash = d.phash;
+ } else {
+ phash = null;
+ return false;
+ }
+ });
+ if (phash && (dir = fm.file(phash))) {
+ dlName = (dir.i18 || dir.name) + '-' + hashes.length;
+ }
+ }
+ if (dlName) {
+ volName = dlName;
+ }
+ volName && (volName = ' (' + volName + ')');
+ fm.request({
+ data : {cmd : 'zipdl', targets : hashes},
+ notify : {type : 'zipdl', cnt : 1, hideCnt : true, msg : fm.i18n('ntfzipdl') + volName},
+ cancel : true,
+ eachCancel : true,
+ preventDefault : true
+ }).done(function(e) {
+ var zipdl, dialog, btn = {}, dllink, form, iframe, m,
+ uniq = 'dlw' + (+new Date());
+ if (e.error) {
+ fm.error(e.error);
+ dfd.resolve();
+ } else if (e.zipdl) {
+ zipdl = e.zipdl;
+ if (dlName) {
+ m = fm.splitFileExtention(zipdl.name || '');
+ dlName += m[1]? ('.' + m[1]) : '.zip';
+ } else {
+ dlName = zipdl.name;
+ }
+ if ((html5dl && (!fm.UA.Safari || fm.isSameOrigin(fm.options.url))) || linkdl) {
+ url = fm.options.url + (fm.options.url.indexOf('?') === -1 ? '?' : '&')
+ + 'cmd=zipdl&download=1';
+ $.each([hashes[0], zipdl.file, dlName, zipdl.mime], function(key, val) {
+ url += '&targets%5B%5D='+encodeURIComponent(val);
+ });
+ $.each(fm.customData, function(key, val) {
+ url += '&'+encodeURIComponent(key)+'='+encodeURIComponent(val);
+ });
+ url += '&'+encodeURIComponent(dlName);
+ dllink = $('<a/>')
+ .attr('href', url)
+ .attr('download', fm.escape(dlName))
+ .on('click', function() {
+ dfd.resolve();
+ dialog && dialog.elfinderdialog('destroy');
+ });
+ if (linkdl) {
+ dllink.attr('target', '_blank')
+ .append('<span class="elfinder-button-icon elfinder-button-icon-download"></span>'+fm.escape(dlName));
+ btn[fm.i18n('btnCancel')] = function() {
+ dialog.elfinderdialog('destroy');
+ };
+ dialog = self.fmDialog(dllink, {
+ title: fm.i18n('link'),
+ buttons: btn,
+ width: '200px',
+ destroyOnClose: true,
+ close: function() {
+ (dfd.state() !== 'resolved') && dfd.resolve();
+ }
+ });
+ } else {
+ click(dllink.hide().appendTo('body').get(0));
+ dllink.remove();
+ }
+ } else {
+ form = $('<form action="'+fm.options.url+'" method="post" target="'+uniq+'" style="display:none"/>')
+ .append('<input type="hidden" name="cmd" value="zipdl"/>')
+ .append('<input type="hidden" name="download" value="1"/>');
+ $.each([hashes[0], zipdl.file, dlName, zipdl.mime], function(key, val) {
+ form.append('<input type="hidden" name="targets[]" value="'+fm.escape(val)+'"/>');
+ });
+ $.each(fm.customData, function(key, val) {
+ form.append('<input type="hidden" name="'+key+'" value="'+fm.escape(val)+'"/>');
+ });
+ form.attr('target', uniq).appendTo('body');
+ iframe = $('<iframe style="display:none" name="'+uniq+'">')
+ .appendTo('body')
+ .ready(function() {
+ form.submit().remove();
+ dfd.resolve();
+ setTimeout(function() {
+ iframe.remove();
+ }, 20000); // give 20 sec file to be saved
+ });
+ }
+ }
+ }).fail(function(error) {
+ error && fm.error(error);
+ dfd.resolve();
+ });
+ return dfd.promise();
+ };
+ },
+ // use MouseEvent to click element for Safari etc
+ click = function(a) {
+ var clickEv;
+ if (typeof MouseEvent === 'function') {
+ clickEv = new MouseEvent('click');
+ } else {
+ clickEv = document.createEvent('MouseEvents');
+ clickEv.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+ }
+ a.dispatchEvent(clickEv);
+ },
+ checkCookie = function(id) {
+ var name = 'elfdl' + id,
+ parts;
+ parts = document.cookie.split(name + "=");
+ if (parts.length === 2) {
+ ntftm && clearTimeout(ntftm);
+ document.cookie = name + '=; path=' + cpath + '; max-age=0';
+ closeNotify();
+ } else {
+ setTimeout(function() { checkCookie(id); }, 200);
+ }
+ },
+ closeNotify = function() {
+ if (fm.ui.notify.children('.elfinder-notify-download').length) {
+ fm.notify({
+ type : 'download',
+ cnt : -1
+ });
+ }
+ },
+ reqids = [],
+ link, html5dl, fileCnt, clickEv, cid, ntftm, reqid;
+
+ if (!files.length) {
+ return dfrd.reject();
+ }
+
+ fileCnt = $.grep(files, function(f) { return f.mime === 'directory'? false : true; }).length;
+ link = $('<a>').hide().appendTo('body');
+ html5dl = (typeof link.get(0).download === 'string');
+
+ if (zipOn && (fileCnt !== files.length || fileCnt >= (this.options.minFilesZipdl || 1))) {
+ link.remove();
+ linkdl = (!html5dl && fm.UA.Mobile);
+ if (mixed) {
+ targets = {};
+ $.each(files, function(i, f) {
+ var p = f.hash.split('_', 2);
+ if (! targets[p[0]]) {
+ targets[p[0]] = [ f.hash ];
+ } else {
+ targets[p[0]].push(f.hash);
+ }
+ });
+ if (!linkdl && fm.UA.Mobile && Object.keys(targets).length > 1) {
+ linkdl = true;
+ }
+ } else {
+ targets = [ $.map(files, function(f) { return f.hash; }) ];
+ }
+ dfrd = fm.sequence($.map(targets, function(t) { return getTask(t); })).always(
+ function() {
+ fm.trigger('download', {files : files});
+ }
+ );
+ return dfrd;
+ } else {
+ reqids = [];
+ for (i = 0; i < files.length; i++) {
+ url = fm.openUrl(files[i].hash, true);
+ if (dlntf && url.substr(0, fm.options.url.length) === fm.options.url) {
+ reqid = fm.getRequestId();
+ reqids.push(reqid);
+ url += '&cpath=' + cpath + '&reqid=' + reqid;
+ ntftm = setTimeout(function() {
+ fm.notify({
+ type : 'download',
+ cnt : 1,
+ cancel : (fm.UA.IE || fm.UA.Edge)? void(0) : function() {
+ if (reqids.length) {
+ $.each(reqids, function() {
+ fm.request({
+ data: {
+ cmd: 'abort',
+ id: this
+ },
+ preventDefault: true
+ });
+ });
+ }
+ reqids = [];
+ }
+ });
+ }, fm.notifyDelay);
+ checkCookie(reqid);
+ }
+ if (html5dl && (!fm.UA.Safari || fm.isSameOrigin(url))) {
+ click(link.attr('href', url)
+ .attr('download', fm.escape(files[i].name))
+ .get(0)
+ );
+ } else {
+ if (fm.UA.Mobile) {
+ setTimeout(function(){
+ if (! window.open(url)) {
+ fm.error('errPopup');
+ ntftm && cleaerTimeout(ntftm);
+ closeNotify();
+ }
+ }, 100);
+ } else {
+ iframes += '<iframe class="downloader" id="downloader-' + files[i].hash+'" style="display:none" src="'+url+'"/>';
+ }
+ }
+ }
+ link.remove();
+ $(iframes)
+ .appendTo('body')
+ .ready(function() {
+ setTimeout(function() {
+ $(iframes).each(function() {
+ $('#' + $(this).attr('id')).remove();
+ });
+ }, 20000 + (10000 * i)); // give 20 sec + 10 sec for each file to be saved
+ });
+ fm.trigger('download', {files : files});
+ return dfrd.resolve();
+ }
+ };
+
+};
+
+
+/*
+ * File: /js/commands/duplicate.js
+ */
+
+/**
+ * @class elFinder command "duplicate"
+ * Create file/folder copy with suffix "copy Number"
+ *
+ * @type elFinder.command
+ * @author Dmitry (dio) Levashov
+ */
+elFinder.prototype.commands.duplicate = function() {
+ var fm = this.fm;
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length;
+
+ return cnt && fm.cwd().write && $.grep(sel, function(f) { return f.read && f.phash === fm.cwd().hash && ! fm.isRoot(f)? true : false; }).length == cnt ? 0 : -1;
+ };
+
+ this.exec = function(hashes) {
+ var fm = this.fm,
+ files = this.files(hashes),
+ cnt = files.length,
+ dfrd = $.Deferred()
+ .fail(function(error) {
+ error && fm.error(error);
+ }),
+ args = [];
+
+ if (! cnt) {
+ return dfrd.reject();
+ }
+
+ $.each(files, function(i, file) {
+ if (!file.read || !fm.file(file.phash).write) {
+ return !dfrd.reject(['errCopy', file.name, 'errPerm']);
+ }
+ });
+
+ if (dfrd.state() == 'rejected') {
+ return dfrd;
+ }
+
+ return fm.request({
+ data : {cmd : 'duplicate', targets : this.hashes(hashes)},
+ notify : {type : 'copy', cnt : cnt},
+ navigate : {
+ toast : {
+ inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdduplicate')])}
+ }
+ }
+ });
+
+ };
+
+};
+
+
+/*
+ * File: /js/commands/edit.js
+ */
+
+/**
+ * @class elFinder command "edit".
+ * Edit text file in dialog window
+ *
+ * @author Dmitry (dio) Levashov, dio@std42.ru
+ **/
+elFinder.prototype.commands.edit = function() {
+ 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 = $('<select class="ui-corner-all"/>'),
+ hval;
+ if (heads) {
+ $.each(heads, function(i, head) {
+ hval = fm.escape(head.value);
+ sel.append('<option value="'+hval+'">'+(head.caption? fm.escape(head.caption) : hval)+'</option>');
+ });
+ }
+ $.each(self.options.encodings, function(i, v) {
+ sel.append('<option value="'+v+'">'+v+'</option>');
+ });
+ return sel;
+ },
+ getDlgWidth = function() {
+ var m, width;
+ if (typeof self.options.dialogWidth === 'string' && (m = self.options.dialogWidth.match(/(\d+)%/))) {
+ width = parseInt(fm.getUI().width() * (m[1] / 100));
+ } else {
+ width = parseInt(self.options.dialogWidth || 650);
+ }
+ return Math.min(width, $(window).width());
+ },
+
+ /**
+ * 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 $.grep(files, function(file) {
+ var res;
+ if (skip || file.mime === 'directory') {
+ return false;
+ }
+ res = file.read
+ && (allowAll || fm.mimeIsText(file.mime) || $.inArray(file.mime, cnt === 1? mimesSingle : mimes) !== -1)
+ && (!self.onlyMimes.length || $.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 $.Deferred
+ **/
+ dialog = function(id, file, content, encoding, editor) {
+
+ var dfrd = $.Deferred(),
+ _loaded = false,
+ loaded = function() {
+ if (!_loaded) {
+ fm.toast({
+ mode: 'warning',
+ msg: fm.i18n('nowLoading')
+ });
+ return false;
+ }
+ return true;
+ },
+ save = function() {
+ var encord = selEncoding? selEncoding.val():void(0),
+ saveDfd = $.Deferred().fail(function(err) {
+ dialogNode.show().find('button.elfinder-btncnt-0,button.elfinder-btncnt-1').hide();
+ }),
+ conf, res;
+ 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) {
+ res.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; }
+ save().done(function() {
+ _loaded = false;
+ dialogNode.show();
+ cancel();
+ }).fail(function(err) {
+ dialogNode.show();
+ err && fm.error(err);
+ });
+ dialogNode.hide();
+ },
+ saveAs = function() {
+ if (!loaded()) { return; }
+ var prevOld = old,
+ phash = fm.file(file.phash)? file.phash : fm.cwd().hash,
+ 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};
+ $.proxy(fm.res('mixin', 'make'), self)()
+ .done(function(data) {
+ if (data.added && data.added.length) {
+ ta.data('hash', data.added[0].hash);
+ save().done(function() {
+ _loaded = false;
+ dialogNode.show();
+ cancel();
+ dialogs.fadeIn();
+ }).fail(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,
+ 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});
+ }
+
+ $.when([reqOpen]).done(function() {
+ reqOpen? fm.one('cwdrender', make) : make();
+ }).fail(fail);
+ },
+ changed = function() {
+ var dfd = $.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
+ });
+ }, 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 || true);
+ });
+ } else {
+ dfd.resolve(old !== res);
+ }
+ return dfd;
+ },
+ opts = {
+ title : fm.escape(file.name),
+ width : getDlgWidth(),
+ 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;
+ });
+ } 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');
+ });
+ }
+ 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() {
+ return ta.getContent.call(ta, ta[0]);
+ },
+ 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);
+ }
+ },
+ saveAsFile = {},
+ ta, old, dialogNode, selEncoding, extEditor, maxW, syncInterval;
+
+ if (editor) {
+ if (editor.html) {
+ ta = $(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() {
+ var 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');
+ }
+ });
+ }
+ };
+
+ ta = $('<textarea class="elfinder-file-edit" rows="20" id="'+id+'-ta"></textarea>')
+ .on('input propertychange', stateChange);
+
+ if (!ta.editor || !ta.editor.info || ta.editor.info.useTextAreaEvent) {
+ ta.on('keydown', function(e) {
+ var code = e.keyCode,
+ value, start;
+
+ e.stopPropagation();
+ if (code == $.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) {
+ var heads = (encoding && encoding !== 'unknown')? [{value: encoding}] : [],
+ wfake = $('<select/>').hide(),
+ setSelW = function(init) {
+ init && wfake.appendTo(selEncoding.parent());
+ wfake.empty().append($('<option/>').text(selEncoding.val()));
+ selEncoding.width(wfake.width());
+ };
+ // ta.hide() for performance tune. Need ta.show() in `load()` if use textarea node.
+ ta.hide().val(content);
+ 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($('<div class="ui-dialog-buttonset elfinder-edit-extras"/>').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 = $(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? elfNode : $(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 = $.Deferred(),
+ id = 'edit-'+fm.namespace+'-'+file.hash,
+ d = fm.getUI().find('#'+id),
+ conv = !convert? 0 : convert,
+ 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;
+ }
+
+ if (editor.info.urlAsContent || editor.info.preventGet || editor.info.noContent) {
+ req = $.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 {
+ 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 = $('<div class="elfinder-dialog-confirm-encoding"/>'),
+ head = {value: data.doconv},
+ detected;
+
+ if (data.doconv === 'unknown') {
+ head.caption = '-';
+ }
+ selEncoding = getEncSelect([head]);
+ $(this).next().find('.ui-dialog-buttonset')
+ .prepend(base.append($('<label>'+fm.i18n('encoding')+' </label>').append(selEncoding)));
+ };
+ }
+ });
+ } else {
+ if ((!editor || !editor.info || !editor.info.preventGet) && 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)
+ .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;
+ (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);
+ $(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] === '*' || $.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];
+ }
+ $.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 || (editor.info.canMakeEmpty !== false && fm.mimeIsText(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 ' + i);
+ 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 (!$.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 = [];
+ $.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;
+
+
+ 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'])});
+ $.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 = $.Deferred().resolve();
+ }
+ } else {
+ dfd = $.Deferred().resolve();
+ }
+
+ dfd.always(function() {
+ if (ccData) {
+ opts.editors = $.grep(opts.editors, function(e) {
+ if (e.info && e.info.cmdCheck) {
+ return ccData[e.info.cmdCheck]? true : false;
+ } else {
+ return true;
+ }
+ });
+ }
+ $.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: editor.mimes});
+ }
+ }
+ });
+
+ mimesSingle = ($.uniqueSort || $.unique)(mimesSingle);
+ mimes = ($.uniqueSort || $.unique)(mimes);
+
+ opts.editors = $.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 = [];
+ $.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: $('<span/>')
+ .attr({title: fm.i18n('select')})
+ .on('click touchstart', function(e){
+ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) {
+ return;
+ }
+ var node = $(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 = fm.storage('mkfileHides') || {};
+
+ $.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 = $.map(files, function(f) { return f.hash; }),
+ list = [],
+ editor = opts && opts.editor? opts.editor : null,
+ node = $(opts && opts._currentNode? opts._currentNode : fm.cwdHash2Elm(hashes[0])),
+ getEditor = function() {
+ var dfd = $.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 = $.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, void(0), editor).fail(function(error) {
+ error && fm.error(error);
+ }));
+ }
+
+ if (list.length) {
+ $.when.apply(null, list).done(function() {
+ dfrd.resolve();
+ }).fail(function() {
+ dfrd.reject();
+ });
+ } else {
+ dfrd.reject();
+ }
+ }).fail(function() {
+ dfrd.reject();
+ });
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/empty.js
+ */
+
+/**
+ * @class elFinder command "empty".
+ * Empty the folder
+ *
+ * @type elFinder.command
+ * @author Naoki Sawada
+ */
+elFinder.prototype.commands.empty = function() {
+ var self, fm,
+ selFiles = function(select) {
+ var sel = self.files(select);
+ if (!sel.length) {
+ sel = [ fm.cwd() ];
+ }
+ return sel;
+ };
+
+ this.linkedCmds = ['rm'];
+
+ this.init = function() {
+ // lazy assign to make possible to become superclass
+ self = this;
+ fm = this.fm;
+ };
+
+ this.getstate = function(select) {
+ var sel = selFiles(select),
+ cnt;
+
+ cnt = sel.length;
+ return $.grep(sel, function(f) { return f.read && f.write && f.mime === 'directory' ? true : false; }).length == cnt ? 0 : -1;
+ };
+
+ this.exec = function(hashes) {
+ var dirs = selFiles(hashes),
+ cnt = dirs.length,
+ dfrd = $.Deferred()
+ .done(function() {
+ var data = {changed: {}};
+ fm.toast({msg: fm.i18n(['"'+success.join('", ')+'"', 'complete', fm.i18n('cmdempty')])});
+ $.each(dirs, function(i, dir) {
+ data.changed[dir.hash] = dir;
+ });
+ fm.change(data);
+ })
+ .always(function() {
+ var cwd = fm.cwd().hash;
+ fm.trigger('selectfiles', {files: $.map(dirs, function(d) { return cwd === d.phash? d.hash : null; })});
+ }),
+ success = [],
+ done = function(res) {
+ if (typeof res === 'number') {
+ success.push(dirs[res].name);
+ delete dirs[res].dirs;
+ } else {
+ res && fm.error(res);
+ }
+ (--cnt < 1) && dfrd[success.length? 'resolve' : 'reject']();
+ };
+
+ $.each(dirs, function(i, dir) {
+ var tm;
+ if (!(dir.write && dir.mime === 'directory')) {
+ done(['errEmpty', dir.name, 'errPerm']);
+ return null;
+ }
+ if (!fm.isCommandEnabled('rm', dir.hash)) {
+ done(['errCmdNoSupport', '"rm"']);
+ return null;
+ }
+ tm = setTimeout(function() {
+ fm.notify({type : 'search', cnt : 1, hideCnt : cnt > 1? false : true});
+ }, fm.notifyDelay);
+ fm.request({
+ data : {cmd : 'open', target : dir.hash},
+ preventDefault : true,
+ asNotOpen : true
+ }).done(function(data) {
+ var targets = [];
+ tm && clearTimeout(tm);
+ if (fm.ui.notify.children('.elfinder-notify-search').length) {
+ fm.notify({type : 'search', cnt : -1, hideCnt : cnt > 1? false : true});
+ }
+ if (data && data.files && data.files.length) {
+ if (data.files.length > fm.maxTargets) {
+ done(['errEmpty', dir.name, 'errMaxTargets', fm.maxTargets]);
+ } else {
+ fm.updateCache(data);
+ $.each(data.files, function(i, f) {
+ if (!f.write || f.locked) {
+ done(['errEmpty', dir.name, 'errRm', f.name, 'errPerm']);
+ targets = [];
+ return false;
+ }
+ targets.push(f.hash);
+ });
+ if (targets.length) {
+ fm.exec('rm', targets, { _userAction : true, addTexts : [ fm.i18n('folderToEmpty', dir.name) ] })
+ .fail(function(error) {
+ fm.trigger('unselectfiles', {files: fm.selected()});
+ done(fm.parseError(error) || '');
+ })
+ .done(function() { done(i); });
+ }
+ }
+ } else {
+ fm.toast({ mode: 'warning', msg: fm.i18n('filderIsEmpty', dir.name)});
+ done('');
+ }
+ }).fail(function(error) {
+ done(fm.parseError(error) || '');
+ });
+ });
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/extract.js
+ */
+
+/**
+ * @class elFinder command "extract"
+ * Extract files from archive
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.extract = function() {
+ var self = this,
+ fm = self.fm,
+ mimes = [],
+ filter = function(files) {
+ return $.grep(files, function(file) {
+ return file.read && $.inArray(file.mime, mimes) !== -1 ? true : false;
+ });
+ };
+
+ this.variants = [];
+ this.disableOnSearch = true;
+
+ // Update mimes list on open/reload
+ fm.bind('open reload', function() {
+ mimes = fm.option('archivers')['extract'] || [];
+ if (fm.api > 2) {
+ self.variants = [[{makedir: true}, fm.i18n('cmdmkdir')], [{}, fm.i18n('btnCwd')]];
+ } else {
+ self.variants = [[{}, fm.i18n('btnCwd')]];
+ }
+ self.change();
+ });
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length;
+
+ return cnt && this.fm.cwd().write && filter(sel).length == cnt ? 0 : -1;
+ };
+
+ this.exec = function(hashes, opts) {
+ var files = this.files(hashes),
+ dfrd = $.Deferred(),
+ cnt = files.length,
+ makedir = opts && opts.makedir ? 1 : 0,
+ i, error,
+ decision;
+
+ var overwriteAll = false;
+ var omitAll = false;
+ var mkdirAll = 0;
+
+ var names = $.map(fm.files(hashes), function(file) { return file.name; });
+ var map = {};
+ $.grep(fm.files(hashes), function(file) {
+ map[file.name] = file;
+ return false;
+ });
+
+ var decide = function(decision) {
+ switch (decision) {
+ case 'overwrite_all' :
+ overwriteAll = true;
+ break;
+ case 'omit_all':
+ omitAll = true;
+ break;
+ }
+ };
+
+ var unpack = function(file) {
+ if (!(file.read && fm.file(file.phash).write)) {
+ error = ['errExtract', file.name, 'errPerm'];
+ fm.error(error);
+ dfrd.reject(error);
+ } else if ($.inArray(file.mime, mimes) === -1) {
+ error = ['errExtract', file.name, 'errNoArchive'];
+ fm.error(error);
+ dfrd.reject(error);
+ } else {
+ fm.request({
+ data:{cmd:'extract', target:file.hash, makedir:makedir},
+ notify:{type:'extract', cnt:1},
+ syncOnFail:true,
+ navigate:{
+ toast : makedir? {
+ incwd : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}},
+ inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}}
+ } : {
+ inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')])}
+ }
+ }
+ })
+ .fail(function (error) {
+ if (dfrd.state() != 'rejected') {
+ dfrd.reject(error);
+ }
+ })
+ .done(function () {
+ });
+ }
+ };
+
+ var confirm = function(files, index) {
+ var file = files[index],
+ name = fm.splitFileExtention(file.name)[0],
+ existed = ($.inArray(name, names) >= 0),
+ next = function(){
+ if((index+1) < cnt) {
+ confirm(files, index+1);
+ } else {
+ dfrd.resolve();
+ }
+ };
+ if (!makedir && existed && map[name].mime != 'directory') {
+ fm.confirm(
+ {
+ title : fm.i18n('ntfextract'),
+ text : ['errExists', name, 'confirmRepl'],
+ accept:{
+ label : 'btnYes',
+ callback:function (all) {
+ decision = all ? 'overwrite_all' : 'overwrite';
+ decide(decision);
+ if(!overwriteAll && !omitAll) {
+ if('overwrite' == decision) {
+ unpack(file);
+ }
+ if((index+1) < cnt) {
+ confirm(files, index+1);
+ } else {
+ dfrd.resolve();
+ }
+ } else if(overwriteAll) {
+ for (i = index; i < cnt; i++) {
+ unpack(files[i]);
+ }
+ dfrd.resolve();
+ }
+ }
+ },
+ reject : {
+ label : 'btnNo',
+ callback:function (all) {
+ decision = all ? 'omit_all' : 'omit';
+ decide(decision);
+ if(!overwriteAll && !omitAll && (index+1) < cnt) {
+ confirm(files, index+1);
+ } else if (omitAll) {
+ dfrd.resolve();
+ }
+ }
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback:function () {
+ dfrd.resolve();
+ }
+ },
+ all : ((index+1) < cnt)
+ }
+ );
+ } else if (!makedir) {
+ if (mkdirAll == 0) {
+ fm.confirm({
+ title : fm.i18n('cmdextract'),
+ text : [fm.i18n('cmdextract')+' "'+file.name+'"', 'confirmRepl'],
+ accept:{
+ label : 'btnYes',
+ callback:function (all) {
+ all && (mkdirAll = 1);
+ unpack(file);
+ next();
+ }
+ },
+ reject : {
+ label : 'btnNo',
+ callback:function (all) {
+ all && (mkdirAll = -1);
+ next();
+ }
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback:function () {
+ dfrd.resolve();
+ }
+ },
+ all : ((index+1) < cnt)
+ });
+ } else {
+ (mkdirAll > 0) && unpack(file);
+ next();
+ }
+ } else {
+ unpack(file);
+ next();
+ }
+ };
+
+ if (!(this.enabled() && cnt && mimes.length)) {
+ return dfrd.reject();
+ }
+
+ if(cnt > 0) {
+ confirm(files, 0);
+ }
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/forward.js
+ */
+
+/**
+ * @class elFinder command "forward"
+ * Open next visited folder
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+(elFinder.prototype.commands.forward = function() {
+ 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
+
+
+/*
+ * File: /js/commands/fullscreen.js
+ */
+
+/**
+ * @class elFinder command "fullscreen"
+ * elFinder node to full scrren mode
+ *
+ * @author Naoki Sawada
+ **/
+
+elFinder.prototype.commands.fullscreen = function() {
+ var self = this,
+ fm = this.fm,
+ update = function(e, data) {
+ e.preventDefault();
+ e.stopPropagation();
+ if (data && data.fullscreen) {
+ self.update(void(0), (data.fullscreen === 'on'));
+ }
+ };
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+ this.syncTitleOnChange = true;
+ this.value = false;
+
+ this.options = {
+ ui : 'fullscreenbutton'
+ };
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.exec = function() {
+ var node = fm.getUI().get(0),
+ full = (node === fm.toggleFullscreen(node));
+ self.title = fm.i18n(full ? 'reinstate' : 'cmdfullscreen');
+ self.update(void(0), full);
+ return $.Deferred().resolve();
+ };
+
+ fm.bind('init', function() {
+ fm.getUI().off('resize.' + fm.namespace, update).on('resize.' + fm.namespace, update);
+ });
+};
+
+
+/*
+ * File: /js/commands/getfile.js
+ */
+
+/**
+ * @class elFinder command "getfile".
+ * Return selected files info into outer callback.
+ * For use elFinder with wysiwyg editors etc.
+ *
+ * @author Dmitry (dio) Levashov, dio@std42.ru
+ **/
+(elFinder.prototype.commands.getfile = function() {
+ var self = this,
+ fm = this.fm,
+ filter = function(files) {
+ var o = self.options;
+
+ files = $.grep(files, function(file) {
+ return (file.mime != 'directory' || o.folders) && file.read ? true : false;
+ });
+
+ return o.multiple || files.length == 1 ? files : [];
+ };
+
+ this.alwaysEnabled = true;
+ this.callback = fm.options.getFileCallback;
+ this._disabled = typeof(this.callback) == 'function';
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length;
+
+ return this.callback && cnt && filter(sel).length == cnt ? 0 : -1;
+ };
+
+ this.exec = function(hashes) {
+ var fm = this.fm,
+ opts = this.options,
+ files = this.files(hashes),
+ cnt = files.length,
+ url = fm.option('url'),
+ tmb = fm.option('tmbUrl'),
+ dfrd = $.Deferred()
+ .done(function(data) {
+ var res,
+ done = function() {
+ if (opts.oncomplete == 'close') {
+ fm.hide();
+ } else if (opts.oncomplete == 'destroy') {
+ fm.destroy();
+ }
+ },
+ fail = function(error) {
+ if (opts.onerror == 'close') {
+ fm.hide();
+ } else if (opts.onerror == 'destroy') {
+ fm.destroy();
+ } else {
+ error && fm.error(error);
+ }
+ };
+
+ fm.trigger('getfile', {files : data});
+
+ try {
+ res = self.callback(data, fm);
+ } catch(e) {
+ fail(['Error in `getFileCallback`.', e.message]);
+ return;
+ }
+
+ if (typeof res === 'object' && typeof res.done === 'function') {
+ res.done(done).fail(fail);
+ } else {
+ done();
+ }
+ }),
+ result = function(file) {
+ return opts.onlyURL
+ ? opts.multiple ? $.map(files, function(f) { return f.url; }) : files[0].url
+ : opts.multiple ? files : files[0];
+ },
+ req = [],
+ i, file, dim;
+
+ for (i = 0; i < cnt; i++) {
+ file = files[i];
+ if (file.mime == 'directory' && !opts.folders) {
+ return dfrd.reject();
+ }
+ file.baseUrl = url;
+ if (file.url == '1') {
+ req.push(fm.request({
+ data : {cmd : 'url', target : file.hash},
+ notify : {type : 'url', cnt : 1, hideCnt : true},
+ preventDefault : true
+ })
+ .done(function(data) {
+ if (data.url) {
+ var rfile = fm.file(this.hash);
+ rfile.url = this.url = data.url;
+ }
+ }.bind(file)));
+ } else {
+ file.url = fm.url(file.hash);
+ }
+ if (! opts.onlyURL) {
+ if (opts.getPath) {
+ file.path = fm.path(file.hash);
+ if (file.path === '' && file.phash) {
+ // get parents
+ (function() {
+ var dfd = $.Deferred();
+ req.push(dfd);
+ fm.path(file.hash, false, {})
+ .done(function(path) {
+ file.path = path;
+ })
+ .fail(function() {
+ file.path = '';
+ })
+ .always(function() {
+ dfd.resolve();
+ });
+ })();
+ }
+ }
+ if (file.tmb && file.tmb != 1) {
+ file.tmb = tmb + file.tmb;
+ }
+ if (!file.width && !file.height) {
+ if (file.dim) {
+ dim = file.dim.split('x');
+ file.width = dim[0];
+ file.height = dim[1];
+ } else if (opts.getImgSize && file.mime.indexOf('image') !== -1) {
+ req.push(fm.request({
+ data : {cmd : 'dim', target : file.hash},
+ notify : {type : 'dim', cnt : 1, hideCnt : true},
+ preventDefault : true
+ })
+ .done(function(data) {
+ if (data.dim) {
+ var dim = data.dim.split('x');
+ var rfile = fm.file(this.hash);
+ rfile.width = this.width = dim[0];
+ rfile.height = this.height = dim[1];
+ }
+ }.bind(file)));
+ }
+ }
+ }
+ }
+
+ if (req.length) {
+ $.when.apply(null, req).always(function() {
+ dfrd.resolve(result(files));
+ });
+ return dfrd;
+ }
+
+ return dfrd.resolve(result(files));
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/help.js
+ */
+
+/**
+ * @class elFinder command "help"
+ * "About" dialog
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+(elFinder.prototype.commands.help = function() {
+ var fm = this.fm,
+ self = this,
+ linktpl = '<div class="elfinder-help-link"> <a href="{url}">{link}</a></div>',
+ linktpltgt = '<div class="elfinder-help-link"> <a href="{url}" target="_blank">{link}</a></div>',
+ atpl = '<div class="elfinder-help-team"><div>{author}</div>{work}</div>',
+ url = /\{url\}/,
+ link = /\{link\}/,
+ author = /\{author\}/,
+ work = /\{work\}/,
+ r = 'replace',
+ prim = 'ui-priority-primary',
+ sec = 'ui-priority-secondary',
+ lic = 'elfinder-help-license',
+ tab = '<li class="' + fm.res('class', 'tabstab') + ' elfinder-help-tab-{id}"><a href="#'+fm.namespace+'-help-{id}" class="ui-tabs-anchor">{title}</a></li>',
+ html = ['<div class="ui-tabs ui-widget ui-widget-content ui-corner-all elfinder-help">',
+ '<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-top">'],
+ stpl = '<div class="elfinder-help-shortcut"><div class="elfinder-help-shortcut-pattern">{pattern}</div> {descrip}</div>',
+ sep = '<div class="elfinder-help-separator"/>',
+ selfUrl = $('base').length? document.location.href.replace(/#.*$/, '') : '',
+ clTabActive = fm.res('class', 'tabsactive'),
+
+ getTheme = function() {
+ var src;
+ if (fm.theme && fm.theme.author) {
+ src = atpl[r]('elfinder-help-team', 'elfinder-help-team elfinder-help-term-theme')[r](author, fm.i18n(fm.theme.author) + (fm.theme.email? ' <'+fm.theme.email+'>' : ''))[r](work, fm.i18n('theme') + ' ('+fm.i18n(fm.theme.name)+')');
+ } else {
+ src = '<div class="elfinder-help-team elfinder-help-term-theme" style="display:none"></div>';
+ }
+ return src;
+ },
+
+ about = function() {
+ html.push('<div id="'+fm.namespace+'-help-about" class="ui-tabs-panel ui-widget-content ui-corner-bottom"><div class="elfinder-help-logo"/>');
+ html.push('<h3>elFinder</h3>');
+ html.push('<div class="'+prim+'">'+fm.i18n('webfm')+'</div>');
+ html.push('<div class="'+sec+'">'+fm.i18n('ver')+': '+fm.version+'</div>');
+ html.push('<div class="'+sec+'">'+fm.i18n('protocolver')+': <span class="apiver"></span></div>');
+ html.push('<div class="'+sec+'">jQuery/jQuery UI: '+$().jquery+'/'+$.ui.version+'</div>');
+
+ html.push(sep);
+
+ html.push(linktpltgt[r](url, 'https://studio-42.github.io/elFinder/')[r](link, fm.i18n('homepage')));
+ html.push(linktpltgt[r](url, 'https://github.com/Studio-42/elFinder/wiki')[r](link, fm.i18n('docs')));
+ html.push(linktpltgt[r](url, 'https://github.com/Studio-42/elFinder')[r](link, fm.i18n('github')));
+ //html.push(linktpltgt[r](url, 'http://twitter.com/elrte_elfinder')[r](link, fm.i18n('twitter')));
+
+ html.push(sep);
+
+ html.push('<div class="'+prim+'">'+fm.i18n('team')+'</div>');
+
+ html.push(atpl[r](author, 'Dmitry "dio" Levashov <dio@std42.ru>')[r](work, fm.i18n('chiefdev')));
+ html.push(atpl[r](author, 'Naoki Sawada <hypweb+elfinder@gmail.com>')[r](work, fm.i18n('developer')));
+ html.push(atpl[r](author, 'Troex Nevelin <troex@fury.scancode.ru>')[r](work, fm.i18n('maintainer')));
+ html.push(atpl[r](author, 'Alexey Sukhotin <strogg@yandex.ru>')[r](work, fm.i18n('contributor')));
+
+ if (fm.i18[fm.lang].translator) {
+ $.each(fm.i18[fm.lang].translator.split(', '), function() {
+ html.push(atpl[r](author, $.trim(this))[r](work, fm.i18n('translator')+' ('+fm.i18[fm.lang].language+')'));
+ });
+ }
+
+ html.push(getTheme());
+
+ html.push(sep);
+ html.push('<div class="'+lic+'">'+fm.i18n('icons')+': Pixelmixer, <a href="http://p.yusukekamiyamane.com" target="_blank">Fugue</a>, <a href="https://icons8.com" target="_blank">Icons8</a></div>');
+
+ html.push(sep);
+ html.push('<div class="'+lic+'">Licence: 3-clauses BSD Licence</div>');
+ html.push('<div class="'+lic+'">Copyright © 2009-2019, Studio 42</div>');
+ html.push('<div class="'+lic+'">„ …'+fm.i18n('dontforget')+' ”</div>');
+ html.push('</div>');
+ },
+ shortcuts = function() {
+ var sh = fm.shortcuts();
+ // shortcuts tab
+ html.push('<div id="'+fm.namespace+'-help-shortcuts" class="ui-tabs-panel ui-widget-content ui-corner-bottom">');
+
+ if (sh.length) {
+ html.push('<div class="ui-widget-content elfinder-help-shortcuts">');
+ $.each(sh, function(i, s) {
+ html.push(stpl.replace(/\{pattern\}/, s[0]).replace(/\{descrip\}/, s[1]));
+ });
+
+ html.push('</div>');
+ } else {
+ html.push('<div class="elfinder-help-disabled">'+fm.i18n('shortcutsof')+'</div>');
+ }
+
+
+ html.push('</div>');
+
+ },
+ help = function() {
+ // help tab
+ html.push('<div id="'+fm.namespace+'-help-help" class="ui-tabs-panel ui-widget-content ui-corner-bottom">');
+ html.push('<a href="https://github.com/Studio-42/elFinder/wiki" target="_blank" class="elfinder-dont-panic"><span>DON\'T PANIC</span></a>');
+ html.push('</div>');
+ // end help
+ },
+ useInteg = false,
+ integrations = function() {
+ useInteg = true;
+ html.push('<div id="'+fm.namespace+'-help-integrations" class="ui-tabs-panel ui-widget-content ui-corner-bottom"/>');
+ },
+ useDebug = false,
+ debug = function() {
+ useDebug = true;
+ // debug tab
+ html.push('<div id="'+fm.namespace+'-help-debug" class="ui-tabs-panel ui-widget-content ui-corner-bottom">');
+ html.push('<div class="ui-widget-content elfinder-help-debug"><ul></ul></div>');
+ html.push('</div>');
+ // end debug
+ },
+ debugRender = function() {
+ var render = function(elm, obj) {
+ $.each(obj, function(k, v) {
+ elm.append($('<dt/>').text(k));
+ if (typeof v === 'undefined') {
+ elm.append($('<dd/>').append($('<span/>').text('undfined')));
+ } else if (typeof v === 'object' && !v) {
+ elm.append($('<dd/>').append($('<span/>').text('null')));
+ } else if (typeof v === 'object' && ($.isPlainObject(v) || v.length)) {
+ elm.append( $('<dd/>').append(render($('<dl/>'), v)));
+ } else {
+ elm.append($('<dd/>').append($('<span/>').text((v && typeof v === 'object')? '[]' : (v? v : '""'))));
+ }
+ });
+ return elm;
+ },
+ cnt = debugUL.children('li').length,
+ targetL, target, tabId,
+ info, lastUL, lastDIV;
+
+ if (self.debug.options || self.debug.debug) {
+ if (cnt >= 5) {
+ lastUL = debugUL.children('li:last');
+ lastDIV = debugDIV.children('div:last');
+ if (lastDIV.is(':hidden')) {
+ lastUL.remove();
+ lastDIV.remove();
+ } else {
+ lastUL.prev().remove();
+ lastDIV.prev().remove();
+ }
+ }
+
+ tabId = fm.namespace + '-help-debug-' + (+new Date());
+ targetL = $('<li/>').html('<a href="'+selfUrl+'#'+tabId+'">'+self.debug.debug.cmd+'</a>').prependTo(debugUL);
+ target = $('<div id="'+tabId+'"/>').data('debug', self.debug);
+
+ targetL.on('click.debugrender', function() {
+ var debug = target.data('debug');
+ target.removeData('debug');
+ if (debug) {
+ target.hide();
+ if (debug.debug) {
+ info = $('<fieldset>').append($('<legend/>').text('debug'), render($('<dl/>'), debug.debug));
+ target.append(info);
+ }
+ if (debug.options) {
+ info = $('<fieldset>').append($('<legend/>').text('options'), render($('<dl/>'), debug.options));
+ target.append(info);
+ }
+ target.show();
+ }
+ targetL.off('click.debugrender');
+ });
+
+ debugUL.after(target);
+
+ opened && debugDIV.tabs('refresh');
+ }
+ },
+ content = '',
+ opened, tabInteg, integDIV, tabDebug, debugDIV, debugUL;
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+ this.state = -1;
+
+ this.shortcuts = [{
+ pattern : 'f1',
+ description : this.title
+ }];
+
+ fm.bind('load', function() {
+ var parts = self.options.view || ['about', 'shortcuts', 'help', 'integrations', 'debug'],
+ i, helpSource, tabBase, tabNav, tabs, delta;
+
+ // remove 'preference' tab, it moved to command 'preference'
+ if ((i = $.inArray('preference', parts)) !== -1) {
+ parts.splice(i, 1);
+ }
+
+ // debug tab require jQueryUI Tabs Widget
+ if (! $.fn.tabs) {
+ if ((i = $.inArray(parts, 'debug')) !== -1) {
+ parts.splice(i, 1);
+ }
+ }
+
+ $.each(parts, function(i, title) {
+ html.push(tab[r](/\{id\}/g, title)[r](/\{title\}/, fm.i18n(title)));
+ });
+
+ html.push('</ul>');
+
+ $.inArray('about', parts) !== -1 && about();
+ $.inArray('shortcuts', parts) !== -1 && shortcuts();
+ if ($.inArray('help', parts) !== -1) {
+ helpSource = fm.i18nBaseUrl + 'help/%s.html.js';
+ help();
+ }
+ $.inArray('integrations', parts) !== -1 && integrations();
+ $.inArray('debug', parts) !== -1 && debug();
+
+ html.push('</div>');
+ content = $(html.join(''));
+
+ content.find('.ui-tabs-nav li')
+ .on('mouseenter mouseleave', function(e) {
+ $(this).toggleClass('ui-state-hover', e.type === 'mouseenter');
+ })
+ .on('focus blur', 'a', function(e) {
+ $(e.delegateTarget).toggleClass('ui-state-focus', e.type === 'focusin');
+ })
+ .children()
+ .on('click', function(e) {
+ var link = $(this);
+
+ e.preventDefault();
+ e.stopPropagation();
+
+ link.parent().addClass(clTabActive).siblings().removeClass(clTabActive);
+ content.children('.ui-tabs-panel').hide().filter(link.attr('href')).show();
+ })
+ .filter(':first').trigger('click');
+
+ if (useInteg) {
+ tabInteg = content.find('.elfinder-help-tab-integrations').hide();
+ integDIV = content.find('#'+fm.namespace+'-help-integrations').hide().append($('<div class="elfinder-help-integrations-desc"/>').html(fm.i18n('integrationWith')));
+ fm.bind('helpIntegration', function(e) {
+ var ul = integDIV.children('ul:first'),
+ data, elm, cmdUL, cmdCls;
+ if (e.data) {
+ if ($.isPlainObject(e.data)) {
+ data = Object.assign({
+ link: '',
+ title: '',
+ banner: ''
+ }, e.data);
+ if (data.title || data.link) {
+ if (!data.title) {
+ data.title = data.link;
+ }
+ if (data.link) {
+ elm = $('<a/>').attr('href', data.link).attr('target', '_blank').text(data.title);
+ } else {
+ elm = $('<span/>').text(data.title);
+ }
+ if (data.banner) {
+ elm = $('<span/>').append($('<img/>').attr(data.banner), elm);
+ }
+ }
+ } else {
+ elm = $(e.data);
+ elm.filter('a').each(function() {
+ var tgt = $(this);
+ if (!tgt.attr('target')) {
+ tgt.attr('target', '_blank');;
+ }
+ });
+ }
+ if (elm) {
+ tabInteg.show();
+ if (!ul.length) {
+ ul = $('<ul class="elfinder-help-integrations"/>').appendTo(integDIV);
+ }
+ if (data && data.cmd) {
+ cmdCls = 'elfinder-help-integration-' + data.cmd;
+ cmdUL = ul.find('ul.' + cmdCls);
+ if (!cmdUL.length) {
+ cmdUL = $('<ul class="'+cmdCls+'"/>');
+ ul.append($('<li/>').append($('<span/>').html(fm.i18n('cmd'+data.cmd))).append(cmdUL));
+ }
+ elm = cmdUL.append($('<li/>').append(elm));
+ } else {
+ ul.append($('<li/>').append(elm));
+ }
+ }
+ }
+ }).bind('themechange', function() {
+ content.find('div.elfinder-help-term-theme').replaceWith(getTheme());
+ });
+ }
+
+ // debug
+ if (useDebug) {
+ tabDebug = content.find('.elfinder-help-tab-debug').hide();
+ debugDIV = content.find('#'+fm.namespace+'-help-debug').children('div:first');
+ debugUL = debugDIV.children('ul:first').on('click', function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ });
+
+ self.debug = {};
+
+ fm.bind('backenddebug', function(e) {
+ // CAUTION: DO NOT TOUCH `e.data`
+ if (useDebug && e.data && e.data.debug) {
+ self.debug = { options : e.data.options, debug : Object.assign({ cmd : fm.currentReqCmd }, e.data.debug) };
+ if (self.dialog) {
+ debugRender();
+ }
+ }
+ });
+ }
+
+ content.find('#'+fm.namespace+'-help-about').find('.apiver').text(fm.api);
+ self.dialog = self.fmDialog(content, {
+ title : self.title,
+ width : 530,
+ maxWidth: 'window',
+ maxHeight: 'window',
+ autoOpen : false,
+ destroyOnClose : false,
+ close : function() {
+ if (useDebug) {
+ tabDebug.hide();
+ debugDIV.tabs('destroy');
+ }
+ opened = false;
+ }
+ })
+ .on('click', function(e) {
+ e.stopPropagation();
+ })
+ .css({
+ overflow: 'hidden'
+ });
+
+ tabBase = self.dialog.children('.ui-tabs');
+ tabNav = tabBase.children('.ui-tabs-nav:first');
+ tabs = tabBase.children('.ui-tabs-panel');
+ delta = self.dialog.outerHeight(true) - self.dialog.height();
+ self.dialog.closest('.ui-dialog').on('resize', function() {
+ tabs.height(self.dialog.height() - delta - tabNav.outerHeight(true) - 20);
+ });
+
+ if (helpSource) {
+ self.dialog.one('initContents', function() {
+ $.ajax({
+ url: self.options.helpSource? self.options.helpSource : helpSource.replace('%s', fm.lang),
+ dataType: 'html'
+ }).done(function(source) {
+ $('#'+fm.namespace+'-help-help').html(source);
+ }).fail(function() {
+ $.ajax({
+ url: helpSource.replace('%s', 'en'),
+ dataType: 'html'
+ }).done(function(source) {
+ $('#'+fm.namespace+'-help-help').html(source);
+ });
+ });
+ });
+ }
+
+ self.state = 0;
+
+ fm.trigger('helpBuilded', self.dialog);
+ }).one('open', function() {
+ var debug = false;
+ fm.one('backenddebug', function() {
+ debug =true;
+ }).one('opendone', function() {
+ requestAnimationFrame(function() {
+ if (! debug && useDebug) {
+ useDebug = false;
+ tabDebug.hide();
+ debugDIV.hide();
+ debugUL.hide();
+ }
+ });
+ });
+ });
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.exec = function(sel, opts) {
+ var tab = opts? opts.tab : void(0),
+ debugShow = function() {
+ if (useDebug) {
+ debugDIV.tabs();
+ debugUL.find('a:first').trigger('click');
+ tabDebug.show();
+ opened = true;
+ }
+ };
+ debugShow();
+ this.dialog.trigger('initContents').elfinderdialog('open').find((tab? '.elfinder-help-tab-'+tab : '.ui-tabs-nav li') + ' a:first').trigger('click');
+ return $.Deferred().resolve();
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/hidden.js
+ */
+
+/**
+ * @class elFinder command "hidden"
+ * Always hidden command for uiCmdMap
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.hidden = function() {
+ this.hidden = true;
+ this.updateOnSelect = false;
+ this.getstate = function() {
+ return -1;
+ };
+};
+
+/*
+ * File: /js/commands/hide.js
+ */
+
+/**
+ * @class elFinder command "hide".
+ * folders/files to hide as personal setting.
+ *
+ * @type elFinder.command
+ * @author Naoki Sawada
+ */
+elFinder.prototype.commands.hide = function() {
+
+ var self = this,
+ nameCache = {},
+ hideData, hideCnt, cMenuType, sOrigin;
+
+ this.syncTitleOnChange = true;
+
+ this.shortcuts = [{
+ pattern : 'ctrl+shift+dot',
+ description : this.fm.i18n('toggleHidden')
+ }];
+
+ this.init = function() {
+ var fm = this.fm;
+
+ hideData = fm.storage('hide') || {items: {}};
+ hideCnt = Object.keys(hideData.items).length;
+
+ this.title = fm.i18n(hideData.show? 'hideHidden' : 'showHidden');
+ self.update(void(0), self.title);
+ };
+
+ this.fm.bind('select contextmenucreate closecontextmenu', function(e, fm) {
+ var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected();
+ if (e.type === 'select' && e.data) {
+ sOrigin = e.data.origin;
+ } else if (e.type === 'contextmenucreate') {
+ cMenuType = e.data.type;
+ }
+ if (!sel.length || (((e.type !== 'contextmenucreate' && sOrigin !== 'navbar') || cMenuType === 'cwd') && sel[0] === fm.cwd().hash)) {
+ self.title = fm.i18n(hideData.show? 'hideHidden' : 'showHidden');
+ } else {
+ self.title = fm.i18n('cmdhide');
+ }
+ if (e.type !== 'closecontextmenu') {
+ self.update(cMenuType === 'cwd'? (hideCnt? 0 : -1) : void(0), self.title);
+ } else {
+ cMenuType = '';
+ requestAnimationFrame(function() {
+ self.update(void(0), self.title);
+ });
+ }
+ });
+
+ this.getstate = function(sel) {
+ return (cMenuType !== 'cwd' && (sel || this.fm.selected()).length) || hideCnt? 0 : -1;
+ };
+
+ this.exec = function(hashes, opts) {
+ var fm = this.fm,
+ dfrd = $.Deferred()
+ .done(function() {
+ fm.trigger('hide', {items: items, opts: opts});
+ })
+ .fail(function(error) {
+ fm.error(error);
+ }),
+ o = opts || {},
+ items = o.targets? o.targets : (hashes || fm.selected()),
+ added = [],
+ removed = [],
+ notifyto, files, res;
+
+ hideData = fm.storage('hide') || {};
+ if (!$.isPlainObject(hideData)) {
+ hideData = {};
+ }
+ if (!$.isPlainObject(hideData.items)) {
+ hideData.items = {};
+ }
+ if (opts._currentType === 'shortcut' || !items.length || (opts._currentType !== 'navbar' && sOrigin !=='navbar' && items[0] === fm.cwd().hash)) {
+ if (hideData.show) {
+ o.hide = true;
+ } else if (Object.keys(hideData.items).length) {
+ o.show = true;
+ }
+ }
+ if (o.reset) {
+ o.show = true;
+ hideCnt = 0;
+ }
+ if (o.show || o.hide) {
+ if (o.show) {
+ hideData.show = true;
+ } else {
+ delete hideData.show;
+ }
+ if (o.show) {
+ fm.storage('hide', o.reset? null : hideData);
+ self.title = fm.i18n('hideHidden');
+ self.update(o.reset? -1 : void(0), self.title);
+ $.each(hideData.items, function(h) {
+ var f = fm.file(h, true);
+ if (f && (fm.searchStatus.state || !f.phash || fm.file(f.phash))) {
+ added.push(f);
+ }
+ });
+ if (added.length) {
+ fm.updateCache({added: added});
+ fm.add({added: added});
+ }
+ if (o.reset) {
+ hideData = {items: {}};
+ }
+ return dfrd.resolve();
+ }
+ items = Object.keys(hideData.items);
+ }
+
+ if (items.length) {
+ $.each(items, function(i, h) {
+ var f;
+ if (!hideData.items[h]) {
+ f = fm.file(h);
+ if (f) {
+ nameCache[h] = f.i18 || f.name;
+ }
+ hideData.items[h] = nameCache[h]? nameCache[h] : h;
+ }
+ });
+ hideCnt = Object.keys(hideData.items).length;
+ files = this.files(items);
+ fm.storage('hide', hideData);
+ fm.remove({removed: items});
+ if (hideData.show) {
+ this.exec(void(0), {hide: true});
+ }
+ if (!o.hide) {
+ res = {};
+ res.undo = {
+ cmd : 'hide',
+ callback : function() {
+ var nData = fm.storage('hide');
+ if (nData) {
+ $.each(items, function(i, h) {
+ delete nData.items[h];
+ });
+ hideCnt = Object.keys(nData.items).length;
+ fm.storage('hide', nData);
+ fm.trigger('hide', {items: items, opts: {}});
+ self.update(hideCnt? 0 : -1);
+ }
+ fm.updateCache({added: files});
+ fm.add({added: files});
+ }
+ };
+ res.redo = {
+ cmd : 'hide',
+ callback : function() {
+ return fm.exec('hide', void(0), {targets: items});
+ }
+ };
+ }
+ }
+
+ return dfrd.state() == 'rejected' ? dfrd : dfrd.resolve(res);
+ };
+};
+
+
+/*
+ * File: /js/commands/home.js
+ */
+
+(elFinder.prototype.commands.home = function() {
+ 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
+
+
+/*
+ * File: /js/commands/info.js
+ */
+
+/**
+ * @class elFinder command "info".
+ * Display dialog with file properties.
+ *
+ * @author Dmitry (dio) Levashov, dio@std42.ru
+ **/
+(elFinder.prototype.commands.info = function() {
+ var m = 'msg',
+ fm = this.fm,
+ spclass = 'elfinder-spinner',
+ btnclass = 'elfinder-info-button',
+ msg = {
+ calc : fm.i18n('calc'),
+ size : fm.i18n('size'),
+ unknown : fm.i18n('unknown'),
+ path : fm.i18n('path'),
+ aliasfor : fm.i18n('aliasfor'),
+ modify : fm.i18n('modify'),
+ perms : fm.i18n('perms'),
+ locked : fm.i18n('locked'),
+ dim : fm.i18n('dim'),
+ kind : fm.i18n('kind'),
+ files : fm.i18n('files'),
+ folders : fm.i18n('folders'),
+ roots : fm.i18n('volumeRoots'),
+ items : fm.i18n('items'),
+ yes : fm.i18n('yes'),
+ no : fm.i18n('no'),
+ link : fm.i18n('link'),
+ owner : fm.i18n('owner'),
+ group : fm.i18n('group'),
+ perm : fm.i18n('perm'),
+ getlink : fm.i18n('getLink')
+ },
+ applyZWSP = function(str, remove) {
+ if (remove) {
+ return str.replace(/\u200B/g, '');
+ } else {
+ return str.replace(/(\/|\\)/g, "$1\u200B");
+ }
+ };
+
+ this.items = ['size', 'aliasfor', 'path', 'link', 'dim', 'modify', 'perms', 'locked', 'owner', 'group', 'perm'];
+ if (this.options.custom && Object.keys(this.options.custom).length) {
+ $.each(this.options.custom, function(name, details) {
+ details.label && this.items.push(details.label);
+ });
+ }
+
+ this.tpl = {
+ main : '<div class="ui-helper-clearfix elfinder-info-title {dirclass}"><span class="elfinder-cwd-icon {class} ui-corner-all"{style}/>{title}</div><table class="elfinder-info-tb">{content}</table>',
+ itemTitle : '<strong>{name}</strong><span class="elfinder-info-kind">{kind}</span>',
+ groupTitle : '<strong>{items}: {num}</strong>',
+ row : '<tr><td class="elfinder-info-label">{label} : </td><td class="{class}">{value}</td></tr>',
+ spinner : '<span>{text}</span> <span class="'+spclass+' '+spclass+'-{name}"/>'
+ };
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+ this.shortcuts = [{
+ pattern : 'ctrl+i'
+ }];
+
+ this.init = function() {
+ $.each(msg, function(k, v) {
+ msg[k] = fm.i18n(v);
+ });
+ };
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.exec = function(hashes) {
+ var files = this.files(hashes);
+ if (! files.length) {
+ files = this.files([ this.fm.cwd().hash ]);
+ }
+ var self = this,
+ fm = this.fm,
+ o = this.options,
+ tpl = this.tpl,
+ row = tpl.row,
+ cnt = files.length,
+ content = [],
+ view = tpl.main,
+ l = '{label}',
+ v = '{value}',
+ reqs = [],
+ reqDfrd = null,
+ opts = {
+ title : fm.i18n('selectionInfo'),
+ width : 'auto',
+ close : function() {
+ $(this).elfinderdialog('destroy');
+ if (reqDfrd && reqDfrd.state() === 'pending') {
+ reqDfrd.reject();
+ }
+ $.grep(reqs, function(r) {
+ r && r.state() === 'pending' && r.reject();
+ });
+ }
+ },
+ count = [],
+ replSpinner = function(msg, name, className) {
+ dialog.find('.'+spclass+'-'+name).parent().html(msg).addClass(className || '');
+ },
+ id = fm.namespace+'-info-'+$.map(files, function(f) { return f.hash; }).join('-'),
+ dialog = fm.getUI().find('#'+id),
+ customActions = [],
+ style = '',
+ hashClass = 'elfinder-font-mono elfinder-info-hash',
+ size, tmb, file, title, dcnt, rdcnt, path, getHashAlgorisms, hideItems;
+
+ if (!cnt) {
+ return $.Deferred().reject();
+ }
+
+ if (dialog.length) {
+ dialog.elfinderdialog('toTop');
+ return $.Deferred().resolve();
+ }
+
+ hideItems = fm.storage('infohides') || fm.arrayFlip(o.hideItems, true);
+
+ if (cnt === 1) {
+ file = files[0];
+
+ if (file.icon) {
+ style = ' '+fm.getIconStyle(file);
+ }
+
+ view = view.replace('{dirclass}', file.csscls? fm.escape(file.csscls) : '').replace('{class}', fm.mime2class(file.mime)).replace('{style}', style);
+ title = tpl.itemTitle.replace('{name}', fm.escape(file.i18 || file.name)).replace('{kind}', '<span title="'+fm.escape(file.mime)+'">'+fm.mime2kind(file)+'</span>');
+
+ tmb = fm.tmb(file);
+
+ if (!file.read) {
+ size = msg.unknown;
+ } else if (file.mime != 'directory' || file.alias) {
+ size = fm.formatSize(file.size);
+ } else {
+ size = tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'size');
+ count.push(file.hash);
+ }
+
+ !hideItems.size && content.push(row.replace(l, msg.size).replace(v, size));
+ !hideItems.aleasfor && file.alias && content.push(row.replace(l, msg.aliasfor).replace(v, file.alias));
+ if (!hideItems.path) {
+ if (path = fm.path(file.hash, true)) {
+ content.push(row.replace(l, msg.path).replace(v, applyZWSP(fm.escape(path))).replace('{class}', 'elfinder-info-path'));
+ } else {
+ content.push(row.replace(l, msg.path).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'path')).replace('{class}', 'elfinder-info-path'));
+ reqs.push(fm.path(file.hash, true, {notify: null})
+ .fail(function() {
+ replSpinner(msg.unknown, 'path');
+ })
+ .done(function(path) {
+ replSpinner(applyZWSP(path), 'path');
+ }));
+ }
+ }
+ if (!hideItems.link && file.read) {
+ var href,
+ name_esc = fm.escape(file.name);
+ if (file.url == '1') {
+ content.push(row.replace(l, msg.link).replace(v, '<button class="'+btnclass+' '+spclass+'-url">'+msg.getlink+'</button>'));
+ } else {
+ if (file.url) {
+ href = file.url;
+ } else if (file.mime === 'directory') {
+ if (o.nullUrlDirLinkSelf && file.url === null) {
+ var loc = window.location;
+ href = loc.pathname + loc.search + '#elf_' + file.hash;
+ } else if (file.url !== '' && fm.option('url', (!fm.isRoot(file) && file.phash) || file.hash)) {
+ href = fm.url(file.hash);
+ }
+ } else {
+ href = fm.url(file.hash);
+ }
+ href && content.push(row.replace(l, msg.link).replace(v, '<a href="'+href+'" target="_blank">'+name_esc+'</a>'));
+ }
+ }
+
+ if (!hideItems.dim) {
+ if (file.dim) { // old api
+ content.push(row.replace(l, msg.dim).replace(v, file.dim));
+ } else if (file.mime.indexOf('image') !== -1) {
+ if (file.width && file.height) {
+ content.push(row.replace(l, msg.dim).replace(v, file.width+'x'+file.height));
+ } else {
+ content.push(row.replace(l, msg.dim).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'dim')));
+ reqs.push(fm.request({
+ data : {cmd : 'dim', target : file.hash},
+ preventDefault : true
+ })
+ .fail(function() {
+ replSpinner(msg.unknown, 'dim');
+ })
+ .done(function(data) {
+ replSpinner(data.dim || msg.unknown, 'dim');
+ if (data.dim) {
+ var dim = data.dim.split('x');
+ var rfile = fm.file(file.hash);
+ rfile.width = dim[0];
+ rfile.height = dim[1];
+ }
+ }));
+ }
+ }
+ }
+
+ !hideItems.modify && content.push(row.replace(l, msg.modify).replace(v, fm.formatDate(file)));
+ !hideItems.perms && content.push(row.replace(l, msg.perms).replace(v, fm.formatPermissions(file)));
+ !hideItems.locked && content.push(row.replace(l, msg.locked).replace(v, file.locked ? msg.yes : msg.no));
+ !hideItems.owner && file.owner && content.push(row.replace(l, msg.owner).replace(v, file.owner));
+ !hideItems.group && file.group && content.push(row.replace(l, msg.group).replace(v, file.group));
+ !hideItems.perm && file.perm && content.push(row.replace(l, msg.perm).replace(v, fm.formatFileMode(file.perm)));
+
+ // Get MD5 hash
+ if (window.ArrayBuffer && (fm.options.cdns.sparkmd5 || fm.options.cdns.jssha) && file.mime !== 'directory' && file.size > 0 && (!o.showHashMaxsize || file.size <= o.showHashMaxsize)) {
+ getHashAlgorisms = [];
+ $.each(fm.storage('hashchekcer') || o.showHashAlgorisms, function(i, n) {
+ if (!file[n]) {
+ content.push(row.replace(l, fm.i18n(n)).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', n)));
+ getHashAlgorisms.push(n);
+ } else {
+ content.push(row.replace(l, fm.i18n(n)).replace(v, file[n]).replace('{class}', hashClass));
+ }
+ });
+
+ reqs.push(
+ fm.getContentsHashes(file.hash, getHashAlgorisms).progress(function(hashes) {
+ $.each(getHashAlgorisms, function(i, n) {
+ if (hashes[n]) {
+ replSpinner(hashes[n], n, hashClass);
+ }
+ });
+ }).always(function() {
+ $.each(getHashAlgorisms, function(i, n) {
+ replSpinner(msg.unknown, n);
+ });
+ })
+ );
+ }
+
+ // Add custom info fields
+ if (o.custom) {
+ $.each(o.custom, function(name, details) {
+ if (
+ !hideItems[details.label]
+ &&
+ (!details.mimes || $.grep(details.mimes, function(m){return (file.mime === m || file.mime.indexOf(m+'/') === 0)? true : false;}).length)
+ &&
+ (!details.hashRegex || file.hash.match(details.hashRegex))
+ ) {
+ // Add to the content
+ content.push(row.replace(l, fm.i18n(details.label)).replace(v , details.tpl.replace('{id}', id)));
+ // Register the action
+ if (details.action && (typeof details.action == 'function')) {
+ customActions.push(details.action);
+ }
+ }
+ });
+ }
+ } else {
+ view = view.replace('{class}', 'elfinder-cwd-icon-group');
+ title = tpl.groupTitle.replace('{items}', msg.items).replace('{num}', cnt);
+ dcnt = $.grep(files, function(f) { return f.mime == 'directory' ? true : false ; }).length;
+ if (!dcnt) {
+ size = 0;
+ $.each(files, function(h, f) {
+ var s = parseInt(f.size);
+
+ if (s >= 0 && size >= 0) {
+ size += s;
+ } else {
+ size = 'unknown';
+ }
+ });
+ content.push(row.replace(l, msg.kind).replace(v, msg.files));
+ !hideItems.size && content.push(row.replace(l, msg.size).replace(v, fm.formatSize(size)));
+ } else {
+ rdcnt = $.grep(files, function(f) { return f.mime === 'directory' && (! f.phash || f.isroot)? true : false ; }).length;
+ dcnt -= rdcnt;
+ content.push(row.replace(l, msg.kind).replace(v, (rdcnt === cnt || dcnt === cnt)? msg[rdcnt? 'roots' : 'folders'] : $.map({roots: rdcnt, folders: dcnt, files: cnt - rdcnt - dcnt}, function(c, t) { return c? msg[t]+' '+c : null; }).join(', ')));
+ !hideItems.size && content.push(row.replace(l, msg.size).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'size')));
+ count = $.map(files, function(f) { return f.hash; });
+
+ }
+ }
+
+ view = view.replace('{title}', title).replace('{content}', content.join('').replace(/{class}/g, ''));
+
+ dialog = self.fmDialog(view, opts);
+ dialog.attr('id', id).one('mousedown', '.elfinder-info-path', function() {
+ $(this).html(applyZWSP($(this).html(), true));
+ });
+
+ if (fm.UA.Mobile && $.fn.tooltip) {
+ dialog.children('.ui-dialog-content .elfinder-info-title').tooltip({
+ classes: {
+ 'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow'
+ },
+ tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow',
+ track: true
+ });
+ }
+
+ if (file && file.url == '1') {
+ dialog.on('click', '.'+spclass+'-url', function(){
+ $(this).parent().html(tpl.spinner.replace('{text}', fm.i18n('ntfurl')).replace('{name}', 'url'));
+ fm.request({
+ data : {cmd : 'url', target : file.hash},
+ preventDefault : true
+ })
+ .fail(function() {
+ replSpinner(name_esc, 'url');
+ })
+ .done(function(data) {
+ if (data.url) {
+ replSpinner('<a href="'+data.url+'" target="_blank">'+name_esc+'</a>' || name_esc, 'url');
+ var rfile = fm.file(file.hash);
+ rfile.url = data.url;
+ } else {
+ replSpinner(name_esc, 'url');
+ }
+ });
+ });
+ }
+
+ // load thumbnail
+ if (tmb) {
+ $('<img/>')
+ .on('load', function() { dialog.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); })
+ .attr('src', tmb.url);
+ }
+
+ // send request to count total size
+ if (count.length) {
+ reqDfrd = fm.getSize(count).done(function(data) {
+ replSpinner(data.formated, 'size');
+ }).fail(function() {
+ replSpinner(msg.unknown, 'size');
+ });
+ }
+
+ // call custom actions
+ if (customActions.length) {
+ $.each(customActions, function(i, action) {
+ try {
+ action(file, fm, dialog);
+ } catch(e) {
+ fm.debug('error', e);
+ }
+ });
+ }
+
+ return $.Deferred().resolve();
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/mkdir.js
+ */
+
+/**
+ * @class elFinder command "mkdir"
+ * Create new folder
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.mkdir = function() {
+ var fm = this.fm,
+ self = this,
+ curOrg;
+
+ this.value = '';
+ this.disableOnSearch = true;
+ this.updateOnSelect = false;
+ this.syncTitleOnChange = true;
+ this.mime = 'directory';
+ this.prefix = 'untitled folder';
+ this.exec = function(select, cOpts) {
+ var onCwd;
+
+ if (select && select.length && cOpts && cOpts._currentType && cOpts._currentType === 'navbar') {
+ this.origin = cOpts._currentType;
+ this.data = {
+ target: select[0]
+ };
+ } else {
+ onCwd = fm.cwd().hash === select[0];
+ this.origin = curOrg && !onCwd? curOrg : 'cwd';
+ delete this.data;
+ }
+ if (! select && ! this.options.intoNewFolderToolbtn) {
+ fm.getUI('cwd').trigger('unselectall');
+ }
+ //this.move = (!onCwd && curOrg !== 'navbar' && fm.selected().length)? true : false;
+ this.move = this.value === fm.i18n('cmdmkdirin');
+ return $.proxy(fm.res('mixin', 'make'), self)();
+ };
+
+ this.shortcuts = [{
+ pattern : 'ctrl+shift+n'
+ }];
+
+ this.init = function() {
+ if (this.options.intoNewFolderToolbtn) {
+ this.syncTitleOnChange = true;
+ }
+ };
+
+ fm.bind('select contextmenucreate closecontextmenu', function(e) {
+ var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected();
+
+ self.className = 'mkdir';
+ curOrg = e.data && sel.length? (e.data.origin || e.data.type || '') : '';
+ if (!self.options.intoNewFolderToolbtn && curOrg === '') {
+ curOrg = 'cwd';
+ }
+ if (sel.length && curOrg !== 'navbar' && curOrg !== 'cwd' && fm.cwd().hash !== sel[0]) {
+ self.title = fm.i18n('cmdmkdirin');
+ self.className += ' elfinder-button-icon-mkdirin';
+ } else {
+ self.title = fm.i18n('cmdmkdir');
+ }
+ if (e.type !== 'closecontextmenu') {
+ self.update(void(0), self.title);
+ } else {
+ requestAnimationFrame(function() {
+ self.update(void(0), self.title);
+ });
+ }
+ });
+
+ this.getstate = function(select) {
+ var cwd = fm.cwd(),
+ sel = (curOrg === 'navbar' || (select && select[0] !== cwd.hash))? this.files(select || fm.selected()) : [],
+ cnt = sel.length;
+
+ if (curOrg === 'navbar') {
+ return cnt && sel[0].write && sel[0].read? 0 : -1;
+ } else {
+ return cwd.write && (!cnt || $.grep(sel, function(f) { return f.read && ! f.locked? true : false; }).length == cnt)? 0 : -1;
+ }
+ };
+
+};
+
+
+/*
+ * File: /js/commands/mkfile.js
+ */
+
+/**
+ * @class elFinder command "mkfile"
+ * Create new empty file
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.mkfile = function() {
+ var self = this;
+
+ this.disableOnSearch = true;
+ this.updateOnSelect = false;
+ this.mime = 'text/plain';
+ this.prefix = 'untitled file.txt';
+ this.variants = [];
+
+ this.getTypeName = function(mime, type) {
+ var fm = self.fm,
+ name;
+ if (name = fm.messages['kind' + fm.kinds[mime]]) {
+ name = fm.i18n(['extentiontype', type.toUpperCase(), name]);
+ } else {
+ name = fm.i18n(['extentionfile', type.toUpperCase()]);
+ }
+ return name;
+ };
+
+ this.fm.bind('open reload canMakeEmptyFile', function() {
+ var fm = self.fm,
+ hides = fm.storage('mkfileHides') || {};
+ self.variants = [];
+ if (fm.mimesCanMakeEmpty) {
+ $.each(fm.mimesCanMakeEmpty, function(mime, type) {
+ type && !hides[mime] && fm.uploadMimeCheck(mime) && self.variants.push([mime, self.getTypeName(mime, type)]);
+ });
+ }
+ self.change();
+ });
+
+ this.getstate = function() {
+ return this.fm.cwd().write ? 0 : -1;
+ };
+
+ this.exec = function(_dum, mime) {
+ var fm = self.fm,
+ type, err;
+ if (type = fm.mimesCanMakeEmpty[mime]) {
+ if (fm.uploadMimeCheck(mime)) {
+ this.mime = mime;
+ this.prefix = fm.i18n(['untitled file', type]);
+ return $.proxy(fm.res('mixin', 'make'), self)();
+ }
+ err = ['errMkfile', self.getTypeName(mime, type)];
+ }
+ return $.Deferred().reject(err);
+ };
+};
+
+
+/*
+ * File: /js/commands/netmount.js
+ */
+
+/**
+ * @class elFinder command "netmount"
+ * Mount network volume with user credentials.
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.netmount = function() {
+ var self = this,
+ hasMenus = false,
+ content;
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ this.drivers = [];
+
+ this.handlers = {
+ load : function() {
+ var fm = self.fm;
+ self.drivers = fm.netDrivers;
+ if (self.drivers.length) {
+ requestAnimationFrame(function() {
+ $.each(self.drivers, function() {
+ var d = self.options[this];
+ if (d) {
+ hasMenus = true;
+ if (d.integrateInfo) {
+ fm.trigger('helpIntegration', Object.assign({cmd: 'netmount'}, d.integrateInfo));
+ }
+ }
+ });
+ });
+ }
+ }
+ };
+
+ this.getstate = function() {
+ return hasMenus ? 0 : -1;
+ };
+
+ this.exec = function() {
+ var fm = self.fm,
+ dfrd = $.Deferred(),
+ o = self.options,
+ create = function() {
+ var winFocus = function() {
+ inputs.protocol.trigger('change', 'winfocus');
+ },
+ inputs = {
+ protocol : $('<select/>')
+ .on('change', function(e, data){
+ var protocol = this.value;
+ content.find('.elfinder-netmount-tr').hide();
+ content.find('.elfinder-netmount-tr-'+protocol).show();
+ dialogNode && dialogNode.children('.ui-dialog-buttonpane:first').find('button').show();
+ if (typeof o[protocol].select == 'function') {
+ o[protocol].select(fm, e, data);
+ }
+ requestAnimationFrame(function() {
+ content.find('input:text.elfinder-tabstop:visible:first').trigger('focus');
+ });
+ })
+ .addClass('ui-corner-all')
+ },
+ opts = {
+ title : fm.i18n('netMountDialogTitle'),
+ resizable : false,
+ modal : true,
+ destroyOnClose : false,
+ open : function() {
+ $(window).on('focus.'+fm.namespace, winFocus);
+ inputs.protocol.trigger('change');
+ },
+ close : function() {
+ dfrd.state() == 'pending' && dfrd.reject();
+ $(window).off('focus.'+fm.namespace, winFocus);
+ },
+ buttons : {}
+ },
+ doMount = function() {
+ var protocol = inputs.protocol.val(),
+ data = {cmd : 'netmount', protocol: protocol},
+ cur = o[protocol];
+ $.each(content.find('input.elfinder-netmount-inputs-'+protocol), function(name, input) {
+ var val, elm;
+ elm = $(input);
+ if (elm.is(':radio,:checkbox')) {
+ if (elm.is(':checked')) {
+ val = $.trim(elm.val());
+ }
+ } else {
+ val = $.trim(elm.val());
+ }
+ if (val) {
+ data[input.name] = val;
+ }
+ });
+
+ if (!data.host) {
+ return fm.trigger('error', {error : 'errNetMountHostReq', opts : {modal: true}});
+ }
+
+ fm.request({data : data, 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);
+ });
+ }
+ dfrd.resolve();
+ })
+ .fail(function(error) {
+ if (cur.fail && typeof cur.fail == 'function') {
+ cur.fail(fm, fm.parseError(error));
+ }
+ dfrd.reject(error);
+ });
+
+ self.dialog.elfinderdialog('close');
+ },
+ form = $('<form autocomplete="off"/>').on('keydown', 'input', function(e) {
+ var comp = true,
+ next;
+ if (e.keyCode === $.ui.keyCode.ENTER) {
+ $.each(form.find('input:visible:not(.elfinder-input-optional)'), function() {
+ if ($(this).val() === '') {
+ comp = false;
+ next = $(this);
+ return false;
+ }
+ });
+ if (comp) {
+ doMount();
+ } else {
+ next.trigger('focus');
+ }
+ }
+ }),
+ hidden = $('<div/>'),
+ dialog;
+
+ content = $('<table class="elfinder-info-tb elfinder-netmount-tb"/>')
+ .append($('<tr/>').append($('<td>'+fm.i18n('protocol')+'</td>')).append($('<td/>').append(inputs.protocol)));
+
+ $.each(self.drivers, function(i, protocol) {
+ if (o[protocol]) {
+ inputs.protocol.append('<option value="'+protocol+'">'+fm.i18n(o[protocol].name || protocol)+'</option>');
+ $.each(o[protocol].inputs, function(name, input) {
+ input.attr('name', name);
+ if (input.attr('type') != 'hidden') {
+ input.addClass('ui-corner-all elfinder-netmount-inputs-'+protocol);
+ content.append($('<tr/>').addClass('elfinder-netmount-tr elfinder-netmount-tr-'+protocol).append($('<td>'+fm.i18n(name)+'</td>')).append($('<td/>').append(input)));
+ } else {
+ input.addClass('elfinder-netmount-inputs-'+protocol);
+ hidden.append(input);
+ }
+ });
+ o[protocol].protocol = inputs.protocol;
+ }
+ });
+
+ content.append(hidden);
+
+ content.find('.elfinder-netmount-tr').hide();
+
+ opts.buttons[fm.i18n('btnMount')] = doMount;
+
+ opts.buttons[fm.i18n('btnCancel')] = function() {
+ self.dialog.elfinderdialog('close');
+ };
+
+ content.find('select,input').addClass('elfinder-tabstop');
+
+ dialog = self.fmDialog(form.append(content), opts);
+ dialogNode = dialog.closest('.ui-dialog');
+ dialog.ready(function(){
+ inputs.protocol.trigger('change');
+ dialog.elfinderdialog('posInit');
+ });
+ return dialog;
+ },
+ dialogNode;
+
+ if (!self.dialog) {
+ self.dialog = create();
+ } else {
+ self.dialog.elfinderdialog('open');
+ }
+
+ return dfrd.promise();
+ };
+
+ self.fm.bind('netmount', function(e) {
+ var d = e.data || null,
+ o = self.options;
+ if (d && d.protocol) {
+ if (o[d.protocol] && typeof o[d.protocol].done == 'function') {
+ o[d.protocol].done(self.fm, d);
+ content.find('select,input').addClass('elfinder-tabstop');
+ self.dialog.elfinderdialog('tabstopsInit');
+ }
+ }
+ });
+
+};
+
+elFinder.prototype.commands.netunmount = function() {
+ var self = this;
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ this.drivers = [];
+
+ this.handlers = {
+ load : function() {
+ this.drivers = this.fm.netDrivers;
+ }
+ };
+
+ this.getstate = function(sel) {
+ var fm = this.fm,
+ file;
+ return !!sel && this.drivers.length && !this._disabled && (file = fm.file(sel[0])) && file.netkey ? 0 : -1;
+ };
+
+ this.exec = function(hashes) {
+ var self = this,
+ fm = this.fm,
+ dfrd = $.Deferred()
+ .fail(function(error) {
+ error && fm.error(error);
+ }),
+ drive = fm.file(hashes[0]),
+ childrenRoots = function(hash) {
+ var roots = [],
+ work;
+ if (fm.leafRoots) {
+ work = [];
+ $.each(fm.leafRoots, function(phash, hashes) {
+ var parents = fm.parents(phash),
+ idx, deep;
+ if ((idx = $.inArray(hash, parents)) !== -1) {
+ idx = parents.length - idx;
+ $.each(hashes, function(i, h) {
+ work.push({i: idx, hash: h});
+ });
+ }
+ });
+ if (work.length) {
+ work.sort(function(a, b) { return a.i < b.i; });
+ $.each(work, function(i, o) {
+ roots.push(o.hash);
+ });
+ }
+ }
+ return roots;
+ };
+
+ if (this._disabled) {
+ return dfrd.reject();
+ }
+
+ if (dfrd.state() == 'pending') {
+ fm.confirm({
+ title : self.title,
+ text : fm.i18n('confirmUnmount', drive.name),
+ accept : {
+ label : 'btnUnmount',
+ callback : function() {
+ var target = drive.hash,
+ roots = childrenRoots(target),
+ requests = [],
+ removed = [],
+ doUmount = function() {
+ $.when(requests).done(function() {
+ fm.request({
+ data : {cmd : 'netmount', protocol : 'netunmount', host: drive.netkey, user : target, pass : 'dum'},
+ notify : {type : 'netunmount', cnt : 1, hideCnt : true},
+ preventFail : true
+ })
+ .fail(function(error) {
+ dfrd.reject(error);
+ })
+ .done(function(data) {
+ drive.volumeid && delete fm.volumeExpires[drive.volumeid];
+ dfrd.resolve();
+ });
+ }).fail(function(error) {
+ if (removed.length) {
+ fm.remove({ removed: removed });
+ }
+ dfrd.reject(error);
+ });
+ };
+
+ if (roots.length) {
+ fm.confirm({
+ title : self.title,
+ text : (function() {
+ var msgs = ['unmountChildren'];
+ $.each(roots, function(i, hash) {
+ msgs.push([fm.file(hash).name]);
+ });
+ return msgs;
+ })(),
+ accept : {
+ label : 'btnUnmount',
+ callback : function() {
+ $.each(roots, function(i, hash) {
+ var d = fm.file(hash);
+ if (d.netkey) {
+ requests.push(fm.request({
+ data : {cmd : 'netmount', protocol : 'netunmount', host: d.netkey, user : d.hash, pass : 'dum'},
+ notify : {type : 'netunmount', cnt : 1, hideCnt : true},
+ preventDefault : true
+ }).done(function(data) {
+ if (data.removed) {
+ d.volumeid && delete fm.volumeExpires[d.volumeid];
+ removed = removed.concat(data.removed);
+ }
+ }));
+ }
+ });
+ doUmount();
+ }
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback : function() {
+ dfrd.reject();
+ }
+ }
+ });
+ } else {
+ requests = null;
+ doUmount();
+ }
+ }
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback : function() { dfrd.reject(); }
+ }
+ });
+ }
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/open.js
+ */
+
+/**
+ * @class elFinder command "open"
+ * Enter folder or open files in new windows
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+(elFinder.prototype.commands.open = function() {
+ var fm = this.fm;
+ this.alwaysEnabled = true;
+ this.noChangeDirOnRemovedCwd = true;
+
+ this._handlers = {
+ dblclick : function(e) { e.preventDefault(); fm.exec('open', e.data && e.data.file? [ e.data.file ]: void(0)); },
+ 'select enable disable reload' : function(e) { this.update(e.type == 'disable' ? -1 : void(0)); }
+ };
+
+ this.shortcuts = [{
+ pattern : 'ctrl+down numpad_enter'+(fm.OS != 'mac' && ' enter')
+ }];
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length;
+
+ return cnt == 1
+ ? (sel[0].read? 0 : -1)
+ : (cnt && !fm.UA.Mobile) ? ($.grep(sel, function(file) { return file.mime == 'directory' || ! file.read ? false : true;}).length == cnt ? 0 : -1) : -1;
+ };
+
+ this.exec = function(hashes, cOpts) {
+ var dfrd = $.Deferred().fail(function(error) { error && fm.error(error); }),
+ files = this.files(hashes),
+ cnt = files.length,
+ thash = (typeof cOpts == 'object')? cOpts.thash : false,
+ opts = this.options,
+ into = opts.into || 'window',
+ file, url, s, w, imgW, imgH, winW, winH, reg, link, html5dl, inline,
+ selAct, cmd;
+
+ if (!cnt && !thash) {
+ {
+ return dfrd.reject();
+ }
+ }
+
+ // open folder
+ if (thash || (cnt == 1 && (file = files[0]) && file.mime == 'directory')) {
+ if (!thash && file && !file.read) {
+ return dfrd.reject(['errOpen', file.name, 'errPerm']);
+ } else {
+ if (fm.keyState.ctrlKey && (fm.keyState.shiftKey || typeof fm.options.getFileCallback !== 'function')) {
+ if (fm.getCommand('opennew')) {
+ return fm.exec('opennew', [thash? thash : file.hash]);
+ }
+ }
+
+ return fm.request({
+ data : {cmd : 'open', target : thash || file.hash},
+ notify : {type : 'open', cnt : 1, hideCnt : true},
+ syncOnFail : true,
+ lazy : false
+ });
+ }
+ }
+
+ files = $.grep(files, function(file) { return file.mime != 'directory' ? true : false; });
+
+ // nothing to open or files and folders selected - do nothing
+ if (cnt != files.length) {
+ return dfrd.reject();
+ }
+
+ var doOpen = function() {
+ var wnd, target, getOnly;
+
+ try {
+ reg = new RegExp(fm.option('dispInlineRegex'), 'i');
+ } catch(e) {
+ reg = false;
+ }
+
+ // open files
+ link = $('<a>').hide().appendTo($('body')),
+ html5dl = (typeof link.get(0).download === 'string');
+ cnt = files.length;
+ while (cnt--) {
+ target = 'elf_open_window';
+ file = files[cnt];
+
+ if (!file.read) {
+ return dfrd.reject(['errOpen', file.name, 'errPerm']);
+ }
+
+ inline = (reg && file.mime.match(reg));
+ url = fm.openUrl(file.hash, !inline);
+ if (fm.UA.Mobile || !inline) {
+ if (html5dl) {
+ if (!inline) {
+ link.attr('download', file.name);
+ } else {
+ link.attr('target', '_blank');
+ }
+ link.attr('href', url).get(0).click();
+ } else {
+ wnd = window.open(url);
+ if (!wnd) {
+ return dfrd.reject('errPopup');
+ }
+ }
+ } else {
+ getOnly = (typeof opts.method === 'string' && opts.method.toLowerCase() === 'get');
+ if (!getOnly
+ && url.indexOf(fm.options.url) === 0
+ && fm.customData
+ && Object.keys(fm.customData).length
+ // Since playback by POST request can not be done in Chrome, media allows GET request
+ && !file.mime.match(/^(?:video|audio)/)
+ ) {
+ // Send request as 'POST' method to hide custom data at location bar
+ url = '';
+ }
+ if (into === 'window') {
+ // set window size for image if set
+ imgW = winW = Math.round(2 * screen.availWidth / 3);
+ imgH = winH = Math.round(2 * screen.availHeight / 3);
+ if (parseInt(file.width) && parseInt(file.height)) {
+ imgW = parseInt(file.width);
+ imgH = parseInt(file.height);
+ } else if (file.dim) {
+ s = file.dim.split('x');
+ imgW = parseInt(s[0]);
+ imgH = parseInt(s[1]);
+ }
+ if (winW >= imgW && winH >= imgH) {
+ winW = imgW;
+ winH = imgH;
+ } else {
+ if ((imgW - winW) > (imgH - winH)) {
+ winH = Math.round(imgH * (winW / imgW));
+ } else {
+ winW = Math.round(imgW * (winH / imgH));
+ }
+ }
+ w = 'width='+winW+',height='+winH;
+ wnd = window.open(url, target, w + ',top=50,left=50,scrollbars=yes,resizable=yes,titlebar=no');
+ } else {
+ if (into === 'tabs') {
+ target = file.hash;
+ }
+ wnd = window.open('about:blank', target);
+ }
+
+ if (!wnd) {
+ return dfrd.reject('errPopup');
+ }
+
+ if (url === '') {
+ var form = document.createElement("form");
+ form.action = fm.options.url;
+ form.method = 'POST';
+ form.target = target;
+ form.style.display = 'none';
+ var params = Object.assign({}, fm.customData, {
+ cmd: 'file',
+ target: file.hash,
+ _t: file.ts || parseInt(+new Date()/1000)
+ });
+ $.each(params, function(key, val)
+ {
+ var input = document.createElement("input");
+ input.name = key;
+ input.value = val;
+ form.appendChild(input);
+ });
+
+ document.body.appendChild(form);
+ form.submit();
+ } else if (into !== 'window') {
+ wnd.location = url;
+ }
+ $(wnd).trigger('focus');
+ }
+ }
+ link.remove();
+ return dfrd.resolve(hashes);
+ };
+
+ if (cnt > 1) {
+ fm.confirm({
+ title: 'openMulti',
+ text : ['openMultiConfirm', cnt + ''],
+ accept : {
+ label : 'cmdopen',
+ callback : function() { doOpen(); }
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback : function() {
+ dfrd.reject();
+ }
+ },
+ buttons : (fm.getCommand('zipdl') && fm.isCommandEnabled('zipdl', fm.cwd().hash))? [
+ {
+ label : 'cmddownload',
+ callback : function() {
+ fm.exec('download', hashes);
+ dfrd.reject();
+ }
+ }
+ ] : []
+ });
+ } else {
+ selAct = fm.storage('selectAction') || opts.selectAction;
+ if (selAct) {
+ $.each(selAct.split('/'), function() {
+ var cmdName = this.valueOf();
+ if (cmdName !== 'open' && (cmd = fm.getCommand(cmdName)) && cmd.enabled()) {
+ return false;
+ }
+ cmd = null;
+ });
+ if (cmd) {
+ return fm.exec(cmd.name);
+ }
+ }
+ doOpen();
+ }
+
+ return dfrd;
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/opendir.js
+ */
+
+/**
+ * @class elFinder command "opendir"
+ * Enter parent folder
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.opendir = function() {
+ this.alwaysEnabled = true;
+
+ this.getstate = function() {
+ var sel = this.fm.selected(),
+ cnt = sel.length,
+ wz;
+ if (cnt !== 1) {
+ return -1;
+ }
+ wz = this.fm.getUI('workzone');
+ return wz.hasClass('elfinder-search-result')? 0 : -1;
+ };
+
+ this.exec = function(hashes) {
+ var fm = this.fm,
+ dfrd = $.Deferred(),
+ files = this.files(hashes),
+ cnt = files.length,
+ hash, pcheck = null;
+
+ if (!cnt || !files[0].phash) {
+ return dfrd.reject();
+ }
+
+ hash = files[0].phash;
+ fm.trigger('searchend', { noupdate: true });
+ fm.request({
+ data : {cmd : 'open', target : hash},
+ notify : {type : 'open', cnt : 1, hideCnt : true},
+ syncOnFail : false
+ });
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/opennew.js
+ */
+
+/**
+ * @class elFinder command "opennew"
+ * Open folder in new window
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.opennew = function() {
+ var fm = this.fm;
+
+ this.shortcuts = [{
+ pattern : (typeof(fm.options.getFileCallback) === 'function'? 'shift+' : '') + 'ctrl+enter'
+ }];
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length;
+
+ return cnt === 1
+ ? (sel[0].mime === 'directory' && sel[0].read? 0 : -1)
+ : -1;
+ };
+
+ this.exec = function(hashes) {
+ var dfrd = $.Deferred(),
+ files = this.files(hashes),
+ cnt = files.length,
+ opts = this.options,
+ file, loc, url, win;
+
+ // open folder to new tab (window)
+ if (cnt === 1 && (file = files[0]) && file.mime === 'directory') {
+ loc = window.location;
+ if (opts.url) {
+ url = opts.url;
+ } else {
+ url = loc.pathname;
+ }
+ if (opts.useOriginQuery) {
+ if (!url.match(/\?/)) {
+ url += loc.search;
+ } else if (loc.search) {
+ url += '&' + loc.search.substr(1);
+ }
+ }
+ url += '#elf_' + file.hash;
+ win = window.open(url, '_blank');
+ setTimeout(function() {
+ win.focus();
+ }, 1000);
+ return dfrd.resolve();
+ } else {
+ return dfrd.reject();
+ }
+ };
+};
+
+
+/*
+ * File: /js/commands/paste.js
+ */
+
+/**
+ * @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() {
+ 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 = $.Deferred()
+ .fail(function(error) {
+ error && fm.error(error);
+ })
+ .always(function() {
+ fm.unlockfiles({files : $.map(files, function(f) { return f.hash; })});
+ }),
+ copy = function(files) {
+ return files.length && fm._commands.duplicate
+ ? fm.exec('duplicate', files)
+ : $.Deferred().resolve();
+ },
+ paste = function(files) {
+ var dfrd = $.Deferred(),
+ existed = [],
+ hashes = {},
+ intersect = function(files, names) {
+ var ret = [],
+ i = files.length;
+
+ while (i--) {
+ $.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 {
+ $.each(names, function(i, v) {
+ exists[v.name] = v.hash;
+ });
+ existed = intersect(files, $.map(exists, function(h, n) { return n; }));
+ $.each(files, function(i, file) {
+ if (exists[file.name]) {
+ hashes[exists[file.name]] = file.name;
+ }
+ });
+ }
+ }
+ } else {
+ existedArr = [];
+ existed = $.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 = $.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 = $.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},
+ 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
+ $.each(files, function(i, f) {
+ var phash = f.phash,
+ srcHash = function(name) {
+ var hash;
+ $.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 = [];
+ $.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 $.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() {
+ dfrd.reject();
+ })
+ .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 = $.map(files, function(f) { return f.name; });
+ dst.hash == fm.cwd().hash
+ ? valid($.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;
+
+
+ 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);
+
+ $.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 ($.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 ($.inArray(dst.hash, fparents) !== -1) {
+
+ if ($.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;
+ }
+
+ $.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([]);
+ });
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/places.js
+ */
+
+/**
+ * @class elFinder command "places"
+ * Regist to Places
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.places = function() {
+ var self = this,
+ fm = this.fm,
+ filter = function(hashes) {
+ return $.grep(self.files(hashes), function(f) { return f.mime == 'directory' ? true : false; });
+ },
+ 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 $.Deferred().resolve();
+ };
+
+ fm.one('load', function(){
+ places = fm.ui.places;
+ });
+
+};
+
+
+/*
+ * File: /js/commands/preference.js
+ */
+
+/**
+ * @class elFinder command "preference"
+ * "Preference" dialog
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.preference = function() {
+ var self = this,
+ fm = this.fm,
+ r = 'replace',
+ tab = '<li class="' + fm.res('class', 'tabstab') + ' elfinder-preference-tab-{id}"><a href="#'+fm.namespace+'-preference-{id}" id="'+fm.namespace+'-preference-tab-{id}" class="ui-tabs-anchor {class}">{title}</a></li>',
+ base = $('<div class="ui-tabs ui-widget ui-widget-content ui-corner-all elfinder-preference">'),
+ ul = $('<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-top">'),
+ tabs = $('<div class="elfinder-preference-tabs ui-tabs-panel ui-widget-content ui-corner-bottom"/>'),
+ sep = '<div class="elfinder-preference-separator"/>',
+ selfUrl = $('base').length? document.location.href.replace(/#.*$/, '') : '',
+ selectTab = function(tab) {
+ $('#'+fm.namespace+'-preference-tab-'+tab).trigger('mouseover').trigger('click');
+ openTab = tab;
+ },
+ clTabActive = fm.res('class', 'tabsactive'),
+ build = function() {
+ var cats = self.options.categories || {
+ 'language' : ['language'],
+ 'theme' : ['theme'],
+ 'toolbar' : ['toolbarPref'],
+ 'workspace' : ['iconSize','columnPref', 'selectAction', 'makefileTypes', 'useStoredEditor', 'editorMaximized', 'showHidden'],
+ 'dialog' : ['autoFocusDialog'],
+ 'selectionInfo' : ['infoItems', 'hashChecker'],
+ 'reset' : ['clearBrowserData'],
+ 'all' : true
+ },
+ forms = self.options.prefs || ['language', 'theme', 'toolbarPref', 'iconSize', 'columnPref', 'selectAction', 'makefileTypes', 'useStoredEditor', 'editorMaximized', 'showHidden', 'infoItems', 'hashChecker', 'autoFocusDialog', 'clearBrowserData'];
+
+ forms = fm.arrayFlip(forms, true);
+
+ if (fm.options.getFileCallback) {
+ delete forms.selectAction;
+ }
+
+ forms.language && (forms.language = (function() {
+ var langSel = $('<select/>').on('change', function() {
+ var lang = $(this).val();
+ fm.storage('lang', lang);
+ $('#'+fm.id).elfinder('reload');
+ }),
+ optTags = [],
+ langs = self.options.langs || {
+ ar: 'اللغة العربية',
+ bg: 'Български',
+ ca: 'Català',
+ cs: 'Čeština',
+ da: 'Dansk',
+ de: 'Deutsch',
+ el: 'Ελληνικά',
+ en: 'English',
+ es: 'Español',
+ fa: 'فارسی',
+ fo: 'Føroyskt',
+ fr: 'Français',
+ he: 'עברית',
+ hr: 'Hrvatski',
+ hu: 'Magyar',
+ id: 'Bahasa Indonesia',
+ it: 'Italiano',
+ ja: '日本語',
+ ko: '한국어',
+ nl: 'Nederlands',
+ no: 'Norsk',
+ pl: 'Polski',
+ pt_BR: 'Português',
+ ro: 'Română',
+ ru: 'Pусский',
+ si: 'සිංහල',
+ sk: 'Slovenčina',
+ sl: 'Slovenščina',
+ sr: 'Srpski',
+ sv: 'Svenska',
+ tr: 'Türkçe',
+ ug_CN: 'ئۇيغۇرچە',
+ uk: 'Український',
+ vi: 'Tiếng Việt',
+ zh_CN: '简体中文',
+ zh_TW: '正體中文'
+ };
+ $.each(langs, function(lang, name) {
+ optTags.push('<option value="'+lang+'">'+name+'</option>');
+ });
+ return langSel.append(optTags.join('')).val(fm.lang);
+ })());
+
+ forms.theme && (forms.theme = (function() {
+ var cnt = fm.options.themes? Object.keys(fm.options.themes).length : 0;
+ if (cnt === 0 || (cnt === 1 && fm.options.themes.default)) {
+ return null;
+ }
+ var themeSel = $('<select/>').on('change', function() {
+ var theme = $(this).val();
+ fm.changeTheme(theme).storage('theme', theme);
+ }),
+ optTags = [],
+ tpl = {
+ image: '<img class="elfinder-preference-theme elfinder-preference-theme-image" src="$2" />',
+ link: '<a href="$1" target="_blank" title="$3">$2</a>',
+ data: '<dt>$1</dt><dd><span class="elfinder-preference-theme elfinder-preference-theme-$0">$2</span></dd>'
+ },
+ items = ['image', 'description', 'author', 'email', 'license'],
+ render = function(key, data) {
+ },
+ defBtn = $('<button class="ui-button ui-corner-all ui-widget elfinder-preference-theme-default"/>').text(fm.i18n('default')).on('click', function(e) {
+ themeSel.val('default').trigger('change');
+ }),
+ list = $('<div class="elfinder-reference-hide-taball"/>').on('click', 'button', function() {
+ var val = $(this).data('themeid');
+ themeSel.val(val).trigger('change');
+ });
+
+ if (!fm.options.themes.default) {
+ themeSel.append('<option value="default">'+fm.i18n('default')+'</option>');
+ }
+ $.each(fm.options.themes, function(id, val) {
+ var opt = $('<option class="elfinder-theme-option-'+id+'" value="'+id+'">'+fm.i18n(id)+'</option>'),
+ dsc = $('<fieldset class="ui-widget ui-widget-content ui-corner-all elfinder-theme-list-'+id+'"><legend>'+fm.i18n(id)+'</legend><div><span class="elfinder-spinner"/></div></fieldset>'),
+ tm;
+ themeSel.append(opt);
+ list.append(dsc);
+ tm = setTimeout(function() {
+ dsc.find('span.elfinder-spinner').replaceWith(fm.i18n(['errRead', id]));
+ }, 10000);
+ fm.getTheme(id).always(function() {
+ tm && clearTimeout(tm);
+ }).done(function(data) {
+ var link, val = $(), dl = $('<dl/>');
+ link = data.link? tpl.link.replace(/\$1/g, data.link).replace(/\$3/g, fm.i18n('website')) : '$2';
+ if (data.name) {
+ opt.html(fm.i18n(data.name));
+ }
+ dsc.children('legend').html(link.replace(/\$2/g, fm.i18n(data.name) || id));
+ $.each(items, function(i, key) {
+ var t = tpl[key] || tpl.data,
+ elm;
+ if (data[key]) {
+ elm = t.replace(/\$0/g, fm.escape(key)).replace(/\$1/g, fm.i18n(key)).replace(/\$2/g, fm.i18n(data[key]));
+ if (key === 'image' && data.link) {
+ elm = $(elm).on('click', function() {
+ themeSel.val(id).trigger('change');
+ }).attr('title', fm.i18n('select'));
+ }
+ dl.append(elm);
+ }
+ });
+ val = val.add(dl);
+ val = val.add($('<div class="elfinder-preference-theme-btn"/>').append($('<button class="ui-button ui-corner-all ui-widget"/>').data('themeid', id).html(fm.i18n('select'))));
+ dsc.find('span.elfinder-spinner').replaceWith(val);
+ }).fail(function() {
+ dsc.find('span.elfinder-spinner').replaceWith(fm.i18n(['errRead', id]));
+ });
+ });
+ return $('<div/>').append(themeSel.val(fm.theme && fm.theme.id? fm.theme.id : 'default'), defBtn, list);
+ })());
+
+ forms.toolbarPref && (forms.toolbarPref = (function() {
+ var pnls = $.map(fm.options.uiOptions.toolbar, function(v) {
+ return $.isArray(v)? v : null;
+ }),
+ tags = [],
+ hides = fm.storage('toolbarhides') || {};
+ $.each(pnls, function() {
+ var cmd = this,
+ name = fm.i18n('cmd'+cmd);
+ if (name === 'cmd'+cmd) {
+ name = fm.i18n(cmd);
+ }
+ tags.push('<span class="elfinder-preference-toolbar-item"><label><input type="checkbox" value="'+cmd+'" '+(hides[cmd]? '' : 'checked')+'/>'+name+'</label></span>');
+ });
+ return $(tags.join(' ')).on('change', 'input', function() {
+ var v = $(this).val(),
+ o = $(this).is(':checked');
+ if (!o && !hides[v]) {
+ hides[v] = true;
+ } else if (o && hides[v]) {
+ delete hides[v];
+ }
+ fm.storage('toolbarhides', hides);
+ fm.trigger('toolbarpref');
+ });
+ })());
+
+ forms.iconSize && (forms.iconSize = (function() {
+ var max = fm.options.uiOptions.cwd.iconsView.sizeMax || 3,
+ size = fm.storage('iconsize') || 0,
+ sld = $('<div class="touch-punch"/>').slider({
+ classes: {
+ 'ui-slider-handle': 'elfinder-tabstop',
+ },
+ value: size,
+ max: max,
+ slide: function(e, ui) {
+ fm.getUI('cwd').trigger('iconpref', {size: ui.value});
+ },
+ change: function(e, ui) {
+ fm.storage('iconsize', ui.value);
+ }
+ });
+ fm.getUI('cwd').on('iconpref', function(e, data) {
+ sld.slider('option', 'value', data.size);
+ });
+ return sld;
+ })());
+
+ forms.columnPref && (forms.columnPref = (function() {
+ var cols = fm.options.uiOptions.cwd.listView.columns,
+ tags = [],
+ hides = fm.storage('columnhides') || {};
+ $.each(cols, function() {
+ var key = this,
+ name = fm.getColumnName(key);
+ tags.push('<span class="elfinder-preference-column-item"><label><input type="checkbox" value="'+key+'" '+(hides[key]? '' : 'checked')+'/>'+name+'</label></span>');
+ });
+ return $(tags.join(' ')).on('change', 'input', function() {
+ var v = $(this).val(),
+ o = $(this).is(':checked');
+ if (!o && !hides[v]) {
+ hides[v] = true;
+ } else if (o && hides[v]) {
+ delete hides[v];
+ }
+ fm.storage('columnhides', hides);
+ fm.trigger('columnpref', { repaint: true });
+ });
+ })());
+
+ forms.selectAction && (forms.selectAction = (function() {
+ var actSel = $('<select/>').on('change', function() {
+ var act = $(this).val();
+ fm.storage('selectAction', act === 'default'? null : act);
+ }),
+ optTags = [],
+ acts = self.options.selectActions,
+ defAct = fm.getCommand('open').options.selectAction || 'open';
+
+ if ($.inArray(defAct, acts) === -1) {
+ acts.unshift(defAct);
+ }
+ $.each(acts, function(i, act) {
+ var names = $.map(act.split('/'), function(cmd) {
+ var name = fm.i18n('cmd'+cmd);
+ if (name === 'cmd'+cmd) {
+ name = fm.i18n(cmd);
+ }
+ return name;
+ });
+ optTags.push('<option value="'+act+'">'+names.join('/')+'</option>');
+ });
+ return actSel.append(optTags.join('')).val(fm.storage('selectAction') || defAct);
+ })());
+
+ forms.makefileTypes && (forms.makefileTypes = (function() {
+ var hides = fm.storage('mkfileHides') || {},
+ getTag = function() {
+ var tags = [];
+ // re-assign hides
+ hides = fm.storage('mkfileHides') || {};
+ $.each(fm.mimesCanMakeEmpty, function(mime, type) {
+ var name = fm.getCommand('mkfile').getTypeName(mime, type);
+ tags.push('<span class="elfinder-preference-column-item" title="'+fm.escape(name)+'"><label><input type="checkbox" value="'+mime+'" '+(hides[mime]? '' : 'checked')+'/>'+type+'</label></span>');
+ });
+ return tags.join(' ');
+ },
+ elm = $('<div/>').on('change', 'input', function() {
+ var v = $(this).val(),
+ o = $(this).is(':checked');
+ if (!o && !hides[v]) {
+ hides[v] = true;
+ } else if (o && hides[v]) {
+ delete hides[v];
+ }
+ fm.storage('mkfileHides', hides);
+ fm.trigger('canMakeEmptyFile');
+ }).append(getTag()),
+ add = $('<div/>').append(
+ $('<input type="text" placeholder="'+fm.i18n('typeOfTextfile')+'"/>').on('keydown', function(e) {
+ (e.keyCode === $.ui.keyCode.ENTER) && $(this).next().trigger('click');
+ }),
+ $('<button class="ui-button"/>').html(fm.i18n('add')).on('click', function() {
+ var input = $(this).prev(),
+ val = input.val(),
+ uiToast = fm.getUI('toast'),
+ err = function() {
+ uiToast.appendTo(input.closest('.ui-dialog'));
+ fm.toast({
+ msg: fm.i18n('errUsupportType'),
+ mode: 'warning',
+ onHidden: function() {
+ uiToast.children().length === 1 && uiToast.appendTo(fm.getUI());
+ }
+ });
+ input.trigger('focus');
+ return false;
+ },
+ tmpMimes;
+ if (!val.match(/\//)) {
+ val = fm.arrayFlip(fm.mimeTypes)[val];
+ if (!val) {
+ return err();
+ }
+ input.val(val);
+ }
+ if (!fm.mimeIsText(val) || !fm.mimeTypes[val]) {
+ return err();
+ }
+ fm.trigger('canMakeEmptyFile', {mimes: [val], unshift: true});
+ tmpMimes = {};
+ tmpMimes[val] = fm.mimeTypes[val];
+ fm.storage('mkfileTextMimes', Object.assign(tmpMimes, fm.storage('mkfileTextMimes') || {}));
+ input.val('');
+ uiToast.appendTo(input.closest('.ui-dialog'));
+ fm.toast({
+ msg: fm.i18n(['complete', val + ' (' + tmpMimes[val] + ')']),
+ onHidden: function() {
+ uiToast.children().length === 1 && uiToast.appendTo(fm.getUI());
+ }
+ });
+ }),
+ $('<button class="ui-button"/>').html(fm.i18n('reset')).on('click', function() {
+ fm.one('canMakeEmptyFile', {done: function() {
+ elm.empty().append(getTag());
+ }});
+ fm.trigger('canMakeEmptyFile', {resetTexts: true});
+ })
+ ),
+ tm;
+ fm.bind('canMakeEmptyFile', {done: function(e) {
+ if (e.data && e.data.mimes && e.data.mimes.length) {
+ elm.empty().append(getTag());
+ }
+ }});
+ return $('<div/>').append(elm, add);
+ })());
+
+ forms.useStoredEditor && (forms.useStoredEditor = $('<input type="checkbox"/>').prop('checked', (function() {
+ var s = fm.storage('useStoredEditor');
+ return s? (s > 0) : fm.options.commandsOptions.edit.useStoredEditor;
+ })()).on('change', function(e) {
+ fm.storage('useStoredEditor', $(this).is(':checked')? 1 : -1);
+ }));
+
+ forms.editorMaximized && (forms.editorMaximized = $('<input type="checkbox"/>').prop('checked', (function() {
+ var s = fm.storage('editorMaximized');
+ return s? (s > 0) : fm.options.commandsOptions.edit.editorMaximized;
+ })()).on('change', function(e) {
+ fm.storage('editorMaximized', $(this).is(':checked')? 1 : -1);
+ }));
+
+ if (forms.showHidden) {
+ (function() {
+ var setTitle = function() {
+ var s = fm.storage('hide'),
+ t = [],
+ v;
+ if (s && s.items) {
+ $.each(s.items, function(h, n) {
+ t.push(fm.escape(n));
+ });
+ }
+ elms.prop('disabled', !t.length)[t.length? 'removeClass' : 'addClass']('ui-state-disabled');
+ v = t.length? t.join('\n') : '';
+ forms.showHidden.attr('title',v);
+ useTooltip && forms.showHidden.tooltip('option', 'content', v.replace(/\n/g, '<br>')).tooltip('close');
+ },
+ chk = $('<input type="checkbox"/>').prop('checked', (function() {
+ var s = fm.storage('hide');
+ return s && s.show;
+ })()).on('change', function(e) {
+ var o = {};
+ o[$(this).is(':checked')? 'show' : 'hide'] = true;
+ fm.exec('hide', void(0), o);
+ }),
+ btn = $('<button class="ui-button ui-corner-all ui-widget"/>').append(fm.i18n('reset')).on('click', function() {
+ fm.exec('hide', void(0), {reset: true});
+ $(this).parent().find('input:first').prop('checked', false);
+ setTitle();
+ }),
+ elms = $().add(chk).add(btn),
+ useTooltip;
+
+ forms.showHidden = $('<div/>').append(chk, btn);
+ fm.bind('hide', function(e) {
+ var d = e.data;
+ if (!d.opts || (!d.opts.show && !d.opts.hide)) {
+ setTitle();
+ }
+ });
+ if (fm.UA.Mobile && $.fn.tooltip) {
+ useTooltip = true;
+ forms.showHidden.tooltip({
+ classes: {
+ 'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow'
+ },
+ tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow',
+ track: true
+ }).css('user-select', 'none');
+ btn.css('user-select', 'none');
+ }
+ setTitle();
+ })();
+ }
+
+ forms.infoItems && (forms.infoItems = (function() {
+ var items = fm.getCommand('info').items,
+ tags = [],
+ hides = fm.storage('infohides') || fm.arrayFlip(fm.options.commandsOptions.info.hideItems, true);
+ $.each(items, function() {
+ var key = this,
+ name = fm.i18n(key);
+ tags.push('<span class="elfinder-preference-info-item"><label><input type="checkbox" value="'+key+'" '+(hides[key]? '' : 'checked')+'/>'+name+'</label></span>');
+ });
+ return $(tags.join(' ')).on('change', 'input', function() {
+ var v = $(this).val(),
+ o = $(this).is(':checked');
+ if (!o && !hides[v]) {
+ hides[v] = true;
+ } else if (o && hides[v]) {
+ delete hides[v];
+ }
+ fm.storage('infohides', hides);
+ fm.trigger('infopref', { repaint: true });
+ });
+ })());
+
+ forms.hashChecker && fm.hashCheckers.length && (forms.hashChecker = (function() {
+ var tags = [],
+ enabled = fm.arrayFlip(fm.storage('hashchekcer') || fm.options.commandsOptions.info.showHashAlgorisms, true);
+ $.each(fm.hashCheckers, function() {
+ var cmd = this,
+ name = fm.i18n(cmd);
+ tags.push('<span class="elfinder-preference-hashchecker-item"><label><input type="checkbox" value="'+cmd+'" '+(enabled[cmd]? 'checked' : '')+'/>'+name+'</label></span>');
+ });
+ return $(tags.join(' ')).on('change', 'input', function() {
+ var v = $(this).val(),
+ o = $(this).is(':checked');
+ if (o) {
+ enabled[v] = true;
+ } else if (enabled[v]) {
+ delete enabled[v];
+ }
+ fm.storage('hashchekcer', $.grep(fm.hashCheckers, function(v) {
+ return enabled[v];
+ }));
+ });
+ })());
+
+ forms.autoFocusDialog && (forms.autoFocusDialog = $('<input type="checkbox"/>').prop('checked', (function() {
+ var s = fm.storage('autoFocusDialog');
+ return s? (s > 0) : fm.options.uiOptions.dialog.focusOnMouseOver;
+ })()).on('change', function(e) {
+ fm.storage('autoFocusDialog', $(this).is(':checked')? 1 : -1);
+ }));
+
+ forms.clearBrowserData && (forms.clearBrowserData = $('<button/>').text(fm.i18n('reset')).button().on('click', function(e) {
+ e.preventDefault();
+ fm.storage();
+ $('#'+fm.id).elfinder('reload');
+ }));
+
+ $.each(cats, function(id, prefs) {
+ var dls, found;
+ if (prefs === true) {
+ found = 1;
+ } else if (prefs) {
+ dls = $();
+ $.each(prefs, function(i, n) {
+ var f, title, chks = '', cbox;
+ if (f = forms[n]) {
+ found = 2;
+ title = fm.i18n(n);
+ cbox = $(f).filter('input[type="checkbox"]');
+ if (!cbox.length) {
+ cbox = $(f).find('input[type="checkbox"]');
+ }
+ if (cbox.length === 1) {
+ if (!cbox.attr('id')) {
+ cbox.attr('id', 'elfinder-preference-'+n+'-checkbox');
+ }
+ title = '<label for="'+cbox.attr('id')+'">'+title+'</label>';
+ } else if (cbox.length > 1) {
+ chks = ' elfinder-preference-checkboxes';
+ }
+ dls = dls.add($('<dt class="elfinder-preference-'+n+chks+'">'+title+'</dt>')).add($('<dd class="elfinder-preference-'+n+chks+'"/>').append(f));
+ }
+ });
+ }
+ if (found) {
+ ul.append(tab[r](/\{id\}/g, id)[r](/\{title\}/, fm.i18n(id))[r](/\{class\}/, openTab === id? 'elfinder-focus' : ''));
+ if (found === 2) {
+ tabs.append(
+ $('<div id="'+fm.namespace+'-preference-'+id+'" class="elfinder-preference-content"/>')
+ .hide()
+ .append($('<dl/>').append(dls))
+ );
+ }
+ }
+ });
+
+ ul.on('click', 'a', function(e) {
+ var t = $(e.target),
+ h = t.attr('href');
+ e.preventDefault();
+ e.stopPropagation();
+
+ ul.children().removeClass(clTabActive);
+ t.removeClass('ui-state-hover').parent().addClass(clTabActive);
+
+ if (h.match(/all$/)) {
+ tabs.addClass('elfinder-preference-taball').children().show();
+ } else {
+ tabs.removeClass('elfinder-preference-taball').children().hide();
+ $(h).show();
+ }
+ }).on('focus blur', 'a', function(e) {
+ $(this).parent().toggleClass('ui-state-focus', e.type === 'focusin');
+ }).on('mouseenter mouseleave', 'li', function(e) {
+ $(this).toggleClass('ui-state-hover', e.type === 'mouseenter');
+ });
+
+ tabs.find('a,input,select,button').addClass('elfinder-tabstop');
+ base.append(ul, tabs);
+
+ dialog = self.fmDialog(base, {
+ title : self.title,
+ width : self.options.width || 600,
+ height: self.options.height || 400,
+ maxWidth: 'window',
+ maxHeight: 'window',
+ autoOpen : false,
+ destroyOnClose : false,
+ allowMinimize : false,
+ open : function() {
+ openTab && selectTab(openTab);
+ openTab = null;
+ },
+ resize : function() {
+ tabs.height(dialog.height() - ul.outerHeight(true) - (tabs.outerHeight(true) - tabs.height()) - 5);
+ }
+ })
+ .on('click', function(e) {
+ e.stopPropagation();
+ })
+ .css({
+ overflow: 'hidden'
+ });
+
+ dialog.closest('.ui-dialog')
+ .css({
+ overflow: 'hidden'
+ })
+ .addClass('elfinder-bg-translucent');
+
+ openTab = 'all';
+ },
+ dialog, openTab;
+
+ this.shortcuts = [{
+ pattern : 'ctrl+comma',
+ description : this.title
+ }];
+
+ this.alwaysEnabled = true;
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.exec = function(sel, cOpts) {
+ !dialog && build();
+ if (cOpts) {
+ if (cOpts.tab) {
+ selectTab(cOpts.tab);
+ } else if (cOpts._currentType === 'cwd') {
+ selectTab('workspace');
+ }
+ }
+ dialog.elfinderdialog('open');
+ return $.Deferred().resolve();
+ };
+
+};
+
+/*
+ * File: /js/commands/quicklook.js
+ */
+
+/**
+ * @class elFinder command "quicklook"
+ * Fast preview for some files types
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+(elFinder.prototype.commands.quicklook = function() {
+ var self = this,
+ fm = self.fm,
+ /**
+ * window closed state
+ *
+ * @type Number
+ **/
+ closed = 0,
+ /**
+ * window animated state
+ *
+ * @type Number
+ **/
+ animated = 1,
+ /**
+ * window opened state
+ *
+ * @type Number
+ **/
+ opened = 2,
+ /**
+ * window docked state
+ *
+ * @type Number
+ **/
+ docked = 3,
+ /**
+ * window docked and hidden state
+ *
+ * @type Number
+ **/
+ dockedhidden = 4,
+ /**
+ * window state
+ *
+ * @type Number
+ **/
+ state = closed,
+ /**
+ * Event name of update
+ * for fix conflicts with Prototype.JS
+ *
+ * `@see https://github.com/Studio-42/elFinder/pull/2346
+ * @type String
+ **/
+ evUpdate = Element.update? 'quicklookupdate' : 'update',
+ /**
+ * navbar icon class
+ *
+ * @type String
+ **/
+ navicon = 'elfinder-quicklook-navbar-icon',
+ /**
+ * navbar "fullscreen" icon class
+ *
+ * @type String
+ **/
+ fullscreen = 'elfinder-quicklook-fullscreen',
+ /**
+ * info wrapper class
+ *
+ * @type String
+ */
+ infocls = 'elfinder-quicklook-info-wrapper',
+ /**
+ * Triger keydown/keypress event with left/right arrow key code
+ *
+ * @param Number left/right arrow key code
+ * @return void
+ **/
+ navtrigger = function(code) {
+ $(document).trigger($.Event('keydown', { keyCode: code, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false }));
+ },
+ /**
+ * Return css for closed window
+ *
+ * @param jQuery file node in cwd
+ * @return void
+ **/
+ closedCss = function(node) {
+ var elf = fm.getUI().offset(),
+ base = (function() {
+ var target = node.find('.elfinder-cwd-file-wrapper');
+ return target.length? target : node;
+ })(),
+ baseOffset = base.offset() || { top: 0, left: 0 };
+ return {
+ opacity : 0,
+ width : base.width(),
+ height : base.height() - 30,
+ top : baseOffset.top - elf.top,
+ left : baseOffset.left - elf.left
+ };
+ },
+ /**
+ * Return css for opened window
+ *
+ * @return void
+ **/
+ openedCss = function() {
+ var contain = self.options.contain,
+ win = contain? fm.getUI() : $(window),
+ elf = fm.getUI().offset(),
+ w = Math.min(width, win.width()-10),
+ h = Math.min(height, win.height()-80);
+ return {
+ opacity : 1,
+ width : w,
+ height : h,
+ top : parseInt((win.height() - h - 60) / 2 + (contain? 0 : win.scrollTop() - elf.top)),
+ left : parseInt((win.width() - w) / 2 + (contain? 0 : win.scrollLeft() - elf.left))
+ };
+ },
+
+ mediaNode = {},
+ support = function(codec, name) {
+ var node = name || codec.substr(0, codec.indexOf('/')),
+ media = mediaNode[node]? mediaNode[node] : (mediaNode[node] = document.createElement(node)),
+ value = false;
+
+ try {
+ value = media.canPlayType && media.canPlayType(codec);
+ } catch(e) {}
+
+ return (value && value !== '' && value != 'no')? true : false;
+ },
+
+ platformWin = (window.navigator.platform.indexOf('Win') != -1),
+
+ /**
+ * Opened window width (from config)
+ *
+ * @type Number
+ **/
+ width,
+ /**
+ * Opened window height (from config)
+ *
+ * @type Number
+ **/
+ height,
+ /**
+ * Previous style before docked
+ *
+ * @type String
+ **/
+ prevStyle,
+ /**
+ * elFinder node
+ *
+ * @type jQuery
+ **/
+ parent,
+ /**
+ * elFinder current directory node
+ *
+ * @type jQuery
+ **/
+ cwd,
+ /**
+ * Current directory hash
+ *
+ * @type String
+ **/
+ cwdHash,
+ dockEnabled = false,
+ navdrag = false,
+ navmove = false,
+ navtm = null,
+ leftKey = $.ui.keyCode.LEFT,
+ rightKey = $.ui.keyCode.RIGHT,
+ coverEv = 'mousemove touchstart ' + ('onwheel' in document? 'wheel' : 'onmousewheel' in document? 'mousewheel' : 'DOMMouseScroll'),
+ title = $('<span class="elfinder-dialog-title elfinder-quicklook-title"/>'),
+ icon = $('<div/>'),
+ info = $('<div class="elfinder-quicklook-info"/>'),//.hide(),
+ cover = $('<div class="ui-front elfinder-quicklook-cover"/>'),
+ fsicon = $('<div class="'+navicon+' '+navicon+'-fullscreen"/>')
+ .on('click touchstart', function(e) {
+ if (navmove) {
+ return;
+ }
+
+ var win = self.window,
+ full = win.hasClass(fullscreen),
+ $window = $(window),
+ resize = function() { self.preview.trigger('changesize'); };
+
+ e.stopPropagation();
+ e.preventDefault();
+
+ if (full) {
+ navStyle = '';
+ navShow();
+ win.toggleClass(fullscreen)
+ .css(win.data('position'));
+ $window.trigger(self.resize).off(self.resize, resize);
+ navbar.off('mouseenter mouseleave');
+ cover.off(coverEv);
+ } else {
+ win.toggleClass(fullscreen)
+ .data('position', {
+ left : win.css('left'),
+ top : win.css('top'),
+ width : win.width(),
+ height : win.height(),
+ display: 'block'
+ })
+ .removeAttr('style');
+
+ $(window).on(self.resize, resize)
+ .trigger(self.resize);
+
+ cover.on(coverEv, function(e) {
+ if (! navdrag) {
+ if (e.type === 'mousemove' || e.type === 'touchstart') {
+ navShow();
+ navtm = setTimeout(function() {
+ if (fm.UA.Mobile || navbar.parent().find('.elfinder-quicklook-navbar:hover').length < 1) {
+ navbar.fadeOut('slow', function() {
+ cover.show();
+ });
+ }
+ }, 3000);
+ }
+ if (cover.is(':visible')) {
+ coverHide();
+ cover.data('tm', setTimeout(function() {
+ cover.show();
+ }, 3000));
+ }
+ }
+ }).show().trigger('mousemove');
+
+ navbar.on('mouseenter mouseleave', function(e) {
+ if (! navdrag) {
+ if (e.type === 'mouseenter') {
+ navShow();
+ } else {
+ cover.trigger('mousemove');
+ }
+ }
+ });
+ }
+ if (fm.zIndex) {
+ win.css('z-index', fm.zIndex + 1);
+ }
+ if (fm.UA.Mobile) {
+ navbar.attr('style', navStyle);
+ } else {
+ navbar.attr('style', navStyle).draggable(full ? 'destroy' : {
+ start: function() {
+ navdrag = true;
+ navmove = true;
+ cover.show();
+ navShow();
+ },
+ stop: function() {
+ navdrag = false;
+ navStyle = self.navbar.attr('style');
+ requestAnimationFrame(function() {
+ navmove = false;
+ });
+ }
+ });
+ }
+ $(this).toggleClass(navicon+'-fullscreen-off');
+ var collection = win;
+ if (parent.is('.ui-resizable')) {
+ collection = collection.add(parent);
+ }
+ collection.resizable(full ? 'enable' : 'disable').removeClass('ui-state-disabled');
+
+ win.trigger('viewchange');
+ }
+ ),
+
+ updateOnSel = function() {
+ self.update(void(0), (function() {
+ var fm = self.fm,
+ files = fm.selectedFiles(),
+ cnt = files.length,
+ inDock = self.docked(),
+ getInfo = function() {
+ var ts = 0;
+ $.each(files, function(i, f) {
+ var t = parseInt(f.ts);
+ if (ts >= 0) {
+ if (t > ts) {
+ ts = t;
+ }
+ } else {
+ ts = 'unknown';
+ }
+ });
+ return {
+ hash : files[0].hash + '/' + (+new Date()),
+ name : fm.i18n('items') + ': ' + cnt,
+ mime : 'group',
+ size : spinner,
+ ts : ts,
+ files : $.map(files, function(f) { return f.hash; }),
+ getSize : true
+ };
+ };
+ if (! cnt) {
+ cnt = 1;
+ files = [fm.cwd()];
+ }
+ return (cnt === 1)? files[0] : getInfo();
+ })());
+ },
+
+ navShow = function() {
+ if (self.window.hasClass(fullscreen)) {
+ navtm && clearTimeout(navtm);
+ navtm = null;
+ // if use `show()` it make infinite loop with old jQuery (jQuery/jQuery UI: 1.8.0/1.9.0)
+ // see #1478 https://github.com/Studio-42/elFinder/issues/1478
+ navbar.stop(true, true).css('display', 'block');
+ coverHide();
+ }
+ },
+
+ coverHide = function() {
+ cover.data('tm') && clearTimeout(cover.data('tm'));
+ cover.removeData('tm');
+ cover.hide();
+ },
+
+ prev = $('<div class="'+navicon+' '+navicon+'-prev"/>').on('click touchstart', function(e) { ! navmove && navtrigger(leftKey); return false; }),
+ next = $('<div class="'+navicon+' '+navicon+'-next"/>').on('click touchstart', function(e) { ! navmove && navtrigger(rightKey); return false; }),
+ navbar = $('<div class="elfinder-quicklook-navbar"/>')
+ .append(prev)
+ .append(fsicon)
+ .append(next)
+ .append('<div class="elfinder-quicklook-navbar-separator"/>')
+ .append($('<div class="'+navicon+' '+navicon+'-close"/>').on('click touchstart', function(e) { ! navmove && self.window.trigger('close'); return false; }))
+ ,
+ titleClose = $('<span class="ui-front ui-icon elfinder-icon-close ui-icon-closethick"/>').on('mousedown', function(e) {
+ e.stopPropagation();
+ self.window.trigger('close');
+ }),
+ titleDock = $('<span class="ui-front ui-icon elfinder-icon-minimize ui-icon-minusthick"/>').on('mousedown', function(e) {
+ e.stopPropagation();
+ if (! self.docked()) {
+ self.window.trigger('navdockin');
+ } else {
+ self.window.trigger('navdockout');
+ }
+ }),
+ spinner = '<span class="elfinder-spinner-text">' + fm.i18n('calc') + '</span>' + '<span class="elfinder-spinner"/>',
+ navStyle = '',
+ init = true,
+ dockHeight, getSize, tm4cwd, dockedNode, selectTm;
+
+ this.cover = cover;
+ this.evUpdate = evUpdate;
+ (this.navbar = navbar)._show = navShow;
+ this.resize = 'resize.'+fm.namespace;
+ this.info = $('<div/>').addClass(infocls)
+ .append(icon)
+ .append(info);
+ this.autoPlay = function() {
+ if (self.opened()) {
+ return !! self.options[self.docked()? 'dockAutoplay' : 'autoplay'];
+ }
+ return false;
+ };
+ this.preview = $('<div class="elfinder-quicklook-preview ui-helper-clearfix"/>')
+ // clean info/icon
+ .on('change', function() {
+ navShow();
+ navbar.attr('style', navStyle);
+ self.docked() && navbar.hide();
+ self.preview.attr('style', '').removeClass('elfinder-overflow-auto');
+ self.info.attr('style', '').hide();
+ self.cover.removeClass('elfinder-quicklook-coverbg');
+ icon.removeAttr('class').attr('style', '');
+ info.html('');
+ })
+ // update info/icon
+ .on(evUpdate, function(e) {
+ var preview = self.preview,
+ file = e.file,
+ tpl = '<div class="elfinder-quicklook-info-data">{value}</div>',
+ update = function() {
+ var win = self.window.css('overflow', 'hidden');
+ name = fm.escape(file.i18 || file.name);
+ !file.read && e.stopImmediatePropagation();
+ self.window.data('hash', file.hash);
+ self.preview.off('changesize').trigger('change').children().remove();
+ title.html(name);
+
+ prev.css('visibility', '');
+ next.css('visibility', '');
+ if (file.hash === fm.cwdId2Hash(cwd.find('[id]:not(.elfinder-cwd-parent):first').attr('id'))) {
+ prev.css('visibility', 'hidden');
+ }
+ if (file.hash === fm.cwdId2Hash(cwd.find('[id]:last').attr('id'))) {
+ next.css('visibility', 'hidden');
+ }
+
+ if (file.mime === 'directory') {
+ getSizeHashes = [ file.hash ];
+ } else if (file.mime === 'group' && file.getSize) {
+ getSizeHashes = file.files;
+ }
+
+ info.html(
+ tpl.replace(/\{value\}/, name)
+ + tpl.replace(/\{value\}/, fm.mime2kind(file))
+ + tpl.replace(/\{value\}/, getSizeHashes.length ? spinner : fm.formatSize(file.size))
+ + tpl.replace(/\{value\}/, fm.i18n('modify')+': '+ fm.formatDate(file))
+ );
+
+ if (getSizeHashes.length) {
+ getSize = fm.getSize(getSizeHashes).done(function(data) {
+ info.find('span.elfinder-spinner').parent().html(data.formated);
+ }).fail(function() {
+ info.find('span.elfinder-spinner').parent().html(fm.i18n('unknown'));
+ }).always(function() {
+ getSize = null;
+ });
+ getSize._hash = file.hash;
+ }
+
+ icon.addClass('elfinder-cwd-icon ui-corner-all '+fm.mime2class(file.mime));
+
+ if (file.icon) {
+ icon.css(fm.getIconStyle(file, true));
+ }
+
+ self.info.attr('class', infocls);
+ if (file.csscls) {
+ self.info.addClass(file.csscls);
+ }
+
+ if (file.read && (tmb = fm.tmb(file))) {
+ $('<img/>')
+ .hide()
+ .appendTo(self.preview)
+ .on('load', function() {
+ icon.addClass(tmb.className).css('background-image', "url('"+tmb.url+"')");
+ $(this).remove();
+ })
+ .attr('src', tmb.url);
+ }
+ self.info.delay(100).fadeIn(10);
+ if (self.window.hasClass(fullscreen)) {
+ cover.trigger('mousemove');
+ }
+ win.css('overflow', '');
+ },
+ tmb, name, getSizeHashes = [];
+
+ if (file && ! Object.keys(file).length) {
+ file = fm.cwd();
+ }
+ if (file && getSize && getSize.state() === 'pending' && getSize._hash !== file.hash) {
+ getSize.reject();
+ }
+ if (file && (e.forceUpdate || self.window.data('hash') !== file.hash)) {
+ update();
+ } else {
+ e.stopImmediatePropagation();
+ }
+ });
+
+ this.window = $('<div class="ui-front ui-helper-reset ui-widget elfinder-quicklook touch-punch" style="position:absolute"/>')
+ .hide()
+ .addClass(fm.UA.Touch? 'elfinder-touch' : '')
+ .on('click', function(e) {
+ var win = this;
+ e.stopPropagation();
+ if (state === opened) {
+ requestAnimationFrame(function() {
+ state === opened && fm.toFront(win);
+ });
+ }
+ })
+ .append(
+ $('<div class="ui-dialog-titlebar ui-widget-header ui-corner-top ui-helper-clearfix elfinder-quicklook-titlebar"/>')
+ .append(
+ $('<span class="ui-widget-header ui-dialog-titlebar-close ui-corner-all elfinder-titlebar-button elfinder-quicklook-titlebar-icon'+(platformWin? ' elfinder-titlebar-button-right' : '')+'"/>').append(
+ titleClose, titleDock
+ ),
+ title
+ ),
+ this.preview,
+ self.info.hide(),
+ cover.hide(),
+ navbar
+ )
+ .draggable({handle : 'div.elfinder-quicklook-titlebar'})
+ .on('open', function(e, clcss) {
+ var win = self.window,
+ file = self.value,
+ node = fm.getUI('cwd'),
+ open = function(status) {
+ state = status;
+ self.update(1, self.value);
+ self.change();
+ win.trigger('resize.' + fm.namespace);
+ };
+
+ if (!init && state === closed) {
+ if (file && file.hash !== cwdHash) {
+ node = fm.cwdHash2Elm(file.hash.split('/', 2)[0]);
+ }
+ navStyle = '';
+ navbar.attr('style', '');
+ state = animated;
+ node.trigger('scrolltoview');
+ coverHide();
+ win.css(clcss || closedCss(node))
+ .show()
+ .animate(openedCss(), 550, function() {
+ open(opened);
+ navShow();
+ });
+ fm.toFront(win);
+ } else if (state === dockedhidden) {
+ fm.getUI('navdock').data('addNode')(dockedNode);
+ open(docked);
+ self.preview.trigger('changesize');
+ fm.storage('previewDocked', '1');
+ if (fm.getUI('navdock').width() === 0) {
+ win.trigger('navdockout');
+ }
+ }
+ })
+ .on('close', function(e, dfd) {
+ var win = self.window,
+ preview = self.preview.trigger('change'),
+ file = self.value,
+ hash = (win.data('hash') || '').split('/', 2)[0],
+ close = function(status, winhide) {
+ state = status;
+ winhide && fm.toHide(win);
+ preview.children().remove();
+ self.update(0, self.value);
+ win.data('hash', '');
+ dfd && dfd.resolve();
+ },
+ node;
+
+ if (self.opened()) {
+ getSize && getSize.state() === 'pending' && getSize.reject();
+ if (! self.docked()) {
+ state = animated;
+ win.hasClass(fullscreen) && fsicon.click();
+ (hash && (node = cwd.find('#'+hash)).length)
+ ? win.animate(closedCss(node), 500, function() { close(closed, true); })
+ : close(closed, true);
+ } else {
+ dockedNode = fm.getUI('navdock').data('removeNode')(self.window.attr('id'), 'detach');
+ close(dockedhidden);
+ fm.storage('previewDocked', '2');
+ }
+ }
+ })
+ .on('navdockin', function(e, data) {
+ var w = self.window,
+ box = fm.getUI('navdock'),
+ height = dockHeight || box.width(),
+ opts = data || {};
+
+ if (init) {
+ opts.init = true;
+ }
+ state = docked;
+ prevStyle = w.attr('style');
+ w.toggleClass('ui-front').removeClass('ui-widget').draggable('disable').resizable('disable').removeAttr('style').css({
+ width: '100%',
+ height: height,
+ boxSizing: 'border-box',
+ paddingBottom: 0,
+ zIndex: 'unset'
+ });
+ navbar.hide();
+ titleDock.toggleClass('ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize');
+
+ fm.toHide(w, true);
+ box.data('addNode')(w, opts);
+
+ self.preview.trigger('changesize');
+
+ fm.storage('previewDocked', '1');
+ })
+ .on('navdockout', function(e) {
+ var w = self.window,
+ box = fm.getUI('navdock'),
+ dfd = $.Deferred(),
+ clcss = closedCss(self.preview);
+
+ dockHeight = w.outerHeight();
+ box.data('removeNode')(w.attr('id'), fm.getUI());
+ w.toggleClass('ui-front').addClass('ui-widget').draggable('enable').resizable('enable').attr('style', prevStyle);
+ titleDock.toggleClass('ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize');
+
+ state = closed;
+ w.trigger('open', clcss);
+
+ fm.storage('previewDocked', '0');
+ })
+ .on('resize.' + fm.namespace, function() {
+ self.preview.trigger('changesize');
+ });
+
+ /**
+ * This command cannot be disable by backend
+ *
+ * @type Boolean
+ **/
+ this.alwaysEnabled = true;
+
+ /**
+ * Selected file
+ *
+ * @type Object
+ **/
+ this.value = null;
+
+ this.handlers = {
+ // save selected file
+ select : function(e, d) {
+ selectTm && cancelAnimationFrame(selectTm);
+ if (! e.data || ! e.data.selected || ! e.data.selected.length) {
+ selectTm = requestAnimationFrame(function() {
+ self.opened() && updateOnSel();
+ });
+ } else {
+ self.opened() && updateOnSel();
+ }
+ },
+ error : function() { self.window.is(':visible') && self.window.trigger('close'); },
+ 'searchshow searchhide' : function() { this.opened() && this.window.trigger('close'); },
+ navbarshow : function() {
+ requestAnimationFrame(function() {
+ self.docked() && self.preview.trigger('changesize');
+ });
+ },
+ destroy : function() { self.window.remove(); }
+ };
+
+ this.shortcuts = [{
+ pattern : 'space'
+ }];
+
+ this.support = {
+ audio : {
+ ogg : support('audio/ogg;'),
+ webm: support('audio/webm;'),
+ mp3 : support('audio/mpeg;'),
+ wav : support('audio/wav;'),
+ m4a : support('audio/mp4;') || support('audio/x-m4a;') || support('audio/aac;'),
+ flac: support('audio/flac;'),
+ amr : support('audio/amr;')
+ },
+ video : {
+ ogg : support('video/ogg;'),
+ webm : support('video/webm;'),
+ mp4 : support('video/mp4;'),
+ mkv : support('video/x-matroska;') || support('video/webm;'),
+ '3gp': support('video/3gpp;') || support('video/mp4;'), // try as mp4
+ m3u8 : support('application/x-mpegURL', 'video') || support('application/vnd.apple.mpegURL', 'video'),
+ mpd : support('application/dash+xml', 'video')
+ }
+ };
+ // for GC
+ mediaNode = {};
+
+ /**
+ * Return true if quickLoock window is hiddenReturn true if quickLoock window is visible and not animated
+ *
+ * @return Boolean
+ **/
+ this.closed = function() {
+ return (state == closed || state == dockedhidden);
+ };
+
+ /**
+ * Return true if quickLoock window is visible and not animated
+ *
+ * @return Boolean
+ **/
+ this.opened = function() {
+ return state == opened || state == docked;
+ };
+
+ /**
+ * Return true if quickLoock window is in NavDock
+ *
+ * @return Boolean
+ **/
+ this.docked = function() {
+ return state == docked;
+ };
+
+ /**
+ * Adds an integration into help dialog.
+ *
+ * @param Object opts options
+ */
+ this.addIntegration = function(opts) {
+ requestAnimationFrame(function() {
+ fm.trigger('helpIntegration', Object.assign({cmd: 'quicklook'}, opts));
+ });
+ };
+
+ /**
+ * Init command.
+ * Add default plugins and init other plugins
+ *
+ * @return Object
+ **/
+ this.init = function() {
+ var o = this.options,
+ win = this.window,
+ preview = this.preview,
+ i, p, cwdDispInlineRegex;
+
+ width = o.width > 0 ? parseInt(o.width) : 450;
+ height = o.height > 0 ? parseInt(o.height) : 300;
+ if (o.dockHeight !== 'auto') {
+ dockHeight = parseInt(o.dockHeight);
+ if (! dockHeight) {
+ dockHeight = void(0);
+ }
+ }
+
+ fm.one('load', function() {
+
+ dockEnabled = fm.getUI('navdock').data('dockEnabled');
+
+ ! dockEnabled && titleDock.hide();
+
+ parent = fm.getUI();
+ cwd = fm.getUI('cwd');
+
+ if (fm.zIndex) {
+ win.css('z-index', fm.zIndex + 1);
+ }
+
+ win.appendTo(parent);
+
+ // close window on escape
+ $(document).on('keydown.'+fm.namespace, function(e) {
+ e.keyCode == $.ui.keyCode.ESCAPE && self.opened() && ! self.docked() && win.hasClass('elfinder-frontmost') && win.trigger('close');
+ });
+
+ win.resizable({
+ handles : 'se',
+ minWidth : 350,
+ minHeight : 120,
+ resize : function() {
+ // use another event to avoid recursion in fullscreen mode
+ // may be there is clever solution, but i cant find it :(
+ preview.trigger('changesize');
+ }
+ });
+
+ self.change(function() {
+ if (self.opened()) {
+ if (self.value) {
+ if (self.value.tmb && self.value.tmb == 1) {
+ // try re-get file object
+ self.value = Object.assign({}, fm.file(self.value.hash));
+ }
+ preview.trigger($.Event(evUpdate, {file : self.value}));
+ }
+ }
+ });
+
+ preview.on(evUpdate, function(e) {
+ var file, hash, serach;
+
+ if (file = e.file) {
+ hash = file.hash;
+ serach = (fm.searchStatus.mixed && fm.searchStatus.state > 1);
+
+ if (file.mime !== 'directory') {
+ if (parseInt(file.size) || file.mime.match(o.mimeRegexNotEmptyCheck)) {
+ // set current dispInlineRegex
+ self.dispInlineRegex = cwdDispInlineRegex;
+ if (serach || fm.optionsByHashes[hash]) {
+ try {
+ self.dispInlineRegex = new RegExp(fm.option('dispInlineRegex', hash), 'i');
+ } catch(e) {
+ try {
+ self.dispInlineRegex = new RegExp(!fm.isRoot(file)? fm.option('dispInlineRegex', file.phash) : fm.options.dispInlineRegex, 'i');
+ } catch(e) {
+ self.dispInlineRegex = /^$/;
+ }
+ }
+ }
+ } else {
+ // do not preview of file that size = 0
+ e.stopImmediatePropagation();
+ }
+ } else {
+ self.dispInlineRegex = /^$/;
+ }
+
+ self.info.show();
+ } else {
+ e.stopImmediatePropagation();
+ }
+ });
+
+ $.each(fm.commands.quicklook.plugins || [], function(i, plugin) {
+ if (typeof(plugin) == 'function') {
+ new plugin(self);
+ }
+ });
+ }).one('open', function() {
+ var dock = Number(fm.storage('previewDocked') || o.docked),
+ win;
+ if (dockEnabled && dock >= 1) {
+ win = self.window;
+ self.exec();
+ win.trigger('navdockin', { init : true });
+ if (dock === 2) {
+ win.trigger('close');
+ } else {
+ self.update(void(0), fm.cwd());
+ self.change();
+ }
+ }
+ init = false;
+ }).bind('open', function() {
+ cwdHash = fm.cwd().hash;
+ self.value = fm.cwd();
+ // set current volume dispInlineRegex
+ try {
+ cwdDispInlineRegex = new RegExp(fm.option('dispInlineRegex'), 'i');
+ } catch(e) {
+ cwdDispInlineRegex = /^$/;
+ }
+ }).bind('change', function(e) {
+ if (e.data && e.data.changed && self.opened()) {
+ $.each(e.data.changed, function() {
+ if (self.window.data('hash') === this.hash) {
+ self.window.data('hash', null);
+ self.preview.trigger(evUpdate);
+ return false;
+ }
+ });
+ }
+ }).bind('navdockresizestart navdockresizestop', function(e) {
+ cover[e.type === 'navdockresizestart'? 'show' : 'hide']();
+ });
+ };
+
+ this.getstate = function() {
+ return self.opened()? 1 : 0;
+ };
+
+ this.exec = function() {
+ self.closed() && updateOnSel();
+ self.enabled() && self.window.trigger(self.opened() ? 'close' : 'open');
+ return $.Deferred().resolve();
+ };
+
+ this.hideinfo = function() {
+ this.info.stop(true, true).hide();
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/quicklook.plugins.js
+ */
+
+elFinder.prototype.commands.quicklook.plugins = [
+
+ /**
+ * Images preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var mimes = ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'],
+ preview = ql.preview,
+ WebP, flipMime;
+
+ // webp support
+ WebP = new Image();
+ WebP.onload = WebP.onerror = function() {
+ if (WebP.height == 2) {
+ mimes.push('image/webp');
+ }
+ };
+ WebP.src='data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';
+
+ // what kind of images we can display
+ $.each(navigator.mimeTypes, function(i, o) {
+ var mime = o.type;
+
+ if (mime.indexOf('image/') === 0 && $.inArray(mime, mimes)) {
+ mimes.push(mime);
+ }
+ });
+
+ preview.on(ql.evUpdate, function(e) {
+ var fm = ql.fm,
+ file = e.file,
+ showed = false,
+ dimreq = null,
+ setdim = function(dim) {
+ var rfile = fm.file(file.hash);
+ rfile.width = dim[0];
+ rfile.height = dim[1];
+ },
+ show = function() {
+ var elm, varelm, memSize, width, height, prop;
+
+ dimreq && dimreq.state && dimreq.state() === 'pending' && dimreq.reject();
+ if (showed) {
+ return;
+ }
+ showed = true;
+
+ elm = img.get(0);
+ memSize = file.width && file.height? {w: file.width, h: file.height} : (elm.naturalWidth? null : {w: img.width(), h: img.height()});
+
+ memSize && img.removeAttr('width').removeAttr('height');
+
+ width = file.width || elm.naturalWidth || elm.width || img.width();
+ height = file.height || elm.naturalHeight || elm.height || img.height();
+ if (!file.width || !file.height) {
+ setdim([width, height]);
+ }
+
+ memSize && img.width(memSize.w).height(memSize.h);
+
+ prop = (width/height).toFixed(2);
+ preview.on('changesize', function() {
+ var pw = parseInt(preview.width()),
+ ph = parseInt(preview.height()),
+ w, h;
+
+ if (prop < (pw/ph).toFixed(2)) {
+ h = ph;
+ w = Math.floor(h * prop);
+ } else {
+ w = pw;
+ h = Math.floor(w/prop);
+ }
+ img.width(w).height(h).css('margin-top', h < ph ? Math.floor((ph - h)/2) : 0);
+
+ })
+ .trigger('changesize');
+
+ //show image
+ img.fadeIn(100);
+ },
+ hideInfo = function() {
+ loading.remove();
+ // hide info/icon
+ ql.hideinfo();
+ },
+ url, img, loading, m;
+
+ if (!flipMime) {
+ flipMime = fm.arrayFlip(mimes);
+ }
+ if (flipMime[file.mime] && ql.dispInlineRegex.test(file.mime)) {
+ // this is our file - stop event propagation
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ url = fm.openUrl(file.hash);
+
+ img = $('<img/>')
+ .hide()
+ .appendTo(preview)
+ .on('load', function() {
+ hideInfo();
+ show();
+ })
+ .on('error', function() {
+ loading.remove();
+ })
+ .attr('src', url);
+
+ if (file.width && file.height) {
+ show();
+ } else if (file.size > (ql.options.getDimThreshold || 0)) {
+ dimreq = fm.request({
+ data : {cmd : 'dim', target : file.hash},
+ preventDefault : true
+ })
+ .done(function(data) {
+ if (data.dim) {
+ var dim = data.dim.split('x');
+ file.width = dim[0];
+ file.height = dim[1];
+ setdim(dim);
+ show();
+ }
+ });
+ }
+ }
+
+ });
+ },
+
+ /**
+ * PSD(Adobe Photoshop data) preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mimes = fm.arrayFlip(['image/vnd.adobe.photoshop', 'image/x-photoshop']),
+ preview = ql.preview,
+ load = function(url, img, loading) {
+ try {
+ fm.replaceXhrSend();
+ PSD.fromURL(url).then(function(psd) {
+ var prop;
+ img.attr('src', psd.image.toBase64());
+ requestAnimationFrame(function() {
+ prop = (img.width()/img.height()).toFixed(2);
+ preview.on('changesize', function() {
+ var pw = parseInt(preview.width()),
+ ph = parseInt(preview.height()),
+ w, h;
+
+ if (prop < (pw/ph).toFixed(2)) {
+ h = ph;
+ w = Math.floor(h * prop);
+ } else {
+ w = pw;
+ h = Math.floor(w/prop);
+ }
+ img.width(w).height(h).css('margin-top', h < ph ? Math.floor((ph - h)/2) : 0);
+ }).trigger('changesize');
+
+ loading.remove();
+ // hide info/icon
+ ql.hideinfo();
+ //show image
+ img.fadeIn(100);
+ });
+ }, function() {
+ loading.remove();
+ img.remove();
+ });
+ fm.restoreXhrSend();
+ } catch(e) {
+ fm.restoreXhrSend();
+ loading.remove();
+ img.remove();
+ }
+ },
+ PSD;
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file,
+ url, img, loading, m,
+ _define, _require;
+
+ if (mimes[file.mime] && fm.options.cdns.psd && ! fm.UA.ltIE10 && ql.dispInlineRegex.test(file.mime)) {
+ // this is our file - stop event propagation
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+ url = fm.openUrl(file.hash);
+ if (!fm.isSameOrigin(url)) {
+ url = fm.openUrl(file.hash, true);
+ }
+ img = $('<img/>').hide().appendTo(preview);
+
+ if (PSD) {
+ load(url, img, loading);
+ } else {
+ _define = window.define;
+ _require = window.require;
+ window.require = null;
+ window.define = null;
+ fm.loadScript(
+ [ fm.options.cdns.psd ],
+ function() {
+ PSD = require('psd');
+ _define? (window.define = _define) : (delete window.define);
+ _require? (window.require = _require) : (delete window.require);
+ load(url, img, loading);
+ }
+ );
+ }
+ }
+ });
+ },
+
+ /**
+ * HTML preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mimes = fm.arrayFlip(['text/html', 'application/xhtml+xml']),
+ preview = ql.preview;
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file, jqxhr, loading;
+
+ if (mimes[file.mime] && ql.dispInlineRegex.test(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax)) {
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ // stop loading on change file if not loaded yet
+ preview.one('change', function() {
+ jqxhr.state() == 'pending' && jqxhr.reject();
+ }).addClass('elfinder-overflow-auto');
+
+ jqxhr = fm.request({
+ data : {cmd : 'get', target : file.hash, conv : 1, _t : file.ts},
+ options : {type: 'get', cache : true},
+ preventDefault : true
+ })
+ .done(function(data) {
+ ql.hideinfo();
+ var doc = $('<iframe class="elfinder-quicklook-preview-html"/>').appendTo(preview)[0].contentWindow.document;
+ doc.open();
+ doc.write(data.content);
+ doc.close();
+ })
+ .always(function() {
+ loading.remove();
+ });
+ }
+ });
+ },
+
+ /**
+ * MarkDown preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mimes = fm.arrayFlip(['text/x-markdown']),
+ preview = ql.preview,
+ marked = null,
+ show = function(data, loading) {
+ ql.hideinfo();
+ var doc = $('<iframe class="elfinder-quicklook-preview-html"/>').appendTo(preview)[0].contentWindow.document;
+ doc.open();
+ doc.write(marked(data.content));
+ doc.close();
+ loading.remove();
+ },
+ error = function(loading) {
+ marked = false;
+ loading.remove();
+ };
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file, jqxhr, loading;
+
+ if (mimes[file.mime] && fm.options.cdns.marked && marked !== false && ql.dispInlineRegex.test(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax)) {
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ // stop loading on change file if not loaded yet
+ preview.one('change', function() {
+ jqxhr.state() == 'pending' && jqxhr.reject();
+ }).addClass('elfinder-overflow-auto');
+
+ jqxhr = fm.request({
+ data : {cmd : 'get', target : file.hash, conv : 1, _t : file.ts},
+ options : {type: 'get', cache : true},
+ preventDefault : true
+ })
+ .done(function(data) {
+ if (marked || window.marked) {
+ if (!marked) {
+ marked = window.marked;
+ }
+ show(data, loading);
+ } else {
+ fm.loadScript([fm.options.cdns.marked],
+ function(res) {
+ marked = res || window.marked || false;
+ delete window.marked;
+ if (marked) {
+ show(data, loading);
+ } else {
+ error(loading);
+ }
+ },
+ {
+ tryRequire: true,
+ error: function() {
+ error(loading);
+ }
+ }
+ );
+ }
+ })
+ .fail(function() {
+ error(loading);
+ });
+ }
+ });
+ },
+
+ /**
+ * PDF/ODT/ODS/ODP preview with ViewerJS
+ *
+ * @param elFinder.commands.quicklook
+ */
+ function(ql) {
+ if (ql.options.viewerjs) {
+ var fm = ql.fm,
+ preview = ql.preview,
+ opts = ql.options.viewerjs,
+ mimes = opts.url? fm.arrayFlip(opts.mimes || []) : [];
+
+ if (opts.url) {
+ preview.on('update', function(e) {
+ var win = ql.window,
+ file = e.file, node, loading;
+
+ if (mimes[file.mime]) {
+ var url = fm.openUrl(file.hash);
+ if (url && fm.isSameOrigin(url)) {
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ node = $('<iframe class="elfinder-quicklook-preview-iframe"/>')
+ .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', opts.url + '#' + url);
+
+ preview.one('change', function() {
+ loading.remove();
+ node.off('load').remove();
+ });
+ }
+ }
+ });
+ }
+ }
+ },
+
+ /**
+ * PDF preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mime = 'application/pdf',
+ preview = ql.preview,
+ active = false,
+ urlhash = '',
+ firefox, toolbar;
+
+ if ((fm.UA.Safari && fm.OS === 'mac' && !fm.UA.iOS) || fm.UA.IE || fm.UA.Firefox) {
+ active = true;
+ } else {
+ $.each(navigator.plugins, function(i, plugins) {
+ $.each(plugins, function(i, plugin) {
+ if (plugin.type === mime) {
+ return !(active = true);
+ }
+ });
+ });
+ }
+
+ if (active) {
+ if (typeof ql.options.pdfToolbar !== 'undefined' && !ql.options.pdfToolbar) {
+ urlhash = '#toolbar=0';
+ }
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file;
+
+ if (active && file.mime === mime && ql.dispInlineRegex.test(file.mime)) {
+ e.stopImmediatePropagation();
+ ql.hideinfo();
+ ql.cover.addClass('elfinder-quicklook-coverbg');
+ $('<object class="elfinder-quicklook-preview-pdf" data="'+fm.openUrl(file.hash)+urlhash+'" type="application/pdf" />')
+ .on('error', function(e) {
+ active = false;
+ ql.update(void(0), fm.cwd());
+ ql.update(void(0), file);
+ })
+ .appendTo(preview);
+ }
+
+ });
+ }
+ },
+
+ /**
+ * Flash preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mime = 'application/x-shockwave-flash',
+ preview = ql.preview,
+ active = false;
+
+ $.each(navigator.plugins, function(i, plugins) {
+ $.each(plugins, function(i, plugin) {
+ if (plugin.type === mime) {
+ return !(active = true);
+ }
+ });
+ });
+
+ active && preview.on(ql.evUpdate, function(e) {
+ var file = e.file,
+ node;
+
+ if (file.mime === mime && ql.dispInlineRegex.test(file.mime)) {
+ e.stopImmediatePropagation();
+ ql.hideinfo();
+ node = $('<embed class="elfinder-quicklook-preview-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="'+fm.openUrl(file.hash)+'" quality="high" type="application/x-shockwave-flash" wmode="transparent" />')
+ .appendTo(preview);
+ }
+ });
+ },
+
+ /**
+ * HTML5 audio preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ preview = ql.preview,
+ mimes = {
+ 'audio/mpeg' : 'mp3',
+ 'audio/mpeg3' : 'mp3',
+ 'audio/mp3' : 'mp3',
+ 'audio/x-mpeg3' : 'mp3',
+ 'audio/x-mp3' : 'mp3',
+ 'audio/x-wav' : 'wav',
+ 'audio/wav' : 'wav',
+ 'audio/x-m4a' : 'm4a',
+ 'audio/aac' : 'm4a',
+ 'audio/mp4' : 'm4a',
+ 'audio/x-mp4' : 'm4a',
+ 'audio/ogg' : 'ogg',
+ 'audio/webm' : 'webm',
+ 'audio/flac' : 'flac',
+ 'audio/x-flac' : 'flac',
+ 'audio/amr' : 'amr'
+ },
+ node, curHash,
+ win = ql.window,
+ navi = ql.navbar,
+ AMR, autoplay,
+ controlsList = typeof ql.options.mediaControlsList === 'string' && ql.options.mediaControlsList? ' controlsList="' + fm.escape(ql.options.mediaControlsList) + '"' : '',
+ setNavi = function() {
+ navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? '50px' : '');
+ },
+ getNode = function(src, hash) {
+ return $('<audio class="elfinder-quicklook-preview-audio ui-front" controls' + controlsList + ' preload="auto" autobuffer><source src="'+src+'" /></audio>')
+ .on('change', function(e) {
+ // Firefox fire change event on seek or volume change
+ e.stopPropagation();
+ })
+ .on('error', function(e) {
+ node && node.data('hash') === hash && reset();
+ })
+ .data('hash', hash)
+ .appendTo(preview);
+ },
+ amrToWavUrl = function(hash) {
+ var dfd = $.Deferred(),
+ loader = $.Deferred().done(function() {
+ fm.getContents(hash).done(function(data) {
+ try {
+ var buffer = AMR.toWAV(new Uint8Array(data));
+ if (buffer) {
+ dfd.resolve(URL.createObjectURL(new Blob([buffer], { type: 'audio/x-wav' })));
+ } else {
+ dfd.reject();
+ }
+ } catch(e) {
+ dfd.reject();
+ }
+ }).fail(function() {
+ dfd.reject();
+ });
+ }).fail(function() {
+ AMR = false;
+ dfd.reject();
+ }),
+ _AMR;
+ if (window.TextEncoder && window.URL && URL.createObjectURL && typeof AMR === 'undefined') {
+ // previous window.AMR
+ _AMR = window.AMR;
+ delete window.AMR;
+ fm.loadScript(
+ [ fm.options.cdns.amr ],
+ function() {
+ AMR = window.AMR? window.AMR : false;
+ // restore previous window.AMR
+ window.AMR = _AMR;
+ loader[AMR? 'resolve':'reject']();
+ },
+ {
+ error: function() {
+ loader.reject();
+ }
+ }
+ );
+ } else {
+ loader[AMR? 'resolve':'reject']();
+ }
+ return dfd;
+ },
+ play = function(player) {
+ var hash = node.data('hash'),
+ playPromise;
+ autoplay && (playPromise = player.play());
+ // uses "playPromise['catch']" instead "playPromise.catch" to support Old IE
+ if (playPromise && playPromise['catch']) {
+ playPromise['catch'](function(e) {
+ if (!player.paused) {
+ node && node.data('hash') === hash && reset();
+ }
+ });
+ }
+ },
+ reset = function() {
+ if (node && node.parent().length) {
+ var elm = node[0],
+ url = node.children('source').attr('src');
+ win.off('viewchange.audio');
+ try {
+ elm.pause();
+ node.empty();
+ if (url.match(/^blob:/)) {
+ URL.revokeObjectURL(url);
+ }
+ elm.src = '';
+ elm.load();
+ } catch(e) {}
+ node.remove();
+ node = null;
+ }
+ };
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file,
+ type = mimes[file.mime],
+ html5, srcUrl;
+
+ if (mimes[file.mime] && ql.dispInlineRegex.test(file.mime) && ((html5 = ql.support.audio[type]) || (type === 'amr'))) {
+ autoplay = ql.autoPlay();
+ curHash = file.hash;
+ srcUrl = html5? fm.openUrl(curHash) : '';
+ if (!html5) {
+ if (fm.options.cdns.amr && type === 'amr' && AMR !== false) {
+ e.stopImmediatePropagation();
+ node = getNode(srcUrl, curHash);
+ amrToWavUrl(file.hash).done(function(url) {
+ if (curHash === file.hash) {
+ var elm = node[0];
+ try {
+ node.children('source').attr('src', url);
+ elm.pause();
+ elm.load();
+ play(elm);
+ win.on('viewchange.audio', setNavi);
+ setNavi();
+ } catch(e) {
+ URL.revokeObjectURL(url);
+ node.remove();
+ }
+ } else {
+ URL.revokeObjectURL(url);
+ }
+ }).fail(function() {
+ node.remove();
+ });
+ }
+ } else {
+ e.stopImmediatePropagation();
+ node = getNode(srcUrl, curHash);
+ play(node[0]);
+ win.on('viewchange.audio', setNavi);
+ setNavi();
+ }
+ }
+ }).on('change', reset);
+ },
+
+ /**
+ * HTML5 video preview plugin
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ preview = ql.preview,
+ mimes = {
+ 'video/mp4' : 'mp4',
+ 'video/x-m4v' : 'mp4',
+ 'video/quicktime' : 'mp4',
+ 'video/ogg' : 'ogg',
+ 'application/ogg' : 'ogg',
+ 'video/webm' : 'webm',
+ 'video/x-matroska': 'mkv',
+ 'video/3gpp' : '3gp',
+ 'application/vnd.apple.mpegurl' : 'm3u8',
+ 'application/x-mpegurl' : 'm3u8',
+ 'application/dash+xml' : 'mpd',
+ 'video/x-flv' : 'flv'
+ },
+ node,
+ win = ql.window,
+ navi = ql.navbar,
+ cHls, cDash, pDash, cFlv, autoplay, tm,
+ controlsList = typeof ql.options.mediaControlsList === 'string' && ql.options.mediaControlsList? ' controlsList="' + fm.escape(ql.options.mediaControlsList) + '"' : '',
+ setNavi = function() {
+ if (fm.UA.iOS) {
+ if (win.hasClass('elfinder-quicklook-fullscreen')) {
+ preview.css('height', '-webkit-calc(100% - 50px)');
+ navi._show();
+ } else {
+ preview.css('height', '');
+ }
+ } else {
+ navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? '50px' : '');
+ }
+ },
+ render = function(file, opts) {
+ var errTm = function(e) {
+ if (err > 1) {
+ tm && clearTimeout(tm);
+ tm = setTimeout(function() {
+ !canPlay && reset(true);
+ }, 800);
+ }
+ },
+ err = 0,
+ canPlay;
+ //reset();
+ pDash = null;
+ opts = opts || {};
+ ql.hideinfo();
+ node = $('<video class="elfinder-quicklook-preview-video" controls' + controlsList + ' preload="auto" autobuffer playsinline>'
+ +'</video>')
+ .on('change', function(e) {
+ // Firefox fire change event on seek or volume change
+ e.stopPropagation();
+ })
+ .on('timeupdate progress', errTm)
+ .on('canplay', function() {
+ canPlay = true;
+ })
+ .data('hash', file.hash);
+ // can not handling error event with jQuery `on` event handler
+ node[0].addEventListener('error', function(e) {
+ if (opts.src && fm.convAbsUrl(opts.src) === fm.convAbsUrl(e.target.src)) {
+ ++err;
+ errTm();
+ }
+ }, true);
+
+ if (opts.src) {
+ node.append('<source src="'+opts.src+'" type="'+file.mime+'"/><source src="'+opts.src+'"/>');
+ }
+
+ node.appendTo(preview);
+
+ win.on('viewchange.video', setNavi);
+ setNavi();
+ },
+ loadHls = function(file) {
+ var hls;
+ render(file);
+ hls = new cHls();
+ hls.loadSource(fm.openUrl(file.hash));
+ hls.attachMedia(node[0]);
+ if (autoplay) {
+ hls.on(cHls.Events.MANIFEST_PARSED, function() {
+ play(node[0]);
+ });
+ }
+ },
+ loadDash = function(file) {
+ render(file);
+ pDash = window.dashjs.MediaPlayer().create();
+ pDash.getDebug().setLogToBrowserConsole(false);
+ pDash.initialize(node[0], fm.openUrl(file.hash), autoplay);
+ pDash.on('error', function(e) {
+ reset(true);
+ });
+ },
+ loadFlv = function(file) {
+ if (!cFlv.isSupported()) {
+ cFlv = false;
+ return;
+ }
+ var player = cFlv.createPlayer({
+ type: 'flv',
+ url: fm.openUrl(file.hash)
+ });
+ render(file);
+ player.on(cFlv.Events.ERROR, function() {
+ player.destroy();
+ reset(true);
+ });
+ player.attachMediaElement(node[0]);
+ player.load();
+ play(player);
+ },
+ play = function(player) {
+ var hash = node.data('hash'),
+ playPromise;
+ autoplay && (playPromise = player.play());
+ // uses "playPromise['catch']" instead "playPromise.catch" to support Old IE
+ if (playPromise && playPromise['catch']) {
+ playPromise['catch'](function(e) {
+ if (!player.paused) {
+ node && node.data('hash') === hash && reset(true);
+ }
+ });
+ }
+ },
+ reset = function(showInfo) {
+ tm && clearTimeout(tm);
+ if (node && node.parent().length) {
+ var elm = node[0];
+ win.off('viewchange.video');
+ pDash && pDash.reset();
+ try {
+ elm.pause();
+ node.empty();
+ elm.src = '';
+ elm.load();
+ } catch(e) {}
+ node.remove();
+ node = null;
+ }
+ showInfo && ql.info.show();
+ };
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file,
+ mime = file.mime.toLowerCase(),
+ type = mimes[mime],
+ stock, playPromise;
+
+ if (mimes[mime] && ql.dispInlineRegex.test(file.mime) && (((type === 'm3u8' || (type === 'mpd' && !fm.UA.iOS) || type === 'flv') && !fm.UA.ltIE10) || ql.support.video[type])) {
+ autoplay = ql.autoPlay();
+ if (ql.support.video[type] && (type !== 'm3u8' || fm.UA.Safari)) {
+ e.stopImmediatePropagation();
+ render(file, { src: fm.openUrl(file.hash) });
+ play(node[0]);
+ } else {
+ if (cHls !== false && fm.options.cdns.hls && type === 'm3u8') {
+ e.stopImmediatePropagation();
+ if (cHls) {
+ loadHls(file);
+ } else {
+ stock = window.Hls;
+ delete window.Hls;
+ fm.loadScript(
+ [ fm.options.cdns.hls ],
+ function(res) {
+ cHls = res || window.Hls || false;
+ window.Hls = stock;
+ cHls && loadHls(file);
+ },
+ {
+ tryRequire: true,
+ error : function() {
+ cHls = false;
+ }
+ }
+ );
+ }
+ } else if (cDash !== false && fm.options.cdns.dash && type === 'mpd') {
+ e.stopImmediatePropagation();
+ if (cDash) {
+ loadDash(file);
+ } else {
+ fm.loadScript(
+ [ fm.options.cdns.dash ],
+ function() {
+ // dashjs require window.dashjs in global scope
+ cDash = window.dashjs? true : false;
+ cDash && loadDash(file);
+ },
+ {
+ tryRequire: true,
+ error : function() {
+ cDash = false;
+ }
+ }
+ );
+ }
+ } else if (cFlv !== false && fm.options.cdns.flv && type === 'flv') {
+ e.stopImmediatePropagation();
+ if (cFlv) {
+ loadFlv(file);
+ } else {
+ stock = window.flvjs;
+ delete window.flvjs;
+ fm.loadScript(
+ [ fm.options.cdns.flv ],
+ function(res) {
+ cFlv = res || window.flvjs || false;
+ window.flvjs = stock;
+ cFlv && loadFlv(file);
+ },
+ {
+ tryRequire: true,
+ error : function() {
+ cFlv = false;
+ }
+ }
+ );
+ }
+ }
+ }
+ }
+ }).on('change', reset);
+ },
+
+ /**
+ * Audio/video preview plugin using browser plugins
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var preview = ql.preview,
+ mimes = [],
+ node,
+ win = ql.window,
+ navi = ql.navbar;
+
+ $.each(navigator.plugins, function(i, plugins) {
+ $.each(plugins, function(i, plugin) {
+ (plugin.type.indexOf('audio/') === 0 || plugin.type.indexOf('video/') === 0) && mimes.push(plugin.type);
+ });
+ });
+ mimes = ql.fm.arrayFlip(mimes);
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file,
+ mime = file.mime,
+ video,
+ setNavi = function() {
+ navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? '50px' : '');
+ };
+
+ if (mimes[file.mime] && ql.dispInlineRegex.test(file.mime)) {
+ e.stopImmediatePropagation();
+ (video = mime.indexOf('video/') === 0) && ql.hideinfo();
+ node = $('<embed src="'+ql.fm.openUrl(file.hash)+'" type="'+mime+'" class="elfinder-quicklook-preview-'+(video ? 'video' : 'audio')+'"/>')
+ .appendTo(preview);
+
+ win.on('viewchange.embed', setNavi);
+ setNavi();
+ }
+ }).on('change', function() {
+ if (node && node.parent().length) {
+ win.off('viewchange.embed');
+ node.remove();
+ node= null;
+ }
+ });
+
+ },
+
+ /**
+ * Archive(zip|gzip|tar) preview plugin using https://github.com/imaya/zlib.js
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mimes = fm.arrayFlip(['application/zip', 'application/x-gzip', 'application/x-tar']),
+ preview = ql.preview,
+ unzipFiles = function() {
+ /** @type {Array.<string>} */
+ var filenameList = [];
+ /** @type {number} */
+ var i;
+ /** @type {number} */
+ var il;
+ /** @type {Array.<Zlib.Unzip.FileHeader>} */
+ 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? ' (' + fm.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? ' (' + fm.formatSize(size) + ')': ''));
+ offset = offset + 512 + dbs;
+ }
+ return filenames;
+ },
+ Zlib;
+
+ if (window.Uint8Array && window.DataView && fm.options.cdns.zlibUnzip && fm.options.cdns.zlibGunzip) {
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file,
+ isTar = (file.mime === 'application/x-tar');
+ if (mimes[file.mime] && (
+ isTar
+ || ((typeof Zlib === 'undefined' || Zlib) && (file.mime === 'application/zip' || file.mime === 'application/x-gzip'))
+ )) {
+ var jqxhr, loading, url,
+ req = function() {
+ url = fm.openUrl(file.hash);
+ if (!fm.isSameOrigin(url)) {
+ url = fm.openUrl(file.hash, true);
+ }
+ jqxhr = fm.request({
+ data : {cmd : 'get'},
+ options : {
+ url: url,
+ type: 'get',
+ cache : true,
+ dataType : 'binary',
+ responseType :'arraybuffer',
+ processData: false
+ }
+ })
+ .fail(function() {
+ loading.remove();
+ })
+ .done(function(data) {
+ var unzip, filenames;
+ try {
+ if (file.mime === 'application/zip') {
+ unzip = new Zlib.Unzip(new Uint8Array(data));
+ //filenames = unzip.getFilenames();
+ filenames = unzipFiles.call(unzip);
+ } else if (file.mime === 'application/x-gzip') {
+ unzip = new Zlib.Gunzip(new Uint8Array(data));
+ filenames = tarFiles(unzip.decompress());
+ } else if (file.mime === 'application/x-tar') {
+ filenames = tarFiles(new Uint8Array(data));
+ }
+ makeList(filenames);
+ } catch (e) {
+ loading.remove();
+ fm.debug('error', e);
+ }
+ });
+ },
+ makeList = function(filenames) {
+ var header, doc;
+ if (filenames && filenames.length) {
+ filenames = $.map(filenames, function(str) {
+ return fm.decodeRawString(str);
+ });
+ filenames.sort();
+ loading.remove();
+ header = '<strong>'+fm.escape(file.mime)+'</strong> ('+fm.formatSize(file.size)+')'+'<hr/>';
+ doc = $('<div class="elfinder-quicklook-preview-archive-wrapper">'+header+'<pre class="elfinder-quicklook-preview-text">'+fm.escape(filenames.join("\n"))+'</pre></div>')
+ .on('touchstart', function(e) {
+ if ($(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) {
+ e.originalEvent._preventSwipeX = true;
+ }
+ })
+ .appendTo(preview);
+ ql.hideinfo();
+ }
+ },
+ _Zlib;
+
+ // this is our file - stop event propagation
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ // stop loading on change file if not loaded yet
+ preview.one('change', function() {
+ jqxhr.state() === 'pending' && jqxhr.reject();
+ loading.remove();
+ });
+
+ if (Zlib) {
+ req();
+ } else {
+ if (window.Zlib) {
+ _Zlib = window.Zlib;
+ delete window.Zlib;
+ }
+ fm.loadScript(
+ [ fm.options.cdns.zlibUnzip, fm.options.cdns.zlibGunzip ],
+ function() {
+ if (window.Zlib && (Zlib = window.Zlib)) {
+ if (_Zlib) {
+ window.Zlib = _Zlib;
+ } else {
+ delete window.Zlib;
+ }
+ req();
+ } else {
+ error();
+ }
+ }
+ );
+ }
+ }
+ });
+ }
+ },
+
+ /**
+ * RAR Archive preview plugin using https://github.com/43081j/rar.js
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mimes = fm.arrayFlip(['application/x-rar']),
+ preview = ql.preview,
+ RAR;
+
+ if (window.DataView) {
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file;
+ if (mimes[file.mime] && fm.options.cdns.rar && RAR !== false) {
+ var loading, url, archive, abort,
+ getList = function(url) {
+ if (abort) {
+ loading.remove();
+ return;
+ }
+ try {
+ archive = RAR({
+ file: url,
+ type: 2,
+ xhrHeaders: fm.customHeaders,
+ xhrFields: fm.xhrFields
+ }, function(err) {
+ loading.remove();
+ var filenames = [],
+ header, doc;
+ if (abort || err) {
+ // An error occurred (not a rar, read error, etc)
+ err && fm.debug('error', err);
+ return;
+ }
+ $.each(archive.entries, function() {
+ filenames.push(this.path + (this.size? ' (' + fm.formatSize(this.size) + ')' : ''));
+ });
+ if (filenames.length) {
+ filenames = $.map(filenames, function(str) {
+ return fm.decodeRawString(str);
+ });
+ filenames.sort();
+ header = '<strong>'+fm.escape(file.mime)+'</strong> ('+fm.formatSize(file.size)+')'+'<hr/>';
+ doc = $('<div class="elfinder-quicklook-preview-archive-wrapper">'+header+'<pre class="elfinder-quicklook-preview-text">'+fm.escape(filenames.join("\n"))+'</pre></div>')
+ .on('touchstart', function(e) {
+ if ($(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) {
+ e.originalEvent._preventSwipeX = true;
+ }
+ })
+ .appendTo(preview);
+ ql.hideinfo();
+ }
+ });
+ } catch(e) {
+ loading.remove();
+ }
+ },
+ error = function() {
+ RAR = false;
+ loading.remove();
+ },
+ _RAR;
+
+ // this is our file - stop event propagation
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ // stop loading on change file if not loaded yet
+ preview.one('change', function() {
+ archive && (archive.abort = true);
+ loading.remove();
+ abort = true;
+ });
+
+ url = fm.openUrl(file.hash);
+ if (!fm.isSameOrigin(url)) {
+ url = fm.openUrl(file.hash, true);
+ }
+ if (RAR) {
+ getList(url);
+ } else {
+ if (window.RarArchive) {
+ _RAR = window.RarArchive;
+ delete window.RarArchive;
+ }
+ fm.loadScript(
+ [ fm.options.cdns.rar ],
+ function() {
+ if (fm.hasRequire) {
+ require(['rar'], function(RarArchive) {
+ RAR = RarArchive;
+ getList(url);
+ }, error);
+ } else {
+ if (RAR = window.RarArchive) {
+ if (_RAR) {
+ window.RarArchive = _RAR;
+ } else {
+ delete window.RarArchive;
+ }
+ getList(url);
+ } else {
+ error();
+ }
+ }
+ },
+ {
+ tryRequire: true,
+ error : error
+ }
+ );
+ }
+ }
+ });
+ }
+ },
+
+ /**
+ * CAD-Files and 3D-Models online viewer on sharecad.org
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ var fm = ql.fm,
+ mimes = fm.arrayFlip(ql.options.sharecadMimes || []),
+ preview = ql.preview,
+ win = ql.window,
+ node;
+
+ if (ql.options.sharecadMimes.length) {
+ ql.addIntegration({
+ title: 'ShareCAD.org CAD and 3D-Models viewer',
+ link: 'https://sharecad.org/DWGOnlinePlugin'
+ });
+ }
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file;
+ if (mimes[file.mime.toLowerCase()] && !fm.option('onetimeUrl', file.hash)) {
+ var win = ql.window,
+ loading, url;
+
+ e.stopImmediatePropagation();
+ if (file.url == '1') {
+ preview.hide();
+ $('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+fm.i18n('getLink')+'</button></div>').appendTo(ql.info.find('.elfinder-quicklook-info'))
+ .on('click', function() {
+ var self = $(this);
+ self.html('<span class="elfinder-spinner">');
+ 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 !== '' && file.url != '1') {
+ preview.one('change', function() {
+ loading.remove();
+ node.off('load').remove();
+ node = null;
+ }).addClass('elfinder-overflow-auto');
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ url = fm.convAbsUrl(fm.url(file.hash));
+ node = $('<iframe class="elfinder-quicklook-preview-iframe" scrolling="no"/>')
+ .css('background-color', 'transparent')
+ .appendTo(preview)
+ .on('load', function() {
+ ql.hideinfo();
+ loading.remove();
+ ql.preview.after(ql.info);
+ $(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) {
+ 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) {
+ var mapsOpts = ql.options.googleMapsOpts.maps;
+ fm.forExternalUrl(file.hash).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, url, node;
+
+ e.stopImmediatePropagation();
+ if (getLink) {
+ preview.hide();
+ $('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+fm.i18n('getLink')+'</button></div>').appendTo(ql.info.find('.elfinder-quicklook-info'))
+ .on('click', function() {
+ var self = $(this);
+ self.html('<span class="elfinder-spinner">');
+ 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) {
+ node = $('<div style="width:100%;height:100%;"/>').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);
+ });
+ } else {
+ loadMap(file, node);
+ }
+ }
+ }
+ });
+ }
+ },
+
+ /**
+ * Any supported files preview plugin using (Google docs | MS Office) online viewer
+ *
+ * @param elFinder.commands.quicklook
+ **/
+ function(ql) {
+ 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;
+ // 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, url;
+
+ if (type === 'm') {
+ if ((mLimits[ext] && file.size > mLimits[ext]) || file.size > mLimits.other) {
+ type = 'g';
+ }
+ }
+ if (getLink) {
+ preview.hide();
+ $('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+fm.i18n('getLink')+'</button></div>').appendTo(ql.info.find('.elfinder-quicklook-info'))
+ .on('click', function() {
+ var self = $(this);
+ self.html('<span class="elfinder-spinner">');
+ 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() {
+ win.off('viewchange.googledocs');
+ loading.remove();
+ node.off('load').remove();
+ node = null;
+ }).addClass('elfinder-overflow-auto');
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ node = $('<iframe class="elfinder-quicklook-preview-iframe"/>')
+ .css('background-color', 'transparent')
+ .appendTo(preview);
+
+ fm.forExternalUrl(file.hash).done(function(url) {
+ if (url) {
+ if (file.ts) {
+ url += (url.match(/\?/)? '&' : '?') + '_t=' + file.ts;
+ }
+ node.on('load', function() {
+ ql.hideinfo();
+ loading.remove();
+ ql.preview.after(ql.info);
+ $(this).css('background-color', '#fff').show();
+ })
+ .on('error', function() {
+ loading.remove();
+ ql.preview.after(ql.info);
+ }).attr('src', 'https://' + urls[type] + encodeURIComponent(url));
+ } 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) {
+ var fm = ql.fm,
+ preview = ql.preview,
+ textMaxlen = parseInt(ql.options.textMaxlen) || 2000,
+ prettify = function() {
+ if (fm.options.cdns.prettify) {
+ fm.loadScript([fm.options.cdns.prettify + (fm.options.cdns.prettify.match(/\?/)? '&' : '?') + 'autorun=false']);
+ prettify = function() { return true; };
+ } else {
+ prettify = function() { return false; };
+ }
+ },
+ PRcheck = function(node, cnt) {
+ if (prettify()) {
+ if (typeof window.PR === 'undefined' && cnt--) {
+ setTimeout(function() { PRcheck(node, cnt); }, 100);
+ } else {
+ if (typeof window.PR === 'object') {
+ node.css('cursor', 'wait');
+ requestAnimationFrame(function() {
+ PR.prettyPrint && PR.prettyPrint(null, node.get(0));
+ node.css('cursor', '');
+ });
+ } else {
+ prettify = function() { return false; };
+ }
+ }
+ }
+ };
+
+ preview.on(ql.evUpdate, function(e) {
+ var file = e.file,
+ mime = file.mime,
+ jqxhr, loading;
+
+ if (fm.mimeIsText(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax)) {
+ e.stopImmediatePropagation();
+
+ (typeof window.PR === 'undefined') && prettify();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ // stop loading on change file if not loadin yet
+ preview.one('change', function() {
+ jqxhr.state() == 'pending' && jqxhr.reject();
+ });
+
+ jqxhr = fm.request({
+ data : {cmd : 'get', target : file.hash, conv : 1, _t : file.ts},
+ options : {type: 'get', cache : true},
+ preventDefault : true
+ })
+ .done(function(data) {
+ var reg = new RegExp('^(data:'+file.mime.replace(/([.+])/g, '\\$1')+';base64,)', 'i'),
+ text = data.content,
+ part, more, node, m;
+ ql.hideinfo();
+ if (window.atob && (m = text.match(reg))) {
+ text = atob(text.substr(m[1].length));
+ }
+
+ more = text.length - textMaxlen;
+ if (more > 100) {
+ part = text.substr(0, textMaxlen) + '...';
+ } else {
+ more = 0;
+ }
+
+ node = $('<div class="elfinder-quicklook-preview-text-wrapper"><pre class="elfinder-quicklook-preview-text prettyprint"></pre></div>');
+
+ if (more) {
+ node.append($('<div class="elfinder-quicklook-preview-charsleft"><hr/><span>' + fm.i18n('charsLeft', fm.toLocaleString(more)) + '</span></div>')
+ .on('click', function() {
+ var top = node.scrollTop();
+ $(this).remove();
+ node.children('pre').removeClass('prettyprinted').text(text).scrollTop(top);
+ PRcheck(node, 100);
+ })
+ );
+ }
+ node.children('pre').text(part || text);
+
+ node.on('touchstart', function(e) {
+ if ($(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) {
+ e.originalEvent._preventSwipeX = true;
+ }
+ }).appendTo(preview);
+
+ PRcheck(node, 100);
+ })
+ .always(function() {
+ loading.remove();
+ });
+ }
+ });
+ }
+];
+
+
+/*
+ * File: /js/commands/reload.js
+ */
+
+/**
+ * @class elFinder command "reload"
+ * Sync files and folders
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+(elFinder.prototype.commands.reload = function() {
+ "use strict";
+ var self = this,
+ search = false;
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = true;
+
+ this.shortcuts = [{
+ pattern : 'ctrl+shift+r f5'
+ }];
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.init = function() {
+ this.fm.bind('search searchend', function() {
+ search = this.type == 'search';
+ });
+ };
+
+ this.fm.bind('contextmenu', function(){
+ var fm = self.fm;
+ if (fm.options.sync >= 1000) {
+ self.extra = {
+ icon: 'accept',
+ node: $('<span/>')
+ .attr({title: fm.i18n('autoSync')})
+ .on('click touchstart', function(e){
+ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) {
+ return;
+ }
+ e.stopPropagation();
+ e.preventDefault();
+ $(this).parent()
+ .toggleClass('ui-state-disabled', fm.options.syncStart)
+ .parent().removeClass('ui-state-hover');
+ fm.options.syncStart = !fm.options.syncStart;
+ fm.autoSync(fm.options.syncStart? null : 'stop');
+ }).on('ready', function(){
+ $(this).parent().toggleClass('ui-state-disabled', !fm.options.syncStart).css('pointer-events', 'auto');
+ })
+ };
+ }
+ });
+
+ this.exec = function() {
+ var fm = this.fm;
+ if (!search) {
+ var dfrd = fm.sync(),
+ timeout = setTimeout(function() {
+ fm.notify({type : 'reload', cnt : 1, hideCnt : true});
+ dfrd.always(function() { fm.notify({type : 'reload', cnt : -1}); });
+ }, fm.notifyDelay);
+
+ return dfrd.always(function() {
+ clearTimeout(timeout);
+ fm.trigger('reload');
+ });
+ } else {
+ $('div.elfinder-toolbar > div.'+fm.res('class', 'searchbtn') + ' > span.ui-icon-search').click();
+ }
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/rename.js
+ */
+
+/**
+ * @class elFinder command "rename".
+ * Rename selected file.
+ *
+ * @author Dmitry (dio) Levashov, dio@std42.ru
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.rename = function() {
+ "use strict";
+
+ // set alwaysEnabled to allow root rename on client size
+ this.alwaysEnabled = true;
+
+ this.syncTitleOnChange = true;
+
+ var self = this,
+ fm = self.fm,
+ request = function(dfrd, targtes, file, name) {
+ var sel = targtes? [file.hash].concat(targtes) : [file.hash],
+ cnt = sel.length,
+ data = {}, rootNames;
+
+ fm.lockfiles({files : sel});
+
+ if (fm.isRoot(file)) {
+ if (!(rootNames = fm.storage('rootNames'))) {
+ rootNames = {};
+ }
+ if (name === '') {
+ if (rootNames[file.hash]) {
+ file.name = file._name;
+ file.i18 = file._i18;
+ delete rootNames[file.hash];
+ delete file._name;
+ delete file._i18;
+ } else {
+ dfrd && dfrd.reject();
+ fm.unlockfiles({files : sel}).trigger('selectfiles', {files : sel});
+ return;
+ }
+ } else {
+ if (typeof file._name === 'undefined') {
+ file._name = file.name;
+ file._i18 = file.i18;
+ }
+ file.name = rootNames[file.hash] = name;
+ delete file.i18;
+ }
+ fm.storage('rootNames', rootNames);
+ data = { changed: [file] };
+ fm.updateCache(data);
+ fm.change(data);
+ dfrd && dfrd.resolve(data);
+ fm.unlockfiles({files : sel}).trigger('selectfiles', {files : sel});
+ return;
+ }
+
+ data = {
+ cmd : 'rename',
+ name : name,
+ target : file.hash
+ };
+
+ if (cnt > 1) {
+ data['targets'] = targtes;
+ if (name.match(/\*/)) {
+ data['q'] = name;
+ }
+ }
+
+ fm.request({
+ data : data,
+ notify : {type : 'rename', cnt : cnt},
+ navigate : {}
+ })
+ .fail(function(error) {
+ var err = fm.parseError(error);
+ dfrd && dfrd.reject();
+ if (! err || ! Array.isArray(err) || err[0] !== 'errRename') {
+ fm.sync();
+ }
+ })
+ .done(function(data) {
+ var cwdHash;
+ if (data.added && data.added.length && cnt === 1) {
+ data.undo = {
+ cmd : 'rename',
+ callback : function() {
+ return fm.request({
+ data : {cmd : 'rename', target : data.added[0].hash, name : file.name},
+ notify : {type : 'undo', cnt : 1}
+ });
+ }
+ };
+ data.redo = {
+ cmd : 'rename',
+ callback : function() {
+ return fm.request({
+ data : {cmd : 'rename', target : file.hash, name : name},
+ notify : {type : 'rename', cnt : 1}
+ });
+ }
+ };
+ }
+ dfrd && dfrd.resolve(data);
+ if (!(cwdHash = fm.cwd().hash) || cwdHash === file.hash) {
+ fm.exec('open', $.map(data.added, function(f) {
+ return (f.mime === 'directory')? f.hash : null;
+ })[0]);
+ }
+ })
+ .always(function() {
+ fm.unlockfiles({files : sel}).trigger('selectfiles', {files : sel});
+ }
+ );
+ },
+ getHint = function(name, target) {
+ var sel = target || fm.selected(),
+ splits = fm.splitFileExtention(name),
+ f1 = fm.file(sel[0]),
+ f2 = fm.file(sel[1]),
+ ext, hint, add;
+
+ ext = splits[1]? ('.' + splits[1]) : '';
+ if (splits[1] && splits[0] === '*') {
+ // change extention
+ hint = '"' + fm.splitFileExtention(f1.name)[0] + ext + '", ';
+ hint += '"' + fm.splitFileExtention(f2.name)[0] + ext + '"';
+ } else if (splits[0].length > 1) {
+ if (splits[0].substr(-1) === '*') {
+ // add prefix
+ add = splits[0].substr(0, splits[0].length - 1);
+ hint = '"' + add + f1.name+'", ';
+ hint += '"' + add + f2.name+'"';
+ } else if (splits[0].substr(0, 1) === '*') {
+ // add suffix
+ add = splits[0].substr(1);
+ hint = '"'+fm.splitFileExtention(f1.name)[0] + add + ext + '", ';
+ hint += '"'+fm.splitFileExtention(f2.name)[0] + add + ext + '"';
+ }
+ }
+ if (!hint) {
+ hint = '"'+splits[0] + '1' + ext + '", "' + splits[0] + '2' + ext + '"';
+ }
+ if (sel.length > 2) {
+ hint += ' ...';
+ }
+ return hint;
+ },
+ batchRename = function() {
+ var sel = fm.selected(),
+ tplr = '<input name="type" type="radio" class="elfinder-tabstop">',
+ mkChk = function(node, label) {
+ return $('<label class="elfinder-rename-batch-checks">' + fm.i18n(label) + '</label>').prepend(node);
+ },
+ name = $('<input type="text" class="ui-corner-all elfinder-tabstop">'),
+ num = $(tplr),
+ prefix = $(tplr),
+ suffix = $(tplr),
+ extention = $(tplr),
+ checks = $('<div/>').append(
+ mkChk(num, 'plusNumber'),
+ mkChk(prefix, 'asPrefix'),
+ mkChk(suffix, 'asSuffix'),
+ mkChk(extention, 'changeExtention')
+ ),
+ preview = $('<div class="elfinder-rename-batch-preview"/>'),
+ node = $('<div class="elfinder-rename-batch"/>').append(
+ $('<div class="elfinder-rename-batch-name"/>').append(name),
+ $('<div class="elfinder-rename-batch-type"/>').append(checks),
+ preview
+ ),
+ opts = {
+ title : fm.i18n('batchRename'),
+ modal : true,
+ destroyOnClose : true,
+ width: Math.min(380, fm.getUI().width() - 20),
+ buttons : {},
+ open : function() {
+ name.on('input', mkPrev).trigger('focus');
+ }
+ },
+ getName = function() {
+ var vName = name.val(),
+ ext = fm.splitFileExtention(fm.file(sel[0]).name)[1];
+ if (vName !== '' || num.is(':checked')) {
+ if (prefix.is(':checked')) {
+ vName += '*';
+ } else if (suffix.is(':checked')) {
+ vName = '*' + vName + '.' + ext;
+ } else if (extention.is(':checked')) {
+ vName = '*.' + vName;
+ } else if (ext) {
+ vName += '.' + ext;
+ }
+ }
+ return vName;
+ },
+ mkPrev = function() {
+ var vName = getName();
+ if (vName !== '') {
+ preview.html(fm.i18n(['renameMultiple', sel.length, getHint(vName)]));
+ } else {
+ preview.empty();
+ }
+ },
+ radios = checks.find('input:radio').on('change', mkPrev),
+ dialog;
+
+ opts.buttons[fm.i18n('btnApply')] = function() {
+ var vName = getName(),
+ file, targets;
+ if (vName !== '') {
+ dialog.elfinderdialog('close');
+ targets = sel;
+ file = fm.file(targets.shift());
+ request(void(0), targets, file, vName);
+ }
+ };
+ opts.buttons[fm.i18n('btnCancel')] = function() {
+ dialog.elfinderdialog('close');
+ };
+ if ($.fn.checkboxradio) {
+ radios.checkboxradio({
+ create: function(e, ui) {
+ if (this === num.get(0)) {
+ num.prop('checked', true).change();
+ }
+ }
+ });
+ } else {
+ checks.buttonset({
+ create: function(e, ui) {
+ num.prop('checked', true).change();
+ }
+ });
+ }
+ dialog = self.fmDialog(node, opts);
+ };
+
+ this.noChangeDirOnRemovedCwd = true;
+
+ this.shortcuts = [{
+ pattern : 'f2' + (fm.OS == 'mac' ? ' enter' : '')
+ }, {
+ pattern : 'shift+f2',
+ description : 'batchRename',
+ callback : function() {
+ fm.selected().length > 1 && batchRename();
+ }
+ }];
+
+ this.getstate = function(select) {
+ var sel = this.files(select),
+ cnt = sel.length,
+ phash, ext, mime, brk, state, isRoot;
+
+ if (!cnt) {
+ return -1;
+ }
+
+ if (cnt > 1 && sel[0].phash) {
+ phash = sel[0].phash;
+ ext = fm.splitFileExtention(sel[0].name)[1].toLowerCase();
+ mime = sel[0].mime;
+ }
+ if (cnt === 1) {
+ isRoot = fm.isRoot(sel[0]);
+ }
+
+ state = (cnt === 1 && (isRoot || !sel[0].locked) || (fm.api > 2.1030 && cnt === $.grep(sel, function(f) {
+ if (!brk && !f.locked && f.phash === phash && !fm.isRoot(f) && (mime === f.mime || ext === fm.splitFileExtention(f.name)[1].toLowerCase())) {
+ return true;
+ } else {
+ brk && (brk = true);
+ return false;
+ }
+ }).length)) ? 0 : -1;
+
+ // because alwaysEnabled = true, it need check disabled on connector
+ if (!isRoot && state === 0 && fm.option('disabledFlip', sel[0].hash)['rename']) {
+ state = -1;
+ }
+
+ if (state !== -1 && cnt > 1) {
+ self.extra = {
+ icon: 'preference',
+ node: $('<span/>')
+ .attr({title: fm.i18n('batchRename')})
+ .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
+ batchRename();
+ })
+ };
+ } else {
+ delete self.extra;
+ }
+
+ return state;
+ };
+
+ this.exec = function(hashes, cOpts) {
+ var cwd = fm.getUI('cwd'),
+ sel = hashes || (fm.selected().length? fm.selected() : false) || [fm.cwd().hash],
+ cnt = sel.length,
+ file = fm.file(sel.shift()),
+ filename = '.elfinder-cwd-filename',
+ opts = cOpts || {},
+ incwd = (fm.cwd().hash == file.hash),
+ type = (opts._currentType === 'navbar' || opts._currentType === 'files')? opts._currentType : (incwd? 'navbar' : 'files'),
+ navbar = (type !== 'files'),
+ target = fm[navbar? 'navHash2Elm' : 'cwdHash2Elm'](file.hash),
+ tarea = (!navbar && fm.storage('view') != 'list'),
+ split = function(name) {
+ var ext = fm.splitFileExtention(name)[1];
+ return [name.substr(0, name.length - ext.length - 1), ext];
+ },
+ unselect = function() {
+ requestAnimationFrame(function() {
+ input && input.trigger('blur');
+ });
+ },
+ rest = function(){
+ if (!overlay.is(':hidden')) {
+ overlay.elfinderoverlay('hide').off('click close', cancel);
+ }
+ pnode.removeClass('ui-front')
+ .css('position', '')
+ .off('unselect.'+fm.namespace, unselect);
+ if (tarea) {
+ node && node.css('max-height', '');
+ } else if (!navbar) {
+ pnode.css('width', '')
+ .parent('td').css('overflow', '');
+ }
+ }, colwidth,
+ dfrd = $.Deferred()
+ .fail(function(error) {
+ var parent = input.parent(),
+ name = fm.escape(file.i18 || file.name);
+
+ input.off();
+ if (tarea) {
+ name = name.replace(/([_.])/g, '​$1');
+ }
+ requestAnimationFrame(function() {
+ if (navbar) {
+ input.replaceWith(name);
+ } else {
+ if (parent.length) {
+ input.remove();
+ parent.html(name);
+ } else {
+ target.find(filename).html(name);
+ }
+ }
+ });
+ error && fm.error(error);
+ })
+ .always(function() {
+ rest();
+ fm.unbind('resize', resize);
+ fm.enable();
+ }),
+ blur = function(e) {
+ var name = $.trim(input.val()),
+ splits = fm.splitFileExtention(name),
+ valid = true,
+ req = function() {
+ input.off();
+ rest();
+ if (navbar) {
+ input.replaceWith(fm.escape(name));
+ } else {
+ node.html(fm.escape(name));
+ }
+ request(dfrd, sel, file, name);
+ };
+
+ if (!overlay.is(':hidden')) {
+ pnode.css('z-index', '');
+ }
+ if (name === '') {
+ if (!fm.isRoot(file)) {
+ return cancel();
+ }
+ if (navbar) {
+ input.replaceWith(fm.escape(file.name));
+ } else {
+ node.html(fm.escape(file.name));
+ }
+ }
+ if (!inError && pnode.length) {
+
+ input.off('blur');
+
+ if (cnt === 1 && name === file.name) {
+ return dfrd.reject();
+ }
+ if (fm.options.validName && fm.options.validName.test) {
+ try {
+ valid = fm.options.validName.test(name);
+ } catch(e) {
+ valid = false;
+ }
+ }
+ if (name === '.' || name === '..' || !valid) {
+ inError = true;
+ fm.error(file.mime === 'directory'? 'errInvDirname' : 'errInvName', {modal: true, close: function(){setTimeout(select, 120);}});
+ return false;
+ }
+ if (cnt === 1 && fm.fileByName(name, file.phash)) {
+ inError = true;
+ fm.error(['errExists', name], {modal: true, close: function(){setTimeout(select, 120);}});
+ return false;
+ }
+
+ if (cnt === 1) {
+ req();
+ } else {
+ fm.confirm({
+ title : 'cmdrename',
+ text : ['renameMultiple', cnt, getHint(name, [file.hash].concat(sel))],
+ accept : {
+ label : 'btnYes',
+ callback : req
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback : function() {
+ setTimeout(function() {
+ inError = true;
+ select();
+ }, 120);
+ }
+ }
+ });
+ setTimeout(function() {
+ fm.trigger('unselectfiles', {files: fm.selected()})
+ .trigger('selectfiles', {files : [file.hash].concat(sel)});
+ }, 120);
+ }
+ }
+ },
+ input = $(tarea? '<textarea/>' : '<input type="text"/>')
+ .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 == $.ui.keyCode.ESCAPE) {
+ dfrd.reject();
+ } else if (e.keyCode == $.ui.keyCode.ENTER) {
+ e.preventDefault();
+ input.trigger('blur');
+ }
+ })
+ .on('mousedown click dblclick', function(e) {
+ e.stopPropagation();
+ if (e.type === 'dblclick') {
+ e.preventDefault();
+ }
+ })
+ .on('blur', blur)
+ .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);
+ }
+ ! fm.enabled() && fm.enable();
+ if (inError) {
+ inError = false;
+ input.on('blur', blur);
+ }
+ input.trigger('focus').trigger('select');
+ input[0].setSelectionRange && input[0].setSelectionRange(0, name.length);
+ },
+ node = navbar? target.contents().filter(function(){ return this.nodeType==3 && $(this).parent().attr('id') === fm.navHash2Id(file.hash); })
+ : target.find(filename),
+ pnode = node.parent(),
+ overlay = fm.getUI('overlay'),
+ cancel = function(e) {
+ if (!overlay.is(':hidden')) {
+ pnode.css('z-index', '');
+ }
+ if (! inError) {
+ dfrd.reject();
+ if (e) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ }
+ },
+ resize = function() {
+ target.trigger('scrolltoview', {blink : false});
+ },
+ inError = false;
+
+ pnode.addClass('ui-front')
+ .css('position', 'relative')
+ .on('unselect.'+fm.namespace, unselect);
+ fm.bind('resize', resize);
+ if (navbar) {
+ node.replaceWith(input.val(file.name));
+ } else {
+ if (tarea) {
+ node.css('max-height', 'none');
+ } else if (!navbar) {
+ colwidth = pnode.width();
+ pnode.width(colwidth - 15)
+ .parent('td').css('overflow', 'visible');
+ }
+ node.empty().append(input.val(file.name));
+ }
+
+ if (cnt > 1 && fm.api <= 2.1030) {
+ return dfrd.reject();
+ }
+
+ if (!file || !node.length) {
+ return dfrd.reject('errCmdParams', this.title);
+ }
+
+ if (file.locked && !fm.isRoot(file)) {
+ return dfrd.reject(['errLocked', file.name]);
+ }
+
+ fm.one('select', function() {
+ input.parent().length && file && $.inArray(file.hash, fm.selected()) === -1 && input.trigger('blur');
+ });
+
+ input.trigger('keyup');
+
+ select();
+
+ return dfrd;
+ };
+
+ fm.bind('select contextmenucreate closecontextmenu', function(e) {
+ var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(),
+ file;
+ if (sel && sel.length === 1 && (file = fm.file(sel[0])) && fm.isRoot(file)) {
+ self.title = fm.i18n('kindAlias') + ' (' + fm.i18n('preference') + ')';
+ } else {
+ self.title = fm.i18n('cmdrename');
+ }
+ if (e.type !== 'closecontextmenu') {
+ self.update(void(0), self.title);
+ } else {
+ requestAnimationFrame(function() {
+ self.update(void(0), self.title);
+ });
+ }
+ }).remove(function(e) {
+ var rootNames;
+ if (e.data && e.data.removed && (rootNames = fm.storage('rootNames'))) {
+ $.each(e.data.removed, function(i, h) {
+ if (rootNames[h]) {
+ delete rootNames[h];
+ }
+ });
+ fm.storage('rootNames', rootNames);
+ }
+ });
+};
+
+
+/*
+ * File: /js/commands/resize.js
+ */
+
+/**
+ * @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 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};
+ $.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)
+ });
+ });
+ $.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 = this.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 fm = this.fm,
+ 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 $.Deferred().reject(error);
+ }
+ };
+
+ this.exec = function(hashes) {
+ var self = this,
+ fm = this.fm,
+ files = this.files(hashes),
+ dfrd = $.Deferred(),
+ api2 = (fm.api > 1),
+ options = this.options,
+ dialogWidth = 650,
+ fmnode = fm.getUI(),
+ ctrgrup = $().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) {
+ var isJpeg = (file.mime === 'image/jpeg'),
+ dialog = $('<div class="elfinder-resize-container"/>'),
+ input = '<input type="number" class="ui-corner-all"/>',
+ row = '<div class="elfinder-resize-row"/>',
+ label = '<div class="elfinder-resize-label"/>',
+ changeTm = null,
+ operate = false,
+ opStart = function() { operate = true; },
+ opStop = function() {
+ if (operate) {
+ operate = false;
+ control.trigger('change');
+ }
+ },
+ control = $('<div class="elfinder-resize-control"/>')
+ .on('focus', 'input[type=text],input[type=number]', function() {
+ $(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) {
+ blob && quty.next('span').text(' (' + fm.formatSize(blob.size) + ')');
+ }, 'image/jpeg', Math.max(Math.min(quty.val(), 100), 1) / 100);
+ }
+ }
+ });
+ })
+ .on('mouseup', 'input', function(e) {
+ $(e.target).trigger('change');
+ }),
+ preview = $('<div class="elfinder-resize-preview"/>')
+ .on('touchmove', function(e) {
+ if ($(e.target).hasClass('touch-punch')) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ }),
+ spinner = $('<div class="elfinder-resize-loading">'+fm.i18n('ntfloadimg')+'</div>'),
+ rhandle = $('<div class="elfinder-resize-handle touch-punch"/>'),
+ rhandlec = $('<div class="elfinder-resize-handle touch-punch"/>'),
+ uiresize = $('<div class="elfinder-resize-uiresize elfinder-resize-control-panel"/>'),
+ uicrop = $('<div class="elfinder-resize-uicrop elfinder-resize-control-panel"/>'),
+ uirotate = $('<div class="elfinder-resize-rotate elfinder-resize-control-panel"/>'),
+ uideg270 = $('<button/>').attr('title',fm.i18n('rotate-cw')).append($('<span class="elfinder-button-icon elfinder-button-icon-rotate-l"/>')),
+ uideg90 = $('<button/>').attr('title',fm.i18n('rotate-ccw')).append($('<span class="elfinder-button-icon elfinder-button-icon-rotate-r"/>')),
+ uiprop = $('<span />'),
+ reset = $('<button class="elfinder-resize-reset">').text(fm.i18n('reset'))
+ .on('click', function() {
+ resetView();
+ })
+ .button({
+ icons: {
+ primary: 'ui-icon-arrowrefresh-1-n'
+ },
+ text: false
+ }),
+ uitype = $('<div class="elfinder-resize-type"/>')
+ .append('<input type="radio" name="type" id="'+id+'-resize" value="resize" checked="checked" /><label for="'+id+'-resize">'+fm.i18n('resize')+'</label>',
+ '<input class="api2" type="radio" name="type" id="'+id+'-crop" value="crop" /><label class="api2" for="'+id+'-crop">'+fm.i18n('crop')+'</label>',
+ '<input class="api2" type="radio" name="type" id="'+id+'-rotate" value="rotate" /><label class="api2" for="'+id+'-rotate">'+fm.i18n('rotate')+'</label>'),
+ mode = 'resize',
+ type = uitype[ctrgrup]()[ctrgrup]('disable').find('input')
+ .on('change', function() {
+ mode = $(this).val();
+
+ resetView();
+ resizable(true);
+ croppable(true);
+ rotateable(true);
+
+ if (mode == 'resize') {
+ uiresize.show();
+ uirotate.hide();
+ uicrop.hide();
+ resizable();
+ isJpeg && grid8px.insertAfter(uiresize.find('.elfinder-resize-grid8'));
+ }
+ else if (mode == 'crop') {
+ uirotate.hide();
+ uiresize.hide();
+ uicrop.show();
+ croppable();
+ isJpeg && grid8px.insertAfter(uicrop.find('.elfinder-resize-grid8'));
+ } else if (mode == 'rotate') {
+ uiresize.hide();
+ uicrop.hide();
+ uirotate.show();
+ rotateable();
+ }
+ }),
+ width = $(input)
+ .on('change', function() {
+ var w = round(parseInt(width.val())),
+ h = round(cratio ? w/ratio : parseInt(height.val()));
+
+ if (w > 0 && h > 0) {
+ resize.updateView(w, h);
+ width.val(w);
+ height.val(h);
+ }
+ }).addClass('elfinder-focus'),
+ height = $(input)
+ .on('change', function() {
+ var h = round(parseInt(height.val())),
+ w = round(cratio ? h*ratio : parseInt(width.val()));
+
+ if (w > 0 && h > 0) {
+ resize.updateView(w, h);
+ width.val(w);
+ height.val(h);
+ }
+ }),
+ pointX = $(input).on('change', function(){crop.updateView();}),
+ pointY = $(input).on('change', function(){crop.updateView();}),
+ offsetX = $(input).on('change', function(){crop.updateView('w');}),
+ offsetY = $(input).on('change', function(){crop.updateView('h');}),
+ quality = isJpeg && api2?
+ $(input).val(fm.storage('jpgQuality') > 0? fm.storage('jpgQuality') : fm.option('jpgQuality'))
+ .addClass('elfinder-resize-quality')
+ .attr('min', '1').attr('max', '100').attr('title', '1 - 100')
+ .on('blur', function(){
+ var q = Math.min(100, Math.max(1, parseInt(this.value)));
+ control.find('input.elfinder-resize-quality').val(q);
+ })
+ : null,
+ degree = $('<input type="number" class="ui-corner-all" maxlength="3" value="0" />')
+ .on('change', function() {
+ rotate.update();
+ }),
+ uidegslider = $('<div class="elfinder-resize-rotate-slider touch-punch"/>')
+ .slider({
+ min: 0,
+ max: 360,
+ value: degree.val(),
+ animate: true,
+ start: opStart,
+ stop: opStop,
+ change: function(event, ui) {
+ if (ui.value != uidegslider.slider('value')) {
+ rotate.update(ui.value);
+ }
+ },
+ slide: function(event, ui) {
+ rotate.update(ui.value, false);
+ }
+ }).find('.ui-slider-handle')
+ .addClass('elfinder-tabstop')
+ .off('keydown')
+ .on('keydown', function(e) {
+ if (e.keyCode == $.ui.keyCode.LEFT || e.keyCode == $.ui.keyCode.RIGHT) {
+ e.stopPropagation();
+ e.preventDefault();
+ rotate.update(Number(degree.val()) + (e.keyCode == $.ui.keyCode.RIGHT? 1 : -1), false);
+ }
+ })
+ .end(),
+ pickimg,
+ pickcanv,
+ pickctx,
+ pickc = {},
+ pick = function(e) {
+ var color, r, g, b, h, s, l;
+
+ try {
+ color = pickc[Math.round(e.offsetX)][Math.round(e.offsetY)];
+ } catch(e) {}
+ if (!color) return;
+
+ r = color[0]; g = color[1]; b = color[2];
+ h = color[3]; s = color[4]; l = color[5];
+
+ setbg(r, g, b, (e.type === 'click'));
+ },
+ palpick = function(e) {
+ setbg($(this).css('backgroundColor'), '', '', (e.type === 'click'));
+ },
+ setbg = function(r, g, b, off) {
+ var s, m, cc;
+ if (typeof r === 'string') {
+ g = '';
+ if (r && (s = $('<span>').css('backgroundColor', r).css('backgroundColor')) && (m = s.match(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i))) {
+ r = Number(m[1]);
+ g = Number(m[2]);
+ b = Number(m[3]);
+ }
+ }
+ cc = (g === '')? r : '#' + getColorCode(r, g, b);
+ bg.val(cc).css({ backgroundColor: cc, backgroundImage: 'none', color: (r+g+b < 384? '#fff' : '#000') });
+ preview.css('backgroundColor', cc);
+ if (off) {
+ imgr.off('.picker').removeClass('elfinder-resize-picking');
+ pallet.off('.picker').removeClass('elfinder-resize-picking');
+ }
+ },
+ getColorCode = function(r, g, b) {
+ return $.map([r,g,b], function(c){return ('0'+parseInt(c).toString(16)).slice(-2);}).join('');
+ },
+ picker = $('<button>').text(fm.i18n('colorPicker'))
+ .on('click', function() {
+ imgr.on('mousemove.picker click.picker', pick).addClass('elfinder-resize-picking');
+ pallet.on('mousemove.picker click.picker', 'span', palpick).addClass('elfinder-resize-picking');
+ })
+ .button({
+ icons: {
+ primary: 'ui-icon-pin-s'
+ },
+ text: false
+ }),
+ reseter = $('<button>').text(fm.i18n('reset'))
+ .on('click', function() {
+ setbg('', '', '', true);
+ })
+ .button({
+ icons: {
+ primary: 'ui-icon-arrowrefresh-1-n'
+ },
+ text: false
+ }),
+ bg = $('<input class="ui-corner-all elfinder-resize-bg" type="text">')
+ .on('focus', function() {
+ $(this).attr('style', '');
+ })
+ .on('blur', function() {
+ setbg($(this).val());
+ }),
+ pallet = $('<div class="elfinder-resize-pallet">').on('click', 'span', function() {
+ setbg($(this).css('backgroundColor'));
+ }),
+ ratio = 1,
+ prop = 1,
+ owidth = 0,
+ oheight = 0,
+ cratio = true,
+ cratioc = false,
+ pwidth = 0,
+ pheight = 0,
+ rwidth = 0,
+ rheight = 0,
+ rdegree = 0,
+ grid8 = isJpeg? grid8Def : false,
+ constr = $('<button>').html(fm.i18n('aspectRatio'))
+ .on('click', function() {
+ cratio = ! cratio;
+ constr.button('option', {
+ icons : { primary: cratio? 'ui-icon-locked' : 'ui-icon-unlocked'}
+ });
+ resize.fixHeight();
+ rhandle.resizable('option', 'aspectRatio', cratio).data('uiResizable')._aspectRatio = cratio;
+ })
+ .button({
+ icons : {
+ primary: cratio? 'ui-icon-locked' : 'ui-icon-unlocked'
+ },
+ text: false
+ }),
+ constrc = $('<button>').html(fm.i18n('aspectRatio'))
+ .on('click', function() {
+ cratioc = ! cratioc;
+ constrc.button('option', {
+ icons : { primary: cratioc? 'ui-icon-locked' : 'ui-icon-unlocked'}
+ });
+ rhandlec.resizable('option', 'aspectRatio', cratioc).data('uiResizable')._aspectRatio = cratioc;
+ })
+ .button({
+ icons : {
+ primary: cratioc? 'ui-icon-locked' : 'ui-icon-unlocked'
+ },
+ text: false
+ }),
+ grid8px = $('<button>').html(fm.i18n(grid8? 'enabled' : 'disabled')).toggleClass('ui-state-active', grid8)
+ .on('click', function() {
+ grid8 = ! grid8;
+ grid8px.html(fm.i18n(grid8? 'enabled' : 'disabled')).toggleClass('ui-state-active', grid8);
+ setStep8();
+ })
+ .button(),
+ setStep8 = function() {
+ var step = grid8? 8 : 1;
+ $.each([width, height, offsetX, offsetY, pointX, pointY], function() {
+ this.attr('step', step);
+ });
+ if (grid8) {
+ width.val(round(width.val()));
+ height.val(round(height.val()));
+ offsetX.val(round(offsetX.val()));
+ offsetY.val(round(offsetY.val()));
+ pointX.val(round(pointX.val()));
+ pointY.val(round(pointY.val()));
+ if (uiresize.is(':visible')) {
+ resize.updateView(width.val(), height.val());
+ } else if (uicrop.is(':visible')) {
+ crop.updateView();
+ }
+ }
+ },
+ setuprimg = function() {
+ var r_scale,
+ fail = function() {
+ bg.parent().hide();
+ pallet.hide();
+ };
+ r_scale = Math.min(pwidth, pheight) / Math.sqrt(Math.pow(owidth, 2) + Math.pow(oheight, 2));
+ rwidth = Math.ceil(owidth * r_scale);
+ rheight = Math.ceil(oheight * r_scale);
+ imgr.width(rwidth)
+ .height(rheight)
+ .css('margin-top', (pheight-rheight)/2 + 'px')
+ .css('margin-left', (pwidth-rwidth)/2 + 'px');
+ if (imgr.is(':visible') && bg.is(':visible')) {
+ if (file.mime !== 'image/png') {
+ preview.css('backgroundColor', bg.val());
+ pickimg = $('<img>');
+ if (fm.isCORS) {
+ pickimg.attr('crossorigin', 'use-credentials');
+ }
+ pickimg.on('load', function() {
+ if (pickcanv && pickcanv.width !== rwidth) {
+ setColorData();
+ }
+ })
+ .on('error', fail)
+ .attr('src', canvSrc);
+ } else {
+ fail();
+ }
+ }
+ },
+ setupimg = function() {
+ resize.updateView(owidth, oheight);
+ setuprimg();
+ basec
+ .width(img.width())
+ .height(img.height());
+ imgc
+ .width(img.width())
+ .height(img.height());
+ crop.updateView();
+ jpgCalc();
+ },
+ setColorData = function() {
+ if (pickctx) {
+ var n, w, h, r, g, b, a, s, l, hsl, hue,
+ data, scale, tx1, tx2, ty1, ty2, rgb,
+ domi = {},
+ domic = [],
+ domiv, palc,
+ rgbToHsl = function (r, g, b) {
+ var h, s, l,
+ max = Math.max(Math.max(r, g), b),
+ min = Math.min(Math.min(r, g), b);
+
+ // Hue, 0 ~ 359
+ if (max === min) {
+ h = 0;
+ } else if (r === max) {
+ h = ((g - b) / (max - min) * 60 + 360) % 360;
+ } else if (g === max) {
+ h = (b - r) / (max - min) * 60 + 120;
+ } else if (b === max) {
+ h = (r - g) / (max - min) * 60 + 240;
+ }
+ // Saturation, 0 ~ 1
+ s = (max - min) / max;
+ // Lightness, 0 ~ 1
+ l = (r * 0.3 + g * 0.59 + b * 0.11) / 255;
+
+ return [h, s, l, 'hsl'];
+ },
+ rgbRound = function(c) {
+ return Math.round(c / 8) * 8;
+ };
+
+ calc:
+ try {
+ w = pickcanv.width = imgr.width();
+ h = pickcanv.height = imgr.height();
+ scale = w / owidth;
+ pickctx.scale(scale, scale);
+ pickctx.drawImage(pickimg.get(0), 0, 0);
+
+ data = pickctx.getImageData(0, 0, w, h).data;
+
+ // Range to detect the dominant color
+ tx1 = w * 0.1;
+ tx2 = w * 0.9;
+ ty1 = h * 0.1;
+ ty2 = h * 0.9;
+
+ for (var y = 0; y < h - 1; y++) {
+ for (var x = 0; x < w - 1; x++) {
+ n = x * 4 + y * w * 4;
+ // RGB
+ r = data[n]; g = data[n + 1]; b = data[n + 2]; a = data[n + 3];
+ // check alpha ch
+ if (a !== 255) {
+ bg.parent().hide();
+ pallet.hide();
+ break calc;
+ }
+ // HSL
+ hsl = rgbToHsl(r, g, b);
+ hue = Math.round(hsl[0]); s = Math.round(hsl[1] * 100); l = Math.round(hsl[2] * 100);
+ if (! pickc[x]) {
+ pickc[x] = {};
+ }
+ // set pickc
+ pickc[x][y] = [r, g, b, hue, s, l];
+ // detect the dominant color
+ if ((x < tx1 || x > tx2) && (y < ty1 || y > ty2)) {
+ rgb = rgbRound(r) + ',' + rgbRound(g) + ',' + rgbRound(b);
+ if (! domi[rgb]) {
+ domi[rgb] = 1;
+ } else {
+ ++domi[rgb];
+ }
+ }
+ }
+ }
+
+ if (! pallet.children(':first').length) {
+ palc = 1;
+ $.each(domi, function(c, v) {
+ domic.push({c: c, v: v});
+ });
+ $.each(domic.sort(function(a, b) {
+ return (a.v > b.v)? -1 : 1;
+ }), function() {
+ if (this.v < 2 || palc > 10) {
+ return false;
+ }
+ pallet.append($('<span style="width:20px;height:20px;display:inline-block;background-color:rgb('+this.c+');">'));
+ ++palc;
+ });
+ }
+ } catch(e) {
+ picker.hide();
+ pallet.hide();
+ }
+ }
+ },
+ setupPicker = function() {
+ try {
+ pickcanv = document.createElement('canvas');
+ pickctx = pickcanv.getContext('2d');
+ } catch(e) {
+ picker.hide();
+ pallet.hide();
+ }
+ },
+ setupPreset = function() {
+ preset.on('click', 'span.elfinder-resize-preset', function() {
+ var btn = $(this),
+ w = btn.data('s')[0],
+ h = btn.data('s')[1],
+ r = owidth / oheight;
+ btn.data('s', [h, w]).text(h + 'x' + w);
+ if (owidth > w || oheight > h) {
+ if (owidth <= w) {
+ w = round(h * r);
+ } else if (oheight <= h) {
+ h = round(w / r);
+ } else {
+ if (owidth - w > oheight - h) {
+ h = round(w / r);
+ } else {
+ w = round(h * r);
+ }
+ }
+ } else {
+ w = owidth;
+ h = oheight;
+ }
+ width.val(w);
+ height.val(h);
+ resize.updateView(w, h);
+ jpgCalc();
+ });
+ presetc.on('click', 'span.elfinder-resize-preset', function() {
+ var btn = $(this),
+ w = btn.data('s')[0],
+ h = btn.data('s')[1],
+ x = pointX.val(),
+ y = pointY.val();
+
+ btn.data('s', [h, w]).text(h + 'x' + w);
+ if (owidth >= w && oheight >= h) {
+ if (owidth - w - x < 0) {
+ x = owidth - w;
+ }
+ if (oheight - h - y < 0) {
+ y = oheight - h;
+ }
+ pointX.val(x);
+ pointY.val(y);
+ offsetX.val(w);
+ offsetY.val(h);
+ crop.updateView();
+ jpgCalc();
+ }
+ });
+ presetc.children('span.elfinder-resize-preset').each(function() {
+ var btn = $(this),
+ w = btn.data('s')[0],
+ h = btn.data('s')[1];
+
+ btn[(owidth >= w && oheight >= h)? 'show' : 'hide']();
+ });
+ },
+ dimreq = null,
+ inited = false,
+ setdim = function(dim) {
+ var rfile = fm.file(file.hash);
+ rfile.width = dim[0];
+ rfile.height = dim[1];
+ },
+ init = function() {
+ var elm, memSize, r_scale, imgRatio;
+
+ if (inited) {
+ return;
+ }
+ inited = true;
+ dimreq && dimreq.state && dimreq.state() === 'pending' && dimreq.reject();
+
+ // check lossless rotete
+ if (fm.api >= 2.1030) {
+ if (losslessRotate === 0) {
+ fm.request({
+ data: {
+ cmd : 'resize',
+ target : file.hash,
+ degree : 0,
+ mode : 'rotate'
+ },
+ preventDefault : true
+ }).done(function(data) {
+ losslessRotate = data.losslessRotate? 1 : -1;
+ if (losslessRotate === 1 && (degree.val() % 90 === 0)) {
+ uirotate.children('div.elfinder-resize-quality').hide();
+ }
+ }).fail(function() {
+ losslessRotate = -1;
+ });
+ }
+ } else {
+ losslessRotate = -1;
+ }
+
+ elm = img.get(0);
+ memSize = file.width && file.height? {w: file.width, h: file.height} : (elm.naturalWidth? null : {w: img.width(), h: img.height()});
+
+ memSize && img.removeAttr('width').removeAttr('height');
+
+ owidth = file.width || elm.naturalWidth || elm.width || img.width();
+ oheight = file.height || elm.naturalHeight || elm.height || img.height();
+ if (!file.width || !file.height) {
+ setdim([owidth, oheight]);
+ }
+
+ memSize && img.width(memSize.w).height(memSize.h);
+
+ dMinBtn.show();
+
+ imgRatio = oheight / owidth;
+
+ if (imgRatio < 1 && preview.height() > preview.width() * imgRatio) {
+ preview.height(preview.width() * imgRatio);
+ }
+
+ if (preview.height() > img.height() + 20) {
+ preview.height(img.height() + 20);
+ }
+
+ pheight = preview.height() - (rhandle.outerHeight() - rhandle.height());
+
+ spinner.remove();
+
+ ratio = owidth/oheight;
+
+ rhandle.append(img.show()).show();
+ width.val(owidth);
+ height.val(oheight);
+
+ setupPicker();
+ setupPreset();
+ setupimg();
+
+ uitype[ctrgrup]('enable');
+ control.find('input,select').prop('disabled', false)
+ .filter(':text').on('keydown', function(e) {
+ var cOpts;
+ if (e.keyCode == $.ui.keyCode.ENTER) {
+ e.stopPropagation();
+ e.preventDefault();
+ cOpts = {
+ title : $('input:checked', uitype).val(),
+ text : 'confirmReq',
+ accept : {
+ label : 'btnApply',
+ callback : function() {
+ save();
+ }
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback : function(){
+ $(this).trigger('focus');
+ }
+ }
+ };
+
+ if (useSaveAs) {
+ cOpts['buttons'] = [{
+ label : 'btnSaveAs',
+ callback : function() {
+ requestAnimationFrame(saveAs);
+ }
+ }];
+ }
+ fm.confirm(cOpts);
+ return;
+ }
+ })
+ .on('keyup', function() {
+ var $this = $(this);
+ if (! $this.hasClass('elfinder-resize-bg')) {
+ requestAnimationFrame(function() {
+ $this.val($this.val().replace(/[^0-9]/g, ''));
+ });
+ }
+ })
+ .filter(':first');
+
+ setStep8();
+ !fm.UA.Mobile && width.trigger('focus');
+ resizable();
+ },
+ img = $('<img/>')
+ .on('load', init)
+ .on('error', function() {
+ spinner.text('Unable to load image').css('background', 'transparent');
+ }),
+ basec = $('<div/>'),
+ imgc = $('<img/>'),
+ coverc = $('<div/>'),
+ imgr = $('<img class="elfinder-resize-imgrotate" />'),
+ round = function(v, max) {
+ v = grid8? Math.round(v/8)*8 : Math.round(v);
+ v = Math.max(0, v);
+ if (max && v > max) {
+ v = grid8? Math.floor(max/8)*8 : max;
+ }
+ return v;
+ },
+ resetView = function() {
+ width.val(owidth);
+ height.val(oheight);
+ resize.updateView(owidth, oheight);
+ pointX.val(0);
+ pointY.val(0);
+ offsetX.val(owidth);
+ offsetY.val(oheight);
+ crop.updateView();
+ jpgCalc();
+ },
+ resize = {
+ update : function() {
+ width.val(round(img.width()/prop));
+ height.val(round(img.height()/prop));
+ jpgCalc();
+ },
+
+ updateView : function(w, h) {
+ if (w > pwidth || h > pheight) {
+ if (w / pwidth > h / pheight) {
+ prop = pwidth / w;
+ img.width(pwidth).height(round(h*prop));
+ } else {
+ prop = pheight / h;
+ img.height(pheight).width(round(w*prop));
+ }
+ } else {
+ img.width(round(w)).height(round(h));
+ }
+
+ prop = img.width()/w;
+ uiprop.text('1 : '+(1/prop).toFixed(2));
+ resize.updateHandle();
+ },
+
+ updateHandle : function() {
+ rhandle.width(img.width()).height(img.height());
+ },
+ fixHeight : function() {
+ var w, h;
+ if (cratio) {
+ w = width.val();
+ h = round(w/ratio);
+ resize.updateView(w, h);
+ height.val(h);
+ }
+ }
+ },
+ crop = {
+ update : function(change) {
+ pointX.val(round(((rhandlec.data('x')||rhandlec.position().left))/prop, owidth));
+ pointY.val(round(((rhandlec.data('y')||rhandlec.position().top))/prop, oheight));
+ if (change !== 'xy') {
+ offsetX.val(round((rhandlec.data('w')||rhandlec.width())/prop, owidth - pointX.val()));
+ offsetY.val(round((rhandlec.data('h')||rhandlec.height())/prop, oheight - pointY.val()));
+ }
+ jpgCalc();
+ },
+ updateView : function(change) {
+ var r, x, y, w, h;
+
+ pointX.val(round(pointX.val(), owidth - (grid8? 8 : 1)));
+ pointY.val(round(pointY.val(), oheight - (grid8? 8 : 1)));
+ offsetX.val(round(offsetX.val(), owidth - pointX.val()));
+ offsetY.val(round(offsetY.val(), oheight - pointY.val()));
+
+ if (cratioc) {
+ r = coverc.width() / coverc.height();
+ if (change === 'w') {
+ offsetY.val(round(parseInt(offsetX.val()) / r));
+ } else if (change === 'h') {
+ offsetX.val(round(parseInt(offsetY.val()) * r));
+ }
+ }
+ x = Math.round(parseInt(pointX.val()) * prop);
+ y = Math.round(parseInt(pointY.val()) * prop);
+ if (change !== 'xy') {
+ w = Math.round(parseInt(offsetX.val()) * prop);
+ h = Math.round(parseInt(offsetY.val()) * prop);
+ } else {
+ w = rhandlec.data('w');
+ h = rhandlec.data('h');
+ }
+ rhandlec.data({x: x, y: y, w: w, h: h})
+ .width(w)
+ .height(h)
+ .css({left: x, top: y});
+ coverc.width(w)
+ .height(h);
+ },
+ resize_update : function(e, ui) {
+ rhandlec.data({x: ui.position.left, y: ui.position.top, w: ui.size.width, h: ui.size.height});
+ crop.update();
+ crop.updateView();
+ },
+ drag_update : function(e, ui) {
+ rhandlec.data({x: ui.position.left, y: ui.position.top});
+ crop.update('xy');
+ }
+ },
+ rotate = {
+ mouseStartAngle : 0,
+ imageStartAngle : 0,
+ imageBeingRotated : false,
+
+ setQuality : function() {
+ uirotate.children('div.elfinder-resize-quality')[(losslessRotate > 0 && (degree.val() % 90) === 0)? 'hide' : 'show']();
+ },
+
+ update : function(value, animate) {
+ if (typeof value == 'undefined') {
+ rdegree = value = parseInt(degree.val());
+ }
+ if (typeof animate == 'undefined') {
+ animate = true;
+ }
+ if (! animate || fm.UA.Opera || fm.UA.ltIE8) {
+ imgr.rotate(value);
+ } else {
+ imgr.animate({rotate: value + 'deg'});
+ }
+ value = value % 360;
+ if (value < 0) {
+ value += 360;
+ }
+ degree.val(parseInt(value));
+
+ uidegslider.slider('value', degree.val());
+
+ rotate.setQuality();
+ },
+
+ execute : function ( e ) {
+
+ if ( !rotate.imageBeingRotated ) return;
+
+ var imageCentre = rotate.getCenter( imgr );
+ var ev = e.originalEvent.touches? e.originalEvent.touches[0] : e;
+ var mouseXFromCentre = ev.pageX - imageCentre[0];
+ var mouseYFromCentre = ev.pageY - imageCentre[1];
+ var mouseAngle = Math.atan2( mouseYFromCentre, mouseXFromCentre );
+
+ var rotateAngle = mouseAngle - rotate.mouseStartAngle + rotate.imageStartAngle;
+ rotateAngle = Math.round(parseFloat(rotateAngle) * 180 / Math.PI);
+
+ if ( e.shiftKey ) {
+ rotateAngle = Math.round((rotateAngle + 6)/15) * 15;
+ }
+
+ imgr.rotate(rotateAngle);
+
+ rotateAngle = rotateAngle % 360;
+ if (rotateAngle < 0) {
+ rotateAngle += 360;
+ }
+ degree.val(rotateAngle);
+
+ uidegslider.slider('value', degree.val());
+
+ rotate.setQuality();
+
+ return false;
+ },
+
+ start : function ( e ) {
+ if (imgr.hasClass('elfinder-resize-picking')) {
+ return;
+ }
+
+ opStart();
+ rotate.imageBeingRotated = true;
+
+ var imageCentre = rotate.getCenter( imgr );
+ var ev = e.originalEvent.touches? e.originalEvent.touches[0] : e;
+ var mouseStartXFromCentre = ev.pageX - imageCentre[0];
+ var mouseStartYFromCentre = ev.pageY - imageCentre[1];
+ rotate.mouseStartAngle = Math.atan2( mouseStartYFromCentre, mouseStartXFromCentre );
+
+ rotate.imageStartAngle = parseFloat(imgr.rotate()) * Math.PI / 180.0;
+
+ $(document).on('mousemove', rotate.execute);
+ imgr.on('touchmove', rotate.execute);
+
+ return false;
+ },
+
+ stop : function ( e ) {
+
+ if ( !rotate.imageBeingRotated ) return;
+
+ $(document).off('mousemove', rotate.execute);
+ imgr.off('touchmove', rotate.execute);
+
+ requestAnimationFrame(function() { rotate.imageBeingRotated = false; });
+ opStop();
+
+ return false;
+ },
+
+ getCenter : function ( image ) {
+
+ var currentRotation = imgr.rotate();
+ imgr.rotate(0);
+
+ var imageOffset = imgr.offset();
+ var imageCentreX = imageOffset.left + imgr.width() / 2;
+ var imageCentreY = imageOffset.top + imgr.height() / 2;
+
+ imgr.rotate(currentRotation);
+
+ return Array( imageCentreX, imageCentreY );
+ }
+ },
+ resizable = function(destroy) {
+ if (destroy) {
+ rhandle.filter(':ui-resizable').resizable('destroy');
+ rhandle.hide();
+ }
+ else {
+ rhandle.show();
+ rhandle.resizable({
+ alsoResize : img,
+ aspectRatio : cratio,
+ resize : resize.update,
+ start : opStart,
+ stop : function(e) {
+ resize.fixHeight;
+ resize.updateView(width.val(), height.val());
+ opStop();
+ }
+ });
+ dinit();
+ }
+ },
+ croppable = function(destroy) {
+ if (destroy) {
+ rhandlec.filter(':ui-resizable').resizable('destroy')
+ .filter(':ui-draggable').draggable('destroy');
+ basec.hide();
+ }
+ else {
+ basec.show();
+
+ rhandlec
+ .resizable({
+ containment : basec,
+ aspectRatio : cratioc,
+ resize : crop.resize_update,
+ start : opStart,
+ stop : opStop,
+ handles : 'all'
+ })
+ .draggable({
+ handle : coverc,
+ containment : imgc,
+ drag : crop.drag_update,
+ start : opStart,
+ stop : function() {
+ crop.updateView('xy');
+ opStop();
+ }
+ });
+
+ dinit();
+ crop.update();
+ }
+ },
+ rotateable = function(destroy) {
+ if (destroy) {
+ imgr.hide();
+ }
+ else {
+ imgr.show();
+ dinit();
+ }
+ },
+ checkVals = function() {
+ var w, h, x, y, d, q, b = '';
+
+ if (mode == 'resize') {
+ w = parseInt(width.val()) || 0;
+ h = parseInt(height.val()) || 0;
+ } else if (mode == 'crop') {
+ w = parseInt(offsetX.val()) || 0;
+ h = parseInt(offsetY.val()) || 0;
+ x = parseInt(pointX.val()) || 0;
+ y = parseInt(pointY.val()) || 0;
+ } else if (mode == 'rotate') {
+ w = owidth;
+ h = oheight;
+ d = parseInt(degree.val()) || 0;
+ if (d < 0 || d > 360) {
+ fm.error('Invalid rotate degree');
+ return false;
+ }
+ if (d == 0 || d == 360) {
+ fm.error('errResizeNoChange');
+ return false;
+ }
+ b = bg.val();
+ }
+ q = quality? parseInt(quality.val()) : 0;
+
+ if (mode != 'rotate') {
+ if (w <= 0 || h <= 0) {
+ fm.error('Invalid image size');
+ return false;
+ }
+ if (w == owidth && h == oheight) {
+ fm.error('errResizeNoChange');
+ return false;
+ }
+ }
+
+ return {w: w, h: h, x: x, y: y, d: d, q: q, b: b};
+ },
+ save = function() {
+ var vals;
+
+ if (vals = checkVals()) {
+ dialog.elfinderdialog('close');
+ self.resizeRequest({
+ target : file.hash,
+ width : vals.w,
+ height : vals.h,
+ x : vals.x,
+ y : vals.y,
+ degree : vals.d,
+ quality: vals.q,
+ bg : vals.b,
+ mode : mode
+ }, file, dfrd);
+ }
+ },
+ saveAs = function() {
+ var fail = function() {
+ dialogs.addClass(clsediting).fadeIn(function() {
+ base.addClass(clactive);
+ });
+ fm.disable();
+ },
+ make = function() {
+ self.mime = file.mime;
+ self.prefix = file.name.replace(/ \d+(\.[^.]+)?$/, '$1');
+ self.requestCmd = 'mkfile';
+ self.nextAction = {};
+ self.data = {target : file.phash};
+ $.proxy(fm.res('mixin', 'make'), self)()
+ .done(function(data) {
+ var hash, dfd;
+ if (data.added && data.added.length) {
+ hash = data.added[0].hash;
+ dfd = fm.api < 2.1032? fm.url(file.hash, { async: true, temporary: true }) : null;
+ $.when(dfd).done(function(url) {
+ fm.request({
+ options : {type : 'post'},
+ data : {
+ cmd : 'put',
+ target : hash,
+ encoding: dfd? 'scheme' : 'hash',
+ content : dfd? fm.convAbsUrl(url) : file.hash
+ },
+ notify : {type : 'copy', cnt : 1},
+ syncOnFail : true
+ })
+ .fail(fail)
+ .done(function(data) {
+ data = fm.normalize(data);
+ fm.updateCache(data);
+ file = fm.file(hash);
+ data.changed && data.changed.length && fm.change(data);
+ base.show().find('.elfinder-dialog-title').html(fm.escape(file.name));
+ save();
+ dialogs.fadeIn();
+ });
+ }).fail(fail);
+ } else {
+ fail();
+ }
+ })
+ .fail(fail)
+ .always(function() {
+ delete self.mime;
+ delete self.prefix;
+ delete self.nextAction;
+ delete self.data;
+ });
+ fm.trigger('unselectfiles', { files: [ file.hash ] });
+ },
+ reqOpen = null,
+ dialogs;
+
+ if (checkVals()) {
+ dialogs = fmnode.children('.' + self.dialogClass + ':visible').removeClass(clsediting).fadeOut();
+ base.removeClass(clactive);
+ fm.enable();
+ if (fm.searchStatus.state < 2 && file.phash !== fm.cwd().hash) {
+ reqOpen = fm.exec('open', [file.phash], {thash: file.phash});
+ }
+
+ $.when([reqOpen]).done(function() {
+ reqOpen? fm.one('cwdrender', make) : make();
+ }).fail(fail);
+ }
+ },
+ buttons = {},
+ hline = 'elfinder-resize-handle-hline',
+ vline = 'elfinder-resize-handle-vline',
+ rpoint = 'elfinder-resize-handle-point',
+ src = fm.openUrl(file.hash),
+ canvSrc = fm.openUrl(file.hash, !fm.isSameOrigin(src)),
+ sizeImg = quality? $('<img>').attr('crossorigin', fm.isCORS? 'use-credentials' : '').attr('src', canvSrc).on('load', function() {
+ try {
+ var canv = document.createElement('canvas');
+ sizeImg.data('canvas', canv).data('ctx', canv.getContext('2d'));
+ jpgCalc();
+ } catch(e) {
+ sizeImg.removeData('canvas').removeData('ctx');
+ }
+ }) : null,
+ jpgCalc = function() {
+ control.find('input.elfinder-resize-quality:visible').trigger('change');
+ },
+ dinit = function(e) {
+ if (base.hasClass('elfinder-dialog-minimized') || base.is(':hidden')) {
+ return;
+ }
+
+ preset.hide();
+ presetc.hide();
+
+ var win = fm.options.dialogContained? fmnode : $(window),
+ winH = win.height(),
+ winW = win.width(),
+ presW = 'auto',
+ presIn = true,
+ dw, ctrW, prvW;
+
+ base.width(Math.min(dialogWidth, winW - 30));
+ preview.attr('style', '');
+ if (owidth && oheight) {
+ pwidth = preview.width() - (rhandle.outerWidth() - rhandle.width());
+ pheight = preview.height() - (rhandle.outerHeight() - rhandle.height());
+ resize.updateView(owidth, oheight);
+ }
+ ctrW = dialog.find('div.elfinder-resize-control').width();
+ prvW = preview.width();
+
+ dw = dialog.width() - 20;
+ if (prvW > dw) {
+ preview.width(dw);
+ presIn = false;
+ } else if ((dw - prvW) < ctrW) {
+ if (winW > winH) {
+ preview.width(dw - ctrW - 20);
+ } else {
+ preview.css({ float: 'none', marginLeft: 'auto', marginRight: 'auto'});
+ presIn = false;
+ }
+ }
+ if (presIn) {
+ presW = ctrW;
+ }
+ pwidth = preview.width() - (rhandle.outerWidth() - rhandle.width());
+ if (fmnode.hasClass('elfinder-fullscreen')) {
+ if (base.height() > winH) {
+ winH -= 2;
+ preview.height(winH - base.height() + preview.height());
+ base.css('top', 0 - fmnode.offset().top);
+ }
+ } else {
+ winH -= 30;
+ (preview.height() > winH) && preview.height(winH);
+ }
+ pheight = preview.height() - (rhandle.outerHeight() - rhandle.height());
+ if (owidth && oheight) {
+ setupimg();
+ }
+ if (img.height() && preview.height() > img.height() + 20) {
+ preview.height(img.height() + 20);
+ pheight = preview.height() - (rhandle.outerHeight() - rhandle.height());
+ setuprimg();
+ }
+
+ preset.css('width', presW).show();
+ presetc.css('width', presW).show();
+ if (!presetc.children('span.elfinder-resize-preset:visible').length) {
+ presetc.hide();
+ }
+ },
+ preset = (function() {
+ var sets = $('<fieldset class="elfinder-resize-preset-container">').append($('<legend>').html(fm.i18n('presets'))).hide(),
+ hasC;
+ $.each(presetSize, function(i, s) {
+ if (s.length === 2) {
+ hasC = true;
+ sets.append($('<span class="elfinder-resize-preset"/>')
+ .data('s', s)
+ .text(s[0]+'x'+s[1])
+ .button()
+ );
+ }
+ });
+ if (!hasC) {
+ return $();
+ } else {
+ return sets;
+ }
+ })(),
+ presetc = preset.clone(true),
+ useSaveAs = fm.uploadMimeCheck(file.mime, file.phash),
+ dMinBtn, base;
+
+ uiresize.append(
+ $(row).append($(label).text(fm.i18n('width')), width),
+ $(row).append($(label).text(fm.i18n('height')), height, $('<div class="elfinder-resize-whctrls">').append(constr, reset)),
+ (quality? $(row).append($(label).text(fm.i18n('quality')), quality, $('<span/>')) : $()),
+ (isJpeg? $(row).append($(label).text(fm.i18n('8pxgrid')).addClass('elfinder-resize-grid8'), grid8px) : $()),
+ $(row).append($(label).text(fm.i18n('scale')), uiprop),
+ $(row).append(preset)
+ );
+
+ if (api2) {
+ uicrop.append(
+ $(row).append($(label).text('X'), pointX),
+ $(row).append($(label).text('Y')).append(pointY),
+ $(row).append($(label).text(fm.i18n('width')), offsetX),
+ $(row).append($(label).text(fm.i18n('height')), offsetY, $('<div class="elfinder-resize-whctrls">').append(constrc, reset.clone(true))),
+ (quality? $(row).append($(label).text(fm.i18n('quality')), quality.clone(true), $('<span/>')) : $()),
+ (isJpeg? $(row).append($(label).text(fm.i18n('8pxgrid')).addClass('elfinder-resize-grid8')) : $()),
+ $(row).append(presetc)
+ );
+
+ uirotate.append(
+ $(row).addClass('elfinder-resize-degree').append(
+ $(label).text(fm.i18n('rotate')),
+ degree,
+ $('<span/>').text(fm.i18n('degree')),
+ $('<div/>').append(uideg270, uideg90)[ctrgrup]()
+ ),
+ $(row).css('height', '20px').append(uidegslider),
+ ((quality)? $(row)[losslessRotate < 1? 'show' : 'hide']().addClass('elfinder-resize-quality').append(
+ $(label).text(fm.i18n('quality')),
+ quality.clone(true),
+ $('<span/>')) : $()
+ ),
+ $(row).append($(label).text(fm.i18n('bgcolor')), bg, picker, reseter),
+ $(row).css('height', '20px').append(pallet)
+ );
+ uideg270.on('click', function() {
+ rdegree = rdegree - 90;
+ rotate.update(rdegree);
+ });
+ uideg90.on('click', function(){
+ rdegree = rdegree + 90;
+ rotate.update(rdegree);
+ });
+ }
+
+ dialog.append(uitype).on('resize', function(e){
+ e.stopPropagation();
+ });
+
+ if (api2) {
+ control.append(/*$(row), */uiresize, uicrop.hide(), uirotate.hide());
+ } else {
+ control.append(/*$(row), */uiresize);
+ }
+
+ rhandle.append('<div class="'+hline+' '+hline+'-top"/>',
+ '<div class="'+hline+' '+hline+'-bottom"/>',
+ '<div class="'+vline+' '+vline+'-left"/>',
+ '<div class="'+vline+' '+vline+'-right"/>',
+ '<div class="'+rpoint+' '+rpoint+'-e"/>',
+ '<div class="'+rpoint+' '+rpoint+'-se"/>',
+ '<div class="'+rpoint+' '+rpoint+'-s"/>');
+
+ preview.append(spinner).append(rhandle.hide()).append(img.hide());
+
+ if (api2) {
+ rhandlec.css('position', 'absolute')
+ .append('<div class="'+hline+' '+hline+'-top"/>',
+ '<div class="'+hline+' '+hline+'-bottom"/>',
+ '<div class="'+vline+' '+vline+'-left"/>',
+ '<div class="'+vline+' '+vline+'-right"/>',
+ '<div class="'+rpoint+' '+rpoint+'-n"/>',
+ '<div class="'+rpoint+' '+rpoint+'-e"/>',
+ '<div class="'+rpoint+' '+rpoint+'-s"/>',
+ '<div class="'+rpoint+' '+rpoint+'-w"/>',
+ '<div class="'+rpoint+' '+rpoint+'-ne"/>',
+ '<div class="'+rpoint+' '+rpoint+'-se"/>',
+ '<div class="'+rpoint+' '+rpoint+'-sw"/>',
+ '<div class="'+rpoint+' '+rpoint+'-nw"/>');
+
+ preview.append(basec.css('position', 'absolute').hide().append(imgc, rhandlec.append(coverc)));
+
+ preview.append(imgr.hide());
+ }
+
+ preview.css('overflow', 'hidden');
+
+ dialog.append(preview, control);
+
+ buttons[fm.i18n('btnApply')] = save;
+ if (useSaveAs) {
+ buttons[fm.i18n('btnSaveAs')] = function() { requestAnimationFrame(saveAs); };
+ }
+ buttons[fm.i18n('btnCancel')] = function() { dialog.elfinderdialog('close'); };
+
+ dialog.find('input,button').addClass('elfinder-tabstop');
+
+ base = self.fmDialog(dialog, {
+ title : fm.escape(file.name),
+ width : dialogWidth,
+ resizable : false,
+ buttons : buttons,
+ open : function() {
+ var substituteImg = (fm.option('substituteImg', file.hash) && file.size > options.dimSubImgSize)? true : false,
+ hasSize = (file.width && file.height)? true : false;
+ dialog.parent().css('overflow', 'hidden');
+ dMinBtn = base.find('.ui-dialog-titlebar .elfinder-titlebar-minimize').hide();
+ fm.bind('resize', dinit);
+ img.attr('src', src);
+ imgc.attr('src', src);
+ imgr.attr('src', src);
+ if (api2) {
+ imgr.on('mousedown touchstart', rotate.start)
+ .on('touchend', rotate.stop);
+ base.on('mouseup', rotate.stop);
+ }
+ if (hasSize && !substituteImg) {
+ return init();
+ }
+ if (file.size > (options.getDimThreshold || 0)) {
+ dimreq = fm.request({
+ data : {cmd : 'dim', target : file.hash, substitute : (substituteImg? 400 : '')},
+ preventDefault : true
+ })
+ .done(function(data) {
+ if (data.dim) {
+ var dim = data.dim.split('x');
+ file.width = dim[0];
+ file.height = dim[1];
+ setdim(dim);
+ if (data.url) {
+ img.attr('src', data.url);
+ imgc.attr('src', data.url);
+ imgr.attr('src', data.url);
+ }
+ return init();
+ }
+ });
+ } else if (hasSize) {
+ return init();
+ }
+ },
+ close : function() {
+ if (api2) {
+ imgr.off('mousedown touchstart', rotate.start)
+ .off('touchend', rotate.stop);
+ $(document).off('mouseup', rotate.stop);
+ }
+ fm.unbind('resize', dinit);
+ $(this).elfinderdialog('destroy');
+ },
+ resize : function(e, data) {
+ if (data && data.minimize === 'off') {
+ dinit();
+ }
+ }
+ }).attr('id', id).closest('.ui-dialog').addClass(clsediting);
+
+ // for IE < 9 dialog mising at open second+ time.
+ if (fm.UA.ltIE8) {
+ $('.elfinder-dialog').css('filter', '');
+ }
+
+ coverc.css({ 'opacity': 0.2, 'background-color': '#fff', 'position': 'absolute'}),
+ rhandlec.css('cursor', 'move');
+ rhandlec.find('.elfinder-resize-handle-point').css({
+ 'background-color' : '#fff',
+ 'opacity': 0.5,
+ 'border-color':'#000'
+ });
+
+ if (! api2) {
+ uitype.find('.api2').remove();
+ }
+
+ control.find('input,select').prop('disabled', true);
+ control.find('input.elfinder-resize-quality')
+ .next('span').addClass('elfinder-resize-jpgsize').attr('title', fm.i18n('roughFileSize'));
+
+ },
+
+ id, dialog
+ ;
+
+
+ if (!files.length || files[0].mime.indexOf('image/') === -1) {
+ return dfrd.reject();
+ }
+
+ id = 'resize-'+fm.namespace+'-'+files[0].hash;
+ dialog = fmnode.find('#'+id);
+
+ if (dialog.length) {
+ dialog.elfinderdialog('toTop');
+ return dfrd.resolve();
+ }
+
+ open(files[0], id);
+
+ return dfrd;
+ };
+
+};
+
+(function ($) {
+
+ var findProperty = function (styleObject, styleArgs) {
+ var i = 0 ;
+ for( i in styleArgs) {
+ if (typeof styleObject[styleArgs[i]] != 'undefined')
+ return styleArgs[i];
+ }
+ styleObject[styleArgs[i]] = '';
+ return styleArgs[i];
+ };
+
+ $.cssHooks.rotate = {
+ get: function(elem, computed, extra) {
+ return $(elem).rotate();
+ },
+ set: function(elem, value) {
+ $(elem).rotate(value);
+ return value;
+ }
+ };
+ $.cssHooks.transform = {
+ get: function(elem, computed, extra) {
+ var name = findProperty( elem.style ,
+ ['WebkitTransform', 'MozTransform', 'OTransform' , 'msTransform' , 'transform'] );
+ return elem.style[name];
+ },
+ set: function(elem, value) {
+ var name = findProperty( elem.style ,
+ ['WebkitTransform', 'MozTransform', 'OTransform' , 'msTransform' , 'transform'] );
+ elem.style[name] = value;
+ return value;
+ }
+ };
+
+ $.fn.rotate = function(val) {
+ var r;
+ if (typeof val == 'undefined') {
+ if (!!window.opera) {
+ r = this.css('transform').match(/rotate\((.*?)\)/);
+ return ( r && r[1])?
+ Math.round(parseFloat(r[1]) * 180 / Math.PI) : 0;
+ } else {
+ r = this.css('transform').match(/rotate\((.*?)\)/);
+ return ( r && r[1])? parseInt(r[1]) : 0;
+ }
+ }
+ this.css('transform',
+ this.css('transform').replace(/none|rotate\(.*?\)/, '') + 'rotate(' + parseInt(val) + 'deg)');
+ return this;
+ };
+
+ $.fx.step.rotate = function(fx) {
+ if ( fx.state == 0 ) {
+ fx.start = $(fx.elem).rotate();
+ fx.now = fx.start;
+ }
+ $(fx.elem).rotate(fx.now);
+ };
+
+ if (typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined") { // IE & IE<9
+ var GetAbsoluteXY = function(element) {
+ var pnode = element;
+ var x = pnode.offsetLeft;
+ var y = pnode.offsetTop;
+
+ while ( pnode.offsetParent ) {
+ pnode = pnode.offsetParent;
+ if (pnode != document.body && pnode.currentStyle['position'] != 'static') {
+ break;
+ }
+ if (pnode != document.body && pnode != document.documentElement) {
+ x -= pnode.scrollLeft;
+ y -= pnode.scrollTop;
+ }
+ x += pnode.offsetLeft;
+ y += pnode.offsetTop;
+ }
+
+ return { x: x, y: y };
+ };
+
+ var StaticToAbsolute = function (element) {
+ if ( element.currentStyle['position'] != 'static') {
+ return ;
+ }
+
+ var xy = GetAbsoluteXY(element);
+ element.style.position = 'absolute' ;
+ element.style.left = xy.x + 'px';
+ element.style.top = xy.y + 'px';
+ };
+
+ var IETransform = function(element,transform){
+
+ var r;
+ var m11 = 1;
+ var m12 = 1;
+ var m21 = 1;
+ var m22 = 1;
+
+ if (typeof element.style['msTransform'] != 'undefined'){
+ return true;
+ }
+
+ StaticToAbsolute(element);
+
+ r = transform.match(/rotate\((.*?)\)/);
+ var rotate = ( r && r[1]) ? parseInt(r[1]) : 0;
+
+ rotate = rotate % 360;
+ if (rotate < 0) rotate = 360 + rotate;
+
+ var radian= rotate * Math.PI / 180;
+ var cosX =Math.cos(radian);
+ var sinY =Math.sin(radian);
+
+ m11 *= cosX;
+ m12 *= -sinY;
+ m21 *= sinY;
+ m22 *= cosX;
+
+ element.style.filter = (element.style.filter || '').replace(/progid:DXImageTransform\.Microsoft\.Matrix\([^)]*\)/, "" ) +
+ ("progid:DXImageTransform.Microsoft.Matrix(" +
+ "M11=" + m11 +
+ ",M12=" + m12 +
+ ",M21=" + m21 +
+ ",M22=" + m22 +
+ ",FilterType='bilinear',sizingMethod='auto expand')")
+ ;
+
+ var ow = parseInt(element.style.width || element.width || 0 );
+ var oh = parseInt(element.style.height || element.height || 0 );
+
+ radian = rotate * Math.PI / 180;
+ var absCosX =Math.abs(Math.cos(radian));
+ var absSinY =Math.abs(Math.sin(radian));
+
+ var dx = (ow - (ow * absCosX + oh * absSinY)) / 2;
+ var dy = (oh - (ow * absSinY + oh * absCosX)) / 2;
+
+ element.style.marginLeft = Math.floor(dx) + "px";
+ element.style.marginTop = Math.floor(dy) + "px";
+
+ return(true);
+ };
+
+ var transform_set = $.cssHooks.transform.set;
+ $.cssHooks.transform.set = function(elem, value) {
+ transform_set.apply(this, [elem, value] );
+ IETransform(elem,value);
+ return value;
+ };
+ }
+
+})(jQuery);
+
+
+/*
+ * File: /js/commands/restore.js
+ */
+
+/**
+ * @class elFinder command "restore"
+ * Restore items from the trash
+ *
+ * @author Naoki Sawada
+ **/
+(elFinder.prototype.commands.restore = function() {
+ "use strict";
+ var self = this,
+ fm = this.fm,
+ fakeCnt = 0,
+ getFilesRecursively = function(files) {
+ var dfd = $.Deferred(),
+ dirs = [],
+ results = [],
+ reqs = [],
+ phashes = [],
+ getFile;
+
+ dfd._xhrReject = function() {
+ $.each(reqs, function() {
+ this && this.reject && this.reject();
+ });
+ getFile && getFile._xhrReject();
+ };
+
+ $.each(files, function(i, f) {
+ f.mime === 'directory'? dirs.push(f) : results.push(f);
+ });
+
+ if (dirs.length) {
+ $.each(dirs, function(i, d) {
+ reqs.push(fm.request({
+ data : {cmd : 'open', target : d.hash},
+ preventDefault : true,
+ asNotOpen : true
+ }));
+ phashes[i] = d.hash;
+ });
+ $.when.apply($, reqs).fail(function() {
+ dfd.reject();
+ }).done(function() {
+ var items = [];
+ $.each(arguments, function(i, r) {
+ var files;
+ if (r.files) {
+ if (r.files.length) {
+ items = items.concat(r.files);
+ } else {
+ items.push({
+ hash: 'fakefile_' + (fakeCnt++),
+ phash: phashes[i],
+ mime: 'fakefile',
+ name: 'fakefile',
+ ts: 0
+ });
+ }
+ }
+ });
+ fm.cache(items);
+ getFile = getFilesRecursively(items).done(function(res) {
+ results = results.concat(res);
+ dfd.resolve(results);
+ });
+ });
+ } else {
+ dfd.resolve(results);
+ }
+
+ return dfd;
+ },
+ restore = function(dfrd, files, targets, ops) {
+ var rHashes = {},
+ others = [],
+ found = false,
+ dirs = [],
+ opts = ops || {},
+ id = +new Date(),
+ tm, getFile;
+
+ fm.lockfiles({files : targets});
+
+ dirs = $.map(files, function(f) {
+ return f.mime === 'directory'? f.hash : null;
+ });
+
+ dfrd.done(function() {
+ dirs && fm.exec('rm', dirs, {forceRm : true, quiet : true});
+ }).always(function() {
+ fm.unlockfiles({files : targets});
+ });
+
+ tm = setTimeout(function() {
+ fm.notify({type : 'search', id : id, cnt : 1, hideCnt : true, cancel : function() {
+ getFile && getFile._xhrReject();
+ dfrd.reject();
+ }});
+ }, fm.notifyDelay);
+
+ fakeCnt = 0;
+ getFile = getFilesRecursively(files).always(function() {
+ tm && clearTimeout(tm);
+ fm.notify({type : 'search', id: id, cnt : -1, hideCnt : true});
+ }).fail(function() {
+ dfrd.reject('errRestore', 'errFileNotFound');
+ }).done(function(res) {
+ var errFolderNotfound = ['errRestore', 'errFolderNotFound'],
+ dirTop = '';
+
+ if (res.length) {
+ $.each(res, function(i, f) {
+ var phash = f.phash,
+ pfile,
+ srcRoot, tPath;
+ while(phash) {
+ if (srcRoot = fm.trashes[phash]) {
+ if (! rHashes[srcRoot]) {
+ if (found) {
+ // Keep items of other trash
+ others.push(f.hash);
+ return null; // continue $.each
+ }
+ rHashes[srcRoot] = {};
+ found = true;
+ }
+
+ tPath = fm.path(f.hash).substr(fm.path(phash).length).replace(/\\/g, '/');
+ tPath = tPath.replace(/\/[^\/]+?$/, '');
+ if (tPath === '') {
+ tPath = '/';
+ }
+ if (!rHashes[srcRoot][tPath]) {
+ rHashes[srcRoot][tPath] = [];
+ }
+ if (f.mime === 'fakefile') {
+ fm.updateCache({removed:[f.hash]});
+ } else {
+ rHashes[srcRoot][tPath].push(f.hash);
+ }
+ if (!dirTop || dirTop.length > tPath.length) {
+ dirTop = tPath;
+ }
+ break;
+ }
+
+ // Go up one level for next check
+ pfile = fm.file(phash);
+
+ if (!pfile) {
+ phash = false;
+ // Detection method for search results
+ $.each(fm.trashes, function(ph) {
+ var file = fm.file(ph),
+ filePath = fm.path(ph);
+ if ((!file.volumeid || f.hash.indexOf(file.volumeid) === 0) && fm.path(f.hash).indexOf(filePath) === 0) {
+ phash = ph;
+ return false;
+ }
+ });
+ } else {
+ phash = pfile.phash;
+ }
+ }
+ });
+ if (found) {
+ $.each(rHashes, function(src, dsts) {
+ var dirs = Object.keys(dsts),
+ cnt = dirs.length;
+ fm.request({
+ data : {cmd : 'mkdir', target : src, dirs : dirs},
+ notify : {type : 'chkdir', cnt : cnt},
+ preventFail : true
+ }).fail(function(error) {
+ dfrd.reject(error);
+ fm.unlockfiles({files : targets});
+ }).done(function(data) {
+ var cmdPaste, hashes;
+
+ if (hashes = data.hashes) {
+ cmdPaste = fm.getCommand('paste');
+ if (cmdPaste) {
+ // wait until file cache made
+ fm.one('mkdirdone', function() {
+ var hasErr = false;
+ $.each(dsts, function(dir, files) {
+ if (hashes[dir]) {
+ if (files.length) {
+ if (fm.file(hashes[dir])) {
+ fm.clipboard(files, true);
+ fm.exec('paste', [ hashes[dir] ], {_cmd : 'restore', noToast : (opts.noToast || dir !== dirTop)})
+ .done(function(data) {
+ if (data && (data.error || data.warning)) {
+ hasErr = true;
+ }
+ })
+ .fail(function() {
+ hasErr = true;
+ })
+ .always(function() {
+ if (--cnt < 1) {
+ dfrd[hasErr? 'reject' : 'resolve']();
+ if (others.length) {
+ // Restore items of other trash
+ fm.exec('restore', others);
+ }
+ }
+ });
+ } else {
+ dfrd.reject(errFolderNotfound);
+ }
+ } else {
+ if (--cnt < 1) {
+ dfrd.resolve();
+ if (others.length) {
+ // Restore items of other trash
+ fm.exec('restore', others);
+ }
+ }
+ }
+ }
+ });
+ });
+ } else {
+ dfrd.reject(['errRestore', 'errCmdNoSupport', '(paste)']);
+ }
+ } else {
+ dfrd.reject(errFolderNotfound);
+ }
+ });
+ });
+ } else {
+ dfrd.reject(errFolderNotfound);
+ }
+ } else {
+ dfrd.reject('errFileNotFound');
+ dirs && fm.exec('rm', dirs, {forceRm : true, quiet : true});
+ }
+ });
+ };
+
+ // for to be able to overwrite
+ this.restore = restore;
+
+ this.linkedCmds = ['copy', 'paste', 'mkdir', 'rm'];
+ this.updateOnSelect = false;
+
+ this.init = function() {
+ // re-assign for extended command
+ self = this;
+ fm = this.fm;
+ };
+
+ this.getstate = function(sel, e) {
+ sel = sel || fm.selected();
+ return sel.length && $.grep(sel, function(h) {var f = fm.file(h); return f && ! f.locked && ! fm.isRoot(f)? true : false; }).length == sel.length
+ ? 0 : -1;
+ };
+
+ this.exec = function(hashes, opts) {
+ var dfrd = $.Deferred()
+ .fail(function(error) {
+ error && fm.error(error);
+ }),
+ files = self.files(hashes);
+
+ if (! files.length) {
+ return dfrd.reject();
+ }
+
+ $.each(files, function(i, file) {
+ if (fm.isRoot(file)) {
+ return !dfrd.reject(['errRestore', file.name]);
+ }
+ if (file.locked) {
+ return !dfrd.reject(['errLocked', file.name]);
+ }
+ });
+
+ if (dfrd.state() === 'pending') {
+ this.restore(dfrd, files, hashes, opts);
+ }
+
+ return dfrd;
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/rm.js
+ */
+
+/**
+ * @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 = '<div class="ui-helper-clearfix elfinder-rm-title"><span class="elfinder-cwd-icon {class} ui-corner-all"/>{title}<div class="elfinder-rm-desc">{desc}</div></div>',
+ confirm = function(dfrd, targets, files, tHash, addTexts) {
+ var cnt = targets.length,
+ cwd = fm.cwd().hash,
+ descs = [],
+ spinner = fm.i18n('calc') + '<span class="elfinder-spinner"/>',
+ dialog, text, tmb, size, f, fname;
+
+ if (cnt > 1) {
+ size = 0;
+ $.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 = [$(tpl.replace('{class}', 'elfinder-cwd-icon-group').replace('{title}', '<strong>' + fm.i18n('items')+ ': ' + cnt + '</strong>').replace('{desc}', descs.join('<br>')))];
+ } 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 = [$(tpl.replace('{class}', fm.mime2class(f.mime)).replace('{title}', '<strong>' + fname + '</strong>').replace('{desc}', descs.join('<br>')))];
+ }
+
+ 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) {
+ $('<img/>')
+ .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($.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 = $.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
+ $.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;
+ $.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 = $.map(data.added, function(f) { return f.mime === 'directory'? f.hash : null; });
+ $.each(data.added, function(i, f) {
+ if ($.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);
+ $.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 = $.grep(targets, function(h) {
+ return $.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 (!$.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() {
+ // re-assign for extended command
+ self = this;
+ fm = this.fm;
+ // bind function of change
+ self.change(function() {
+ 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 (self.value === 'trash') {
+ self.extra = {
+ icon: 'rm',
+ node: $('<span/>')
+ .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});
+ })
+ };
+ }
+ });
+ };
+
+ this.getstate = function(select) {
+ var sel = this.hashes(select);
+
+ return sel.length && $.grep(sel, function(h) { var f = fm.file(h); return f && ! f.locked && ! fm.isRoot(f)? true : false; }).length == sel.length
+ ? 0 : -1;
+ };
+
+ this.exec = function(hashes, cOpts) {
+ var opts = cOpts || {},
+ dfrd = $.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();
+ }
+
+ $.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');
+ }
+ });
+
+};
+
+
+/*
+ * File: /js/commands/search.js
+ */
+
+/**
+ * @class elFinder command "search"
+ * Find files
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.search = function() {
+ "use strict";
+ this.title = 'Find files';
+ this.options = {ui : 'searchbutton'};
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ /**
+ * Return command status.
+ * Search does not support old api.
+ *
+ * @return Number
+ **/
+ this.getstate = function() {
+ return 0;
+ };
+
+ /**
+ * Send search request to backend.
+ *
+ * @param String search string
+ * @return $.Deferred
+ **/
+ this.exec = function(q, target, mime, type) {
+ var fm = this.fm,
+ reqDef = [],
+ sType = type || '',
+ onlyMimes = fm.options.onlyMimes,
+ phash, targetVolids = [],
+ setType = function(data) {
+ if (sType && sType !== 'SearchName' && sType !== 'SearchMime') {
+ data.type = sType;
+ }
+ return data;
+ };
+
+ if (typeof q == 'string' && q) {
+ if (typeof target == 'object') {
+ mime = target.mime || '';
+ target = target.target || '';
+ }
+ target = target? target : '';
+ if (mime) {
+ mime = $.trim(mime).replace(',', ' ').split(' ');
+ if (onlyMimes.length) {
+ mime = $.map(mime, function(m){
+ m = $.trim(m);
+ return m && ($.inArray(m, onlyMimes) !== -1
+ || $.grep(onlyMimes, function(om) { return m.indexOf(om) === 0? true : false; }).length
+ )? m : null;
+ });
+ }
+ } else {
+ mime = [].concat(onlyMimes);
+ }
+
+ fm.trigger('searchstart', setType({query : q, target : target, mimes : mime}));
+
+ if (! onlyMimes.length || mime.length) {
+ if (target === '' && fm.api >= 2.1) {
+ $.each(fm.roots, function(id, hash) {
+ reqDef.push(fm.request({
+ data : setType({cmd : 'search', q : q, target : hash, mimes : mime}),
+ notify : {type : 'search', cnt : 1, hideCnt : (reqDef.length? false : true)},
+ cancel : true,
+ preventDone : true
+ }));
+ });
+ } else {
+ reqDef.push(fm.request({
+ data : setType({cmd : 'search', q : q, target : target, mimes : mime}),
+ notify : {type : 'search', cnt : 1, hideCnt : true},
+ cancel : true,
+ preventDone : true
+ }));
+ if (target !== '' && fm.api >= 2.1 && Object.keys(fm.leafRoots).length) {
+ $.each(fm.leafRoots, function(hash, roots) {
+ phash = hash;
+ while(phash) {
+ if (target === phash) {
+ $.each(roots, function() {
+ var f = fm.file(this);
+ f && f.volumeid && targetVolids.push(f.volumeid);
+ reqDef.push(fm.request({
+ data : setType({cmd : 'search', q : q, target : this, mimes : mime}),
+ notify : {type : 'search', cnt : 1, hideCnt : false},
+ cancel : true,
+ preventDone : true
+ }));
+ });
+ }
+ phash = (fm.file(phash) || {}).phash;
+ }
+ });
+ }
+ }
+ } else {
+ reqDef = [$.Deferred().resolve({files: []})];
+ }
+
+ fm.searchStatus.mixed = (reqDef.length > 1)? targetVolids : false;
+
+ return $.when.apply($, reqDef).done(function(data) {
+ var argLen = arguments.length,
+ i;
+
+ data.warning && fm.error(data.warning);
+
+ if (argLen > 1) {
+ data.files = (data.files || []);
+ for(i = 1; i < argLen; i++) {
+ arguments[i].warning && fm.error(arguments[i].warning);
+
+ if (arguments[i].files) {
+ data.files.push.apply(data.files, arguments[i].files);
+ }
+ }
+ }
+
+ // because "preventDone : true" so update files cache
+ data.files && data.files.length && fm.cache(data.files);
+
+ fm.lazy(function() {
+ fm.trigger('search', data);
+ }).then(function() {
+ // fire event with command name + 'done'
+ return fm.lazy(function() {
+ fm.trigger('searchdone');
+ });
+ }).then(function() {
+ // force update content
+ data.sync && fm.sync();
+ });
+ });
+ }
+ fm.getUI('toolbar').find('.'+fm.res('class', 'searchbtn')+' :text').trigger('focus');
+ return $.Deferred().reject();
+ };
+
+};
+
+
+/*
+ * File: /js/commands/selectall.js
+ */
+
+/**
+ * @class elFinder command "selectall"
+ * Select ALL of cwd items
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.selectall = function() {
+ "use strict";
+ var self = this,
+ state = 0;
+
+ this.fm.bind('select', function(e) {
+ state = (e.data && e.data.selectall)? -1 : 0;
+ });
+
+ this.state = 0;
+ this.updateOnSelect = false;
+
+ this.getstate = function() {
+ return state;
+ };
+
+ this.exec = function() {
+ $(document).trigger($.Event('keydown', { keyCode: 65, ctrlKey : true, shiftKey : false, altKey : false, metaKey : false }));
+ return $.Deferred().resolve();
+ };
+};
+
+
+/*
+ * File: /js/commands/selectinvert.js
+ */
+
+/**
+ * @class elFinder command "selectinvert"
+ * Invert Selection of cwd items
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.selectinvert = function() {
+ "use strict";
+ this.updateOnSelect = false;
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.exec = function() {
+ $(document).trigger($.Event('keydown', { keyCode: 73, ctrlKey : true, shiftKey : true, altKey : false, metaKey : false }));
+ return $.Deferred().resolve();
+ };
+
+};
+
+
+/*
+ * File: /js/commands/selectnone.js
+ */
+
+/**
+ * @class elFinder command "selectnone"
+ * Unselect ALL of cwd items
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.selectnone = function() {
+ "use strict";
+ var self = this,
+ fm = this.fm,
+ state = -1;
+
+ fm.bind('select', function(e) {
+ state = (e.data && e.data.unselectall)? -1 : 0;
+ });
+
+ this.state = -1;
+ this.updateOnSelect = false;
+
+ this.getstate = function() {
+ return state;
+ };
+
+ this.exec = function() {
+ fm.getUI('cwd').trigger('unselectall');
+ return $.Deferred().resolve();
+ };
+};
+
+
+/*
+ * File: /js/commands/sort.js
+ */
+
+/**
+ * @class elFinder command "sort"
+ * Change sort files rule
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.sort = function() {
+ "use strict";
+ var self = this,
+ fm = self.fm,
+ setVar = function() {
+ self.variants = [];
+ $.each(fm.sortRules, function(name, value) {
+ if (fm.sorters[name]) {
+ var arr = (name === fm.sortType)? (fm.sortOrder === 'asc'? 'n' : 's') : '';
+ self.variants.push([name, (arr? '<span class="ui-icon ui-icon-arrowthick-1-'+arr+'"></span>' : '') + ' ' + fm.i18n('sort'+name)]);
+ }
+ });
+ self.variants.push('|');
+ self.variants.push([
+ 'stick',
+ (fm.sortStickFolders? '<span class="ui-icon ui-icon-check"/>' : '') + ' ' + fm.i18n('sortFoldersFirst')
+ ]);
+ if (fm.ui.tree && fm.options.sortAlsoTreeview !== null) {
+ self.variants.push('|');
+ self.variants.push([
+ 'tree',
+ (fm.sortAlsoTreeview? '<span class="ui-icon ui-icon-check"/>' : '') + ' ' + fm.i18n('sortAlsoTreeview')
+ ]);
+ }
+ updateContextmenu();
+ },
+ updateContextmenu = function() {
+ var cm = fm.getUI('contextmenu'),
+ icon, sub;
+ if (cm.is(':visible')) {
+ icon = cm.find('span.elfinder-button-icon-sort');
+ sub = icon.siblings('div.elfinder-contextmenu-sub');
+ sub.find('span.ui-icon').remove();
+ sub.children('div.elfinder-contextsubmenu-item').each(function() {
+ var tgt = $(this).children('span'),
+ name = tgt.text().trim(),
+ arr;
+ if (name === (i18Name.stick || (i18Name.stick = fm.i18n('sortFoldersFirst')))) {
+ if (fm.sortStickFolders) {
+ tgt.prepend('<span class="ui-icon ui-icon-check"/>');
+ }
+ } else if (name === (i18Name.tree || (i18Name.tree = fm.i18n('sortAlsoTreeview')))) {
+ if (fm.sortAlsoTreeview) {
+ tgt.prepend('<span class="ui-icon ui-icon-check"/>');
+ }
+ } else if (name === (i18Name[fm.sortType] || (i18Name[fm.sortType] = fm.i18n('sort' + fm.sortType)))) {
+ arr = fm.sortOrder === 'asc'? 'n' : 's';
+ tgt.prepend('<span class="ui-icon ui-icon-arrowthick-1-'+arr+'"></span>');
+ }
+ });
+ }
+ },
+ i18Name = {};
+
+ /**
+ * Command options
+ *
+ * @type Object
+ */
+ this.options = {ui : 'sortbutton'};
+
+ this.keepContextmenu = true;
+
+ fm.bind('sortchange', setVar)
+ .bind('sorterupdate', function() {
+ setVar();
+ fm.getUI('toolbar').find('.elfiner-button-sort .elfinder-button-menu .elfinder-button-menu-item').each(function() {
+ var tgt = $(this),
+ rel = tgt.attr('rel');
+ tgt.toggle(! rel || fm.sorters[rel]);
+ });
+ })
+ .bind('cwdrender', function() {
+ var cols = $(fm.cwd).find('div.elfinder-cwd-wrapper-list table');
+ if (cols.length) {
+ $.each(fm.sortRules, function(name, value) {
+ var td = cols.find('thead tr td.elfinder-cwd-view-th-'+name);
+ if (td.length) {
+ var current = ( name == fm.sortType),
+ sort = {
+ type : name,
+ order : current ? fm.sortOrder == 'asc' ? 'desc' : 'asc' : fm.sortOrder
+ },arr;
+ if (current) {
+ td.addClass('ui-state-active');
+ arr = fm.sortOrder == 'asc' ? 'n' : 's';
+ $('<span class="ui-icon ui-icon-triangle-1-'+arr+'"/>').appendTo(td);
+ }
+ $(td).on('click', function(e){
+ if (! $(this).data('dragging')) {
+ e.stopPropagation();
+ if (! fm.getUI('cwd').data('longtap')) {
+ fm.exec('sort', [], sort);
+ }
+ }
+ })
+ .on('mouseenter mouseleave', function(e) {
+ $(this).toggleClass('ui-state-hover', e.type === 'mouseenter');
+ });
+ }
+
+ });
+ }
+ });
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.exec = function(hashes, cOpt) {
+ var fm = this.fm,
+ sortopt = $.isPlainObject(cOpt)? cOpt : (function() {
+ cOpt += '';
+ var sOpts = {};
+ if (cOpt === 'stick') {
+ sOpts.stick = !fm.sortStickFolders;
+ } else if (cOpt === 'tree') {
+ sOpts.tree = !fm.sortAlsoTreeview;
+ } else if (fm.sorters[cOpt]) {
+ if (fm.sortType === cOpt) {
+ sOpts.order = fm.sortOrder === 'asc'? 'desc' : 'asc';
+ } else {
+ sOpts.type = cOpt;
+ }
+ }
+ return sOpts;
+ })(),
+ sort = Object.assign({
+ type : fm.sortType,
+ order : fm.sortOrder,
+ stick : fm.sortStickFolders,
+ tree : fm.sortAlsoTreeview
+ }, sortopt);
+
+ return fm.lazy(function() {
+ fm.setSort(sort.type, sort.order, sort.stick, sort.tree);
+ this.resolve();
+ });
+ };
+
+};
+
+
+/*
+ * File: /js/commands/undo.js
+ */
+
+/**
+ * @class elFinder command "undo"
+ * Undo previous commands
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.undo = function() {
+ "use strict";
+ var self = this,
+ fm = this.fm,
+ setTitle = function(undo) {
+ if (undo) {
+ self.title = fm.i18n('cmdundo') + ' ' + fm.i18n('cmd'+undo.cmd);
+ self.state = 0;
+ } else {
+ self.title = fm.i18n('cmdundo');
+ self.state = -1;
+ }
+ self.change();
+ },
+ cmds = [];
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+ this.shortcuts = [{
+ pattern : 'ctrl+z'
+ }];
+ this.syncTitleOnChange = true;
+
+ this.getstate = function() {
+ return cmds.length? 0 : -1;
+ };
+
+ this.setUndo = function(undo, redo) {
+ var _undo = {};
+ if (undo) {
+ if ($.isPlainObject(undo) && undo.cmd && undo.callback) {
+ Object.assign(_undo, undo);
+ if (redo) {
+ delete redo.undo;
+ _undo.redo = redo;
+ } else {
+ fm.getCommand('redo').setRedo(null);
+ }
+ cmds.push(_undo);
+ setTitle(_undo);
+ }
+ }
+ };
+
+ this.exec = function() {
+ var redo = fm.getCommand('redo'),
+ dfd = $.Deferred(),
+ undo, res, _redo = {};
+ if (cmds.length) {
+ undo = cmds.pop();
+ if (undo.redo) {
+ Object.assign(_redo, undo.redo);
+ delete undo.redo;
+ } else {
+ _redo = null;
+ }
+ dfd.done(function() {
+ if (_redo) {
+ redo.setRedo(_redo, undo);
+ }
+ });
+
+ setTitle(cmds.length? cmds[cmds.length-1] : void(0));
+
+ res = undo.callback();
+
+ if (res && res.done) {
+ res.done(function() {
+ dfd.resolve();
+ }).fail(function() {
+ dfd.reject();
+ });
+ } else {
+ dfd.resolve();
+ }
+ if (cmds.length) {
+ this.update(0, cmds[cmds.length - 1].name);
+ } else {
+ this.update(-1, '');
+ }
+ } else {
+ dfd.reject();
+ }
+ return dfd;
+ };
+
+ fm.bind('exec', function(e) {
+ var data = e.data || {};
+ if (data.opts && data.opts._userAction) {
+ if (data.dfrd && data.dfrd.done) {
+ data.dfrd.done(function(res) {
+ if (res && res.undo && res.redo) {
+ res.undo.redo = res.redo;
+ self.setUndo(res.undo);
+ }
+ });
+ }
+ }
+ });
+};
+
+/**
+ * @class elFinder command "redo"
+ * Redo previous commands
+ *
+ * @author Naoki Sawada
+ **/
+elFinder.prototype.commands.redo = function() {
+ "use strict";
+ var self = this,
+ fm = this.fm,
+ setTitle = function(redo) {
+ if (redo && redo.callback) {
+ self.title = fm.i18n('cmdredo') + ' ' + fm.i18n('cmd'+redo.cmd);
+ self.state = 0;
+ } else {
+ self.title = fm.i18n('cmdredo');
+ self.state = -1;
+ }
+ self.change();
+ },
+ cmds = [];
+
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+ this.shortcuts = [{
+ pattern : 'shift+ctrl+z ctrl+y'
+ }];
+ this.syncTitleOnChange = true;
+
+ this.getstate = function() {
+ return cmds.length? 0 : -1;
+ };
+
+ this.setRedo = function(redo, undo) {
+ if (redo === null) {
+ cmds = [];
+ setTitle();
+ } else {
+ if (redo && redo.cmd && redo.callback) {
+ if (undo) {
+ redo.undo = undo;
+ }
+ cmds.push(redo);
+ setTitle(redo);
+ }
+ }
+ };
+
+ this.exec = function() {
+ var undo = fm.getCommand('undo'),
+ dfd = $.Deferred(),
+ redo, res, _undo = {}, _redo = {};
+ if (cmds.length) {
+ redo = cmds.pop();
+ if (redo.undo) {
+ Object.assign(_undo, redo.undo);
+ Object.assign(_redo, redo);
+ delete _redo.undo;
+ dfd.done(function() {
+ undo.setUndo(_undo, _redo);
+ });
+ }
+
+ setTitle(cmds.length? cmds[cmds.length-1] : void(0));
+
+ res = redo.callback();
+
+ if (res && res.done) {
+ res.done(function() {
+ dfd.resolve();
+ }).fail(function() {
+ dfd.reject();
+ });
+ } else {
+ dfd.resolve();
+ }
+ return dfd;
+ } else {
+ return dfd.reject();
+ }
+ };
+};
+
+
+/*
+ * File: /js/commands/up.js
+ */
+
+/**
+ * @class elFinder command "up"
+ * Go into parent directory
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+(elFinder.prototype.commands.up = function() {
+ "use strict";
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ this.shortcuts = [{
+ pattern : 'ctrl+up'
+ }];
+
+ this.getstate = function() {
+ return this.fm.cwd().phash ? 0 : -1;
+ };
+
+ this.exec = function() {
+ var fm = this.fm,
+ cwdhash = fm.cwd().hash;
+ return this.fm.cwd().phash ? this.fm.exec('open', this.fm.cwd().phash).done(function() {
+ fm.one('opendone', function() {
+ fm.selectfiles({files : [cwdhash]});
+ });
+ }) : $.Deferred().reject();
+ };
+
+}).prototype = { forceLoad : true }; // this is required command
+
+
+/*
+ * File: /js/commands/upload.js
+ */
+
+/**
+ * @class elFinder command "upload"
+ * Upload files using iframe or XMLHttpRequest & FormData.
+ * Dialog allow to send files using drag and drop
+ *
+ * @type elFinder.command
+ * @author Dmitry (dio) Levashov
+ */
+elFinder.prototype.commands.upload = function() {
+ "use strict";
+ var hover = this.fm.res('class', 'hover');
+
+ this.disableOnSearch = true;
+ this.updateOnSelect = false;
+
+ // Shortcut opens dialog
+ this.shortcuts = [{
+ pattern : 'ctrl+u'
+ }];
+
+ /**
+ * Return command state
+ *
+ * @return Number
+ **/
+ this.getstate = function(select) {
+ var fm = this.fm, f,
+ sel = (select || [fm.cwd().hash]);
+ if (!this._disabled && sel.length == 1) {
+ f = fm.file(sel[0]);
+ }
+ return (f && f.mime == 'directory' && f.write)? 0 : -1;
+ };
+
+
+ this.exec = function(data) {
+ var fm = this.fm,
+ cwdHash = fm.cwd().hash,
+ getTargets = function() {
+ var tgts = data && (data instanceof Array)? data : null,
+ sel;
+ if (! data || data instanceof Array) {
+ if (! tgts && (sel = fm.selected()).length === 1 && fm.file(sel[0]).mime === 'directory') {
+ tgts = sel;
+ } else if (!tgts || tgts.length !== 1 || fm.file(tgts[0]).mime !== 'directory') {
+ tgts = [ cwdHash ];
+ }
+ }
+ return tgts;
+ },
+ targets = getTargets(),
+ check = targets? targets[0] : (data && data.target? data.target : null),
+ targetDir = check? fm.file(check) : fm.cwd(),
+ fmUpload = function(data) {
+ fm.upload(data)
+ .fail(function(error) {
+ dfrd.reject(error);
+ })
+ .done(function(data) {
+ var cwd = fm.getUI('cwd'),
+ node;
+ dfrd.resolve(data);
+ if (data && data.added && data.added[0] && ! fm.ui.notify.children('.elfinder-notify-upload').length) {
+ var newItem = fm.findCwdNodes(data.added);
+ if (newItem.length) {
+ newItem.trigger('scrolltoview');
+ } else {
+ if (targetDir.hash !== cwdHash) {
+ node = $('<div/>').append(
+ $('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"><span class="ui-button-text">'+fm.i18n('cmdopendir')+'</span></button>')
+ .on('mouseenter mouseleave', function(e) {
+ $(this).toggleClass('ui-state-hover', e.type == 'mouseenter');
+ }).on('click', function() {
+ fm.exec('open', check).done(function() {
+ fm.one('opendone', function() {
+ fm.trigger('selectfiles', {files : $.map(data.added, function(f) {return f.hash;})});
+ });
+ });
+ })
+ );
+ } else {
+ fm.trigger('selectfiles', {files : $.map(data.added, function(f) {return f.hash;})});
+ }
+ fm.toast({msg: fm.i18n(['complete', fm.i18n('cmdupload')]), extNode: node});
+ }
+ }
+ })
+ .progress(function() {
+ dfrd.notifyWith(this, Array.from(arguments));
+ });
+ },
+ upload = function(data) {
+ dialog.elfinderdialog('close');
+ if (targets) {
+ data.target = targets[0];
+ }
+ fmUpload(data);
+ },
+ getSelector = function() {
+ var hash = targetDir.hash,
+ dirs = $.map(fm.files(hash), function(f) {
+ return (f.mime === 'directory' && f.write)? f : null;
+ });
+
+ if (! dirs.length) {
+ return $();
+ }
+
+ return $('<div class="elfinder-upload-dirselect elfinder-tabstop" title="' + fm.i18n('folders') + '"/>')
+ .on('click', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ dirs = fm.sortFiles(dirs);
+ var $this = $(this),
+ cwd = fm.cwd(),
+ base = dialog.closest('div.ui-dialog'),
+ getRaw = function(f, icon) {
+ return {
+ label : fm.escape(f.i18 || f.name),
+ icon : icon,
+ remain : false,
+ callback : function() {
+ var title = base.children('.ui-dialog-titlebar:first').find('span.elfinder-upload-target');
+ targets = [ f.hash ];
+ title.html(' - ' + fm.escape(f.i18 || f.name));
+ $this.trigger('focus');
+ },
+ options : {
+ className : (targets && targets.length && f.hash === targets[0])? 'ui-state-active' : '',
+ iconClass : f.csscls || '',
+ iconImg : f.icon || ''
+ }
+ };
+ },
+ raw = [ getRaw(targetDir, 'opendir'), '|' ];
+ $.each(dirs, function(i, f) {
+ raw.push(getRaw(f, 'dir'));
+ });
+ $this.trigger('blur');
+ fm.trigger('contextmenu', {
+ raw: raw,
+ x: e.pageX || $(this).offset().left,
+ y: e.pageY || $(this).offset().top,
+ prevNode: base,
+ fitHeight: true
+ });
+ }).append('<span class="elfinder-button-icon elfinder-button-icon-dir" />');
+ },
+ inputButton = function(type, caption) {
+ var button,
+ input = $('<input type="file" ' + type + '/>')
+ .on('click', function() {
+ // for IE's bug
+ if (fm.UA.IE) {
+ setTimeout(function() {
+ form.css('display', 'none').css('position', 'relative');
+ requestAnimationFrame(function() {
+ form.css('display', '').css('position', '');
+ });
+ }, 100);
+ }
+ })
+ .on('change', function() {
+ upload({input : input.get(0), type : 'files'});
+ })
+ .on('dragover', function(e) {
+ e.originalEvent.dataTransfer.dropEffect = 'copy';
+ }),
+ form = $('<form/>').append(input).on('click', function(e) {
+ e.stopPropagation();
+ });
+
+ return $('<div class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only elfinder-tabstop elfinder-focus"><span class="ui-button-text">'+fm.i18n(caption)+'</span></div>')
+ .append(form)
+ .on('click', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ input.trigger('click');
+ })
+ .on('mouseenter mouseleave', function(e) {
+ $(this).toggleClass(hover, e.type === 'mouseenter');
+ });
+ },
+ dfrd = $.Deferred(),
+ dialog, dropbox, pastebox, dropUpload, paste, dirs, spinner, uidialog;
+
+ dropUpload = function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ var file = false,
+ type = '',
+ elfFrom = null,
+ mycwd = '',
+ data = null,
+ target = e._target || null,
+ trf = e.dataTransfer || null,
+ kind = (trf.items && trf.items.length && trf.items[0].kind)? trf.items[0].kind : '',
+ errors;
+
+ if (trf) {
+ try {
+ elfFrom = trf.getData('elfinderfrom');
+ if (elfFrom) {
+ mycwd = window.location.href + fm.cwd().hash;
+ if ((!target && elfFrom === mycwd) || target === mycwd) {
+ dfrd.reject();
+ return;
+ }
+ }
+ } catch(e) {}
+
+ if (kind === 'file' && (trf.items[0].getAsEntry || trf.items[0].webkitGetAsEntry)) {
+ file = trf;
+ type = 'data';
+ } else if (kind !== 'string' && trf.files && trf.files.length && $.inArray('Text', trf.types) === -1) {
+ file = trf.files;
+ type = 'files';
+ } else {
+ try {
+ if ((data = trf.getData('text/html')) && data.match(/<(?:img|a)/i)) {
+ file = [ data ];
+ type = 'html';
+ }
+ } catch(e) {}
+ if (! file) {
+ if (data = trf.getData('text')) {
+ file = [ data ];
+ type = 'text';
+ } else if (trf && trf.files) {
+ // maybe folder uploading but this UA dose not support it
+ kind = 'file';
+ }
+ }
+ }
+ }
+ if (file) {
+ fmUpload({files : file, type : type, target : target, dropEvt : e});
+ } else {
+ errors = ['errUploadNoFiles'];
+ if (kind === 'file') {
+ errors.push('errFolderUpload');
+ }
+ fm.error(errors);
+ dfrd.reject();
+ }
+ };
+
+ if (!targets && data) {
+ if (data.input || data.files) {
+ data.type = 'files';
+ fmUpload(data);
+ } else if (data.dropEvt) {
+ dropUpload(data.dropEvt);
+ }
+ return dfrd;
+ }
+
+ paste = function(ev) {
+ var e = ev.originalEvent || ev;
+ var files = [], items = [];
+ var file;
+ if (e.clipboardData) {
+ if (e.clipboardData.items && e.clipboardData.items.length){
+ items = e.clipboardData.items;
+ for (var i=0; i < items.length; i++) {
+ if (e.clipboardData.items[i].kind == 'file') {
+ file = e.clipboardData.items[i].getAsFile();
+ files.push(file);
+ }
+ }
+ } else if (e.clipboardData.files && e.clipboardData.files.length) {
+ files = e.clipboardData.files;
+ }
+ if (files.length) {
+ upload({files : files, type : 'files', clipdata : true});
+ return;
+ }
+ }
+ var my = e.target || e.srcElement;
+ requestAnimationFrame(function() {
+ var type = 'text',
+ src;
+ if (my.innerHTML) {
+ $(my).find('img').each(function(i, v){
+ if (v.src.match(/^webkit-fake-url:\/\//)) {
+ // For Safari's bug.
+ // ref. https://bugs.webkit.org/show_bug.cgi?id=49141
+ // https://dev.ckeditor.com/ticket/13029
+ $(v).remove();
+ }
+ });
+
+ if ($(my).find('a,img').length) {
+ type = 'html';
+ }
+ src = my.innerHTML;
+ my.innerHTML = '';
+ upload({files : [ src ], type : type});
+ }
+ });
+ };
+
+ dialog = $('<div class="elfinder-upload-dialog-wrapper"/>')
+ .append(inputButton('multiple', 'selectForUpload'));
+
+ if (! fm.UA.Mobile && (function(input) {
+ return (typeof input.webkitdirectory !== 'undefined' || typeof input.directory !== 'undefined');})(document.createElement('input'))) {
+ dialog.append(inputButton('multiple webkitdirectory directory', 'selectFolder'));
+ }
+
+ if (targetDir.dirs) {
+
+ if (targetDir.hash === cwdHash || fm.navHash2Elm(targetDir.hash).hasClass('elfinder-subtree-loaded')) {
+ getSelector().appendTo(dialog);
+ } else {
+ spinner = $('<div class="elfinder-upload-dirselect" title="' + fm.i18n('nowLoading') + '"/>')
+ .append('<span class="elfinder-button-icon elfinder-button-icon-spinner" />')
+ .appendTo(dialog);
+ fm.request({cmd : 'tree', target : targetDir.hash})
+ .done(function() {
+ fm.one('treedone', function() {
+ spinner.replaceWith(getSelector());
+ uidialog.elfinderdialog('tabstopsInit');
+ });
+ })
+ .fail(function() {
+ spinner.remove();
+ });
+ }
+ }
+
+ if (fm.dragUpload) {
+ dropbox = $('<div class="ui-corner-all elfinder-upload-dropbox elfinder-tabstop" contenteditable="true" data-ph="'+fm.i18n('dropPasteFiles')+'"></div>')
+ .on('paste', function(e){
+ paste(e);
+ })
+ .on('mousedown click', function(){
+ $(this).trigger('focus');
+ })
+ .on('focus', function(){
+ this.innerHTML = '';
+ })
+ .on('mouseover', function(){
+ $(this).addClass(hover);
+ })
+ .on('mouseout', function(){
+ $(this).removeClass(hover);
+ })
+ .on('dragenter', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(this).addClass(hover);
+ })
+ .on('dragleave', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(this).removeClass(hover);
+ })
+ .on('dragover', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ e.originalEvent.dataTransfer.dropEffect = 'copy';
+ $(this).addClass(hover);
+ })
+ .on('drop', function(e) {
+ dialog.elfinderdialog('close');
+ targets && (e.originalEvent._target = targets[0]);
+ dropUpload(e.originalEvent);
+ })
+ .prependTo(dialog)
+ .after('<div class="elfinder-upload-dialog-or">'+fm.i18n('or')+'</div>')[0];
+
+ } else {
+ pastebox = $('<div class="ui-corner-all elfinder-upload-dropbox" contenteditable="true">'+fm.i18n('dropFilesBrowser')+'</div>')
+ .on('paste drop', function(e){
+ paste(e);
+ })
+ .on('mousedown click', function(){
+ $(this).trigger('focus');
+ })
+ .on('focus', function(){
+ this.innerHTML = '';
+ })
+ .on('dragenter mouseover', function(){
+ $(this).addClass(hover);
+ })
+ .on('dragleave mouseout', function(){
+ $(this).removeClass(hover);
+ })
+ .prependTo(dialog)
+ .after('<div class="elfinder-upload-dialog-or">'+fm.i18n('or')+'</div>')[0];
+
+ }
+
+ uidialog = this.fmDialog(dialog, {
+ title : this.title + '<span class="elfinder-upload-target">' + (targetDir? ' - ' + fm.escape(targetDir.i18 || targetDir.name) : '') + '</span>',
+ modal : true,
+ resizable : false,
+ destroyOnClose : true,
+ propagationEvents : ['mousemove', 'mouseup', 'click'],
+ close : function() {
+ var cm = fm.getUI('contextmenu');
+ if (cm.is(':visible')) {
+ cm.click();
+ }
+ }
+ });
+
+ return dfrd;
+ };
+
+};
+
+
+/*
+ * File: /js/commands/view.js
+ */
+
+/**
+ * @class elFinder command "view"
+ * Change current directory view (icons/list)
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.view = function() {
+ "use strict";
+ var self = this,
+ fm = this.fm,
+ subMenuRaw;
+ this.value = fm.viewType;
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ this.options = { ui : 'viewbutton'};
+
+ this.getstate = function() {
+ return 0;
+ };
+
+ this.extra = {
+ icon: 'menu',
+ node: $('<span/>')
+ .attr({title: fm.i18n('viewtype')})
+ .on('click touchstart', function(e){
+ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) {
+ return;
+ }
+ var node = $(this);
+ e.stopPropagation();
+ e.preventDefault();
+ fm.trigger('contextmenu', {
+ raw: getSubMenuRaw(),
+ x: node.offset().left,
+ y: node.offset().top
+ });
+ })
+ };
+
+ this.exec = function() {
+ var self = this,
+ value = fm.storage('view', this.value == 'list' ? 'icons' : 'list');
+ return fm.lazy(function() {
+ fm.viewchange();
+ self.update(void(0), value);
+ this.resolve();
+ });
+ };
+
+ fm.bind('init', function() {
+ subMenuRaw = (function() {
+ var cwd = fm.getUI('cwd'),
+ raws = [],
+ sizeNames = fm.options.uiOptions.cwd.iconsView.sizeNames,
+ max = fm.options.uiOptions.cwd.iconsView.sizeMax,
+ i, size;
+ for (i = 0; i <= max; i++) {
+ raws.push(
+ {
+ label : fm.i18n(sizeNames[i] || ('Size-' + i + ' icons')),
+ icon : 'view',
+ callback : (function(s) {
+ return function() {
+ cwd.trigger('iconpref', {size: s});
+ fm.storage('iconsize', s);
+ if (self.value === 'list') {
+ self.exec();
+ }
+ };
+ })(i)
+ }
+ );
+ }
+ raws.push('|');
+ raws.push(
+ {
+ label : fm.i18n('viewlist'),
+ icon : 'view-list',
+ callback : function() {
+ if (self.value !== 'list') {
+ self.exec();
+ }
+ }
+ }
+ );
+ return raws;
+ })();
+ }).bind('contextmenucreate', function() {
+ self.extra = {
+ icon: 'menu',
+ node: $('<span/>')
+ .attr({title: fm.i18n('cmdview')})
+ .on('click touchstart', function(e){
+ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) {
+ return;
+ }
+ var node = $(this),
+ raw = subMenuRaw.concat(),
+ idx, i;
+ if (self.value === 'list') {
+ idx = subMenuRaw.length - 1;
+ } else {
+ idx = parseInt(fm.storage('iconsize') || 0);
+ }
+ for (i = 0; i < subMenuRaw.length; i++) {
+ if (subMenuRaw[i] !== '|') {
+ subMenuRaw[i].options = (i === idx? {'className': 'ui-state-active'} : void(0))
+ ;
+ }
+ }
+ e.stopPropagation();
+ e.preventDefault();
+ fm.trigger('contextmenu', {
+ raw: subMenuRaw,
+ x: node.offset().left,
+ y: node.offset().top
+ });
+ })
+ };
+ });
+
+};
+
+return elFinder;
+}));
\ No newline at end of file
--- /dev/null
+/*!
+ * elFinder - file manager for web
+ * Version 2.1.46 (2019-01-14)
+ * http://elfinder.org
+ *
+ * Copyright 2009-2019, Studio 42
+ * Licensed under a 3-clauses BSD license
+ */
+!function(e,t){if("function"==typeof define&&define.amd)define(["jquery","jquery-ui"],t);else if("undefined"!=typeof exports){var n,i;try{n=require("jquery"),i=require("jquery-ui")}catch(a){}module.exports=t(n,i)}else t(e.jQuery,e.jQuery.ui,!0)}(this,function(e,t,n){n=n||!1;var i=function(t,n,a){var o,r,s,l,c,d,p,u=this,h=[],f=["button","tooltip"],m=e(t),g=e.extend(!0,{},e._data(m.get(0),"events")),v=e("<div/>").append(m.contents()).attr("class",m.attr("class")||"").attr("style",m.attr("style")||""),b=m.attr("id")||"",y="elfinder-"+(b?b:Math.random().toString().substr(2,7)),w="mousedown."+y,x="keydown."+y,k="keypress."+y,C="keyup."+y,z=!1,T=!1,A=["enable","disable","load","open","reload","select","add","remove","change","dblclick","getfile","lockfiles","unlockfiles","selectfiles","unselectfiles","dragstart","dragstop","search","searchend","viewchange"],S="",I={path:"",url:"",tmbUrl:"",disabled:[],separator:"/",archives:[],extract:[],copyOverwrite:!0,uploadOverwrite:!0,uploadMaxSize:0,jpgQuality:100,tmbCrop:!1,tmb:!1},O={},j={},M={},D={},F=[],E={},U={},P=[],R={},q=[],H=[],_=new u.command(u),N="auto",L=400,W=null,B="sounds/",$="",K=e(document.createElement("audio")).hide().appendTo("body")[0],V=0,X="",G=null,J=function(t){var n,i,a,o,r,s,l,c={},d={};u.api>=2.1?(u.commandMap=t.options.uiCmdMap&&Object.keys(t.options.uiCmdMap).length?t.options.uiCmdMap:{},X!==JSON.stringify(u.commandMap)&&(X=JSON.stringify(u.commandMap))):u.options.sync=0,t.init?(j={},D={}):(s=S,n="elfinder-subtree-loaded "+u.res("class","navexpand"),r=u.res("class","navcollapse"),i=Object.keys(j),a=function(e){if(!j[e])return!0;var t="directory"===j[e].mime,i=j[e].phash;!(!t||c[i]||!d[i]&&u.navHash2Elm(j[e].hash).is(":hidden")&&u.navHash2Elm(i).next(".elfinder-navbar-subtree").children().length>100)||!t&&i===S||R[e]?t&&(d[i]=!0):(t&&!c[i]&&(c[i]=!0,u.navHash2Elm(i).removeClass(n).next(".elfinder-navbar-subtree").empty()),ee(j[e]))},o=function(){i.length&&(G&&G._abort(),G=u.asyncJob(a,i,{interval:20,numPerOnce:100}).done(function(){var t=u.storage("hide")||{items:{}};Object.keys(M).length&&e.each(M,function(e){t.items[e]||delete M[e]})}))},u.trigger("filesgc").one("filesgc",function(){i=[]}),u.one("opendone",function(){s!==S&&(m.data("lazycnt")?u.one("lazydone",o):o())})),u.sorters={},S=t.cwd.hash,Y(t.files),j[S]||Y([t.cwd]),l=JSON.stringify(u.sorters),$!==l&&(u.trigger("sorterupdate"),$=l),u.lastDir(S),u.autoSync()},Y=function(t,n){var i,a,o,r,s={name:!0,perm:!0,date:!0,size:!0,kind:!0},l=!u.sorters._checked,c=t.length,d=function(t){var n=t||{},i=[];e.each(u.sortRules,function(e){(s[e]||"undefined"!=typeof n[e]||"mode"===e&&"undefined"!=typeof n.perm)&&i.push(e)}),u.sorters=u.arrayFlip(i,!0),u.sorters._checked=!0},p=["sizeInfo"],h={},f=u.storage("hide")||{},m=f.items||{};for(a=0;a<c;a++)i=Object.assign({},t[a]),r=!(f.show||!m[i.hash]),i.name&&i.hash&&i.mime&&(r||(l&&i.phash===S&&(d(i),l=!1),!i.phash||"add"!==n&&"change"!==n||(o=u.parents(i.phash))&&e.each(o,function(){h[this]=!0})),j[i.hash]&&(e.each(p,function(){j[i.hash][this]&&!i[this]&&(i[this]=j[i.hash][this])}),i.sizeInfo&&!i.size&&(i.size=i.sizeInfo.size),ee(j[i.hash],!0)),m[i.hash]&&(M[i.hash]=i),r?(c--,t.splice(a--,1)):(j[i.hash]=i,"directory"!==i.mime||D[i.hash]||(D[i.hash]={}),i.phash&&(D[i.phash]||(D[i.phash]={}),D[i.phash][i.hash]=!0)));e.each(Object.keys(h),function(){var e=j[this];e&&e.sizeInfo&&delete e.sizeInfo}),l&&d()},Q=function(t){var n,i=t.length,a={},o=function(t){var i=j[t];i&&("directory"===i.mime&&(a[t]&&delete u.roots[a[t]],e.each(u.leafRoots,function(n,i){var a,o;(a=e.inArray(t,i))!==-1&&(1===i.length?((o=Object.assign({},j[n]))&&o._realStats&&(e.each(o._realStats,function(e,t){o[e]=t}),Q(j[n]._realStats),u.change({changed:[o]})),delete u.leafRoots[n]):u.leafRoots[n].splice(a,1))}),u.searchStatus.state<2&&e.each(j,function(e,n){n.phash==t&&o(e)})),i.phash&&(n=u.parents(i.phash))&&e.each(n,function(){r[this]=!0}),ee(j[t]))},r={};for(e.each(u.roots,function(e,t){a[t]=e});i--;)o(t[i]);e.each(Object.keys(r),function(){var e=j[this];e&&e.sizeInfo&&delete e.sizeInfo})},Z=function(t){e.each(t,function(t,n){var i=n.hash;j[i]&&e.each(Object.keys(j[i]),function(e,t){"undefined"==typeof n[t]&&delete j[i][t]}),j[i]=j[i]?Object.assign(j[i],n):n})},ee=function(e,t){var n=e.hash,i=e.phash;i&&D[i]&&delete D[i][n],t||(D[n]&&delete D[n],u.optionsByHashes[n]&&delete u.optionsByHashes[n]),delete j[n]},te=0,ne=[],ie=!1,ae=function(t){var n,i=t.keyCode,a=!(!t.ctrlKey&&!t.metaKey),o="mousedown"===t.type;if(!o&&(u.keyState.keyCode=i),u.keyState.ctrlKey=a,u.keyState.shiftKey=t.shiftKey,u.keyState.metaKey=t.metaKey,u.keyState.altKey=t.altKey,!o)return"keyup"===t.type?void(u.keyState.keyCode=null):void(z&&(e.each(U,function(e,n){n.type==t.type&&n.keyCode==i&&n.shiftKey==t.shiftKey&&n.ctrlKey==a&&n.altKey==t.altKey&&(t.preventDefault(),t.stopPropagation(),n.callback(t,u),u.debug("shortcut-exec",e+" : "+n.description))}),i!=e.ui.keyCode.TAB||e(t.target).is(":input")||t.preventDefault(),"keydown"===t.type&&i==e.ui.keyCode.ESCAPE&&(m.find(".ui-widget:visible").length||u.clipboard().length&&u.clipboard([]),e.ui.ddmanager&&(n=e.ui.ddmanager.current,n&&n.helper&&n.cancel()),u.toHide(m.find(".ui-widget.elfinder-button-menu.elfinder-frontmost:visible")),u.trigger("keydownEsc",t))))},oe=new Date,re=window.parent!==window,se=function(){var t,n;if(re)try{n=e("iframe",window.parent.document),n.length&&e.each(n,function(n,i){if(i.contentWindow===window)return t=e(i),!1})}catch(i){}return t}();n||(n={}),u.UA.Mobile&&e(window).on("orientationchange."+y,function(){var e=(screen&&screen.orientation&&screen.orientation.angle||window.orientation||0)+0;e===-90&&(e=270),u.UA.Angle=e,u.UA.Rotated=e%180!==0}).trigger("orientationchange."+y),n.bootCallback&&"function"==typeof n.bootCallback&&!function(){var e=a,t=n.bootCallback;a=function(n,i){e&&"function"==typeof e&&e.call(this,n,i),t.call(this,n,i)}}(),delete n.bootCallback,this.api=null,this.newAPI=!1,this.oldAPI=!1,this.netDrivers=[],this.baseUrl="",this.i18nBaseUrl="",this.cssloaded=!1,this.theme=null,this.mimesCanMakeEmpty={},this.bootCallback,this.id=b,this.storage=function(){try{return"localStorage"in window&&null!==window.localStorage?(u.UA.Safari&&(window.localStorage.setItem("elfstoragecheck",1),window.localStorage.removeItem("elfstoragecheck")),u.localStorage):u.cookie}catch(e){return u.cookie}}(),this.options=Object.assign({},this._options),n.uiOptions&&n.uiOptions.toolbar&&Array.isArray(n.uiOptions.toolbar)&&e.isPlainObject(n.uiOptions.toolbar[n.uiOptions.toolbar.length-1])&&(u.options.uiOptions.toolbarExtra=Object.assign(u.options.uiOptions.toolbarExtra||{},n.uiOptions.toolbar.pop())),function(){var t=function(n,i){e.isPlainObject(n)&&e.each(n,function(n,a){e.isPlainObject(a)?(i[n]||(i[n]={}),t(a,i[n])):i[n]=a})};t(n,u.options)}(),this.options.uiOptions.toolbar.push(this.options.uiOptions.toolbarExtra),delete this.options.uiOptions.toolbarExtra,this.toUnbindEvents={},this.bind=function(e,t,n){var i,a;if(t&&("function"==typeof t||"function"==typeof t.done))for(e=(""+e).toLowerCase().replace(/^\s+|\s+$/g,"").split(/\s+/),a=e.length,i=0;i<a;i++)void 0===E[e[i]]&&(E[e[i]]=[]),E[e[i]][n?"unshift":"push"](t);return this},this.unbind=function(t,n){var i,a,o,r;for(t=(""+t).toLowerCase().split(/\s+/),a=t.length,i=0;i<a;i++)(o=E[t[i]])&&(r=e.inArray(n,o),r>-1&&o.splice(r,1));return n=null,this},this.trigger=function(t,n,i){var a,o,r,s,l=t.toLowerCase(),c="object"==typeof n,d=E[l]||[],p=[];if(this.debug("event-"+l,n),c&&"undefined"!=typeof i||(i=!0),o=d.length){for(s=e.Event(l),n&&(n._event=s),i&&(s.data=n),a=0;a<o;a++)if(d[a])if(d[a].done)p.push(d[a].done);else{if(d[a].length&&!i){if("undefined"==typeof r)try{r=JSON.stringify(n)}catch(h){r=!1}s.data=r?JSON.parse(r):n}try{if(d[a].call(s,s,this)===!1||s.isDefaultPrevented()){this.debug("event-stoped",s.type);break}}catch(f){window.console&&window.console.log&&window.console.log(f)}}if(o=p.length)for(a=0;a<o;a++)try{if(p[a].call(s,s,this)===!1||s.isDefaultPrevented()){this.debug("event-stoped",s.type+"(done)");break}}catch(f){window.console&&window.console.log&&window.console.log(f)}this.toUnbindEvents[l]&&this.toUnbindEvents[l].length&&(e.each(this.toUnbindEvents[l],function(e,t){u.unbind(t.type,t.callback)}),delete this.toUnbindEvents[l])}return this},this.getListeners=function(e){return e?E[e.toLowerCase()]:E},this.baseUrl=function(){var t,n,i,a;return u.options.baseUrl?u.options.baseUrl:(a="",t=null,e("head > script").each(function(){if(this.src&&this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js$/i))return t=e(this),!1}),t&&(n=e('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length,n||(u.cssloaded=null),a=t.attr("src").replace(/js\/[^\/]+$/,""),a.match(/^(https?\/\/|\/)/)||(i=e("head > base[href]").attr("href"))&&(a=i.replace(/\/$/,"")+"/"+a)),""!==a?u.options.baseUrl=a:(u.options.baseUrl||(u.options.baseUrl="./"),a=u.options.baseUrl),a)}(),this.i18nBaseUrl=(this.options.i18nBaseUrl||this.baseUrl+"js/i18n").replace(/\/$/,"")+"/",this.options.maxErrorDialogs=Math.max(1,parseInt(this.options.maxErrorDialogs||5)),I.dispInlineRegex=this.options.dispInlineRegex,this.options.cssAutoLoad&&!function(){var t=u.baseUrl;Array.isArray(u.options.cssAutoLoad)&&(u.cssloaded===!0?u.loadCss(u.options.cssAutoLoad):u.bind("cssloaded",function(){u.loadCss(u.options.cssAutoLoad)})),null===u.cssloaded&&(m.data("cssautoloadHide",e("<style>.elfinder{visibility:hidden;overflow:hidden}</style>")),e("head").append(m.data("cssautoloadHide")),u.options.themes["default"]||(u.options.themes=Object.assign({"default":{name:"default",cssurls:"css/theme.css",author:"elFinder Project",license:"3-clauses BSD"}},u.options.themes),u.options.theme||(u.options.theme="default")),u.loadCss([t+"css/elfinder.min.css"],{dfd:e.Deferred().always(function(){m.data("cssautoloadHide")&&(m.data("cssautoloadHide").remove(),m.removeData("cssautoloadHide"))}).done(function(){u.cssloaded||(u.cssloaded=!0,u.trigger("cssloaded"))}).fail(function(){u.cssloaded=!1,u.error(["errRead","CSS (elfinder or theme)"])})})),u.options.cssAutoLoad=!1}(),this.changeTheme(this.storage("theme")||this.options.theme),this.optionProperties={icon:void 0,csscls:void 0,tmbUrl:void 0,uiCmdMap:{},netkey:void 0,disabled:[]},re||this.options.enableAlways||2!==e("body").children().length||(this.options.enableAlways=!0),this.options.debug===!0?this.options.debug="all":Array.isArray(this.options.debug)?!function(){var t={};e.each(u.options.debug,function(){t[this]=!0}),u.options.debug=t}():this.options.debug=!1,this.noConflicts={},this.noConflict=function(){e.each(f,function(t,n){e.fn[n]&&"function"==typeof e.fn[n].noConflict&&(u.noConflicts[n]=e.fn[n].noConflict())})},this.noConflict(),this.isCORS=!1,function(){if("undefined"!=typeof u.options.cors&&null!==u.options.cors)u.isCORS=!!u.options.cors;else{var t,i=document.createElement("a"),a=window.location.protocol,o=function(e){return e=e&&":"!==e?e:a,"https:"===e?/\:443$/:/\:80$/},r=window.location.host.replace(o(a),"");i.href=n.url,n.urlUpload&&n.urlUpload!==n.url&&(t=document.createElement("a"),t.href=n.urlUpload),(r!==i.host.replace(o(i.protocol),"")||":"!==i.protocol&&""!==i.protocol&&a!==i.protocol||t&&(r!==t.host.replace(o(t.protocol),"")||":"!==t.protocol&&""!==t.protocol&&a!==t.protocol))&&(u.isCORS=!0)}u.isCORS&&(e.isPlainObject(u.options.customHeaders)||(u.options.customHeaders={}),e.isPlainObject(u.options.xhrFields)||(u.options.xhrFields={}),u.options.requestType="post",u.options.customHeaders["X-Requested-With"]="XMLHttpRequest",u.options.xhrFields.withCredentials=!0)}(),this.requestType=/^(get|post)$/i.test(this.options.requestType)?this.options.requestType.toLowerCase():"get",s=Math.max(parseInt(this.options.requestMaxConn),1),this.optsCustomData=e.isPlainObject(this.options.customData)?this.options.customData:{},this.customData=Object.assign({},this.optsCustomData),this.prevCustomData=null,this.customHeaders=e.isPlainObject(this.options.customHeaders)?this.options.customHeaders:{},this.xhrFields=e.isPlainObject(this.options.xhrFields)?this.options.xhrFields:{},this.replaceXhrSend=function(){p||(p=XMLHttpRequest.prototype.send),XMLHttpRequest.prototype.send=function(){var t=this;return u.customHeaders&&e.each(u.customHeaders,function(e){t.setRequestHeader(e,this)}),u.xhrFields&&e.each(u.xhrFields,function(e){e in t&&(t[e]=this)}),p.apply(this,arguments)}},this.restoreXhrSend=function(){p&&(XMLHttpRequest.prototype.send=p)},this.abortCmdsOnOpen=this.options.abortCmdsOnOpen||["tmb","parents"],this.navPrefix="nav"+(i.prototype.uniqueid?i.prototype.uniqueid:"")+"-",this.cwdPrefix=i.prototype.uniqueid?"cwd"+i.prototype.uniqueid+"-":"",++i.prototype.uniqueid,this.uploadURL=n.urlUpload||n.url,this.namespace=y,this.today=new Date(oe.getFullYear(),oe.getMonth(),oe.getDate()).getTime()/1e3,this.yesterday=this.today-86400,l=this.options.UTCDate?"UTC":"",this.getHours="get"+l+"Hours",this.getMinutes="get"+l+"Minutes",this.getSeconds="get"+l+"Seconds",this.getDate="get"+l+"Date",this.getDay="get"+l+"Day",this.getMonth="get"+l+"Month",this.getFullYear="get"+l+"FullYear",this.zIndex,this.searchStatus={state:0,query:"",target:"",mime:"",mixed:!1,ininc:!1},this.lang=this.storage("lang")||this.options.lang,"jp"===this.lang&&(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"),null===this.sortStickFolders?this.sortStickFolders=!!this.options.sortStickFolders:this.sortStickFolders=!!this.sortStickFolders,this.sortAlsoTreeview=this.storage("sortAlsoTreeview"),null===this.sortAlsoTreeview||null===this.options.sortAlsoTreeview?this.sortAlsoTreeview=!!this.options.sortAlsoTreeview:this.sortAlsoTreeview=!!this.sortAlsoTreeview,this.sortRules=e.extend(!0,{},this._sortRules,this.options.sortRules),e.each(this.sortRules,function(e,t){"function"!=typeof t&&delete u.sortRules[e]}),this.compare=e.proxy(this.compare,this),this.notifyDelay=this.options.notifyDelay>0?parseInt(this.options.notifyDelay):500,this.draggingUiHelper=null,this.droppable={greedy:!0,tolerance:"pointer",accept:".elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename",hoverClass:this.res("class","adroppable"),classes:{"ui-droppable-hover":this.res("class","adroppable")},autoDisable:!0,drop:function(t,n){var i,a,o,r=e(this),s=e.grep(n.helper.data("files")||[],function(e){return!!e}),l=[],c=[],d=[],p=n.helper.hasClass("elfinder-drag-helper-plus"),h="class";if("undefined"==typeof t.button||n.helper.data("namespace")!==y||!u.insideWorkzone(t.pageX,t.pageY))return!1;for(a=r.hasClass(u.res(h,"cwdfile"))?u.cwdId2Hash(r.attr("id")):r.hasClass(u.res(h,"navdir"))?u.navId2Hash(r.attr("id")):S,i=s.length;i--;)o=s[i],o!=a&&j[o].phash!=a?l.push(o):(p&&o!==a&&j[a].write?c:d).push(o);return!d.length&&(n.helper.data("droped",!0),c.length&&(n.helper.hide(),u.exec("duplicate",c,{_userAction:!0})),void(l.length&&(n.helper.hide(),u.clipboard(l,!p),u.exec("paste",a,{_userAction:!0},a).always(function(){u.clipboard([]),u.trigger("unlockfiles",{files:s})}),u.trigger("drop",{files:s}))))}},this.enabled=function(){return z&&this.visible()},this.visible=function(){return m[0].elfinder&&m.is(":visible")},this.isRoot=function(e){return!(!e.isroot&&e.phash)},this.root=function(t,n){t=t||S;var i,a;if(!n&&(e.each(u.roots,function(e,n){if(0===t.indexOf(e))return i=n,!1}),i))return i;for(i=j[t];i&&i.phash&&(n||!i.isroot);)i=j[i.phash];if(i)return i.hash;for(;a in j&&j.hasOwnProperty(a);)if(i=j[a],"directory"===i.mime&&!i.phash&&i.read)return i.hash;return""},this.cwd=function(){return j[S]||{}},this.option=function(t,n){var i,a;return n=n||S,u.optionsByHashes[n]&&"undefined"!=typeof u.optionsByHashes[n][t]?u.optionsByHashes[n][t]:!u.hasVolOptions||S===n||(a=u.file(n))&&a.phash===S?O[t]||"":(i="",e.each(u.volOptions,function(e,a){if(0===n.indexOf(e))return i=a[t]||"",!1}),i)},this.getDisabledCmds=function(t,n){var i={hidden:!0};return Array.isArray(t)||(t=[t]),e.each(t,function(e,t){var n=u.option("disabledFlip",t);n&&Object.assign(i,n)}),n?i:Object.keys(i)},this.file=function(e,t){return e?j[e]||(t?M[e]:void 0):void 0},this.files=function(t){var n={};return t?D[t]?(e.each(D[t],function(e){j[e]?n[e]=j[e]:delete D[t][e]}),Object.assign({},n)):{}:Object.assign({},j)},this.parents=function(e){for(var t,n=[];e&&(t=this.file(e));)n.unshift(t.hash),e=t.phash;return n},this.path2array=function(e,t){for(var n,i=[];e;){if(!(n=j[e])||!n.hash){i=[];break}i.unshift(t&&n.i18?n.i18:n.name),e=n.isroot?null:n.phash}return i},this.path=function(t,n,i){var a=j[t]&&j[t].path?j[t].path:this.path2array(t,n).join(O.separator);if(i&&j[t]){i=Object.assign({notify:{type:"parents",cnt:1,hideCnt:!0}},i);var o,r=e.Deferred(),s=i.notify,l=!1,c=function(){u.request({data:{cmd:"parents",target:j[t].phash},notify:s,preventFail:!0}).done(d).fail(function(){r.reject()})},d=function(){u.one("parentsdone",function(){a=u.path(t,n),""===a&&l?(l=!1,c()):(s&&(clearTimeout(o),s.cnt=-parseInt(s.cnt||0),u.notify(s)),r.resolve(a))})};return a?r.resolve(a):(u.ui.tree?(s&&(o=setTimeout(function(){u.notify(s)},u.notifyDelay)),l=!0,d(!0)):c(),r)}return a},this.url=function(t,n){var i,a=j[t],o=n||{},r=o.async||!1,s=o.temporary||!1,l=o.onetime&&u.option("onetimeUrl",t)||!1,c=o.absurl||!1,d=r||l?e.Deferred():null,p=function(e){return e&&c&&(e=u.convAbsUrl(e)),e},h=function(n){if(n)return p(n);if(a.url)return p(a.url);if("undefined"==typeof i&&(i=u.option("url",!u.isRoot(a)&&a.phash||a.hash)),i)return p(i+e.map(u.path2array(t),function(e){return encodeURIComponent(e)}).slice(1).join("/"));var o=Object.assign({},u.customData,{cmd:"file",target:a.hash});return u.oldAPI&&(o.cmd="open",o.current=a.phash),p(u.options.url+(u.options.url.indexOf("?")===-1?"?":"&")+e.param(o,!0))};if(!a||!a.read)return r?d.resolve(""):"";if(l)r=!0,this.request({data:{cmd:"url",target:t,options:{onetime:1}},preventDefault:!0,options:{async:r},notify:{type:"file",cnt:1,hideCnt:!0}}).done(function(e){d.resolve(p(e.url||""))}).fail(function(){d.resolve("")});else if("1"==a.url||s&&!a.url&&!(i=u.option("url",!u.isRoot(a)&&a.phash||a.hash)))this.request({data:{cmd:"url",target:t,options:{temporary:s?1:0}},preventDefault:!0,options:{async:r},notify:r?{type:s?"file":"url",cnt:1,hideCnt:!0}:{}}).done(function(e){a.url=e.url||""}).fail(function(){a.url=""}).always(function(){var e;return a.url&&s&&(e=a.url,a.url="1"),r?void d.resolve(h(e)):h(e)});else{if(!r)return h();d.resolve(h())}return r?d:void 0},this.forExternalUrl=function(e,t){var n=u.option("onetimeUrl",e),i={async:!0,absurl:!0};return i[n?"onetime":"temporary"]=!0,u.url(e,Object.assign({},t,i))},this.openUrl=function(t,n){var i=j[t],a="";return i&&i.read?!n&&(i.url?1!=i.url&&(a=i.url):O.url&&0===i.hash.indexOf(u.cwd().volumeid)&&(a=O.url+e.map(this.path2array(t),function(e){return encodeURIComponent(e)}).slice(1).join("/")),a)?a+=(a.match(/\?/)?"&":"?")+"_".repeat((a.match(/[\?&](_+)t=/g)||["&t="]).sort().shift().match(/[\?&](_*)t=/)[1].length+1)+"t="+(i.ts||parseInt(+new Date/1e3)):(a=this.options.url,a=a+(a.indexOf("?")===-1?"?":"&")+(this.oldAPI?"cmd=open¤t="+i.phash:"cmd=file")+"&target="+i.hash+"&_t="+(i.ts||parseInt(+new Date/1e3)),n&&(a+="&download=1"),e.each(this.customData,function(e,t){a+="&"+encodeURIComponent(e)+"="+encodeURIComponent(t)}),a):""},this.tmb=function(t){var n,i,a="elfinder-cwd-bgurl",o="";return!(!e.isPlainObject(t)||(u.searchStatus.state&&0!==t.hash.indexOf(u.cwd().volumeid)?(n=u.option("tmbUrl",t.hash),i=u.option("tmbCrop",t.hash)):(n=O.tmbUrl,i=O.tmbCrop),i&&(a+=" elfinder-cwd-bgurl-crop"),"self"===n&&0===t.mime.indexOf("image/")?(o=u.openUrl(t.hash),a+=" elfinder-cwd-bgself"):(u.oldAPI||n)&&t&&t.tmb&&1!=t.tmb?o=n+t.tmb:u.newAPI&&t&&t.tmb&&1!=t.tmb&&(o=t.tmb),!o))&&(t.ts&&"self"!==n&&(o+=(o.match(/\?/)?"&":"?")+"_t="+t.ts),{url:o,className:a})},this.selected=function(){return F.slice(0)},this.selectedFiles=function(){return e.map(F,function(e){return j[e]?Object.assign({},j[e]):null})},this.fileByName=function(e,t){var n;for(n in j)if(j.hasOwnProperty(n)&&j[n].phash==t&&j[n].name==e)return j[n]},this.validResponse=function(e,t){return t.error||this.rules[this.rules[e]?e:"defaults"](t)},this.returnBytes=function(e){var t;return isNaN(e)?(e||(e=""),e=e.replace(/b$/i,""),t=e.charAt(e.length-1).toLowerCase(),e=e.replace(/[tgmk]$/i,""),"t"==t?e=1024*e*1024*1024*1024:"g"==t?e=1024*e*1024*1024:"m"==t?e=1024*e*1024:"k"==t&&(e=1024*e),e=isNaN(e)?0:parseInt(e)):(e=parseInt(e),e<1&&(e=0)),e},this.request=function(t){var n,i,a,o,r=this,l=this.options,c=e.Deferred(),d=(+new Date).toString(16)+Math.floor(1e3*Math.random()).toString(16),p=Object.assign({},r.customData,{mimes:l.onlyMimes},t.data||t),u=p.cmd,h="binary"===(t.options||{}).dataType,f=!t.asNotOpen&&"open"===u,m=!(h||t.preventDefault||t.preventFail),g=!(h||t.preventDefault||t.preventDone),v=Object.assign({},t.notify),b=!!t.cancel,y=h||!!t.raw,w=t.syncOnFail,x=!!t.lazy,k=t.prepare,C=t.navigate,z=(t.options||{}).cache,T=Object.assign({url:l.url,async:!0,type:this.requestType,dataType:"json",cache:r.api>=2.1029,data:p,headers:this.customHeaders,xhrFields:this.xhrFields},t.options||{}),A=function(t){t.warning&&r.error(t.warning),f?J(t):r.updateCache(t),t.changed&&t.changed.length&&Z(t.changed),r.lazy(function(){t.removed&&t.removed.length&&r.remove(t),t.added&&t.added.length&&r.add(t),t.changed&&t.changed.length&&r.change(t)}).then(function(){return r.lazy(function(){r.trigger(u,t,!1)})}).then(function(){return r.lazy(function(){r.trigger(u+"done")})}).then(function(){t.toasts&&Array.isArray(t.toasts)&&e.each(t.toasts,function(){this.msg&&r.toast(this)}),t.sync&&r.sync()})},j=function(e,t){var n,i,a=r.options.debug;switch(t){case"abort":n=e.quiet?"":["errConnect","errAbort"];break;case"timeout":n=["errConnect","errTimeout"];break;case"parsererror":n=["errResponse","errDataNotJSON"],e.responseText&&(!S||a&&("all"===a||a["backend-error"]))&&n.push(e.responseText);break;default:if(e.responseText)try{i=JSON.parse(e.responseText),i&&i.error&&(n=i.error)}catch(o){}if(!n)if(403==e.status)n=["errConnect","errAccess","HTTP error "+e.status];else if(404==e.status)n=["errConnect","errNotFound","HTTP error "+e.status];else if(e.status>=500)n=["errResponse","errServerError","HTTP error "+e.status];else{if(414==e.status&&"get"===T.type)return T.type="post",r.abortXHR(e),void(c.xhr=e=r.transport.send(T).fail(n).done(M));n=e.quiet?"":["errConnect","HTTP error "+e.status]}}r.trigger(u+"done"),c.reject({error:n},e,t)},M=function(t){var n=r.options.debug;if(r.currentReqCmd=u,!t.debug||n&&"all"===n||(n||(n=r.options.debug={}),n["backend-error"]=!0,n.warning=!0),y)return r.abortXHR(i),t&&t.debug&&r.debug("backend-debug",t),c.resolve(t);if(!t)return c.reject({error:["errResponse","errDataEmpty"]},i,t);if(!e.isPlainObject(t))return c.reject({error:["errResponse","errDataNotJSON"]},i,t);if(t.error)return f&&e.each(r.leafRoots,function(t,n){r.leafRoots[t]=e.grep(n,function(e){return e!==p.target})}),c.reject({error:t.error},i,t);var a=function(){var n,a=function(n){r.leafRoots[p.target]&&t[n]&&e.each(r.leafRoots[p.target],function(e,i){var a;(a=r.file(i))&&t[n].push(a)})},o=function(){r.textMimes={},e.each(r.res("mimes","text"),function(){r.textMimes[this.toLowerCase()]=!0})};return f?a("files"):"tree"===u&&a("tree"),t=r.normalize(t),r.validResponse(u,t)?(f&&(r.api||(r.api=t.api||1,"2.0"==r.api&&"undefined"!=typeof t.options.uploadMaxSize&&(r.api="2.1"),r.newAPI=r.api>=2,r.oldAPI=!r.newAPI),t.textMimes&&Array.isArray(t.textMimes)&&(r.resources.mimes.text=t.textMimes,o()),!r.textMimes&&o(),t.options&&(O=Object.assign({},I,t.options)),t.netDrivers&&(r.netDrivers=t.netDrivers),t.maxTargets&&(r.maxTargets=t.maxTargets),p.init&&(r.uplMaxSize=r.returnBytes(t.uplMaxSize),r.uplMaxFile=t.uplMaxFile?Math.min(parseInt(t.uplMaxFile),50):20)),"function"==typeof k&&k(t),C&&(n=C.target||"added",t[n]&&t[n].length&&r.one(u+"done",function(){var i=t[n],a=r.findCwdNodes(i),o=function(){var t=r.cwd().hash;return e.map(i,function(e){return e.phash&&t===e.phash?e.hash:null})},s=o(),l=function(t){var n,i,a,l=void 0,c=t.action?t.action.data:void 0;return(c||s.length)&&t.action&&(i=t.action.msg)&&(n=t.action.cmd)&&(!t.action.cwdNot||t.action.cwdNot!==r.cwd().hash)&&(a=t.action.done,c=t.action.data,l=e("<div/>").append(e('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"><span class="ui-button-text">'+r.i18n(i)+"</span></button>").on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"==t.type)}).on("click",function(){r.exec(n,c||s,{_userAction:!0,_currentType:"toast",_currentNode:e(this)}),a&&r.one(n+"done",function(){"function"==typeof a?a():"select"===a&&r.trigger("selectfiles",{files:o()})})}))),delete t.action,t.extNode=l,t};C.toast||(C.toast={}),!C.noselect&&r.trigger("selectfiles",{files:r.searchStatus.state>1?e.map(i,function(e){return e.hash}):s}),a.length?(C.noscroll||(a.first().trigger("scrolltoview",{blink:!1}),r.resources.blink(a,"lookme")),e.isPlainObject(C.toast.incwd)&&r.toast(l(C.toast.incwd))):e.isPlainObject(C.toast.inbuffer)&&r.toast(l(C.toast.inbuffer))})),c.resolve(t),void(t.debug&&r.debug("backend-debug",t))):c.reject({error:t.norError||"errResponse"},i,t)};r.abortXHR(i),x?r.lazy(a):a()},D=function(e){i&&"pending"===i.state()&&(r.abortXHR(i,{quiet:!0,abort:!0}),(!e||"unload"!==e.type&&"destroy"!==e.type)&&r.autoSync())},F=function(e){if(r.trigger(u+"done"),"autosync"==e.type){if("stop"!=e.data.action)return}else if(!("unload"==e.type||"destroy"==e.type||"openxhrabort"==e.type||e.data.added&&e.data.added.length))return;D(e)},E=function(t){var n=function(){w=!1,c.reject()};if(t&&"cmd"===t)return u;if(f){if(ie)return c.reject();ie=!0}if(c.always(function(){delete T.headers["X-elFinderReqid"]}).fail(function(t,n,i){var a={cmd:u,err:t,xhr:n,rc:i};0===t&&ne.length&&(ne=e.grep(ne,function(e){return e("cmd")!==u})),r.trigger("requestError",a),a._event&&a._event.isDefaultPrevented()&&(m=!1,w=!1,t&&(t.error="")),D(),f&&(o=r.file(p.target),o&&o.volumeid&&r.isRoot(o)&&delete r.volumeExpires[o.volumeid]),r.trigger(u+"fail",i),t&&(m?r.error(t):r.debug("error",r.i18n(t))),w&&r.sync()}),!u)return w=!1,c.reject({error:"errCmdReq"});if(r.maxTargets&&p.targets&&p.targets.length>r.maxTargets)return w=!1,c.reject({error:["errMaxTargets",r.maxTargets]});if(g&&c.done(A),f){for(;a=q.pop();)a.queueAbort();if(S!==p.target)for(;a=H.pop();)a.queueAbort()}return e.inArray(u,(r.cmdsToAdd+" autosync").split(" "))!==-1&&("autosync"!==u&&(r.autoSync("stop"),c.always(function(){r.autoSync()})),r.trigger("openxhrabort")),delete T.preventFail,r.api>=2.1029&&(z?T.headers["X-elFinderReqid"]=d:Object.assign(T.data,{reqid:d})),c.syncOnFail=function(e){w=!!e},te++,c.xhr=i=r.transport.send(T).always(function(){T._xhr&&"undefined"!=typeof T._xhr.responseURL&&(i.responseURL=T._xhr.responseURL||""),--te,ne.length?ne.shift()():ie=!1}).fail(j).done(M),r.api>=2.1029&&(i._requestId=d),f||p.compare&&"info"===u?(i.queueAbort=n,q.unshift(i),p.compare&&r.bind(r.cmdsToAdd+" autosync openxhrabort",F),c.always(function(){var t=e.inArray(i,q);p.compare&&r.unbind(r.cmdsToAdd+" autosync openxhrabort",F),t!==-1&&q.splice(t,1)})):e.inArray(u,r.abortCmdsOnOpen)!==-1&&(i.queueAbort=n,H.unshift(i),c.always(function(){var t=e.inArray(i,H);t!==-1&&H.splice(t,1)})),r.bind("unload destroy",F),c.always(function(){r.unbind("unload destroy",F)}),c},U=function(){return v.type&&v.cnt&&(b&&(v.cancel=c,t.eachCancel&&(v.id=+new Date)),n=setTimeout(function(){r.notify(v),c.always(function(){v.cnt=-(parseInt(v.cnt)||0),r.notify(v)})},r.notifyDelay),c.always(function(){clearTimeout(n)})),f&&(ie=!1),te<s?E():(f?ne.unshift(E):ne.push(E),c)},P={opts:t,result:!0};return r.api||p.init?(r.trigger("request."+u,P,!0),P.result?"object"==typeof P.result&&P.result.promise?(P.result.done(U).fail(function(){r.trigger(u+"done"),c.reject()}),c):U():(r.trigger(u+"done"),c.reject())):(w=!1,c.reject())},this.cache=function(e){Array.isArray(e)||(e=[e]),Y(e)},this.updateCache=function(t){e.isPlainObject(t)&&(t.files&&t.files.length&&Y(t.files,"files"),t.tree&&t.tree.length&&Y(t.tree,"tree"),t.removed&&t.removed.length&&Q(t.removed),t.added&&t.added.length&&Y(t.added,"add"),t.changed&&t.changed.length&&Z(t.changed,"change"))},this.diff=function(t,n,i){var a={},o=[],r=[],s=[],l=null,c=function(e){for(var t=s.length;t--;)if(s[t].hash==e)return!0};return e.each(t,function(e,t){a[t.hash]=t}),i&&i.length&&(l={},e.each(i,function(){l[this]=!0})),e.each(j,function(e,t){a[e]||n&&t.phash!==n||r.push(e)}),e.each(a,function(t,n){var i,a=j[t],r={};a?(e.each(Object.keys(a),function(){r[this]=!0}),e.each(n,function(e){if(delete r[e],!(l&&l[e]||n[e]===a[e]))return s.push(n),r={},!1}),i=Object.keys(r).length,0!==i&&(l&&e.each(r,function(e){l[e]&&--i}),0!==i&&s.push(n))):o.push(n)}),e.each(r,function(t,n){var i=j[n],o=i.phash;o&&"directory"==i.mime&&e.inArray(o,r)===-1&&a[o]&&!c(o)&&s.push(a[o])}),{added:o,removed:r,changed:s}},this.sync=function(t,n){this.autoSync("stop");var i=this,a=function(){var i="",a=0,o=0;return t&&n&&e.each(j,function(e,n){n.phash&&n.phash===t&&(++a,o=Math.max(o,n.ts)),i=a+":"+o}),i},o=a(),r=e.Deferred().done(function(){i.trigger("sync")}),s=[this.request({data:{cmd:"open",reload:1,target:S,tree:!t&&this.ui.tree?1:0,compare:o},preventDefault:!0})],l=function(){for(var e,t=[],n=i.file(i.root(S)),a=n?n.volumeid:null,o=i.cwd().phash;o;)(e=i.file(o))?(0!==o.indexOf(a)&&(t.push({target:o,cmd:"tree"}),i.isRoot(e)||t.push({target:o,cmd:"parents"}),n=i.file(i.root(o)),a=n?n.volumeid:null),o=e.phash):o=null;return t};return!t&&i.api>=2&&(S!==this.root()&&s.push(this.request({data:{cmd:"parents",target:S},preventDefault:!0})),e.each(l(),function(e,t){s.push(i.request({data:{cmd:t.cmd,target:t.target},preventDefault:!0}))})),e.when.apply(e,s).fail(function(t,a){n&&e.inArray("errOpen",t)===-1?r.reject(t&&0!=a.status?t:void 0):(r.reject(t),i.parseError(t)&&i.request({data:{cmd:"open",target:i.lastDir("")||i.root(),tree:1,init:1},notify:{type:"open",cnt:1,hideCnt:!0}}))}).done(function(e){var n,a,s;if(e.cwd.compare&&o===e.cwd.compare)return r.reject();if(n={tree:[]},a=arguments.length,a>1)for(s=1;s<a;s++)arguments[s].tree&&arguments[s].tree.length&&n.tree.push.apply(n.tree,arguments[s].tree);if(i.api<2.1&&(n.tree||(n.tree=[]),n.tree.push(e.cwd)),e=i.normalize(e),!i.validResponse("open",e))return r.reject(e.norError||"errResponse");if(n=i.normalize(n),!i.validResponse("tree",n))return r.reject(n.norError||"errResponse");var l=i.diff(e.files.concat(n&&n.tree?n.tree:[]),t);return l.added.push(e.cwd),i.updateCache(l),l.removed.length&&i.remove(l),l.added.length&&i.add(l),l.changed.length&&i.change(l),r.resolve(l)}).always(function(){i.autoSync()}),r},this.upload=function(e){return this.transport.upload(e,this)},this.shortcut=function(t){var n,i,a,o,r;if(this.options.allowShortcuts&&t.pattern&&e.isFunction(t.callback))for(n=t.pattern.toUpperCase().split(/\s+/),o=0;o<n.length;o++)i=n[o],r=i.split("+"),a=1==(a=r.pop()).length?a>0?a:a.charCodeAt(0):a>0?a:e.ui.keyCode[a],a&&!U[i]&&(U[i]={keyCode:a,altKey:e.inArray("ALT",r)!=-1,ctrlKey:e.inArray("CTRL",r)!=-1,shiftKey:e.inArray("SHIFT",r)!=-1,type:t.type||"keydown",callback:t.callback,description:t.description,pattern:i});return this},this.shortcuts=function(){var t=[];return e.each(U,function(e,n){t.push([n.pattern,u.i18n(n.description)])}),t},this.clipboard=function(t,n){var i=function(){return e.map(P,function(e){return e.hash})};return void 0!==t&&(P.length&&this.trigger("unlockfiles",{files:i()}),R={},P=e.map(t||[],function(e){var t=j[e];return t?(R[e]=!0,{hash:e,phash:t.phash,name:t.name,mime:t.mime,read:t.read,locked:t.locked,cut:!!n}):null}),this.trigger("changeclipboard",{clipboard:P.slice(0,P.length)}),n&&this.trigger("lockfiles",{
+files:i()})),P.slice(0,P.length)},this.isCommandEnabled=function(e,t){var n,i,a=u.cwd().volumeid||"";return!t&&u.searchStatus.state>1&&u.selected().length&&(t=u.selected()[0]),n=!t||a&&0===t.indexOf(a)?O.disabledFlip:u.option("disabledFlip",t),i=this._commands[e],!!i&&(i.alwaysEnabled||!n[e])},this.exec=function(t,n,i,a){var o,r;return!a&&this.commandMap[t]&&"hidden"!==this.commandMap[t]&&(t=this.commandMap[t]),"open"===t&&((this.searchStatus.state||this.searchStatus.ininc)&&this.trigger("searchend",{noupdate:!0}),this.autoSync("stop")),!a&&n&&(e.isArray(n)?n.length&&(a=n[0]):a=n),o=this._commands[t]&&this.isCommandEnabled(t,a)?this._commands[t].exec(n,i):e.Deferred().reject("No such command"),r=typeof o,"object"===r&&o.promise||(u.debug("warning",'"cmd.exec()" should be returned "$.Deferred" but cmd "'+t+'" returned "'+r+'"'),o=e.Deferred().resolve()),this.trigger("exec",{dfrd:o,cmd:t,files:n,opts:i,dstHash:a}),o},this.dialog=function(t,n){var i=e("<div/>").append(t).appendTo(m).elfinderdialog(n,u),a=i.closest(".ui-dialog"),o=function(){!i.data("draged")&&i.is(":visible")&&i.elfinderdialog("posInit")};return a.length&&(u.bind("resize",o),a.on("remove",function(){u.unbind("resize",o)})),i},this.toast=function(t){return e('<div class="ui-front"/>').appendTo(this.ui.toast).elfindertoast(t||{},this)},this.getUI=function(t){return this.ui[t]||(t?e():m)},this.getCommand=function(e){return void 0===e?this._commands:this._commands[e]},this.resize=function(t,n){var i,a=function(){for(var e=m.outerHeight(!0)-m.innerHeight(),t=m;t.get(0)!==W.get(0)&&(t=t.parent(),e+=t.outerHeight(!0)-t.innerHeight(),t.parent().length););return e},o=!m.hasClass("ui-resizable"),r=m.data("resizeSize")||{w:0,h:0},s={};W&&W.data("resizeTm")&&clearTimeout(W.data("resizeTm")),"string"==typeof n&&(i=n.match(/^([0-9.]+)%$/))&&(W&&W.length||(W=e(window)),W.data("marginToMyNode")||W.data("marginToMyNode",a()),W.data("fitToBaseFunc")||W.data("fitToBaseFunc",function(e){var t=W.data("resizeTm");e.preventDefault(),e.stopPropagation(),t&&cancelAnimationFrame(t),m.hasClass("elfinder-fullscreen")||u.UA.Mobile&&W.data("rotated")===u.UA.Rotated||(W.data("rotated",u.UA.Rotated),W.data("resizeTm",requestAnimationFrame(function(){u.restoreSize()})))}),"undefined"==typeof W.data("rotated")&&W.data("rotated",u.UA.Rotated),n=W.height()*(i[1]/100)-W.data("marginToMyNode"),W.off("resize."+u.namespace,W.data("fitToBaseFunc")),o&&W.on("resize."+u.namespace,W.data("fitToBaseFunc"))),m.css({width:t,height:parseInt(n)}),s.w=Math.round(m.width()),s.h=Math.round(m.height()),m.data("resizeSize",s),s.w===r.w&&s.h===r.h||(m.trigger("resize"),this.trigger("resize",{width:s.w,height:s.h}))},this.restoreSize=function(){this.resize(N,L)},this.show=function(){m.show(),this.enable().trigger("show")},this.hide=function(){this.options.enableAlways&&(T=z,z=!1),this.disable(),this.trigger("hide"),m.hide()},this.lazy=function(t,n,i){var a=function(e){var t,n=m.data("lazycnt");e?(t=!m.data("lazyrepaint")&&i.repaint,n?m.data("lazycnt",++n):m.data("lazycnt",1).addClass("elfinder-processing"),t&&m.data("lazyrepaint",!0).css("display")):n&&n>1?m.data("lazycnt",--n):(t=m.data("lazyrepaint"),m.data("lazycnt",0).removeData("lazyrepaint").removeClass("elfinder-processing"),t&&m.css("display"),u.trigger("lazydone"))},o=e.Deferred(),r=function(){o.resolve(t.call(o)),a(!1)};return n=n||0,i=i||{},a(!0),n?setTimeout(r,n):requestAnimationFrame(r),o},this.destroy=function(){m&&m[0].elfinder&&(m.hasClass("elfinder-fullscreen")&&u.toggleFullscreen(m),this.options.syncStart=!1,this.autoSync("forcestop"),this.trigger("destroy").disable(),P=[],F=[],E={},U={},e(window).off("."+y),e(document).off("."+y),u.trigger=function(){},e(K).remove(),m.off().removeData().empty().append(v.contents()).attr("class",v.attr("class")).attr("style",v.attr("style")),delete m[0].elfinder,e.each(g,function(t,n){e.each(n,function(e,t){m.on(t.type+(t.namespace?"."+t.namespace:""),t.selector,t.handler)})}))},this.autoSync=function(t){var n;if(u.options.sync>=1e3){if(r&&(clearTimeout(r),r=null,u.trigger("autosync",{action:"stop"})),"stop"===t?++V:V=Math.max(0,--V),V||"forcestop"===t||!u.options.syncStart)return;n=function(t){var i;O.syncMinMs&&(t||r)&&(t&&u.trigger("autosync",{action:"start"}),i=Math.max(u.options.sync,O.syncMinMs),r&&clearTimeout(r),r=setTimeout(function(){var t,a=!0,o=S;O.syncChkAsTs&&j[o]&&(t=j[o].ts)?u.request({data:{cmd:"info",targets:[o],compare:t,reload:1},preventDefault:!0}).done(function(e){var i;a=!0,e.compare&&(i=e.compare,i==t&&(a=!1)),a?u.sync(o).always(function(){i&&(j[o].ts=i),n()}):n()}).fail(function(t,a){var o=u.parseError(t);o&&0!=a.status?(u.error(o),Array.isArray(o)&&e.inArray("errOpen",o)!==-1&&u.request({data:{cmd:"open",target:u.lastDir("")||u.root(),tree:1,init:1},notify:{type:"open",cnt:1,hideCnt:!0}})):r=setTimeout(function(){n()},i)}):u.sync(S,!0).always(function(){n()})},i))},n(!0)}},this.insideWorkzone=function(e,t,n){var i=this.getUI("workzone").data("rectangle");return n=n||1,!(e<i.left+n||e>i.left+i.width+n||t<i.top+n||t>i.top+i.height+n)},this.toFront=function(t){var n=m.children(".ui-front").removeClass("elfinder-frontmost"),i=n.last();n.css("z-index",""),e(t).addClass("ui-front elfinder-frontmost").css("z-index",i.css("z-index")+1)},this.toHide=function(t,n){var i,a=e(t);!n&&a.hide(),a.hasClass("elfinder-frontmost")&&(a.removeClass("elfinder-frontmost"),i=m.children(".ui-front:visible:not(.elfinder-frontmost)").last(),i.length&&requestAnimationFrame(function(){m.children(".elfinder-frontmost:visible").length||(u.toFront(i),i.trigger("frontmost"))}))},this.getMaximizeCss=function(){return{width:"100%",height:"100%",margin:0,top:0,left:0,display:"block",position:"fixed",zIndex:Math.max(u.zIndex?u.zIndex+1:0,1e3),maxWidth:"",maxHeight:""}},function(){re&&u.UA.Fullscreen&&(u.UA.Fullscreen=!1,se&&"undefined"!=typeof se.attr("allowfullscreen")&&(u.UA.Fullscreen=!0));var t,n,i,a="elfinder-fullscreen",o="elfinder-fullscreen-native",r=function(){var t=0,n=0;e.each(m.children(".ui-dialog,.ui-draggable"),function(i,a){var o=e(a),r=o.position();r.top<0&&(o.css("top",t),t+=20),r.left<0&&(o.css("left",n),n+=20)})},s=u.UA.Fullscreen?{fullElm:function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||null},exitFull:function(){return document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen?document.msExitFullscreen():void 0},toFull:function(e){return e.requestFullscreen?e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():!!e.msRequestFullscreen&&e.msRequestFullscreen()}}:{fullElm:function(){var e;return m.hasClass(a)?m.get(0):(e=m.find("."+a),e.length?e.get(0):null)},exitFull:function(){var i;e(window).off("resize."+y,c),void 0!==n&&e("body").css("overflow",n),n=void 0,t&&(i=t.elm,l(i),e(i).trigger("resize",{fullscreen:"off"})),e(window).trigger("resize")},toFull:function(t){return n=e("body").css("overflow")||"",e("body").css("overflow","hidden"),e(t).css(u.getMaximizeCss()).addClass(a).trigger("resize",{fullscreen:"on"}),r(),e(window).on("resize."+y,c).trigger("resize"),!0}},l=function(n){t&&t.elm==n&&(e(n).removeClass(a+" "+o).attr("style",t.style),t=null)},c=function(t){var n;t.target===window&&(i&&cancelAnimationFrame(i),i=requestAnimationFrame(function(){(n=s.fullElm())&&e(n).trigger("resize",{fullscreen:"on"})}))};e(document).on("fullscreenchange."+y+" webkitfullscreenchange."+y+" mozfullscreenchange."+y+" MSFullscreenChange."+y,function(n){if(u.UA.Fullscreen){var d=s.fullElm(),p=e(window);i&&cancelAnimationFrame(i),null===d?(p.off("resize."+y,c),t&&(d=t.elm,l(d),e(d).trigger("resize",{fullscreen:"off"}))):(e(d).addClass(a+" "+o).attr("style","width:100%; height:100%; margin:0; padding:0;").trigger("resize",{fullscreen:"on"}),p.on("resize."+y,c),r()),p.trigger("resize")}}),u.toggleFullscreen=function(n,i){var a=e(n).get(0),o=null;if(o=s.fullElm()){if(o==a){if(i===!0)return o}else if(i===!1)return o;return s.exitFull(),null}return i===!1?null:(t={elm:a,style:e(a).attr("style")},s.toFull(a)!==!1?a:(t=null,null))}}(),function(){var t,n="elfinder-maximized",i=function(e){if(e.target===window&&e.data&&e.data.elm){var n=e.data.elm;t&&cancelAnimationFrame(t),t=requestAnimationFrame(function(){n.trigger("resize",{maximize:"on"})})}},a=function(t){e(window).off("resize."+y,i),e("body").css("overflow",t.data("bodyOvf")),t.removeClass(n).attr("style",t.data("orgStyle")).removeData("bodyOvf").removeData("orgStyle"),t.trigger("resize",{maximize:"off"})},o=function(t){t.data("bodyOvf",e("body").css("overflow")||"").data("orgStyle",t.attr("style")).addClass(n).css(u.getMaximizeCss()),e("body").css("overflow","hidden"),e(window).on("resize."+y,{elm:t},i),t.trigger("resize",{maximize:"on"})};u.toggleMaximize=function(t,i){var r=e(t),s=r.hasClass(n);if(s){if(i===!0)return;a(r)}else{if(i===!1)return;o(r)}}}(),Object.assign(e.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=!1,this.xhrUpload=("undefined"!=typeof XMLHttpRequestUpload||"undefined"!=typeof XMLHttpRequestEventTarget)&&"undefined"!=typeof File&&"undefined"!=typeof FormData,this.transport={},"object"==typeof this.options.transport&&(this.transport=this.options.transport,"function"==typeof this.transport.init&&this.transport.init(this)),"function"!=typeof this.transport.send&&(this.transport.send=function(t){return u.UA.IE||(t._xhr=new XMLHttpRequest,t.xhr=function(){return t._xhr}),e.ajax(t)}),"iframe"==this.transport.upload?this.transport.upload=e.proxy(this.uploads.iframe,this):"function"==typeof this.transport.upload?this.dragUpload=!!this.options.dragUploadAllow:this.xhrUpload&&this.options.dragUploadAllow?(this.transport.upload=e.proxy(this.uploads.xhr,this),this.dragUpload=!0):this.transport.upload=e.proxy(this.uploads.iframe,this),this.decodeRawString=function(e){var t=function(e){var t,n,i;for(t=0,n=e.length,i=[];t<n;t++)i.push(e.charCodeAt(t));return i},n=function(e){var n,i,a,o=[];for("string"==typeof e&&(e=t(e)),n=0,i=e.length;a=e[n],n<i;n++)a>=55296&&a<=56319?o.push((1023&a)+64<<10|1023&e[++n]):o.push(a);return o},i=function(e){var t,n,i,a,o=String.fromCharCode;for(t=0,n=e.length,a="";i=e[t],t<n;t++)a+=i<=127?o(i):i<=223&&i>=194?o((31&i)<<6|63&e[++t]):i<=239&&i>=224?o((15&i)<<12|(63&e[++t])<<6|63&e[++t]):i<=247&&i>=240?o(55296|((7&i)<<8|(63&e[++t])<<2|e[++t]>>>4&3)-64,56320|(15&e[t++])<<6|63&e[t]):o(65533);return a};return i(n(e))},this.getContents=function(t,n){var i,a,o=this,r=e.Deferred(),s=n||"arraybuffer";return r.fail(function(){a&&"pending"===a.state()&&a.reject()}),i=o.openUrl(t),o.isSameOrigin(i)||(i=o.openUrl(t,!0)),a=o.request({data:{cmd:"get"},options:{url:i,type:"get",cache:!0,dataType:"binary",responseType:s,processData:!1}}).fail(function(){r.reject()}).done(function(e){r.resolve(e)}),r},this.getMimetype=function(e,t){var n,i,a=t;return i=(e+"").match(/\.([^.]+)$/),i&&(n=i[1])&&(o||(o=u.arrayFlip(u.mimeTypes)),(a=o[n.toLowerCase()])||(a=t)),a},u.hashCheckers=[],function(t){var n={check:!0},i=function(e){var i,a=new n.SparkMD5.ArrayBuffer;return i=t.asyncJob(function(e){a.append(e)},e).done(function(){i._md5=a.end()})},a=function(i,a){var o,r;try{o=new n.jsSHA("SHA"+("3"===a.substr(0,1)?a:"-"+a),"ARRAYBUFFER"),r=t.asyncJob(function(e){o.update(e)},i).done(function(){r._sha=o.getHash("HEX")})}catch(s){r=e.Deferred.reject()}return r};t.options.cdns.sparkmd5&&t.hashCheckers.push("md5"),t.options.cdns.jssha&&(t.hashCheckers=t.hashCheckers.concat(["sha1","sha224","sha256","sha384","sha512","sha3-224","sha3-256","sha3-384","sha3-512","shake128","shake256"])),t.getContentsHashes=function(o,r){var s,l=e.Deferred(),c=t.arrayFlip(r||["md5"],!0),d=[],p=[],u={};if(l.fail(function(){s&&s.reject()}),n.check){delete n.check;var h=e.Deferred();window.ArrayBuffer&&t.options.cdns.sparkmd5&&(d.push(h),t.loadScript([t.options.cdns.sparkmd5],function(e){var t=e||window.SparkMD5;window.SparkMD5&&delete window.SparkMD5,h.resolve(),t&&(n.SparkMD5=t)},{tryRequire:!0,error:function(){h.reject()}}));var f=e.Deferred();window.ArrayBuffer&&t.options.cdns.jssha&&(d.push(f),t.loadScript([t.options.cdns.jssha],function(e){var t=e||window.jsSHA;window.jsSHA&&delete window.jsSHA,f.resolve(),t&&(n.jsSHA=t)},{tryRequire:!0,error:function(){f.reject()}}))}return e.when.apply(null,d).always(function(){Object.keys(n).length?s=t.getContents(o).done(function(r){var s=r instanceof ArrayBuffer&&r.byteLength>0&&t.sliceArrayBuffer(r,1048576);c.md5&&n.SparkMD5&&p.push(function(){var e=i(s).done(function(){var n;u.md5=e._md5,(n=t.file(o))&&(n.md5=e._md5),l.notify(u)});return l.fail(function(){e.reject()}),e}),n.jsSHA&&e.each(["1","224","256","384","512","3-224","3-256","3-384","3-512","ke128","ke256"],function(e,n){c["sha"+n]&&p.push(function(){var e=a(s,n).done(function(){var i;u["sha"+n]=e._sha,(i=t.file(o))&&(i["sha"+n]=e._sha),l.notify(u)});return e})}),p.length?t.sequence(p).always(function(){l.resolve(u)}):l.reject()}).fail(function(){l.reject()}):l.reject()}),l}}(this),this.parseError=function(t){var n=t;return e.isPlainObject(n)&&(n=n.error),n},this.error=function(){var e,t=arguments[0],n=arguments[1]||null;return 1==arguments.length&&"function"==typeof t?u.bind("error",t):(e=this.parseError(t),e!==!0&&e?u.trigger("error",{error:e,opts:n}):this)},e.each(A,function(t,n){u[n]=function(){var t=arguments[0];return 1==arguments.length&&"function"==typeof t?u.bind(n,t):u.trigger(n,e.isPlainObject(t)?t:{})}}),this.enable(function(){!z&&u.api&&u.visible()&&u.ui.overlay.is(":hidden")&&!m.children(".elfinder-dialog."+u.res("class","editing")+":visible").length&&(z=!0,document.activeElement&&document.activeElement.blur(),m.removeClass("elfinder-disabled"))}).disable(function(){T=z,z=!1,m.addClass("elfinder-disabled")}).open(function(){F=[]}).select(function(t){var n=0,i=[];F=e.grep(t.data.selected||t.data.value||[],function(e){return i.length||u.maxTargets&&++n>u.maxTargets?(i.push(e),!1):!!j[e]}),i.length&&(u.trigger("unselectfiles",{files:i,inselect:!0}),u.toast({mode:"warning",msg:u.i18n(["errMaxTargets",u.maxTargets])}))}).error(function(t){var n,i,a={cssClass:"elfinder-dialog-error",title:u.i18n("error"),resizable:!1,destroyOnClose:!0,buttons:{}},o=u.getUI(),r=o.children(".elfinder-dialog-error").length;r<u.options.maxErrorDialogs?(a.buttons[u.i18n(u.i18n("btnClose"))]=function(){e(this).elfinderdialog("close")},t.data.opts&&e.isPlainObject(t.data.opts)&&Object.assign(a,t.data.opts),u.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-error"/>'+u.i18n(t.data.error),a)):(n=o.children(".elfinder-dialog-error:last").children(".ui-dialog-content:first"),i=n.children(".elfinder-error-counter"),i.length?i.data("cnt",parseInt(i.data("cnt"))+1).html(u.i18n(["moreErrors",i.data("cnt")])):(i=e('<span class="elfinder-error-counter">'+u.i18n(["moreErrors",1])+"</span>").data("cnt",1),n.append("<br/>",i)))}).bind("tmb",function(t){e.each(t.data.images||[],function(e,t){j[e]&&(j[e].tmb=t)})}).bind("searchstart",function(e){Object.assign(u.searchStatus,e.data),u.searchStatus.state=1}).bind("search",function(e){u.searchStatus.state=2}).bind("searchend",function(){u.searchStatus.state=0,u.searchStatus.ininc=!1,u.searchStatus.mixed=!1}).bind("canMakeEmptyFile",function(t){var n=t.data,i={};n&&Array.isArray(n.mimes)&&(n.unshift||(i=u.mimesCanMakeEmpty),e.each(n.mimes,function(){i[this]||(i[this]=u.mimeTypes[this])}),n.unshift&&(u.mimesCanMakeEmpty=Object.assign(i,u.mimesCanMakeEmpty)))}).bind("themechange",function(){requestAnimationFrame(function(){u.trigger("uiresize")})}),!0===this.options.sound&&this.bind("playsound",function(t){var n=K.canPlayType&&K.canPlayType('audio/wav; codecs="1"'),i=t.data&&t.data.soundFile;n&&i&&""!=n&&"no"!=n&&e(K).html('<source src="'+B+i+'" type="audio/wav">')[0].play()}),e.each(this.options.handlers,function(e,t){u.bind(e,t)}),this.history=new this.history(this),this.roots={},this.leafRoots={},this.volumeExpires={},this._commands={},Array.isArray(this.options.commands)||(this.options.commands=[]),e.inArray("*",this.options.commands)!==-1&&(this.options.commands=Object.keys(this.commands)),this.commandMap={},this.volOptions={},this.hasVolOptions=!1,this.trashes={},this.optionsByHashes={},this.uiAutoHide=[],this.one("open",function(){u.uiAutoHide.length&&setTimeout(function(){u.trigger("uiautohide")},500)}),this.bind("uiautohide",function(){u.uiAutoHide.length&&u.uiAutoHide.shift()()}),this.options.width&&(N=this.options.width),this.options.height&&(L=this.options.height),this.options.heightBase&&(W=e(this.options.heightBase)),B=this.options.soundPath?this.options.soundPath.replace(/\/+$/,"")+"/":this.baseUrl+B,u.one("opendone",function(){var t;e(document).on("click."+y,function(t){z&&!u.options.enableAlways&&!e(t.target).closest(m).length&&u.disable()}).on(x+" "+k+" "+C+" "+w,ae),u.options.useBrowserHistory&&e(window).on("popstate."+y,function(t){var n,i,a=t.originalEvent.state||{},o=!!a.thash,r=m.find(".elfinder-frontmost:visible"),s=m.find(".elfinder-navbar-dir,.elfinder-cwd-filename").find("input,textarea");o||(a={thash:u.cwd().hash},e("html,body").animate({scrollTop:m.offset().top})),r.length||s.length?(history.pushState(a,null,location.pathname+location.search+"#elf_"+a.thash),r.length?r.hasClass(u.res("class","preventback"))||(r.hasClass("elfinder-contextmenu")?e(document).trigger(e.Event("keydown",{keyCode:e.ui.keyCode.ESCAPE,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1})):r.hasClass("elfinder-dialog")?r.elfinderdialog("close"):r.trigger("close")):s.trigger(e.Event("keydown",{keyCode:e.ui.keyCode.ESCAPE,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1}))):o?!e.isEmptyObject(u.files())&&u.request({data:{cmd:"open",target:a.thash,onhistory:1},notify:{type:"open",cnt:1,hideCnt:!0},syncOnFail:!0}):(n=function(){i.trigger("click")},u.one("open",n,!0),i=u.toast({msg:u.i18n("pressAgainToExit"),onHidden:function(){u.unbind("open",n),history.pushState(a,null,location.pathname+location.search+"#elf_"+a.thash)}}))}),e(window).on("resize."+y,function(e){e.target===this&&(t&&cancelAnimationFrame(t),t=requestAnimationFrame(function(){var e=m.data("resizeSize")||{w:0,h:0},t={w:Math.round(m.width()),h:Math.round(m.height())};m.data("resizeSize",t),t.w===e.w&&t.h===e.h||(m.trigger("resize"),u.trigger("resize",{width:t.w,height:t.h}))}))}).on("beforeunload."+y,function(t){var n,i;return m.is(":visible")&&(u.ui.notify.children().length&&e.inArray("hasNotifyDialog",u.options.windowCloseConfirm)!==-1?n=u.i18n("ntfsmth"):m.find("."+u.res("class","editing")).length&&e.inArray("editingFile",u.options.windowCloseConfirm)!==-1?n=u.i18n("editingFile"):(i=Object.keys(u.selected()).length)&&e.inArray("hasSelectedItem",u.options.windowCloseConfirm)!==-1?n=u.i18n("hasSelected",""+i):(i=Object.keys(u.clipboard()).length)&&e.inArray("hasClipboardData",u.options.windowCloseConfirm)!==-1&&(n=u.i18n("hasClipboard",""+i)),n)?(t.returnValue=n,n):void u.trigger("unload")}),e(window).on("message."+y,function(e){var t,n,i=e.originalEvent||null;if(i&&0===u.uploadURL.indexOf(i.origin))try{t=JSON.parse(i.data),n=t.data||null,n&&(n.error?(t.bind&&u.trigger(t.bind+"fail",n),u.error(n.error)):(n.warning&&u.error(n.warning),u.updateCache(n),n.removed&&n.removed.length&&u.remove(n),n.added&&n.added.length&&u.add(n),n.changed&&n.changed.length&&u.change(n),t.bind&&(u.trigger(t.bind,n),u.trigger(t.bind+"done")),n.sync&&u.sync()))}catch(e){u.sync()}}),u.options.enableAlways?(e(window).on("focus."+y,function(e){e.target===this&&u.enable()}),re&&e(window.top).on("focus."+y,function(){!u.enable()||se&&!se.is(":visible")||requestAnimationFrame(function(){e(window).trigger("focus")})})):re&&e(window).on("blur."+y,function(e){z&&e.target===this&&u.disable()}),re&&m.on("click",function(t){e(window).trigger("focus")}),u.options.enableByMouseOver&&m.on("mouseenter touchstart",function(t){re&&e(window).trigger("focus"),!u.enabled()&&u.enable()})}),m[0].elfinder=this,h.push(function(){var t=u.lang,n=u.i18nBaseUrl+"elfinder."+t+".js",i=e.Deferred().done(function(){u.i18[t]&&(u.lang=t),u.trigger("i18load"),c="en"===u.lang?u.i18.en:e.extend(!0,{},u.i18.en,u.i18[u.lang])});return u.i18[t]?i.resolve():(u.lang="en",u.hasRequire?require([n],function(){i.resolve()},function(){i.resolve()}):u.loadScript([n],function(){i.resolve()},{loadType:"tag",error:function(){i.resolve()}})),i}()),d=function(){var t;return u.messages=c.messages,e.fn.selectable&&e.fn.draggable&&e.fn.droppable&&e.fn.resizable&&e.fn.slider?m.length?u.options.url?(t=Object.assign({name:u.i18n("name"),perm:u.i18n("perms"),date:u.i18n("modify"),size:u.i18n("size"),kind:u.i18n("kind"),modestr:u.i18n("mode"),modeoct:u.i18n("mode"),modeboth:u.i18n("mode")},u.options.uiOptions.cwd.listView.columnsCustomName),u.getColumnName=function(e){return t[e]||u.i18n(e)},u.direction=c.direction,u.dateFormat=u.options.dateFormat||c.dateFormat,u.fancyFormat=u.options.fancyDateFormat||c.fancyDateFormat,u.nonameDateFormat=(u.options.nonameDateFormat||c.nonameDateFormat).replace(/[\/\\]/g,"_"),u.cssClass="ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-"+("rtl"==u.direction?"rtl":"ltr")+(u.UA.Touch?" elfinder-touch"+(u.options.resizable?" touch-punch":""):"")+(u.UA.Mobile?" elfinder-mobile":"")+(u.UA.iOS?" elfinder-ios":"")+" "+u.options.cssClass,m.addClass(u.cssClass).on(w,function(){!z&&u.enable()}),function(){var t,n,i,a,o,r=x+"draggable keyup."+y+"draggable";u.draggable={appendTo:m,addClasses:!1,distance:4,revert:!0,refreshPositions:!1,cursor:"crosshair",cursorAt:{left:50,top:47},scroll:!1,start:function(r,s){var l,c,d=s.helper,p=e.grep(d.data("files")||[],function(e){return!!e&&(R[e]=!0,!0)}),h=!1;for(o=m.attr("style"),m.width(m.width()).height(m.height()),t="ltr"===u.direction,n=u.getUI("workzone").data("rectangle"),i=n.top+n.height,a=i-u.getUI("navdock").outerHeight(!0),u.draggingUiHelper=d,l=p.length;l--;)if(c=p[l],j[c].locked){h=!0,d.data("locked",!0);break}!h&&u.trigger("lockfiles",{files:p}),d.data("autoScrTm",setInterval(function(){d.data("autoScr")&&u.autoScroll[d.data("autoScr")](d.data("autoScrVal"))},50))},drag:function(o,r){var s,l,c,d=r.helper;((l=n.top>o.pageY)||a<o.pageY)&&(s=n.cwdEdge>o.pageX?(t?"navbar":"cwd")+(l?"Up":"Down"):(t?"cwd":"navbar")+(l?"Up":"Down"),l||("cwd"===s.substr(0,3)?i<o.pageY?c=i:s=null:c=a),s&&(d.data("autoScr",s),d.data("autoScrVal",Math.pow(l?n.top-o.pageY:o.pageY-c,1.3)))),s||d.data("autoScr")&&d.data("refreshPositions",1).data("autoScr",null),d.data("refreshPositions")&&e(this).elfUiWidgetInstance("draggable")&&(d.data("refreshPositions")>0?(e(this).draggable("option",{refreshPositions:!0,elfRefresh:!0}),d.data("refreshPositions",-1)):(e(this).draggable("option",{refreshPositions:!1,elfRefresh:!1}),d.data("refreshPositions",null)))},stop:function(t,n){var i,a=n.helper;e(document).off(r),e(this).elfUiWidgetInstance("draggable")&&e(this).draggable("option",{refreshPositions:!1}),u.draggingUiHelper=null,u.trigger("focus").trigger("dragstop"),a.data("droped")||(i=e.grep(a.data("files")||[],function(e){return!!e}),u.trigger("unlockfiles",{files:i}),u.trigger("selectfiles",{files:u.selected()})),u.enable(),m.attr("style",o),a.data("autoScrTm")&&clearInterval(a.data("autoScrTm"))},helper:function(t,n){var i,a,o,s=this.id?e(this):e(this).parents("[id]:first"),l=e('<div class="elfinder-drag-helper"><span class="elfinder-drag-helper-icon-status"/></div>'),c=function(t){var n,i=t.mime,a=u.tmb(t);return n='<div class="elfinder-cwd-icon elfinder-cwd-icon-drag '+u.mime2class(i)+' ui-corner-all"/>',a?n=e(n).addClass(a.className).css("background-image","url('"+a.url+"')").get(0).outerHTML:t.icon&&(n=e(n).css(u.getIconStyle(t,!0)).get(0).outerHTML),t.csscls&&(n='<div class="'+t.csscls+'">'+n+"</div>"),n};return u.draggingUiHelper&&u.draggingUiHelper.stop(!0,!0),u.trigger("dragstart",{target:s[0],originalEvent:t},!0),i=s.hasClass(u.res("class","cwdfile"))?u.selected():[u.navId2Hash(s.attr("id"))],l.append(c(j[i[0]])).data("files",i).data("locked",!1).data("droped",!1).data("namespace",y).data("dropover",0),(a=i.length)>1&&l.append(c(j[i[a-1]])+'<span class="elfinder-drag-num">'+a+"</span>"),e(document).on(r,function(e){var t=e.shiftKey||e.ctrlKey||e.metaKey;o!==t&&(o=t,l.is(":visible")&&l.data("dropover")&&!l.data("droped")&&(l.toggleClass("elfinder-drag-helper-plus",!!l.data("locked")||o),u.trigger(o?"unlockfiles":"lockfiles",{files:i,helper:l})))}),l}}}(),u.commands.getfile&&("function"==typeof u.options.getFileCallback?(u.bind("dblclick",function(e){e.preventDefault(),u.exec("getfile").fail(function(){u.exec("open",e.data&&e.data.file?[e.data.file]:void 0)})}),u.shortcut({pattern:"enter",description:u.i18n("cmdgetfile"),callback:function(){u.exec("getfile").fail(function(){u.exec("mac"==u.OS?"rename":"open")})}}).shortcut({pattern:"ctrl+enter",description:u.i18n("mac"==u.OS?"cmdrename":"cmdopen"),callback:function(){u.exec("mac"==u.OS?"rename":"open")}})):u.options.getFileCallback=null),e.each(u.commands,function(t,n){var i,a,o=Object.assign({},n.prototype);if(e.isFunction(n)&&!u._commands[t]&&(n.prototype.forceLoad||e.inArray(t,u.options.commands)!==-1)){if(i=n.prototype.extendsCmd||""){if(!e.isFunction(u.commands[i]))return!0;n.prototype=Object.assign({},_,new u.commands[i],n.prototype)}else n.prototype=Object.assign({},_,n.prototype);u._commands[t]=new n,n.prototype=o,a=u.options.commandsOptions[t]||{},i&&u.options.commandsOptions[i]&&(a=e.extend(!0,{},u.options.commandsOptions[i],a)),u._commands[t].setup(t,a),u._commands[t].linkedCmds.length&&e.each(u._commands[t].linkedCmds,function(t,n){var i=u.commands[n];e.isFunction(i)&&!u._commands[n]&&(i.prototype=_,u._commands[n]=new i,u._commands[n].setup(n,u.options.commandsOptions[n]||{}))})}}),u.ui={workzone:e("<div/>").appendTo(m).elfinderworkzone(u),navbar:e("<div/>").appendTo(m).elfindernavbar(u,u.options.uiOptions.navbar||{}),navdock:e("<div/>").appendTo(m).elfindernavdock(u,u.options.uiOptions.navdock||{}),contextmenu:e("<div/>").appendTo(m).elfindercontextmenu(u),overlay:e("<div/>").appendTo(m).elfinderoverlay({show:function(){u.disable()},hide:function(){T&&u.enable()}}),cwd:e("<div/>").appendTo(m).elfindercwd(u,u.options.uiOptions.cwd||{}),notify:u.dialog("",{cssClass:"elfinder-dialog-notify",position:u.options.notifyDialog.position,absolute:!0,resizable:!1,autoOpen:!1,closeOnEscape:!1,title:" ",width:u.options.notifyDialog.width?parseInt(u.options.notifyDialog.width):null,minHeight:null}),statusbar:e('<div class="ui-widget-header ui-helper-clearfix ui-corner-bottom elfinder-statusbar"/>').hide().appendTo(m),toast:e('<div class="elfinder-toast"/>').appendTo(m),bottomtray:e('<div class="elfinder-bottomtray">').appendTo(m)},u.trigger("uiready"),e.each(u.options.ui||[],function(t,n){var i="elfinder"+n,a=u.options.uiOptions[n]||{};!u.ui[n]&&e.fn[i]&&(u.ui[n]=e("<"+(a.tag||"div")+"/>").appendTo(m),u.ui[n][i](u,a))}),u.resize(N,L),u.options.resizable&&(m.resizable({resize:function(e,t){u.resize(t.size.width,t.size.height)},handles:"se",minWidth:300,minHeight:200}),u.UA.Touch&&m.addClass("touch-punch")),function(){var e=u.getUI("navbar"),t=u.getUI("cwd").parent();u.autoScroll={navbarUp:function(t){e.scrollTop(Math.max(0,e.scrollTop()-t))},navbarDown:function(t){e.scrollTop(e.scrollTop()+t)},cwdUp:function(e){t.scrollTop(Math.max(0,t.scrollTop()-e))},cwdDown:function(e){t.scrollTop(t.scrollTop()+e)}}}(),u.UA.Touch&&!function(){var e,t,n,i,a,o,r,s,l,c=u.getUI("navbar"),d=u.getUI("toolbar"),p="touchmove.stopscroll",h=function(e){var n=e.originalEvent.touches||[{}],i=n[0].pageY||null;(!t||i<t)&&(e.preventDefault(),s&&clearTimeout(s))},f=function(e){e.preventDefault(),s&&clearTimeout(s)},g=function(){s=setTimeout(function(){m.off(p)},100)},v=50;c=c.children().length?c:null,d=d.length?d:null,m.on("touchstart touchmove touchend",function(s){if("touchend"===s.type)return e=!1,t=!1,void g();var b,y,w,x,k,C=s.originalEvent.touches||[{}],z=C[0].pageX||null,T=C[0].pageY||null,A="ltr"===u.direction;null===z||null===T||"touchstart"===s.type&&C.length>1||("touchstart"===s.type?(n=m.offset(),i=m.width(),c&&(e=!1,c.is(":hidden")?(l||(l=Math.max(50,i/10)),(A?z-n.left:i+n.left-z)<l&&(e=z)):s.originalEvent._preventSwipeX||(o=c.width(),y=A?z<n.left+o:z>n.left+i-o,y?(l=Math.max(50,i/10),e=z):e=!1)),d&&(t=!1,s.originalEvent._preventSwipeY||(r=d.height(),a=n.top,T-a<(d.is(":hidden")?v:r+30)&&(t=T,m.on(p,d.is(":hidden")?f:h))))):(c&&e!==!1&&(b=(A?e>z:e<z)?"navhide":"navshow",w=Math.abs(e-z),("navhide"===b&&w>.6*o||w>("navhide"===b?o/3:45)&&("navshow"===b||(A?z<n.left+20:z>n.left+i-20)))&&(u.getUI("navbar").trigger(b,{handleW:l}),e=!1)),d&&t!==!1&&(x=d.offset().top,Math.abs(t-T)>Math.min(45,r/3)&&(k=t>T?"slideUp":"slideDown",("slideDown"===k||x+20>T)&&(d.is("slideDown"===k?":hidden":":visible")&&d.stop(!0,!0).trigger("toggle",{duration:100,handleH:v}),t=!1)))))})}(),u.dragUpload&&!function(){var t,n,i=function(t){return"TEXTAREA"!==t.target.nodeName&&"INPUT"!==t.target.nodeName&&0===e(t.target).closest("div.ui-dialog-content").length},a="native-drag-enter",o="native-drag-disable",r="class",s=u.res(r,"navdir"),l=(u.res(r,"droppable"),u.res(r,"adroppable"),u.res(r,"navarrow"),u.res(r,"adroppable")),c=u.getUI("workzone"),d="ltr"===u.direction,p=function(){n&&cancelAnimationFrame(n),n=null};m.on("dragenter",function(e){p(),i(e)&&(e.preventDefault(),e.stopPropagation(),t=c.data("rectangle"))}).on("dragleave",function(e){p(),i(e)&&(e.preventDefault(),e.stopPropagation())}).on("dragover",function(e){var a;i(e)?(e.preventDefault(),e.stopPropagation(),e.originalEvent.dataTransfer.dropEffect="none",n||(n=requestAnimationFrame(function(){var i,o=t.top+t.height,r=o-u.getUI("navdock").outerHeight(!0);((a=e.pageY<t.top)||e.pageY>r)&&(i=t.cwdEdge>e.pageX?(d?"navbar":"cwd")+(a?"Up":"Down"):(d?"cwd":"navbar")+(a?"Up":"Down"),a||"cwd"===i.substr(0,3)&&(o<e.pageY?r=o:i=""),i&&u.autoScroll[i](Math.pow(a?t.top-e.pageY:e.pageY-r,1.3))),n=null}))):p()}).on("drop",function(e){p(),i(e)&&(e.stopPropagation(),e.preventDefault())}),m.on("dragenter",".native-droppable",function(t){if(t.originalEvent.dataTransfer){var n,i=e(t.currentTarget),r=t.currentTarget.id||null,s=null;if(!r){s=u.cwd(),i.data(o,!1);try{e.each(t.originalEvent.dataTransfer.types,function(e,t){"elfinderfrom:"===t.substr(0,13)&&(n=t.substr(13).toLowerCase())})}catch(t){}}s&&(!s.write||n&&n===(window.location.href+s.hash).toLowerCase())?i.data(o,!0):(t.preventDefault(),t.stopPropagation(),i.data(a,!0),i.addClass(l))}}).on("dragleave",".native-droppable",function(t){if(t.originalEvent.dataTransfer){var n=e(t.currentTarget);t.preventDefault(),t.stopPropagation(),n.data(a)?n.data(a,!1):n.removeClass(l)}}).on("dragover",".native-droppable",function(t){if(t.originalEvent.dataTransfer){var n=e(t.currentTarget);t.preventDefault(),t.stopPropagation(),t.originalEvent.dataTransfer.dropEffect=n.data(o)?"none":"copy",n.data(a,!1)}}).on("drop",".native-droppable",function(t){if(t.originalEvent&&t.originalEvent.dataTransfer){var n,i=e(t.currentTarget);t.preventDefault(),t.stopPropagation(),i.removeClass(l),n=t.currentTarget.id?i.hasClass(s)?u.navId2Hash(t.currentTarget.id):u.cwdId2Hash(t.currentTarget.id):u.cwd().hash,t.originalEvent._target=n,u.exec("upload",{dropEvt:t.originalEvent,target:n},void 0,n)}})}(),null===u.cssloaded?!function(){var e,t,n=function(){m.data("cssautoloadHide")&&(m.data("cssautoloadHide").remove(),m.removeData("cssautoloadHide")),u.cssloaded=!0,requestAnimationFrame(function(){u.trigger("cssloaded")})};"hidden"===m.css("visibility")?(e=1e3,t=setInterval(function(){(--e<0||"hidden"!==m.css("visibility"))&&(clearInterval(t),n())},10)):n()}():(u.cssloaded=!0,
+u.trigger("cssloaded")),u.zIndexCalc(),void u.trigger("init").request({data:{cmd:"open",target:u.startDir(),init:1,tree:1},preventDone:!0,notify:{type:"open",cnt:1,hideCnt:!0},freeze:!0}).fail(function(){u.trigger("fail").disable().lastDir(""),E={},U={},e(document).add(m).off("."+y),u.trigger=function(){}}).done(function(t){var n=function(e){var t=u.file(u.trashes[e]);u.options.debug;t&&t.volumeid&&delete u.volOptions[t.volumeid].trashHash,u.trashes[e]=!1,u.debug("backend-error",'Trash hash "'+e+'" was not found or not writable.')},i={};u.options.rawStringDecoder&&u.registRawStringDecoder(u.options.rawStringDecoder),u.zIndexCalc(),u.load().debug("api",u.api),m.trigger("resize"),J(t),u.trigger("open",t,!1),u.trigger("opendone"),re&&u.options.enableAlways&&e(window).trigger("focus"),e.each(u.trashes,function(e){var t=u.file(e);t?"directory"===t.mime&&t.write||n(e):i[e]=!0}),Object.keys(i).length&&u.request({data:{cmd:"info",targets:Object.keys(i)},preventDefault:!0}).done(function(t){t&&t.files&&e.each(t.files,function(e,t){"directory"===t.mime&&t.write&&delete i[t.hash]})}).always(function(){e.each(i,n)}),u[u.options.enableAlways?"enable":"disable"]()})):alert(u.i18n("errURL")):alert(u.i18n("errNode")):alert(u.i18n("errJqui"))},a&&"function"==typeof a&&(u.bootCallback=a,a.call(m.get(0),u,{dfrdsBeforeBootup:h})),e.when.apply(null,h).done(function(){d()}).fail(function(e){u.error(e)})};return("undefined"==typeof n||n)&&(window.elFinder=i),i.prototype={uniqueid:0,res:function(e,t){return this.resources[e]&&this.resources[e][t]},OS:navigator.userAgent.indexOf("Mac")!==-1?"mac":navigator.userAgent.indexOf("Win")!==-1?"win":"other",UA:function(){var e=!document.unqueID&&!window.opera&&!window.sidebar&&window.localStorage&&"WebkitAppearance"in document.documentElement.style,t=e&&window.chrome,n={ltIE6:"undefined"==typeof window.addEventListener&&"undefined"==typeof document.documentElement.style.maxHeight,ltIE7:"undefined"==typeof window.addEventListener&&"undefined"==typeof document.querySelectorAll,ltIE8:"undefined"==typeof window.addEventListener&&"undefined"==typeof document.getElementsByClassName,ltIE9:document.uniqueID&&document.documentMode<=9,ltIE10:document.uniqueID&&document.documentMode<=10,gtIE11:document.uniqueID&&document.documentMode>=11,IE:document.uniqueID,Firefox:window.sidebar,Opera:window.opera,Webkit:e,Chrome:t,Edge:!(!t||!window.msCredentials),Safari:e&&!window.chrome,Mobile:"undefined"!=typeof window.orientation,Touch:"undefined"!=typeof window.ontouchstart,iOS:navigator.platform.match(/^iP(?:[ao]d|hone)/),Fullscreen:"undefined"!=typeof(document.exitFullscreen||document.webkitExitFullscreen||document.mozCancelFullScreen||document.msExitFullscreen),Angle:0,Rotated:!1,CSS:function(){var e,t=document.createElement("a").style,n=document.createElement("p").style;return e="position:sticky;position:-webkit-sticky;",e+="width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;",t.cssText=e,{positionSticky:t.position.indexOf("sticky")!==-1,widthMaxContent:t.width.indexOf("max-content")!==-1,flex:"undefined"!=typeof n.flex}}()};return n}(),hasRequire:"function"==typeof define&&define.amd,currentReqCmd:"",keyState:{},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"]},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"},mimeTypes:{},rules:{defaults:function(e){return!(!e||e.added&&!Array.isArray(e.added)||e.removed&&!Array.isArray(e.removed)||e.changed&&!Array.isArray(e.changed))},open:function(t){return t&&t.cwd&&t.files&&e.isPlainObject(t.cwd)&&Array.isArray(t.files)},tree:function(e){return e&&e.tree&&Array.isArray(e.tree)},parents:function(e){return e&&e.tree&&Array.isArray(e.tree)},tmb:function(t){return t&&t.images&&(e.isPlainObject(t.images)||Array.isArray(t.images))},upload:function(t){return t&&(e.isPlainObject(t.added)||Array.isArray(t.added))},search:function(e){return e&&e.files&&Array.isArray(e.files)}},commands:{},cmdsToAdd:"archive duplicate extract mkdir mkfile paste rm upload",parseUploadData:function(t){var n,i=this;if(!e.trim(t))return{error:["errResponse","errDataEmpty"]};try{n=JSON.parse(t)}catch(a){return{error:["errResponse","errDataNotJSON"]}}return n=i.normalize(n),i.validResponse("upload",n)?(n.removed=e.merge(n.removed||[],e.map(n.added||[],function(e){return i.file(e.hash)?e.hash:null})),n):{error:response.norError||["errResponse"]}},iframeCnt:0,uploads:{xhrUploading:!1,failSyncTm:null,chunkfailReq:{},checkExists:function(t,n,i,a){var o,r=e.Deferred(),s=[],l={},c=function(){for(var e=t.length;--e>-1;)t[e]._remove=!0},d=function(){r.resolve(s,l)},p=function(){var r=[],p=[],u=n!==i.cwd().hash?i.path(n,!0)+i.option("separator",n):"",h=function(e){var n=e==p.length-1,o={cssClass:"elfinder-confirm-upload",title:i.i18n("cmdupload"),text:["errExists",u+p[e].name,"confirmRepl"],all:!n,accept:{label:"btnYes",callback:function(t){n||t?d():h(++e)}},reject:{label:"btnNo",callback:function(i){var a;if(i)for(a=p.length;e<a--;)t[p[a].i]._remove=!0;else t[p[e].i]._remove=!0;n||i?d():h(++e)}},cancel:{label:"btnCancel",callback:function(){c(),d()}},buttons:[{label:"btnBackup",cssClass:"elfinder-confirm-btn-backup",callback:function(t){var i;if(t)for(i=p.length;e<i--;)s.push(p[i].name);else s.push(p[e].name);n||t?d():h(++e)}}]};a||o.buttons.push({label:"btnRename"+(n?"":"All"),cssClass:"elfinder-confirm-btn-rename",callback:function(){s=null,d()}}),i.iframeCnt>0&&delete o.reject,i.confirm(o)};return i.file(n).read?(o=e.map(t,function(e,t){return!e.name||i.UA.iOS&&"image.jpg"===e.name?null:{i:t,name:e.name}}),void i.request({data:{cmd:"ls",target:n,intersect:e.map(o,function(e){return e.name})},notify:{type:"preupload",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(t){var a,s;t&&(t.error?c():i.options.overwriteUploadConfirm&&i.option("uploadOverwrite",n)&&t.list&&(Array.isArray(t.list)?r=t.list||[]:(a=[],r=e.map(t.list,function(e){return"string"==typeof e?e:(a=a.concat(e),!1)}),a.length&&(r=r.concat(a)),l=t.list),p=e.grep(o,function(t){return e.inArray(t.name,r)!==-1}),p.length&&r.length&&n==i.cwd().hash&&(s=e.map(i.files(n),function(e){return e.name}),e.grep(r,function(t){return e.inArray(t,s)===-1}).length&&i.sync()))),p.length>0?h(0):d()}).fail(function(e){c(),d(),e&&i.error(e)})):void d()};return i.api>=2.1&&"object"==typeof t[0]?p():d(),r},checkFile:function(t,n,i){if(t.checked||"files"==t.type)return t.files;if("data"==t.type){var a,o,r=e.Deferred(),s=e.Deferred(),l=[],c=[],d=0,p=[],u=!1,h=function(e){return Array.prototype.slice.call(e||[],0)},f=function(e){var t,i,a=n.options.folderUploadExclude[n.OS]||null,o=e.length,r=function(){--d<1&&"pending"===s.state()&&s.resolve()},m=function(e){a&&e.name.match(a)||(c.push(t.fullPath||""),l.push(e)),r()},i=function(e){var t=[],n=function(){e.readEntries(function(e){if(u||!e.length){for(var i=0;i<t.length;i++){if(u){s.reject();break}f([t[i]])}r()}else t=t.concat(h(e)),n()},r)};n()};d++;for(var g=0;g<o;g++){if(u){s.reject();break}t=e[g],t&&(t.isFile?(d++,t.file(m,r)):t.isDirectory&&n.api>=2.1&&(d++,p.push(t.fullPath),i(t.createReader())))}return r(),s};return a=e.map(t.files.items,function(e){return e.getAsEntry?e.getAsEntry():e.webkitGetAsEntry()}),e.each(a,function(e,t){if(t.isDirectory)return o=!0,!1}),a.length>0?(n.uploads.checkExists(a,i,n,o).done(function(o,s){var d=[];n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",i)&&(null===o&&(t.overwrite=0,o=[]),a=e.grep(a,function(t){var a,r,l,c;return t.isDirectory&&o.length&&(a=e.inArray(t.name,o),a!==-1&&(o.splice(a,1),r=n.uniqueName(t.name+n.options.backupSuffix,null,""),e.each(s,function(e,n){if(t.name==n)return l=e,!1}),l||(l=n.fileByName(t.name,i).hash),n.lockfiles({files:[l]}),c=n.request({data:{cmd:"rename",target:l,name:r},notify:{type:"rename",cnt:1}}).fail(function(){t._remove=!0,n.sync()}).always(function(){n.unlockfiles({files:[l]})}),d.push(c))),!t._remove})),e.when.apply(e,d).done(function(){var e,t,i=+new Date;a.length>0?(t=n.escape(a[0].name),a.length>1&&(t+=" ... "+a.length+n.i18n("items")),e=setTimeout(function(){n.notify({type:"readdir",id:i,cnt:1,hideCnt:!0,msg:n.i18n("ntfreaddir")+" ("+t+")",cancel:function(){u=!0}})},n.options.notifyDelay),f(a).done(function(){e&&clearTimeout(e),n.notify({type:"readdir",id:i,cnt:-1}),u?r.reject():r.resolve([l,c,o,s,p])}).fail(function(){r.reject()})):r.reject()})}),r.promise()):r.reject()}var m=[],g=[],v=t.files[0];if("html"==t.type){var b,y=e("<html/>").append(e.parseHTML(v.replace(/ src=/gi," _elfsrc=")));e("img[_elfsrc]",y).each(function(){var n,i,a=e(this),o=a.closest("a");o&&o.attr("href")&&o.attr("href").match(/\.(?:jpe?g|gif|bmp|png)/i)&&(i=o.attr("href")),n=a.attr("_elfsrc"),n&&(i?(e.inArray(i,m)==-1&&m.push(i),e.inArray(n,g)==-1&&g.push(n)):e.inArray(n,m)==-1&&m.push(n)),1===m.length&&m[0].match(/^data:image\/png/)&&(t.clipdata=!0)}),b=e("a[href]",y),b.each(function(){var t,n,i=function(e){var t=document.createElement("a");return t.href=e,t};(t=e(this).text())&&(n=i(e(this).attr("href")),n.href&&n.href.match(/^(?:ht|f)tp/i)&&(1===b.length||!n.pathname.match(/(?:\.html?|\/[^\/.]*)$/i)||e.trim(t).match(/\.[a-z0-9-]{1,10}$/i))&&e.inArray(n.href,m)==-1&&e.inArray(n.href,g)==-1&&m.push(n.href))})}else{var w,x,k;for(w=/((?:ht|f)tps?:\/\/[-_.!~*\'()a-z0-9;/?:\@&=+\$,%#\*\[\]]+)/gi;x=w.exec(v);)k=x[1].replace(/&/g,"&"),e.inArray(k,m)==-1&&m.push(k)}return m},xhr:function(t,n){var i=n?n:this,a=i.getUI(),o=new XMLHttpRequest,r=null,s=null,l=t.checked,c=t.isDataType||"data"==t.type,d=t.target||i.cwd().hash,p=t.dropEvt||null,u=t.extraData||null,h=i.option("uploadMaxConn",d)!=-1,f=Math.min(5,Math.max(1,i.option("uploadMaxConn",d))),m=1e4,g=30,v=0,b=function(t){var n=e.Deferred();return t.promise?t.always(function(e){n.resolve(Array.isArray(e)&&e.length?c?e[0][0]:e[0]:{})}):n.resolve(t.length?c?t[0][0]:t[0]:{}),n},y=e.Deferred().fail(function(e){var t,a=i.parseError(e);"userabort"===a&&(t=!0,a=void 0),x&&(i.uploads.xhrUploading||t)?b(x).done(function(e){t||P(a,e),e._cid?i.uploads.chunkfailReq[e._cid]||(i.uploads.chunkfailReq[e._cid]=!0,setTimeout(function(){n.request({data:{cmd:"upload",target:d,chunk:e._chunk,cid:e._cid,upload:["chunkfail"],mimes:"chunkfail"},options:{type:"post",url:i.uploadURL},preventDefault:!0}).always(function(){delete i.uploads.chunkfailReq[e._chunk]})},1e3)):(i.uploads.failSyncTm&&clearTimeout(i.uploads.failSyncTm),i.uploads.failSyncTm=setTimeout(function(){i.sync(d)},1e3))}):P(a),!t&&i.sync(),i.uploads.xhrUploading=!1,x=null}).done(function(t){i.uploads.xhrUploading=!1,x=null,t&&(i.currentReqCmd="upload",t.warning&&P(t.warning),i.updateCache(t),t.removed&&t.removed.length&&i.remove(t),t.added&&t.added.length&&i.add(t),t.changed&&t.changed.length&&i.change(t),i.trigger("upload",t,!1),i.trigger("uploaddone"),t.toasts&&Array.isArray(t.toasts)&&e.each(t.toasts,function(){this.msg&&i.toast(this)}),t.sync&&i.sync(),t.debug&&n.debug("backend-debug",t))}).always(function(){i.abortXHR(o),a.off("uploadabort",M),e(window).off("unload",M),r&&clearTimeout(r),s&&clearTimeout(s),l&&!t.multiupload&&j()&&i.notify({type:"upload",cnt:-k,progress:0,size:0}),N&&S.children(".elfinder-notify-chunkmerge").length&&i.notify({type:"chunkmerge",cnt:-1})}),w=new FormData,x=t.input?t.input.files:i.uploads.checkFile(t,i,d),k=t.checked&&c?x[0].length:x.length,C=0,z=0,T=0,A=!1,S=i.ui.notify,I=!0,O=!1,j=function(){return!A&&(L=S.children(".elfinder-notify-upload")).length&&(A=!0),A},M=function(e,t){O=!0,i.abortXHR(o,{quiet:!0,abort:!0}),y.reject(t),j()&&i.notify({type:"upload",cnt:L.data("cnt")*-1,progress:0,size:0})},D=function(e){L.children(".elfinder-notify-cancel")[e?"show":"hide"]()},F=function(e){return e||(e=T),setTimeout(function(){A=!0,i.notify({type:"upload",cnt:k,progress:C-z,size:e,cancel:function(){a.trigger("uploadabort","userabort")}}),L=S.children(".elfinder-notify-upload"),z=C,t.multiupload?I&&D(!0):D(I&&C<e)},i.options.notifyDelay)},E=function(){v++<=g?(j()&&z&&i.notify({type:"upload",cnt:0,progress:0,size:z}),i.abortXHR(o,{quiet:!0}),z=C=0,setTimeout(function(){var e;O||(o.open("POST",i.uploadURL,!0),i.api>=2.1029&&(e=(+new Date).toString(16)+Math.floor(1e3*Math.random()).toString(16),"function"==typeof w["delete"]&&w["delete"]("reqid"),w.append("reqid",e),o._requestId=e),o.send(w))},m)):a.trigger("uploadabort",["errAbort","errTimeout"])},U=function(){A&&y.notifyWith(L,[{cnt:L.data("cnt"),progress:L.data("progress"),total:L.data("total")}])},P=function(e,t,n){e&&i.trigger("xhruploadfail",{error:e,file:t}),n?e&&(q<i.options.maxErrorDialogs&&(Array.isArray(e)?R=R.concat(e):R.push(e)),q++):e?i.error(e):(R.length&&(q>=i.options.maxErrorDialogs&&(R=R.concat("moreErrors",q-i.options.maxErrorDialogs)),i.error(R)),R=[],q=0)},R=[],q=0,H=t.renames||null,_=t.hashes||null,N=!1,L=e();if(a.one("uploadabort",M),e(window).one("unload."+n.namespace,M),!N&&(z=C),!c&&!k)return y.reject(["errUploadNoFiles"]);o.addEventListener("error",function(){0==o.status?O?y.reject():!c&&t.files&&e.grep(t.files,function(e){return!e.type&&e.size===(i.UA.Safari?1802:0)}).length?y.reject(["errAbort","errFolderUpload"]):t.input&&e.grep(t.input.files,function(e){return!e.type&&e.size===(i.UA.Safari?1802:0)}).length?y.reject(["errUploadNoFiles"]):E():a.trigger("uploadabort","errConnect")},!1),o.addEventListener("load",function(e){var n,l,d=o.status,p=0,u="";if(d>=400?u=d>500?"errResponse":["errResponse","errServerError"]:o.responseText||(u=["errResponse","errDataEmpty"]),u&&(a.trigger("uploadabort"),b(x).done(function(e){return y.reject(e._cid?null:u)})),C=T,j()&&(p=C-z)&&(i.notify({type:"upload",cnt:0,progress:p,size:0}),U()),n=i.parseUploadData(o.responseText),n._chunkmerged){w=new FormData;var h=[{_chunkmerged:n._chunkmerged,_name:n._name,_mtime:n._mtime}];return N=!0,a.off("uploadabort",M),s=setTimeout(function(){i.notify({type:"chunkmerge",cnt:1})},i.options.notifyDelay),void(c?W(h,x[1]):W(h))}n._multiupload=!!t.multiupload,n.error?(l={cmd:"upload",err:n,xhr:o,rc:o.status},i.trigger("uploadfail",n),i.trigger("requestError",l),l._event&&l._event.isDefaultPrevented()&&(n.error=""),n._chunkfailure||n._multiupload?(O=!0,i.uploads.xhrUploading=!1,r&&clearTimeout(r),L.length?(i.notify({type:"upload",cnt:-k,progress:0,size:0}),y.reject(n)):y.reject()):y.reject(n)):y.resolve(n)},!1),o.upload.addEventListener("loadstart",function(e){!N&&e.lengthComputable&&(C=e.loaded,v&&(C=0),T=e.total,C||(C=parseInt(.05*T)),j()&&(i.notify({type:"upload",cnt:0,progress:C-z,size:t.multiupload?0:T}),z=C,U()))},!1),o.upload.addEventListener("progress",function(e){var n;e.lengthComputable&&!N&&o.readyState<2&&(C=e.loaded,!t.checked&&C>0&&!r&&(r=F(o._totalSize-C)),T||(T=e.total,C||(C=parseInt(.05*T))),n=C-z,j()&&n/e.total>=.05&&(i.notify({type:"upload",cnt:0,progress:n,size:0}),z=C,U()),!t.multiupload&&C>=T&&(I=!1,D(!1)))},!1);var W=function(a,s){var m,g,v,b,x,C,z,T,A,S,M,E,U,q,N=0,L=1,W=[],B=0,$=k,K=0,V=[],X=(new Date).getTime().toString().substr(-9),G=Math.min((n.uplMaxSize?n.uplMaxSize:2097152)-8190,n.options.uploadMaxChunkSize),J=!h&&"",Y=function(a,o){var s,l,u=[],h=0;if(!O){for(;a.length&&u.length<o;)u.push(a.shift());if(h=u.length){l=h;for(var f=0;f<h&&!O;f++)s=c?u[f][0][0]._cid||null:u[f][0]._cid||null,U[s]?E--:n.exec("upload",{type:t.type,isDataType:c,files:u[f],checked:!0,target:d,dropEvt:p,renames:H,hashes:_,multiupload:!0,overwrite:0===t.overwrite?0:void 0},void 0,d).fail(function(e){e&&"No such command"===e&&(O=!0,n.error(["errUpload","errPerm"])),s&&(U[s]=!0)}).always(function(t){t&&t.added&&(S=e.merge(S,t.added)),E<=++M&&(n.trigger("multiupload",{added:S}),r&&clearTimeout(r),j()&&i.notify({type:"upload",cnt:-k,progress:0,size:0})),a.length?Y(a,1):--l<=1&&(I=!1,D(!1))})}}(u.length<1||O)&&(O?(r&&clearTimeout(r),s&&(U[s]=!0),y.reject()):(y.resolve(),i.uploads.xhrUploading=!1))},Q=function(){i.uploads.xhrUploading?setTimeout(Q,100):(i.uploads.xhrUploading=!0,Y(W,f))};if(!l&&(c||"files"==t.type)){for((m=n.option("uploadMaxSize",d))||(m=0),b=0;b<a.length;b++){try{T=a[b],g=T.size,J===!1&&(J="",i.api>=2.1&&("slice"in T?J="slice":"mozSlice"in T?J="mozSlice":"webkitSlice"in T&&(J="webkitSlice")))}catch(Z){k--,$--;continue}if(m&&g>m||!J&&n.uplMaxSize&&g>n.uplMaxSize)P(["errUploadFile",T.name,"errUploadFileSize"],T,!0),k--,$--;else if(!T.type||i.uploadMimeCheck(T.type,d))if(J&&g>G){for(x=0,C=G,z=-1,$=Math.floor((g-1)/G),v=T.lastModified?Math.round(T.lastModified/1e3):0,K+=g,V[X]=0;x<g;)A=T[J](x,C),A._chunk=T.name+"."+ ++z+"_"+$+".part",A._cid=X,A._range=x+","+A.size+","+g,A._mtime=v,V[X]++,N&&B++,"undefined"==typeof W[B]&&(W[B]=[],c&&(W[B][0]=[],W[B][1]=[])),N=G,L=1,c?(W[B][0].push(A),W[B][1].push(s[b])):W[B].push(A),x=C,C=x+G;null==A?(P(["errUploadFile",T.name,"errUploadFileSize"],T,!0),k--,$--):($+=z,N=0,L=1,B++)}else(n.uplMaxSize&&N+g>n.uplMaxSize||L>n.uplMaxFile)&&(N=0,L=1,B++),"undefined"==typeof W[B]&&(W[B]=[],c&&(W[B][0]=[],W[B][1]=[])),c?(W[B][0].push(T),W[B][1].push(s[b])):W[B].push(T),N+=g,K+=g,L++;else P(["errUploadFile",T.name,"errUploadMime","("+T.type+")"],T,!0),k--,$--}if(R.length&&P(),0==W.length)return t.checked=!0,!1;if(W.length>1)return r=F(K),S=[],M=0,E=W.length,U=[],Q(),!0;c?(a=W[0][0],s=W[0][1]):a=W[0]}return l||(n.UA.Safari&&t.files?o._totalSize=K:r=F(K)),l=!0,a.length||y.reject(["errUploadNoFiles"]),o.open("POST",i.uploadURL,!0),n.customHeaders&&e.each(n.customHeaders,function(e){o.setRequestHeader(e,this)}),n.xhrFields&&e.each(n.xhrFields,function(e){e in o&&(o[e]=this)}),i.api>=2.1029&&(q=(+new Date).toString(16)+Math.floor(1e3*Math.random()).toString(16),w.append("reqid",q),o._requestId=q),w.append("cmd","upload"),w.append(i.newAPI?"target":"current",d),H&&H.length&&(e.each(H,function(e,t){w.append("renames[]",t)}),w.append("suffix",n.options.backupSuffix)),_&&e.each(_,function(e,t){w.append("hashes["+e+"]",t)}),e.each(i.customData,function(e,t){w.append(e,t)}),e.each(i.options.onlyMimes,function(e,t){w.append("mimes[]",t)}),e.each(a,function(e,i){i._chunkmerged?(w.append("chunk",i._chunkmerged),w.append("upload[]",i._name),w.append("mtime[]",i._mtime)):(i._chunkfail?(w.append("upload[]","chunkfail"),w.append("mimes","chunkfail")):(w.append("upload[]",i),t.clipdata&&(t.overwrite=0,w.append("name[]",n.date(n.nonameDateFormat)+".png")),i.name&&n.UA.iOS&&(i.name.match(/^image\.jpe?g$/i)?(t.overwrite=0,w.append("name[]",n.date(n.nonameDateFormat)+".jpg")):i.name.match(/^capturedvideo\.mov$/i)&&(t.overwrite=0,w.append("name[]",n.date(n.nonameDateFormat)+".mov")))),i._chunk?(w.append("chunk",i._chunk),w.append("cid",i._cid),w.append("range",i._range),w.append("mtime[]",i._mtime)):w.append("mtime[]",i.lastModified?Math.round(i.lastModified/1e3):0))}),c&&e.each(s,function(e,t){w.append("upload_path[]",t)}),0===t.overwrite&&w.append("overwrite",0),p&&w.append("dropWith",parseInt((p.altKey?"1":"0")+(p.ctrlKey?"1":"0")+(p.metaKey?"1":"0")+(p.shiftKey?"1":"0"),2)),u&&e.each(u,function(e,t){w.append(e,t)}),o.send(w),!0};if(c)l?W(x[0],x[1]):x.done(function(t){if(H=[],k=t[0].length){if(t[4]&&t[4].length)return void n.request({data:{cmd:"mkdir",target:d,dirs:t[4]},notify:{type:"mkdir",cnt:t[4].length},preventFail:!0}).fail(function(e){e=e||["errUnknown"],"errCmdParams"===e[0]?f=1:(f=0,y.reject(e))}).done(function(n){var i=!1;n.hashes||(n.hashes={}),t[1]=e.map(t[1],function(e,a){return e=e.replace(/\/[^\/]*$/,""),""===e?d:n.hashes[e]?n.hashes[e]:(i=!0,t[0][a]._remove=!0,null)}),i&&(t[0]=e.grep(t[0],function(e){return!e._remove}))}).always(function(e){f&&(H=t[2],_=t[3],W(t[0],t[1]))});t[1]=e.map(t[1],function(){return d}),H=t[2],_=t[3],W(t[0],t[1])}else y.reject(["errUploadNoFiles"])}).fail(function(){y.reject()});else if(x.length>0)if(t.clipdata||null!=H)W(x)||y.reject();else{var B=[],$=[],K=n.options.folderUploadExclude[n.OS]||null;e.each(x,function(t,n){var i,a,o=n.webkitRelativePath||n.relativePath||"";return!!o&&(K&&n.name.match(K)?(n._remove=!0,o=void 0):(o="/"+o.replace(/\/[^\/]*$/,"").replace(/^\//,""),o&&e.inArray(o,B)===-1&&(B.push(o),i=o.substr(1).indexOf("/"),i!==-1&&(a=o.substr(0,i+1))&&e.inArray(a,B)===-1&&B.unshift(a))),void $.push(o))}),H=[],_={},B.length?!function(){var t=e.map(B,function(e){return e.substr(1).indexOf("/")===-1?{name:e.substr(1)}:null}),i=[];n.uploads.checkExists(t,d,n,!0).done(function(a,o){var r,s,l,p=[];n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",d)&&(i=e.map(t,function(e){return e._remove?e.name:null}),t=e.grep(t,function(e){return!e._remove})),i.length&&e.each($.concat(),function(t,n){0===e.inArray(n,i)&&(x[t]._remove=!0,$[t]=void 0)}),x=e.grep(x,function(e){return!e._remove}),$=e.grep($,function(e){return void 0!==e}),t.length?(r=e.Deferred(),a.length?e.each(a,function(t,i){s=n.uniqueName(i+n.options.backupSuffix,null,""),e.each(o,function(e,t){if(a[0]==t)return l=e,!1}),l||(l=n.fileByName(a[0],d).hash),n.lockfiles({files:[l]}),p.push(n.request({data:{cmd:"rename",target:l,name:s},notify:{type:"rename",cnt:1}}).fail(function(e){y.reject(e),n.sync()}).always(function(){n.unlockfiles({files:[l]})}))}):p.push(null),e.when.apply(e,p).done(function(){n.request({data:{cmd:"mkdir",target:d,dirs:B},notify:{type:"mkdir",cnt:B.length},preventFail:!0}).fail(function(e){e=e||["errUnknown"],"errCmdParams"===e[0]?f=1:(f=0,y.reject(e))}).done(function(t){var n=!1;t.hashes||(t.hashes={}),$=e.map($.concat(),function(e,i){return"/"===e?d:t.hashes[e]?t.hashes[e]:(n=!0,x[i]._remove=!0,null)}),n&&(x=e.grep(x,function(e){return!e._remove}))}).always(function(e){f&&(c=!0,W(x,$)||y.reject())})})):y.reject()})}():n.uploads.checkExists(x,d,n).done(function(i,a){n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",d)&&(_=a,null===i?t.overwrite=0:H=i,x=e.grep(x,function(e){return!e._remove})),k=x.length,k>0?W(x)||y.reject():y.reject()})}else y.reject();return y},iframe:function(t,n){var i,a,o,r,s=n?n:this,l=!!t.input&&t.input,c=!l&&s.uploads.checkFile(t,s),d=e.Deferred().fail(function(e){e&&s.error(e)}),p="iframe-"+n.namespace+ ++s.iframeCnt,u=e('<form action="'+s.uploadURL+'" method="post" enctype="multipart/form-data" encoding="multipart/form-data" target="'+p+'" style="display:none"><input type="hidden" name="cmd" value="upload" /></form>'),h=this.UA.IE,f=function(){r&&clearTimeout(r),o&&clearTimeout(o),a&&s.notify({type:"upload",cnt:-i}),setTimeout(function(){h&&e('<iframe src="javascript:false;"/>').appendTo(u),u.remove(),m.remove()},100)},m=e('<iframe src="'+(h?"javascript:false;":"about:blank")+'" name="'+p+'" style="position:absolute;left:-1000px;top:-1000px" />').on("load",function(){m.off("load").on("load",function(){f(),d.resolve()}),o=setTimeout(function(){a=!0,s.notify({type:"upload",cnt:i})},s.options.notifyDelay),s.options.iframeTimeout>0&&(r=setTimeout(function(){f(),d.reject(["errConnect","errTimeout"])},s.options.iframeTimeout)),u.submit()}),g=t.target||s.cwd().hash,v=[],b=[],y=[],w={};if(c&&c.length)e.each(c,function(e,t){u.append('<input type="hidden" name="upload[]" value="'+t+'"/>')}),i=1;else{if(!(l&&e(l).is(":file")&&e(l).val()))return d.reject();n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",g)&&(v=l.files?l.files:[{name:e(l).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/,"$1")}],b.push(s.uploads.checkExists(v,g,s).done(function(n,a){w=a,null===n?t.overwrite=0:(y=n,i=e.grep(v,function(e){return!e._remove}).length,i!=v.length&&(i=0))}))),i=l.files?l.files.length:1,u.append(l)}return e.when.apply(e,b).done(function(){return i<1?d.reject():(u.append('<input type="hidden" name="'+(s.newAPI?"target":"current")+'" value="'+g+'"/>').append('<input type="hidden" name="html" value="1"/>').append('<input type="hidden" name="node" value="'+s.id+'"/>').append(e(l).attr("name","upload[]")),y.length>0&&(e.each(y,function(e,t){u.append('<input type="hidden" name="renames[]" value="'+s.escape(t)+'"/>')}),u.append('<input type="hidden" name="suffix" value="'+n.options.backupSuffix+'"/>')),w&&e.each(y,function(e,t){u.append('<input type="hidden" name="['+e+']" value="'+s.escape(t)+'"/>')}),0===t.overwrite&&u.append('<input type="hidden" name="overwrite" value="0"/>'),e.each(s.options.onlyMimes||[],function(e,t){u.append('<input type="hidden" name="mimes[]" value="'+s.escape(t)+'"/>')}),e.each(s.customData,function(e,t){u.append('<input type="hidden" name="'+e+'" value="'+s.escape(t)+'"/>')}),u.appendTo("body"),void m.appendTo("body"))}),d}},one:function(e,t,n){var i=this,a=e.toLowerCase(),o=function(e,n){return i.toUnbindEvents[a]||(i.toUnbindEvents[a]=[]),i.toUnbindEvents[a].push({type:a,callback:o}),(t.done?t.done:t).apply(this,arguments)};return t.done&&(o={done:o}),this.bind(a,o,n)},localStorage:function(t,n){var i,a,o,r,s,l=this,c=window.localStorage,d="elfinder-"+(t||"")+this.id,p=window.location.pathname+"-elfinder-",u=this.id,h=[];if("undefined"==typeof t)return r=p.length,s=u.length*-1,e.each(c,function(e){e.substr(0,r)===p&&e.substr(s)===u&&h.push(e)}),e.each(h,function(e,t){c.removeItem(t)}),!0;if(t=p+t+u,null===n)return c.removeItem(t);if(void 0===n&&!(i=c.getItem(t))&&(a=c.getItem(d))&&(n=a,c.removeItem(d)),void 0!==n){o=typeof n,"string"!==o&&"number"!==o&&(n=JSON.stringify(n));try{c.setItem(t,n)}catch(f){try{c.clear(),c.setItem(t,n)}catch(f){l.debug("error",f.toString())}}i=c.getItem(t)}if(i&&("{"===i.substr(0,1)||"["===i.substr(0,1)))try{return JSON.parse(i)}catch(f){}return i},cookie:function(t,n){var i,a,o,r,s,l;if(t="elfinder-"+t+this.id,void 0===n){if(document.cookie&&""!=document.cookie)for(o=document.cookie.split(";"),t+="=",r=0;r<o.length;r++)if(o[r]=e.trim(o[r]),o[r].substring(0,t.length)==t){if(s=decodeURIComponent(o[r].substring(t.length)),"{"===s.substr(0,1)||"["===s.substr(0,1))try{return JSON.parse(s)}catch(c){}return s}return null}if(a=Object.assign({},this.options.cookie),null===n?(n="",a.expires=-1):(l=typeof n,"string"!==l&&"number"!==l&&(n=JSON.stringify(n))),"number"==typeof a.expires&&(i=new Date,i.setTime(i.getTime()+864e5*a.expires),a.expires=i),document.cookie=t+"="+encodeURIComponent(n)+"; expires="+a.expires.toUTCString()+(a.path?"; path="+a.path:"")+(a.domain?"; domain="+a.domain:"")+(a.secure?"; secure":""),n&&("{"===n.substr(0,1)||"["===n.substr(0,1)))try{return JSON.parse(n)}catch(c){}return n},startDir:function(){var e=window.location.hash;return e&&e.match(/^#elf_/)?e.replace(/^#elf_/,""):this.options.startPathHash?this.options.startPathHash:this.lastDir()},lastDir:function(e){return this.options.rememberLastDir?this.storage("lastdir",e):""},_node:e("<span/>"),escape:function(e){return this._node.text(e).html().replace(/"/g,""").replace(/'/g,"'")},normalize:function(t){var n,i,a,o,r,s=this,l=function(){var e,t;return(t=s.options.fileFilter)&&("function"==typeof t?e=function(e){return t.call(s,e)}:t instanceof RegExp&&(e=function(e){return t.test(e.name)})),e?e:null}(),c=function(t){var n;t.uiCmdMap&&(e.isPlainObject(t.uiCmdMap)&&Object.keys(t.uiCmdMap).length?(t.disabledFlip||(t.disabledFlip={}),n=t.disabledFlip,e.each(t.uiCmdMap,function(e,i){"hidden"!==i||n[e]||(t.disabled.push(e),t.disabledFlip[e]=!0)})):delete t.uiCmdMap)},d=function(t){var n=function(e){var t=typeof e;return"object"===t&&Array.isArray(e)&&(t="array"),t};return e.each(s.optionProperties,function(e,i){void 0!==i&&t[e]&&n(t[e])!==n(i)&&(t[e]=i)}),t.disabled?t.disabledFlip=s.arrayFlip(t.disabled,!0):t.disabledFlip={},t},p=function(t,r,p){var u,h,m,g,v=!r||t,b=!!r&&null;
+if(t&&t.hash&&t.name&&t.mime){if("application/x-empty"===t.mime&&(t.mime="text/plain"),m=s.isRoot(t),m&&!t.volumeid&&s.debug("warning","The volume root statuses requires `volumeid` property."),m||"directory"===t.mime){if(t.phash){if(t.phash===t.hash)return f=f.concat(['Parent folder of "$1" is itself.',t.name]),b;if(m&&t.volumeid&&0===t.phash.indexOf(t.volumeid))return f=f.concat(['Parent folder of "$1" is inner itself.',t.name]),b}t.volumeid&&(u=t.volumeid,m&&(t.phash&&(s.leafRoots[t.phash]?e.inArray(t.hash,s.leafRoots[t.phash])===-1&&s.leafRoots[t.phash].push(t.hash):s.leafRoots[t.phash]=[t.hash]),s.hasVolOptions=!0,s.volOptions[u]||(s.volOptions[u]={dispInlineRegex:s.options.dispInlineRegex}),h=s.volOptions[u],t.options&&Object.assign(h,t.options),t.disabled&&(h.disabled=t.disabled,h.disabledFlip=s.arrayFlip(t.disabled,!0)),t.tmbUrl&&(h.tmbUrl=t.tmbUrl),h.url&&"/"!==h.url.substr(-1)&&(h.url+="/"),c(h),h.trashHash&&(s.trashes[h.trashHash]===!1?delete h.trashHash:s.trashes[h.trashHash]=t.hash),e.each(s.optionProperties,function(e){h[e]&&(t[e]=h[e])}),"cwd"!==p&&(s.roots[u]=t.hash),t.expires&&(s.volumeExpires[u]=t.expires)),o!==u&&(o=u,a=s.option("i18nFolderName",u))),m&&!t.i18&&(n="volume_"+t.name,i=s.i18n(!1,n),n!==i&&(t.i18=i)),a&&!t.i18&&(n="folder_"+t.name,i=s.i18n(!1,n),n!==i&&(t.i18=i)),m&&(g=s.storage("rootNames"))&&(g[t.hash]&&(t._name=t.name,t._i18=t.i18,t.name=g[t.hash]=g[t.hash],delete t.i18),s.storage("rootNames",g)),s.trashes[t.hash]&&(t.locked=!0)}else{if(l)try{if(!l(t))return b}catch(y){s.debug(y)}0==t.size&&(t.mime=s.getMimetype(t.name,t.mime))}return t.options&&(s.optionsByHashes[t.hash]=d(t.options)),delete t.options,v}return b},u=function(t){var n=[];return e.each(s.files(),function(i,a){e.each(s.parents(i),function(a,o){if(e.inArray(o,t)!==-1&&e.inArray(i,t)===-1)return n.push(i),!1})}),n},h=function(n,i){e.each(n,function(n,a){var o,r;s.leafRoots[a.hash]&&s.applyLeafRootStats(a),"change"!==i&&a.phash&&s.isRoot(a)&&(o=s.file(a.phash))&&(s.applyLeafRootStats(o),t.changed?(e.each(t.changed,function(e,n){if(n.hash===o.hash)return t.changed[e]=o,r=!0,!1}),r||t.changed.push(o)):t.changed=[o])})},f=[];if(t.customData&&t.customData!==s.prevCustomData){s.prevCustomData=t.customData;try{r=JSON.parse(t.customData),e.isPlainObject(r)&&(s.prevCustomData=r,e.each(Object.keys(r),function(e,t){null===r[t]&&(delete r[t],delete s.optsCustomData[t])}),s.customData=Object.assign({},s.optsCustomData,r))}catch(m){}}return t.options&&d(t.options),t.cwd&&(t.cwd.volumeid&&t.options&&Object.keys(t.options).length&&s.isRoot(t.cwd)&&(s.hasVolOptions=!0,s.volOptions[t.cwd.volumeid]=t.options),t.cwd=p(t.cwd,!0,"cwd")),t.files&&(t.files=e.grep(t.files,p)),t.tree&&(t.tree=e.grep(t.tree,p)),t.added&&(t.added=e.grep(t.added,p)),t.changed&&(t.changed=e.grep(t.changed,p)),t.removed&&t.removed.length&&2===s.searchStatus.state&&(t.removed=t.removed.concat(u(t.removed))),t.api&&(t.init=!0),Object.keys(s.leafRoots).length&&(t.files&&h(t.files),t.tree&&h(t.tree),t.added&&h(t.added),t.changed&&h(t.changed,"change")),t.cwd&&t.cwd.options&&t.options&&Object.assign(t.options,d(t.cwd.options)),t.options&&t.options.url&&"/"!==t.options.url.substr(-1)&&(t.options.url+="/"),f.length&&(t.norError=["errResponse"].concat(f)),t},setSort:function(e,t,n,i){this.storage("sortType",this.sortType=this.sortRules[e]?e:"name"),this.storage("sortOrder",this.sortOrder=/asc|desc/.test(t)?t:"asc"),this.storage("sortStickFolders",(this.sortStickFolders=!!n)?1:""),this.storage("sortAlsoTreeview",(this.sortAlsoTreeview=!!i)?1:""),this.trigger("sortchange")},_sortRules:{name:function(e,t){return i.prototype.naturalCompare(e.i18||e.name,t.i18||t.name)},size:function(e,t){var n=parseInt(e.size)||0,i=parseInt(t.size)||0;return n===i?0:n>i?1:-1},kind:function(e,t){return i.prototype.naturalCompare(e.mime,t.mime)},date:function(e,t){var n=e.ts||e.date||0,i=t.ts||t.date||0;return n===i?0:n>i?1:-1},perm:function(e,t){var n=function(e){return(e.write?2:0)+(e.read?1:0)},i=n(e),a=n(t);return i===a?0:i>a?1:-1},mode:function(e,t){var n=e.mode||e.perm||"",a=t.mode||t.perm||"";return i.prototype.naturalCompare(n,a)},owner:function(e,t){var n=e.owner||"",a=t.owner||"";return i.prototype.naturalCompare(n,a)},group:function(e,t){var n=e.group||"",a=t.group||"";return i.prototype.naturalCompare(n,a)}},sorters:{},naturalCompare:function(e,t){var n=i.prototype.naturalCompare;return"undefined"==typeof n.loc&&(n.loc=navigator.userLanguage||navigator.browserLanguage||navigator.language||"en-US"),"undefined"==typeof n.sort&&("11".localeCompare("2",n.loc,{numeric:!0})>0?window.Intl&&window.Intl.Collator?n.sort=new Intl.Collator(n.loc,{numeric:!0}).compare:n.sort=function(e,t){return e.localeCompare(t,n.loc,{numeric:!0})}:(n.sort=function(e,t){var i,a,o=/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,r=/(^[ ]*|[ ]*$)/g,s=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,l=/^0x[0-9a-f]+$/i,c=/^0/,d=/^[\x01\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]/,p=function(e){return n.sort.insensitive&&(""+e).toLowerCase()||""+e},u=p(e).replace(r,"").replace(/^_/,"\ 1")||"",h=p(t).replace(r,"").replace(/^_/,"\ 1")||"",f=u.replace(o,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),m=h.replace(o,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),g=parseInt(u.match(l))||1!=f.length&&u.match(s)&&Date.parse(u),v=parseInt(h.match(l))||g&&h.match(s)&&Date.parse(h)||null,b=0;if(v){if(g<v)return-1;if(g>v)return 1}for(var y=0,w=Math.max(f.length,m.length);y<w;y++){if(i=!(f[y]||"").match(c)&&parseFloat(f[y])||f[y]||0,a=!(m[y]||"").match(c)&&parseFloat(m[y])||m[y]||0,isNaN(i)!==isNaN(a)){if(isNaN(i)&&("string"!=typeof i||!i.match(d)))return 1;if("string"!=typeof a||!a.match(d))return-1}if(0===parseInt(i,10)&&(i=0),0===parseInt(a,10)&&(a=0),typeof i!=typeof a&&(i+="",a+=""),n.sort.insensitive&&"string"==typeof i&&"string"==typeof a&&(b=i.localeCompare(a,n.loc),0!==b))return b;if(i<a)return-1;if(i>a)return 1}return 0},n.sort.insensitive=!0)),n.sort(e,t)},compare:function(e,t){var n,i=this,a=i.sortType,o="asc"==i.sortOrder,r=i.sortStickFolders,s=i.sortRules,l=s[a],c="directory"==e.mime,d="directory"==t.mime;if(r){if(c&&!d)return-1;if(!c&&d)return 1}return n=o?l(e,t):l(t,e),"name"!==a&&0===n?n=o?s.name(e,t):s.name(t,e):n},sortFiles:function(e){return e.sort(this.compare)},notify:function(t){var n,i,a,o=t.type,r=t.id?"elfinder-notify-"+t.id:"",s=this.i18n("undefined"!=typeof t.msg?t.msg:this.messages["ntf"+o]?"ntf"+o:"ntfsmth"),l=this.ui.notify,c=l.children(".elfinder-notify-"+o+(r?"."+r:"")),d=c.children("div.elfinder-notify-cancel").children("button"),p='<div class="elfinder-notify elfinder-notify-{type}'+(r?" "+r:"")+'"><span class="elfinder-dialog-icon elfinder-dialog-icon-{type}"/><span class="elfinder-notify-msg">{msg}</span> <span class="elfinder-notify-cnt"/><div class="elfinder-notify-progressbar"><div class="elfinder-notify-progress"/></div><div class="elfinder-notify-cancel"/></div>',u=t.cnt,h="undefined"!=typeof t.size?parseInt(t.size):null,f="undefined"!=typeof t.progress&&t.progress>=0?t.progress:null,m=t.cancel,g="ui-state-hover",v=function(){c._esc&&e(document).off("keydown",c._esc),c.remove(),!l.children().length&&l.elfinderdialog("close")};return o?(c.length?"undefined"!=typeof t.msg&&c.children("span.elfinder-notify-msg").html(s):(c=e(p.replace(/\{type\}/g,o).replace(/\{msg\}/g,s)).appendTo(l).data("cnt",0),null!=f&&c.data({progress:0,total:0}),m&&(d=e('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text">'+this.i18n("btnCancel")+"</span></button>").on("mouseenter mouseleave",function(t){e(this).toggleClass(g,"mouseenter"===t.type)}),c.children("div.elfinder-notify-cancel").append(d))),n=u+parseInt(c.data("cnt")),n>0?(m&&d.length&&(e.isFunction(m)||"object"==typeof m&&m.promise)&&(c._esc=function(t){"keydown"==t.type&&t.keyCode!=e.ui.keyCode.ESCAPE||(t.preventDefault(),t.stopPropagation(),v(),m.promise?m.reject(0):m(t))},d.on("click",function(e){c._esc(e)}),e(document).on("keydown."+this.namespace,c._esc)),!t.hideCnt&&c.children(".elfinder-notify-cnt").text("("+n+")"),l.is(":hidden")&&l.elfinderdialog("open",this).height("auto"),c.data("cnt",n),null!=f&&(i=c.data("total"))>=0&&(a=c.data("progress"))>=0&&(i+=null!=h?h:u,a+=f,null==h&&u<0&&(a+=100*u),c.data({progress:a,total:i}),null!=h&&(a*=100,i=Math.max(1,i)),f=parseInt(a/i),c.find(".elfinder-notify-progress").animate({width:(f<100?f:100)+"%"},20))):v(),this):this},confirm:function(t){var n,i,a=this,o=!1,r={cssClass:"elfinder-dialog-confirm",modal:!0,resizable:!1,title:this.i18n(t.title||"confirmReq"),buttons:{},close:function(){!o&&t.cancel.callback(),e(this).elfinderdialog("destroy")}},s=this.i18n("apllyAll");return t.cssClass&&(r.cssClass+=" "+t.cssClass),r.buttons[this.i18n(t.accept.label)]=function(){t.accept.callback(!(!n||!n.prop("checked"))),o=!0,e(this).elfinderdialog("close")},r.buttons[this.i18n(t.accept.label)]._cssClass="elfinder-confirm-accept",t.reject&&(r.buttons[this.i18n(t.reject.label)]=function(){t.reject.callback(!(!n||!n.prop("checked"))),o=!0,e(this).elfinderdialog("close")},r.buttons[this.i18n(t.reject.label)]._cssClass="elfinder-confirm-reject"),t.buttons&&t.buttons.length>0&&(i=1,e.each(t.buttons,function(t,s){r.buttons[a.i18n(s.label)]=function(){s.callback(!(!n||!n.prop("checked"))),o=!0,e(this).elfinderdialog("close")},r.buttons[a.i18n(s.label)]._cssClass="elfinder-confirm-extbtn"+i++,s.cssClass&&(r.buttons[a.i18n(s.label)]._cssClass+=" "+s.cssClass)})),r.buttons[this.i18n(t.cancel.label)]=function(){e(this).elfinderdialog("close")},r.buttons[this.i18n(t.cancel.label)]._cssClass="elfinder-confirm-cancel",t.all&&(r.create=function(){var t=e('<div class="elfinder-dialog-confirm-applyall"/>');n=e('<input type="checkbox" />'),e(this).next().find(".ui-dialog-buttonset").prepend(t.append(e("<label>"+s+"</label>").prepend(n)))}),t.optionsCallback&&e.isFunction(t.optionsCallback)&&t.optionsCallback(r),this.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-confirm"/>'+this.i18n(t.text),r)},uniqueName:function(e,t,n){var i,a,o=0,r="";if(e=this.i18n(!1,e),t=t||this.cwd().hash,n="undefined"==typeof n?" ":n,(i=e.match(/^(.+)(\.[^.]+)$/))&&(r=i[2],e=i[1]),a=e+r,!this.fileByName(a,t))return a;for(;o<1e4;)if(a=e+n+ ++o+r,!this.fileByName(a,t))return a;return e+Math.random()+r},i18n:function(){var t,n,i,a,o,r=this,s=this.messages,l=[],c=[],d=function(e){var t;return 0===e.indexOf("#")&&(t=r.file(e.substr(1)))?t.name:e},p=0;for(arguments.length&&arguments[0]===!1&&(a=function(e){return e},p=1),t=p;t<arguments.length;t++)if(i=arguments[t],Array.isArray(i))for(n=0;n<i.length;n++)i[n]instanceof jQuery?l.push(i[n]):"undefined"!=typeof i[n]&&l.push(d(""+i[n]));else i instanceof jQuery?l.push(i[n]):"undefined"!=typeof i&&l.push(d(""+i));for(t=0;t<l.length;t++)e.inArray(t,c)===-1&&(i=l[t],"string"==typeof i?(o=!(!s[i]||!i.match(/^err/)),i=s[i]||(a?a(i):r.escape(i)),i=i.replace(/\$(\d+)/g,function(e,n){var i;return n=t+parseInt(n),n>0&&l[n]&&c.push(n),i=a?a(l[n]):r.escape(l[n]),o&&(i='<span class="elfinder-err-var elfinder-err-var'+n+'">'+i+"</span>"),i})):i=i.get(0).outerHTML,l[t]=i);return e.grep(l,function(t,n){return e.inArray(n,c)===-1}).join("<br>")},getIconStyle:function(t,n){var i=this,a={background:"url('{url}') 0 0 no-repeat","background-size":"contain"},o="",r={},s=0;return t.icon&&(o='style="',e.each(a,function(e,a){0===s++&&(a=a.replace("{url}",i.escape(t.icon))),n?r[e]=a:o+=e+":"+a+";"}),o+='"'),n?r:o},mime2class:function(e){var t="elfinder-cwd-icon-",n=e.toLowerCase(),i=this.textMimes[n];return n=n.split("/"),i?n[0]+=" "+t+"text":n[1]&&n[1].match(/\+xml$/)&&(n[0]+=" "+t+"xml"),t+n[0]+(n[1]?" "+t+n[1].replace(/(\.|\+)/g,"-"):"")},mime2kind:function(e){var t,n="object"==typeof e,i=n?e.mime:e;return n&&e.alias&&"symlink-broken"!=i?t="Alias":this.kinds[i]&&(t=!n||"directory"!==i||e.phash&&!e.isroot?this.kinds[i]:"Root"),t||(t=0===i.indexOf("text")?"Text":0===i.indexOf("image")?"Image":0===i.indexOf("audio")?"Audio":0===i.indexOf("video")?"Video":0===i.indexOf("application")?"App":i),this.messages["kind"+t]?this.i18n("kind"+t):i},mimeIsText:function(e){return!!(this.textMimes[e.toLowerCase()]||0===e.indexOf("text/")&&"rtf"!==e.substr(5,3)||e.match(/^application\/.+\+xml$/))},date:function(e,t){var n,i,a,o,r,s,l,c,d,p=this;return t||(t=new Date),s=t[p.getHours](),l=s>12?s-12:s,c=t[p.getMinutes](),d=t[p.getSeconds](),i=t[p.getDate](),a=t[p.getDay](),o=t[p.getMonth]()+1,r=t[p.getFullYear](),n=e.replace(/[a-z]/gi,function(e){switch(e){case"d":return i>9?i:"0"+i;case"j":return i;case"D":return p.i18n(p.i18.daysShort[a]);case"l":return p.i18n(p.i18.days[a]);case"m":return o>9?o:"0"+o;case"n":return o;case"M":return p.i18n(p.i18.monthsShort[o-1]);case"F":return p.i18n(p.i18.months[o-1]);case"Y":return r;case"y":return(""+r).substr(2);case"H":return s>9?s:"0"+s;case"G":return s;case"g":return l;case"h":return l>9?l:"0"+l;case"a":return s>=12?"pm":"am";case"A":return s>=12?"PM":"AM";case"i":return c>9?c:"0"+c;case"s":return d>9?d:"0"+d}return e})},formatDate:function(e,t){var n,i,a,o=this,r=t||e.ts;o.i18;return o.options.clientFormatDate&&r>0?(n=new Date(1e3*r),i=r>=this.yesterday?this.fancyFormat:this.dateFormat,a=o.date(i,n),r>=this.yesterday?a.replace("$1",this.i18n(r>=this.today?"Today":"Yesterday")):a):e.date?e.date.replace(/([a-z]+)\s/i,function(e,t){return o.i18n(t)+" "}):o.i18n("dateUnknown")},toLocaleString:function(e){var t=new Number(e);return t?t.toLocaleString?t.toLocaleString():String(e).replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,"):e},perms2class:function(e){var t="";return e.read||e.write?e.read?e.write||(t="elfinder-ro"):t="elfinder-wo":t="elfinder-na",e.type&&(t+=" elfinder-"+this.escape(e.type)),t},formatPermissions:function(e){var t=[];return e.read&&t.push(this.i18n("read")),e.write&&t.push(this.i18n("write")),t.length?t.join(" "+this.i18n("and")+" "):this.i18n("noaccess")},formatSize:function(e){var t=1,n="b";return"unknown"==e?this.i18n("unknown"):(e>1073741824?(t=1073741824,n="GB"):e>1048576?(t=1048576,n="MB"):e>1024&&(t=1024,n="KB"),e/=t,(e>0?t>=1048576?e.toFixed(2):Math.round(e):0)+" "+n)},formatFileMode:function(t,n){var i,a,o,r,s,l,c,d,p;if(n||(n=this.options.fileModeStyle.toLowerCase()),t=e.trim(t),t.match(/[rwxs-]{9}$/i)){if(d=t=t.substr(-9),"string"==n)return d;for(p="",o=0,i=0;i<7;i+=3)a=t.substr(i,3),r=0,a.match(/[r]/i)&&(r+=4),a.match(/[w]/i)&&(r+=2),a.match(/[xs]/i)&&(a.match(/[xs]/)&&(r+=1),a.match(/[s]/i)&&(0==i?o+=4:3==i&&(o+=2))),p+=r.toString(8);o&&(p=o.toString(8)+p)}else{if(t=parseInt(t,8),p=t?t.toString(8):"",!t||"octal"==n)return p;for(a=t.toString(8),o=0,a.length>3&&(a=a.substr(-4),o=parseInt(a.substr(0,1),8),a=a.substr(1)),s=1==(1&o),c=2==(2&o),l=4==(4&o),d="",i=0;i<3;i++)d+=4==(4&parseInt(a.substr(i,1),8))?"r":"-",d+=2==(2&parseInt(a.substr(i,1),8))?"w":"-",d+=1==(1&parseInt(a.substr(i,1),8))?0==i&&l||1==i&&c?"s":"x":"-"}return"both"==n?d+" ("+p+")":"string"==n?d:p},registRawStringDecoder:function(t){e.isFunction(t)&&(this.decodeRawString=this.options.rawStringDecoder=t)},uploadMimeCheck:function(t,n){n=n||this.cwd().hash;var i,a,o=!0,r=this.option("uploadMime",n),s=function(n){var i=!1;return"string"==typeof n&&"all"===n.toLowerCase()?i=!0:Array.isArray(n)&&n.length&&e.each(n,function(e,n){if(n=n.toLowerCase(),"all"===n||0===t.indexOf(n))return i=!0,!1}),i};return t&&e.isPlainObject(r)&&(t=t.toLowerCase(),i=s(r.allow),a=s(r.deny),"allow"===r.firstOrder?(o=!1,a||i!==!0||(o=!0)):(o=!0,a!==!0||i||(o=!1))),o},sequence:function(e){var t=e.length,n=function(t,i){return++i,e[i]?n(t.then(e[i]),i):t};return t>1?n(e[0](),0):e[0]()},reloadContents:function(t){var n,i=e.Deferred();try{n=e('<iframe width="1" height="1" scrolling="no" frameborder="no" style="position:absolute; top:-1px; left:-1px" crossorigin="use-credentials">').attr("src",t).one("load",function(){var n=e(this);try{this.contentDocument.location.reload(!0),n.one("load",function(){n.remove(),i.resolve()})}catch(a){n.attr("src","").attr("src",t).one("load",function(){n.remove(),i.resolve()})}}).appendTo("body")}catch(a){n&&n.remove(),i.reject()}return i},makeNetmountOptionOauth:function(t,n,i,a){var o,r="boolean"==typeof a?a:null,s=Object.assign({noOffline:!1,root:"root",pathI18n:"folderId",folders:!0},null===r?a||{}:{noOffline:r}),l=function(n,a,r){var d,p=this,u=Object.keys(e.isPlainObject(r)?r:{}).length;a.next().remove(),u&&(d=e('<select class="ui-corner-all elfinder-tabstop" style="max-width:200px;">').append(e(e.map(r,function(e,t){return'<option value="'+n.escape((t+"").trim())+'">'+n.escape(e)+"</option>"}).join(""))).on("change click",function(a){var r,d=e(this),u=d.val();p.inputs.path.val(u),!s.folders||"change"!==a.type&&d.data("current")===u||(d.next().remove(),d.data("current",u),u!=s.root&&(r=c(),o&&"pending"===o.state()&&n.abortXHR(o,{quiet:!0,abort:!0}),d.after(r),o=n.request({data:{cmd:"netmount",protocol:t,host:i,user:"init",path:u,pass:"folders"},preventDefault:!0}).done(function(e){l.call(p,n,d,e.folders)}).always(function(){n.abortXHR(o,{quiet:!0}),r.remove()}).xhr))}),a.after(e("<div/>").append(d)).closest(".ui-dialog").trigger("tabstopsInit"),d.trigger("focus"))},c=function(){return e('<div class="elfinder-netmount-spinner"/>').append('<span class="elfinder-spinner"/>')};return{vars:{},name:n,inputs:{offline:e('<input type="checkbox"/>').on("change",function(){e(this).parents("table.elfinder-netmount-tb").find("select:first").trigger("change","reset")}),host:e('<span><span class="elfinder-spinner"/></span><input type="hidden"/>'),path:e('<input type="text" value="'+s.root+'"/>'),user:e('<input type="hidden"/>'),pass:e('<input type="hidden"/>')},select:function(n,a,o){var r=this.inputs,l=r.offline,c=e(r.host[0]),d=o||null;this.vars.mbtn=r.host.closest(".ui-dialog").children(".ui-dialog-buttonpane:first").find("button.elfinder-btncnt-0"),c.data("inrequest")||!c.find("span.elfinder-spinner").length&&"reset"!==d&&("winfocus"!==d||c.siblings("span.elfinder-button-icon-reload").length)?(l.closest("tr")[s.noOffline||r.user.val()?"hide":"show"](),c.data("funcexpup")&&c.data("funcexpup")()):(1===l.parent().children().length&&(r.path.parent().prev().html(n.i18n(s.pathI18n)),l.attr("title",n.i18n("offlineAccess")),l.uniqueId().after(e("<label/>").attr("for",l.attr("id")).html(" "+n.i18n("offlineAccess")))),c.data("inrequest",!0).empty().addClass("elfinder-spinner").parent().find("span.elfinder-button-icon").remove(),n.request({data:{cmd:"netmount",protocol:t,host:i,user:"init",options:{id:n.id,offline:l.prop("checked")?1:0,pass:r.host[1].value}},preventDefault:!0}).done(function(e){c.removeClass("elfinder-spinner").html(e.body.replace(/\{msg:([^}]+)\}/g,function(e,t){return n.i18n(t,i)}))}),s.noOffline&&l.closest("tr").hide()),this.vars.mbtn[e(r.host[1]).val()?"show":"hide"]()},done:function(n,a){var o=this.inputs,r=this.protocol,c=e(o.host[0]),d=e(o.host[1]),p=" ";if(s.noOffline&&o.offline.closest("tr").hide(),"makebtn"==a.mode)c.removeClass("elfinder-spinner").removeData("expires").removeData("funcexpup"),o.host.find("input").on("mouseenter mouseleave",function(){e(this).toggleClass("ui-state-hover")}),d.val(""),o.path.val(s.root).next().remove(),o.user.val(""),o.pass.val(""),!s.noOffline&&o.offline.closest("tr").show(),this.vars.mbtn.hide();else if("folders"==a.mode)a.folders&&l.call(this,n,o.path.nextAll(":last"),a.folders);else{if(a.expires&&(p="()",c.data("expires",a.expires)),c.html(i+p).removeClass("elfinder-spinner"),a.expires&&(c.data("funcexpup",function(){var e=Math.floor((c.data("expires")-+new Date/1e3)/60);e<3?c.parent().children(".elfinder-button-icon-reload").click():(c.text(c.text().replace(/\(.*\)/,"("+n.i18n(["minsLeft",e])+")")),setTimeout(function(){c.is(":visible")&&c.data("funcexpup")()},6e4))}),c.data("funcexpup")()),a.reset)return void r.trigger("change","reset");c.parent().append(e('<span class="elfinder-button-icon elfinder-button-icon-reload" title="'+n.i18n("reAuth")+'">').on("click",function(){d.val("reauth"),r.trigger("change","reset")})),d.val(t),this.vars.mbtn.show(),a.folders&&l.call(this,n,o.path,a.folders),o.user.val("done"),o.pass.val("done"),o.offline.closest("tr").hide()}c.removeData("inrequest")},fail:function(t,n){e(this.inputs.host[0]).removeData("inrequest"),this.protocol.trigger("change","reset")},integrateInfo:s.integrate}},findCwdNodes:function(t,n){var i=this,a=(this.getUI("cwd"),this.cwd().hash),o=e();return n=n||{},e.each(t,function(e,t){if((t.phash===a||i.searchStatus.state>1)&&(o=o.add(i.cwdHash2Elm(t.hash)),n.firstOnly))return!1}),o},convAbsUrl:function(e){if(e.match(/^http/i))return e;if("//"===e.substr(0,2))return window.location.protocol+e;var t,n=window.location.protocol+"//"+window.location.host,i=/[^\/]+\/\.\.\//;for(t="/"===e.substr(0,1)?n+e:n+window.location.pathname.replace(/\/[^\/]+$/,"/")+e,t=t.replace("/./","/");i.test(t);)t=t.replace(i,"");return t},isSameOrigin:function(e){var t;if(e=this.convAbsUrl(e),location.origin&&window.URL)try{return t=new URL(e),location.origin===t.origin}catch(n){}return t=document.createElement("a"),t.href=e,location.protocol===t.protocol&&location.host===t.host&&location.port&&t.port},navHash2Id:function(e){return this.navPrefix+e},navId2Hash:function(e){return"string"==typeof e&&e.substr(this.navPrefix.length)},cwdHash2Id:function(e){return this.cwdPrefix+e},cwdId2Hash:function(e){return"string"==typeof e&&e.substr(this.cwdPrefix.length)},navHash2Elm:function(t){return e(document.getElementById(this.navHash2Id(t)))},cwdHash2Elm:function(t){return e(document.getElementById(this.cwdHash2Id(t)))},isInWindow:function(e,t){var n,i;return!!(n=e.get(0))&&(!(!t&&null===n.offsetParent)&&(i=n.getBoundingClientRect(),!!document.elementFromPoint(i.left,i.top)))},zIndexCalc:function(){var t=this,n=this.getUI(),i=n.css("z-index");i&&"auto"!==i&&"inherit"!==i?t.zIndex=i:n.parents().each(function(n,i){var a=e(i).css("z-index");if("auto"!==a&&"inherit"!==a&&(a=parseInt(a)))return t.zIndex=a,!1})},loadScript:function(t,n,i,a){var o,r,s={dataType:"script",cache:!0},l={},c={};return i=i||{},i.tryRequire&&this.hasRequire?require(t,n,i.error):(o=function(){var t,o,r;e.each(c,function(e,t){if("success"!==t&&"notmodified"!==t)return r=!0,!1}),r?i.error&&e.isFunction(i.error)&&i.error({loadResults:c}):e.isFunction(n)&&(a&&"undefined"==typeof a.obj[a.name]?(t=a.timeout?a.timeout/10:1,o=setInterval(function(){(--t<0||"undefined"!=typeof a.obj[a.name])&&(clearInterval(o),n())},10)):n())},"tag"===i.loadType?(e("head > script").each(function(){l[this.src]=this}),r=t.length,e.each(t,function(t,n){var a,s=!1;l[n]?(c[t]=l[n]._error||"success",--r<1&&o()):(a=document.createElement("script"),a.charset=i.charset||"UTF-8",e("head").append(a),a.onload=a.onreadystatechange=function(){s||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(s=!0,c[t]="success",--r<1&&o())},a.onerror=function(e){c[t]=a._error=e&&e.type?e.type:"error",--r<1&&o()},a.src=n)})):(i=e.isPlainObject(i)?Object.assign(s,i):s,r=0,function d(n,a){void 0!==n&&(c[r++]=a),t.length?e.ajax(Object.assign({},i,{url:t.shift(),success:d,error:d})):o()}())),this},loadCss:function(t,n){var i,a,o=this;return"string"==typeof t&&(t=[t]),n&&(n.className&&(i=n.className),n.dfd&&n.dfd.promise&&(a=[])),e.each(t,function(t,n){var r;n=o.convAbsUrl(n).replace(/^https?:/i,""),a&&(a[t]=e.Deferred()),e("head > link[href='+url+']").length?a&&a[t].resolve():(r=document.createElement("link"),r.type="text/css",r.rel="stylesheet",r.href=n,i&&(r.className=i),a&&(r.onload=function(){a[t].resolve()},r.onerror=function(){a[t].reject()}),e("head").append(r))}),a&&e.when.apply(null,a).done(function(){n.dfd.resolve()}).fail(function(){n.dfd.reject()}),this},asyncJob:function(t,n,i){var a,o,r=e.Deferred(),s=!1,l=Object.assign({interval:0,numPerOnce:1},i||{}),c=[],d=[],p=[];return r._abort=function(e){o&&clearTimeout(o),d=[],s=!0,"pending"===r.state()&&r[e?"resolve":"reject"](c)},r.fail(function(){r._abort()}).always(function(){r._abort=function(){}}),"function"==typeof t&&Array.isArray(n)?(d=n.concat(),a=function(){var e,n,i;if(!s){for(p=d.splice(0,l.numPerOnce),n=p.length,e=0;e<n&&!s;e++)i=t(p[e]),null!==i&&c.push(i);s||(d.length?o=setTimeout(a,l.interval):r.resolve(c))}},d.length?o=setTimeout(a,0):r.resolve(c)):r.reject(),r},getSize:function(t){var n=this,i=[],a=t.length,o=e.Deferred().fail(function(){e.each(i,function(e,t){t&&(t.syncOnFail&&t.syncOnFail(!1),t.reject())})}),r=function(t){var i=[];return"directory"===t.mime&&e.each(n.leafRoots,function(e,a){var o;if(e===t.hash)i.push.apply(i,a);else for(o=(n.file(e)||{}).phash;o;)o===t.hash&&i.push.apply(i,a),o=(n.file(o)||{}).phash}),i},s=function(t){var i=e.Deferred(),a=n.file(t),o=a?a.phash:t;return o&&!n.file(o)?n.request({data:{cmd:"parents",target:o},preventFail:!0}).done(function(){n.one("parentsdone",function(){i.resolve()})}).fail(function(){i.resolve()}):i.resolve(),i},l=function(){var t=e.Deferred(),i=Object.keys(n.leafRoots).length;return i>0?e.each(n.leafRoots,function(e){s(e).done(function(){--i,i<1&&t.resolve()})}):t.resolve(),t};return n.autoSync("stop"),l().done(function(){var s=[],l={},c=[],d=[],p={};e.each(t,function(){s.push.apply(s,r(n.file(this)))}),t.push.apply(t,s),e.each(t,function(){var t=n.root(this),i=n.file(this);i&&(i.sizeInfo||"directory"!==i.mime)?d.push(e.Deferred().resolve(i.sizeInfo?i.sizeInfo:{size:i.size,dirCnt:0,fileCnt:1})):l[t]?l[t].push(this):l[t]=[this]}),e.each(l,function(){var e=c.length;1===this.length&&(p[e]=this[0]),c.push(n.request({data:{cmd:"size",targets:this},preventDefault:!0}))}),i.push.apply(i,c),c.push.apply(c,d),e.when.apply(e,c).fail(function(){o.reject()}).done(function(){var t,i,r,s=function(t,i){var a;(a=n.file(t))&&(a.sizeInfo={isCache:!0},e.each(["size","dirCnt","fileCnt"],function(){a.sizeInfo[this]=i[this]||0}),a.size=parseInt(a.sizeInfo.size),m.push(a))},l=0,c=0,d=0,u=arguments.length,h=[],f="",m=[];for(t=0;t<u;t++)r=arguments[t],i=null,r.isCache||(p[t]&&(i=n.file(p[t]))?s(p[t],r):r.sizes&&e.isPlainObject(r.sizes)&&e.each(r.sizes,function(e,t){s(e,t)})),l+=parseInt(r.size),c!==!1&&("undefined"==typeof r.fileCnt&&(c=!1),c+=parseInt(r.fileCnt||0)),d!==!1&&("undefined"==typeof r.dirCnt&&(d=!1),d+=parseInt(r.dirCnt||0));m.length&&n.change({changed:m}),d!==!1&&h.push(n.i18n("folders")+": "+(d-(a>1?0:1))),c!==!1&&h.push(n.i18n("files")+": "+c),h.length&&(f="<br>"+h.join(", ")),o.resolve({size:l,fileCnt:c,dirCnt:d,formated:(l>=0?n.formatSize(l):n.i18n("unknown"))+f})}),n.autoSync()}),o},getTheme:function(t){var n,i,a=this,o=e.Deferred(),r=function(t,n){return n||(n=a.convAbsUrl(a.baseUrl)),Array.isArray(t)?e.map(t,function(e){return r(e,n)}):t.match(/^(?:http|\/\/)/i)?t:n+t.replace(/^(?:\.\/|\/)/,"")};return t&&(n=a.options.themes[t])?"string"==typeof n?(url=r(n),(i=url.match(/^(.+\/)[^/]+\.json$/i))?e.getJSON(url).done(function(e){n=e,n.id=t,n.cssurls&&(n.cssurls=r(n.cssurls,i[1])),o.resolve(n)}).fail(function(){o.reject()}):o.resolve({id:t,name:t,cssurls:[url]})):e.isPlainObject(n)&&n.cssurls?(n.id=t,n.cssurls=r(n.cssurls),Array.isArray(n.cssurls)||(n.cssurls=[n.cssurls]),n.name||(n.name=t),o.resolve(n)):o.reject():o.reject(),o},changeTheme:function(t){var n=this;return t&&(!n.options.themes[t]||n.theme&&n.theme.id===t?"default"===t&&n.theme&&(e("head>link.elfinder-theme-ext").remove(),n.theme=null,n.trigger&&n.trigger("themechange")):n.getTheme(t).done(function(t){t.cssurls&&(e("head>link.elfinder-theme-ext").remove(),n.loadCss(t.cssurls,{className:"elfinder-theme-ext",dfd:e.Deferred().done(function(){n.theme=t,n.trigger&&n.trigger("themechange")})}))})),this},applyLeafRootStats:function(t,n){var i=this,a=n?t:i.file(t.hash)||t,o=a.ts,r=!1;return!n&&t._realStats||(t._realStats={locked:t.locked||0,dirs:t.dirs||0,ts:t.ts}),t.locked=1,a.locked||(r=!0),t.dirs=1,a.dirs||(r=!0),e.each(i.leafRoots[t.hash],function(){var e=i.file(this);e&&e.ts&&(t.ts||0)<e.ts&&(t.ts=e.ts)}),o!==t.ts&&(r=!0),r},abortXHR:function(e,t){var n=t||{};e&&(n.quiet&&(e.quiet=!0),n.abort&&e._requestId&&this.request({data:{cmd:"abort",id:e._requestId},preventDefault:!0}),e.abort(),e=void 0)},getRequestId:function(){return(+new Date).toString(16)+Math.floor(1e3*Math.random()).toString(16)},arrayFlip:function(t,n){var i,a={},o=e.isArray(t);for(i in t)(o||t.hasOwnProperty(i))&&(a[t[i]]=n||i);return a},splitFileExtention:function(e){var t;return(t=e.match(/^(.+?)?\.((?:tar\.(?:gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(?:gz|bz2)|[a-z0-9]{1,10})$/i))?("undefined"==typeof t[1]&&(t[1]=""),[t[1],t[2]]):[e,""]},sliceArrayBuffer:function(e,t){for(var n=[],i=0;i*t<e.byteLength;)n.push(e.slice(i*t,(i+1)*t)),i++;return n},arrayBufferToBase64:function(e){if(!window.btoa)return"";var t=new Uint8Array(e),n=Array.prototype.slice.call(t),i=n.map(function(e){return String.fromCharCode(e)});return window.btoa(i.join(""))},log:function(e){return window.console&&window.console.log&&window.console.log(e),this},debug:function(e,t){var n=this.options.debug;return n&&("all"===n||n[e])&&window.console&&window.console.log&&window.console.log("elfinder debug: ["+e+"] ["+this.id+"]",t),"backend-error"===e?(!this.cwd().hash||n&&("all"===n||n["backend-error"]))&&(t=Array.isArray(t)?t:[t],this.error(t)):"backend-debug"===e&&this.trigger("backenddebug",t),this},time:function(e){window.console&&window.console.time&&window.console.time(e)},timeEnd:function(e){window.console&&window.console.timeEnd&&window.console.timeEnd(e)}},Object.keys||(Object.keys=function(){var e=Object.prototype.hasOwnProperty,t=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],i=n.length;return function(a){if("object"!=typeof a&&"function"!=typeof a||null===a)throw new TypeError("Object.keys called on non-object");var o=[];for(var r in a)e.call(a,r)&&o.push(r);if(t)for(var s=0;s<i;s++)e.call(a,n[s])&&o.push(n[s]);return o}}()),Array.isArray||(Array.isArray=function(e){return jQuery.isArray(e)}),Object.assign||(Object.assign=function(){return jQuery.extend.apply(null,arguments)}),String.prototype.repeat||(String.prototype.repeat=function(e){"use strict";if(null==this)throw new TypeError("can't convert "+this+" to object");var t=""+this;if(e=+e,e!=e&&(e=0),e<0)throw new RangeError("repeat count must be non-negative");if(e==1/0)throw new RangeError("repeat count must be less than infinity");if(e=Math.floor(e),0==t.length||0==e)return"";if(t.length*e>=1<<28)throw new RangeError("repeat count must not overflow maximum string size");for(var n="",i=0;i<e;i++)n+=t;return n}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),function(){try{return void Array.apply(null,{})}catch(e){}var t=Object.prototype.toString,n="[object Array]",i=Function.prototype.apply,a=Array.prototype.slice;Function.prototype.apply=function(e,o){return i.call(this,e,t.call(o)===n?o:a.call(o))}}(),Array.from||(Array.from=function(e){return 1===e.length?[e[0]]:Array.apply(null,e)}),window.cancelAnimationFrame||!function(){for(var e=0,t=["ms","moz","webkit","o"],n=0;n<t.length&&!window.requestAnimationFrame;++n)window.requestAnimationFrame=window[t[n]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[t[n]+"CancelAnimationFrame"]||window[t[n]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(t,n){var i=(new Date).getTime(),a=Math.max(0,16-(i-e)),o=window.setTimeout(function(){t(i+a)},a);return e=i+a,o}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(e){clearTimeout(e)})}(),i.prototype.version="2.1.46",function(){if(e.ui&&e.ui.ddmanager){var t=e.ui.ddmanager.prepareOffsets;e.ui.ddmanager.prepareOffsets=function(n,i){var a=function(e){if(e.is(":hidden"))return!0;var t=e[0].getBoundingClientRect();return!document.elementFromPoint(t.left,t.top)&&!document.elementFromPoint(t.left+t.width,t.top+t.height)};if("mousedown"===i.type||n.options.elfRefresh){
+var o,r,s=e.ui.ddmanager.droppables[n.options.scope]||[],l=s.length;for(o=0;o<l;o++)r=s[o],r.options.autoDisable&&(!r.options.disabled||r.options.autoDisable>1)&&(r.options.disabled=a(r.element),r.options.autoDisable=r.options.disabled?2:1)}return t(n,i)}}}(),e.ajaxTransport("+binary",function(e,t,n){if(window.FormData&&(e.dataType&&"binary"==e.dataType||e.data&&(window.ArrayBuffer&&e.data instanceof ArrayBuffer||window.Blob&&e.data instanceof Blob))){var i;return{send:function(t,n){i=new XMLHttpRequest;var a=e.url,o=e.type,r=e.async||!0,s=e.responseType||"blob",l=e.data||null,c=e.username,d=e.password;i.addEventListener("load",function(){var t={};t[e.dataType]=i.response,n(i.status,i.statusText,t,i.getAllResponseHeaders())}),i.open(o,a,r,c,d);for(var p in t)i.setRequestHeader(p,t[p]);if(e.xhrFields)for(var u in e.xhrFields)u in i&&(i[u]=e.xhrFields[u]);i.responseType=s,i.send(l)},abort:function(){i.abort()}}}}),function(e){function t(t,n){if(!(t.originalEvent.touches.length>1)){e(t.currentTarget).hasClass("touch-punch-keep-default")||t.preventDefault();var i=t.originalEvent.changedTouches[0],a=document.createEvent("MouseEvents");a.initMouseEvent(n,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),t.target.dispatchEvent(a)}}if(e.support.touch="ontouchend"in document,e.support.touch){var n,i,a,o=e.ui.mouse.prototype,r=o._mouseInit,s=o._mouseDestroy;o._touchStart=function(e){var o=this;!n&&o._mouseCapture(e.originalEvent.changedTouches[0])&&(i=e.originalEvent.changedTouches[0].screenX.toFixed(0),a=e.originalEvent.changedTouches[0].screenY.toFixed(0),n=!0,o._touchMoved=!1,t(e,"mouseover"),t(e,"mousemove"),t(e,"mousedown"))},o._touchMove=function(e){if(n){var o=e.originalEvent.changedTouches[0].screenX.toFixed(0),r=e.originalEvent.changedTouches[0].screenY.toFixed(0);Math.abs(i-o)<=4&&Math.abs(a-r)<=4||(this._touchMoved=!0,t(e,"mousemove"))}},o._touchEnd=function(e){n&&(t(e,"mouseup"),t(e,"mouseout"),this._touchMoved||t(e,"click"),n=!1,this._touchMoved=!1)},o._mouseInit=function(){var t=this;t.element.hasClass("touch-punch")&&t.element.on({touchstart:e.proxy(t,"_touchStart"),touchmove:e.proxy(t,"_touchMove"),touchend:e.proxy(t,"_touchEnd")}),r.call(t)},o._mouseDestroy=function(){var t=this;t.element.hasClass("touch-punch")&&t.element.off({touchstart:e.proxy(t,"_touchStart"),touchmove:e.proxy(t,"_touchMove"),touchend:e.proxy(t,"_touchEnd")}),s.call(t)}}}(jQuery),e.fn.elfinder=function(t,n){return"instance"===t?this.getElFinder():this.each(function(){var a,o="string"==typeof t?t:"",r="function"==typeof n?n:void 0;if(this.elfinder)switch(o){case"close":case"hide":this.elfinder.hide();break;case"open":case"show":this.elfinder.show();break;case"destroy":this.elfinder.destroy();break;case"reload":case"restart":this.elfinder&&(a=this.elfinder.options,r=this.elfinder.bootCallback,this.elfinder.destroy(),new i(this,e.extend(!0,a,e.isPlainObject(n)?n:{}),r))}else e.isPlainObject(t)&&new i(this,t,r)})},e.fn.getElFinder=function(){var e;return this.each(function(){if(this.elfinder)return e=this.elfinder,!1}),e},e.fn.elfUiWidgetInstance=function(e){try{return this[e]("instance")}catch(t){var n=this.data("ui-"+e);return n&&"object"==typeof n&&n.widgetFullName==="ui-"+e?n:null}},e.fn.scrollRight||e.fn.extend({scrollRight:function(e){var t=this.get(0);return void 0===e?Math.max(0,t.scrollWidth-(t.scrollLeft+t.clientWidth)):this.scrollLeft(t.scrollWidth-t.clientWidth-e)}}),e.fn.scrollBottom||e.fn.extend({scrollBottom:function(e){var t=this.get(0);return void 0===e?Math.max(0,t.scrollHeight-(t.scrollTop+t.clientHeight)):this.scrollTop(t.scrollHeight-t.clientHeight-e)}}),i.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","application/plt":"plt","application/sat":"sat","application/step":"step","text/x-httpd-cgi":"cgi","text/x-asap":"asp","text/x-jsp":"jsp"},i.prototype._options={cdns:{ace:"https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.1",codemirror:"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.40.2",ckeditor:"https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.10.0",ckeditor5:"https://cdn.ckeditor.com/ckeditor5/11.1.1",tinymce:"https://cdnjs.cloudflare.com/ajax/libs/tinymce/4.8.3",simplemde:"https://cdnjs.cloudflare.com/ajax/libs/simplemde/1.11.2",fabric16:"https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.7",tui:"https://uicdn.toast.com",hls:"https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.10.1/hls.min.js",dash:"https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.9.1/dash.all.min.js",flv:"https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.4.2/flv.min.js",prettify:"https://cdn.jsdelivr.net/gh/google/code-prettify@453bd5f51e61245339b738b1bbdd42d7848722ba/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",zlibGunzip:"https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/gunzip.min.js",marked:"https://cdnjs.cloudflare.com/ajax/libs/marked/0.5.1/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/2.3.1/sha.js",amr:"https://cdn.jsdelivr.net/gh/yxl/opencore-amr-js@dcf3d2b5f384a1d9ded2a54e4c137a81747b222b/js/amrnb.js"},url:"",requestType:"get",cors:null,requestMaxConn:3,transport:{},urlUpload:"",dragUploadAllow:"auto",
+overwriteUploadConfirm:!0,uploadMaxChunkSize:10485760,folderUploadExclude:{win:/^(?:desktop\.ini|thumbs\.db)$/i,mac:/^\.ds_store$/i},iframeTimeout:0,customData:{},handlers:{},customHeaders:{},xhrFields:{},lang:"en",baseUrl:"",i18nBaseUrl:"",cssAutoLoad:!0,themes:{},theme:null,maxErrorDialogs:5,cssClass:"",commands:["*"],commandsOptions:{getfile:{onlyURL:!1,multiple:!1,folders:!1,oncomplete:"",onerror:"",getPath:!0,getImgSize:!1},open:{method:"post",into:"window",selectAction:"open"},opennew:{url:"",useOriginQuery:!0},upload:{ui:"button"},download:{maxRequests:10,minFilesZipdl:2},quicklook:{autoplay:!0,width:450,height:300,mediaControlsList:"",pdfToolbar:!0,textMaxlen:2e3,contain:!1,docked:0,dockHeight:"auto",dockAutoplay:!1,googleMapsApiKey:"",googleMapsOpts:{maps:{},kml:{suppressInfoWindows:!1,preserveViewport:!1}},viewerjs:{url:"",mimes:["application/pdf","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation"]},sharecadMimes:[],googleDocsMimes:[],officeOnlineMimes:[],getDimThreshold:2e5,mimeRegexNotEmptyCheck:/^application\/vnd\.google-apps\./},edit:{dialogWidth:void 0,mimes:[],makeTextMimes:["text/plain","text/css","text/html"],useStoredEditor:!1,editorMaximized:!1,editors:[],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"],extraOptions:{tuiImgEditOpts:{iconsPath:void 0,theme:{}},pixo:{apikey:""},creativeCloudApiKey:"",managerUrl:null,ckeditor5Mode:"balloon",onlineConvert:{maxSize:100,showLink:!0}}},search:{incsearch:{enable:!0,minlen:1,wait:500},searchTypes:{SearchMime:{name:"btnMime",title:"searchMime"}}},info:{nullUrlDirLinkSelf:!0,hideItems:[],showHashMaxsize:104857600,showHashAlgorisms:["md5","sha256"],custom:{}},mkdir:{intoNewFolderToolbtn:!1},resize:{grid8px:"disable",presetSize:[[320,240],[400,400],[640,480],[800,600]],getDimThreshold:204800,dimSubImgSize:307200},rm:{quickTrash:!0,infoCheckWait:10,toTrashMaxItems:1e3},help:{view:["about","shortcuts","help","integrations","debug"],helpSource:""},preference:{width:600,height:400,categories:null,prefs:null,langs:null,selectActions:["open","edit/download","resize/edit/download","download","quicklook"]}},bootCallback:null,getFileCallback:null,defaultView:"icons",startPathHash:"",sound:!0,ui:["toolbar","tree","path","stat"],uiOptions:{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"],["preference","help"],["fullscreen"]],toolbarExtra:{displayTextLabel:!1,labelExcludeUA:["Mobile"],autoHideUA:["Mobile"],defaultHides:["home","reload"],showPreferenceButton:"none",preferenceInContextmenu:!0},tree:{openRootOnLoad:!0,openCwdOnOpen:!0,syncTree:!0,subTreeMax:100,subdirsMaxConn:2,subdirsAtOnce:5,durations:{slideUpDown:"fast",autoScroll:"fast"}},navbar:{minWidth:150,maxWidth:500,autoHideUA:[]},navdock:{disabled:!1,initMaxHeight:"50%",maxHeight:"90%"},cwd:{oldSchool:!1,showSelectCheckboxUA:["Touch"],listView:{columns:["perm","date","size","kind"],columnsCustomName:{},fixedHeader:!0},iconsView:{size:0,sizeMax:3,sizeNames:{0:"viewSmall",1:"viewMedium",2:"viewLarge",3:"viewExtraLarge"}}},path:{toWorkzoneWithoutNavbar:!0},dialog:{focusOnMouseOver:!0},toast:{animate:{showMethod:"fadeIn",showDuration:300,showEasing:"swing",timeOut:3e3,hideMethod:"fadeOut",hideDuration:1500,hideEasing:"swing"}}},dispInlineRegex:"^(?:(?:image|video|audio)|application/(?:x-mpegURL|dash+xml)|(?:text/plain|application/pdf)$)",onlyMimes:[],sortRules:{},sortType:"name",sortOrder:"asc",sortStickFolders:!0,sortAlsoTreeview:!1,clientFormatDate:!0,UTCDate:!1,dateFormat:"",fancyDateFormat:"",fileModeStyle:"both",width:"auto",height:400,heightBase:null,resizable:!0,notifyDelay:500,notifyDialog:{position:{},width:null},dialogContained:!1,allowShortcuts:!0,rememberLastDir:!0,reloadClearHistory:!1,useBrowserHistory:!0,showFiles:50,showThreshold:50,validName:!1,fileFilter:!1,backupSuffix:"~",sync:0,syncStart:!0,loadTmbs:5,cookie:{expires:30,domain:"",path:"/",secure:!1},contextmenu:{navbar:["open","opennew","download","|","upload","mkdir","|","copy","cut","paste","duplicate","|","rm","empty","hide","|","rename","|","archive","|","places","info","chmod","netunmount"],cwd:["undo","redo","|","back","up","reload","|","upload","mkdir","mkfile","paste","|","empty","hide","|","view","sort","selectall","colwidth","|","places","info","chmod","netunmount","|","fullscreen","|","preference"],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"]},enableAlways:!1,enableByMouseOver:!0,windowCloseConfirm:["hasNotifyDialog","editingFile"],rawStringDecoder:"object"==typeof Encoding&&e.isFunction(Encoding.convert)?function(e){return Encoding.convert(e,{to:"UNICODE",type:"string"})}:null,debug:["error","warning","event-destroy"]},i.prototype._options.commandsOptions.netmount={ftp:{name:"FTP",inputs:{host:e('<input type="text"/>'),port:e('<input type="number" placeholder="21" class="elfinder-input-optional"/>'),path:e('<input type="text" value="/"/>'),user:e('<input type="text"/>'),pass:e('<input type="password" autocomplete="new-password"/>'),FTPS:e('<input type="checkbox" value="1" title="File Transfer Protocol over SSL/TLS"/>'),encoding:e('<input type="text" placeholder="Optional" class="elfinder-input-optional"/>'),locale:e('<input type="text" placeholder="Optional" class="elfinder-input-optional"/>')}},dropbox2:i.prototype.makeNetmountOptionOauth("dropbox2","Dropbox","Dropbox",{noOffline:!0,root:"/",pathI18n:"path",integrate:{title:"Dropbox.com",link:"https://www.dropbox.com"}}),googledrive:i.prototype.makeNetmountOptionOauth("googledrive","Google Drive","Google",{integrate:{title:"Google Drive",link:"https://www.google.com/drive/"}}),onedrive:i.prototype.makeNetmountOptionOauth("onedrive","One Drive","OneDrive",{integrate:{title:"Microsoft OneDrive",link:"https://onedrive.live.com"}}),box:i.prototype.makeNetmountOptionOauth("box","Box","Box",{noOffline:!0,integrate:{title:"Box.com",link:"https://www.box.com"}})},i.prototype.history=function(t){var n,i=this,a=!0,o=[],r=function(){o=[t.cwd().hash],n=0,a=!0},s=t.options.useBrowserHistory&&window.history&&window.history.pushState?window.history:null,l=function(s){return s&&i.canForward()||!s&&i.canBack()?(a=!1,t.exec("open",o[s?++n:--n]).fail(r)):e.Deferred().reject()},c=function(e){!s||s.state&&s.state.thash===e||s.pushState({thash:e},null,location.pathname+location.search+(e?"#elf_"+e:""))};this.canBack=function(){return n>0},this.canForward=function(){return n<o.length-1},this.back=l,this.forward=function(){return l(!0)},t.bind("init",function(){s&&!s.state&&c(t.startDir())}).open(function(){var e=o.length,i=t.cwd().hash;a&&(n>=0&&e>n+1&&o.splice(n+1),o[o.length-1]!=i&&o.push(i),n=o.length-1),a=!0,c(i)}).reload(t.options.reloadClearHistory&&r)},i.prototype.command=function(t){this.fm=t,this.name="",this.dialogClass="",this.className="",this.title="",this.linkedCmds=[],this.state=-1,this.alwaysEnabled=!1,this.noChangeDirOnRemovedCwd=!1,this._disabled=!1,this.disableOnSearch=!1,this.updateOnSelect=!0,this.syncTitleOnChange=!1,this.keepContextmenu=!1,this._handlers={enable:function(){this.update(void 0,this.value)},disable:function(){this.update(-1,this.value)},"open reload load sync":function(){this._disabled=!(this.alwaysEnabled||this.fm.isCommandEnabled(this.name)),this.update(void 0,this.value),this.change()}},this.handlers={},this.shortcuts=[],this.options={ui:"button"},this.listeners=[],this.setup=function(t,n){var i,a,o,r=this,s=this.fm,l=function(t){var n=t.callback||function(e){s.exec(r.name,void 0,{_userAction:!0,_currentType:"shortcut"})};t.callback=function(t){var i,a={};r.enabled()&&(s.searchStatus.state<2?i=s.isCommandEnabled(r.name):(e.each(s.selected(),function(t,n){s.optionsByHashes[n]?a[n]=!0:e.each(s.volOptions,function(e){if(!a[e]&&0===n.indexOf(e))return a[e]=!0,!1})}),e.each(a,function(e){if(i=s.isCommandEnabled(r.name,e),!i)return!1})),i&&(r.event=t,n.call(r),delete r.event))}};for(this.name=t,this.title=s.messages["cmd"+t]?s.i18n("cmd"+t):this.extendsCmd&&s.messages["cmd"+this.extendsCmd]?s.i18n("cmd"+this.extendsCmd):t,this.options=Object.assign({},this.options,n),this.listeners=[],this.dialogClass="elfinder-dialog-"+t,n.shortcuts&&("function"==typeof n.shortcuts?o=n.shortcuts(this.fm,this.shortcuts):Array.isArray(n.shortcuts)&&(o=n.shortcuts),this.shortcuts=o||[]),this.updateOnSelect&&(this._handlers.select=function(){this.update(void 0,this.value)}),e.each(Object.assign({},r._handlers,r.handlers),function(t,n){s.bind(t,e.proxy(n,r))}),i=0;i<this.shortcuts.length;i++)a=this.shortcuts[i],l(a),!a.description&&(a.description=this.title),s.shortcut(a);this.disableOnSearch&&s.bind("search searchend",function(){r._disabled="search"===this.type||!(this.alwaysEnabled||s.isCommandEnabled(t)),r.update(void 0,r.value)}),this.init()},this.init=function(){},this.exec=function(t,n){return e.Deferred().reject()},this.getUndo=function(e,t){return!1},this.disabled=function(){return this.state<0},this.enabled=function(){return this.state>-1},this.active=function(){return this.state>0},this.getstate=function(){return-1},this.update=function(e,t){var n=this.state,i=this.value;this._disabled&&0===this.fm.searchStatus?this.state=-1:this.state=void 0!==e?e:this.getstate(),this.value=t,n==this.state&&i==this.value||this.change()},this.change=function(e){var t,n;if("function"==typeof e)this.listeners.push(e);else for(n=0;n<this.listeners.length;n++){t=this.listeners[n];try{t(this.state,this.value)}catch(i){this.fm.debug("error",i)}}return this},this.hashes=function(n){return n?e.grep(Array.isArray(n)?n:[n],function(e){return!!t.file(e)}):t.selected()},this.files=function(t){var n=this.fm;return t?e.map(Array.isArray(t)?t:[t],function(e){return n.file(e)||null}):n.selectedFiles()},this.fmDialog=function(e,t){return t.cssClass?t.cssClass+=" "+this.dialogClass:t.cssClass=this.dialogClass,this.fm.dialog(e,t)}},i.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:'<span class="elfinder-perms"/>',lock:'<span class="elfinder-lock"/>',symlink:'<span class="elfinder-symlink"/>',navicon:'<span class="elfinder-nav-icon"/>',navspinner:'<span class="elfinder-spinner elfinder-navbar-spinner"/>',navdir:'<div class="elfinder-navbar-wrapper{root}"><span id="{id}" class="ui-corner-all elfinder-navbar-dir {cssclass}"><span class="elfinder-navbar-arrow"/><span class="elfinder-navbar-icon" {style}/>{symlink}{permissions}{name}</span><div class="elfinder-navbar-subtree" style="display:none"/></div>',placedir:'<div class="elfinder-navbar-wrapper"><span id="{id}" class="ui-corner-all elfinder-navbar-dir {cssclass}" title="{title}"><span class="elfinder-navbar-arrow"/><span class="elfinder-navbar-icon" {style}/>{symlink}{permissions}{name}</span><div class="elfinder-navbar-subtree" style="display:none"/></div>'},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(){var t,n,i,a,o,r,s,l,c,d,p=this,u=this.fm,h=this.name,f=this.requestCmd||h,m=u.getUI("workzone"),g=this.origin&&"navbar"===this.origin?"tree":"cwd",v="tree"===g,b=v?"navHash2Elm":"cwdHash2Elm",y=!v&&"list"!=u.storage("view"),w=u.selected(),x=this.move||!1,k=m.hasClass("elfinder-cwd-wrapper-empty"),C=function(){requestAnimationFrame(function(){U&&U.trigger("blur")})},z=function(){D.is(":hidden")||D.elfinderoverlay("hide").off("click close",E),i.removeClass("ui-front").css("position","").off("unselect."+u.namespace,C),y?n&&n.css("max-height",""):v||i.css("width","").parent("td").css("overflow","")},T=e.Deferred().fail(function(e){r&&o.attr("class",r),k&&m.addClass("elfinder-cwd-wrapper-empty"),w&&(x&&u.trigger("unlockfiles",{files:w}),u.clipboard([]),u.trigger("selectfiles",{files:w})),e&&u.error(e)}).always(function(){z(),F(),u.enable().unbind("open",q).trigger("resMixinMake")}),A="tmp_"+parseInt(1e5*Math.random()),S=this.data&&this.data.target?this.data.target:v?u.file(w[0]).hash:u.cwd().hash,I=new Date,O={hash:A,phash:S,name:u.uniqueName(this.prefix,S),mime:this.mime,read:!0,write:!0,date:"Today "+I.getHours()+":"+I.getMinutes(),move:x},j=(u.getUI(g).trigger("create."+u.namespace,O),this.data||{}),M=u[b](A),D=u.getUI("overlay"),F=function(){M&&M.length&&(U.off(),M.hide(),u.unselectfiles({files:[A]}).unbind("resize",R),requestAnimationFrame(function(){v?M.closest(".elfinder-navbar-wrapper").remove():M.remove()}))},E=function(e){D.is(":hidden")||i.css("z-index",""),H||(F(),T.reject(),e&&(e.stopPropagation(),e.preventDefault()))},U=e(y?"<textarea/>":'<input type="text"/>').on("keyup text",function(){y?(this.style.height="1px",this.style.height=this.scrollHeight+"px"):t&&(this.style.width=t+"px",this.scrollWidth>t&&(this.style.width=this.scrollWidth+10+"px"))}).on("keydown",function(t){t.stopImmediatePropagation(),t.keyCode==e.ui.keyCode.ESCAPE?T.reject():t.keyCode==e.ui.keyCode.ENTER&&(t.preventDefault(),U.trigger("blur"))}).on("mousedown click dblclick",function(e){e.stopPropagation(),"dblclick"===e.type&&e.preventDefault()}).on("blur",function(){var t,n=e.trim(U.val()),o=U.parent(),r=!0;if(D.is(":hidden")||i.css("z-index",""),""===n)return E();if(!H&&o.length){if(u.options.validName&&u.options.validName.test)try{r=u.options.validName.test(n)}catch(s){r=!1}if(!n||"."===n||".."===n||!r)return H=!0,u.error("directory"===O.mime?"errInvDirname":"errInvName",{modal:!0,close:function(){setTimeout(P,120)}}),!1;if(u.fileByName(n,S))return H=!0,u.error(["errExists",n],{modal:!0,close:function(){setTimeout(P,120)}}),!1;t=w&&x?u.exec("cut",w):null,e.when(t).done(function(){var t={},i={};z(),U.hide().before(e("<span>").text(n)),u.lockfiles({files:[A]}),u.request({data:Object.assign({cmd:f,name:n,target:S},j||{}),notify:{type:f,cnt:1},preventFail:!0,syncOnFail:!0,navigate:{toast:t}}).fail(function(t){u.unlockfiles({files:[A]}),H=!0,U.show().prev().remove(),u.error(t,{modal:!0,close:function(){Array.isArray(t)&&e.inArray("errUploadMime",t)!==-1?T.notify("errUploadMime").reject():setTimeout(P,120)}})}).done(function(n){if(n&&n.added&&n.added[0]){var o,r=n.added[0],s=r.hash,l=(u[b](s),{directory:{cmd:"open",msg:"cmdopendir"},text:{cmd:"edit",msg:"cmdedit"},"default":{cmd:"open",msg:"cmdopen"}});w&&x&&u.one(f+"done",function(){u.exec("paste",s)}),x||(u.mimeIsText(r.mime)&&!u.mimesCanMakeEmpty[r.mime]&&u.mimeTypes[r.mime]&&(u.trigger("canMakeEmptyFile",{mimes:[r.mime],unshift:!0}),o={},o[r.mime]=u.mimeTypes[r.mime],u.storage("mkfileTextMimes",Object.assign(o,u.storage("mkfileTextMimes")||{}))),Object.assign(i,a||l[r.mime]||l[r.mime.split("/")[0]]||l[u.mimesCanMakeEmpty[r.mime]||e.inArray(r.mime,u.resources.mimes.text)!==-1?"text":"none"]||l["default"]),Object.assign(t,i.cmd?{incwd:{msg:u.i18n(["complete",u.i18n("cmd"+h)]),action:i},inbuffer:{msg:u.i18n(["complete",u.i18n("cmd"+h)]),action:i}}:{inbuffer:{msg:u.i18n(["complete",u.i18n("cmd"+h)])}}))}T.resolve(n)})}).fail(function(){T.reject()})}}).on("dragenter dragleave dragover drop",function(e){e.stopPropagation()}),P=function(){var e=u.splitFileExtention(U.val())[0];H||!u.UA.Mobile||u.UA.iOS||(D.on("click close",E).elfinderoverlay("show"),i.css("z-index",D.css("z-index")+1)),H=!1,!u.enabled()&&u.enable(),U.trigger("focus").trigger("select"),U[0].setSelectionRange&&U[0].setSelectionRange(0,e.length)},R=function(){M.trigger("scrolltoview",{blink:!1})},q=function(){T&&"pending"===T.state()&&T.reject()},H=!1;return u.isCommandEnabled(f,S)&&M.length?(e.isPlainObject(p.nextAction)&&(a=Object.assign({},p.nextAction)),v?(o=u[b](S),s=u.res("class","navcollapse"),l=u.res("class","navexpand"),c=u.res("class","navarrow"),d=u.res("class","navsubtree"),M.closest("."+d).show(),o.hasClass(s)||(r=o.attr("class"),o.addClass(s+" "+l+" elfinder-subtree-loaded")),o.is("."+s+":not(."+l+")")&&o.children("."+c).trigger("click").data("dfrd").done(function(){U.val()===O.name&&U.val(u.uniqueName(p.prefix,S)).trigger("select").trigger("focus")}),n=M.contents().filter(function(){return 3==this.nodeType&&e(this).parent().attr("id")===u.navHash2Id(O.hash)}),i=n.parent(),n.replaceWith(U.val(O.name))):(k&&m.removeClass("elfinder-cwd-wrapper-empty"),n=M.find(".elfinder-cwd-filename"),i=n.parent(),y?n.css("max-height","none"):(t=i.width(),i.width(t-15).parent("td").css("overflow","visible")),n.empty().append(U.val(O.name))),i.addClass("ui-front").css("position","relative").on("unselect."+u.namespace,C),u.bind("resize",R).one("open",q),U.trigger("keyup"),P(),T):T.reject()}},blink:function(e,t){var n,i={slowonce:function(){e.hide().delay(250).fadeIn(750).delay(500).fadeOut(3500)},lookme:function(){e.show().fadeOut(500).fadeIn(750)}};t=t||"slowonce",n=i[t]||i.lookme,e.stop(!0,!0),n()}},e.fn.dialogelfinder=function(t){var n,i="elfinderPosition",a="elfinderDestroyOnClose";if(this.not(".elfinder").each(function(){var n=(e(document),e('<div class="ui-widget-header dialogelfinder-drag ui-corner-top">'+(t.title||"Files")+"</div>")),o=(e('<a href="#" class="dialogelfinder-drag-close ui-corner-all"><span class="ui-icon ui-icon-closethick"> </span></a>').appendTo(n).on("click",function(e){e.preventDefault(),o.dialogelfinder("close")}),e(this).addClass("dialogelfinder").css("position","absolute").hide().appendTo("body").draggable({handle:".dialogelfinder-drag",containment:"window",stop:function(){o.trigger("resize"),r.trigger("resize")}}).elfinder(t).prepend(n)),r=o.elfinder("instance");o.width(parseInt(o.width())||840).data(a,!!t.destroyOnClose).find(".elfinder-toolbar").removeClass("ui-corner-top"),t.position&&o.data(i,t.position),t.autoOpen!==!1&&e(this).dialogelfinder("open")}),"open"==t){var n=e(this),o=n.data(i)||{top:parseInt(e(document).scrollTop()+(e(window).height()<n.height()?2:(e(window).height()-n.height())/2)),left:parseInt(e(document).scrollLeft()+(e(window).width()<n.width()?2:(e(window).width()-n.width())/2))};n.is(":hidden")&&(n.addClass("ui-front").css(o).show().trigger("resize"),setTimeout(function(){n.trigger("resize").trigger("mousedown")},200))}else if("close"==t)n=e(this).removeClass("ui-front"),n.is(":visible")&&(n.data(a)?n.elfinder("destroy").remove():n.elfinder("close"));else if("instance"==t)return e(this).getElFinder();return this},"function"==typeof i&&i.prototype.i18&&(i.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",fancyDateFormat:"$1 h:i A",nonameDateFormat:"ymd-His",messages:{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.",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.",errUpload:"Upload error.",errUploadFile:'Unable to upload "$1".',errUploadNoFiles:"No files found for upload.",errUploadTotalSize:"Data exceeds the maximum allowed size.",errUploadFileSize:"File exceeds maximum allowed size.",errUploadMime:"File type not allowed.",errUploadTransfer:'"$1" transfer error.',errUploadTemp:"Unable to make temporary file for upload.",errNotReplace:'Object "$1" already exists at this location and can not be replaced by object with another type.',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.",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.",errArcMaxSize:"Archive files exceeds maximum allowed size.",errResize:'Unable to resize "$1".',errResizeDegree:"Invalid rotate degree.",errResizeRotate:"Unable to rotate image.",errResizeSize:"Invalid image size.",errResizeNoChange:"Image size not changed.",errUsupportType:"Unsupported file type.",errNotUTF8Content:'File "$1" is not in UTF-8 and cannot be edited.',errNetMount:'Unable to mount "$1".',errNetMountNoDriver:"Unsupported protocol.",errNetMountFailed:"Mount failed.",errNetMountHostReq:"Host required.",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.",errConvUTF8:"Not convertible to UTF-8",errFolderUpload:"Try the modern browser, If you'd like to upload the folder.",errSearchTimeout:'Timed out while searching "$1". Search result is partial.',errReauthRequire:"Re-authorization is required.",errMaxTargets:"Max number of selectable items is $1.",errRestore:"Unable to restore from the trash. Can't identify the restore destination.",errEditorNotFound:"Editor not found to this file type.",errServerError:"Error occurred on the server side.",errEmpty:'Unable to empty folder "$1".',moreErrors:"There are $1 more errors.",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",cmdmkfile:"New file",cmdopen:"Open",cmdpaste:"Paste",cmdquicklook:"Preview",cmdreload:"Reload",cmdrename:"Rename",cmdrm:"Delete",cmdtrash:"Into trash",cmdrestore:"Restore",cmdsearch:"Find files",cmdup:"Go to parent folder",cmdupload:"Upload files",cmdview:"View",cmdresize:"Resize & Rotate",cmdsort:"Sort",cmdnetmount:"Mount network volume",cmdnetunmount:"Unmount",cmdplaces:"To Places",cmdchmod:"Change mode",cmdopendir:"Open a folder",cmdcolwidth:"Reset column width",cmdfullscreen:"Full Screen",cmdmove:"Move",cmdempty:"Empty the folder",cmdundo:"Undo",cmdredo:"Redo",cmdpreference:"Preferences",cmdselectall:"Select all",cmdselectnone:"Select none",cmdselectinvert:"Invert selection",cmdopennew:"Open in new window",cmdhide:"Hide (Preference)",btnClose:"Close",btnSave:"Save",btnRm:"Remove",btnApply:"Apply",btnCancel:"Cancel",btnNo:"No",btnYes:"Yes",btnMount:"Mount",btnApprove:"Goto $1 & approve",btnUnmount:"Unmount",btnConv:"Convert",btnCwd:"Here",btnVolume:"Volume",btnAll:"All",btnMime:"MIME Type",btnFileName:"Filename",btnSaveClose:"Save & Close",btnBackup:"Backup",btnRename:"Rename",btnRenameAll:"Rename(All)",btnPrevious:"Prev ($1/$2)",btnNext:"Next ($1/$2)",btnSaveAs:"Save As",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",ntfnetunmount:"Unmounting network volume",ntfdim:"Acquiring image dimension",ntfreaddir:"Reading folder infomation",ntfurl:"Getting URL of link",ntfchmod:"Changing file mode",ntfpreupload:"Verifying upload file name",ntfzipdl:"Creating a file for download",ntfparents:"Getting path infomation",ntfchunkmerge:"Processing the uploaded file",ntftrash:"Doing throw in the trash",ntfrestore:"Doing restore from the trash",ntfchkdir:"Checking destination folder",ntfundo:"Undoing previous operation",ntfredo:"Redoing previous undone",ntfchkcontent:"Checking contents",volume_Trash:"Trash",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",sortname:"by name",sortkind:"by kind",sortsize:"by size",sortdate:"by date",sortFoldersFirst:"Folders first",sortperm:"by permission",sortmode:"by mode",sortowner:"by owner",sortgroup:"by group",sortAlsoTreeview:"Also Treeview","untitled file.txt":"NewFile.txt","untitled folder":"NewFolder",Archive:"NewArchive","untitled file":"NewFile.$1",extentionfile:"$1: File",extentiontype:"$1: $2",confirmReq:"Confirmation required",confirmRm:"Are you sure you want to permanently remove items?<br/>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?",confirmConvUTF8:"Not in UTF-8<br/>Convert to UTF-8?<br/>Contents become UTF-8 by saving after conversion.",confirmNonUTF8:"Character encoding of this file couldn't be detected. It need to temporarily convert to UTF-8 for editting.<br/>Please select character encoding of this file.",confirmNotSave:"It has been modified.<br/>Losing work if you do not save changes.",confirmTrash:"Are you sure you want to move items to trash bin?",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",viewMedium:"Medium icons",viewLarge:"Large icons",viewExtraLarge:"Extra large icons",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",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",protocol:"Protocol",host:"Host",port:"Port",user:"User",pass:"Password",confirmUnmount:"Are you sure to unmount $1?",dropFilesBrowser:"Drop or Paste files from browser",dropPasteFiles:"Drop files, Paste URLs or images(clipboard) here",encoding:"Encoding",locale:"Locale",searchTarget:"Target: $1",searchMime:"Search by input MIME Type",owner:"Owner",group:"Group",other:"Other",execute:"Execute",perm:"Permission",mode:"Mode",emptyFolder:"Folder is empty",emptyFolderDrop:"Folder is empty\\A Drop to add items",emptyFolderLTap:"Folder is empty\\A Long tap to add items",quality:"Quality",autoSync:"Auto sync",moveUp:"Move up",getLink:"Get URL link",selectedItems:"Selected items ($1)",folderId:"Folder ID",offlineAccess:"Allow offline access",reAuth:"To re-authenticate",nowLoading:"Now loading...",openMulti:"Open multiple files",openMultiConfirm:"You are trying to open the $1 files. Are you sure you want to open in browser?",emptySearch:"Search results is empty in search target.",editingFile:"It is editing a file.",hasSelected:"You have selected $1 items.",hasClipboard:"You have $1 items in the clipboard.",incSearchOnly:"Incremental search is only from the current view.",reinstate:"Reinstate",complete:"$1 complete",
+contextmenu:"Context menu",pageTurning:"Page turning",volumeRoots:"Volume roots",reset:"Reset",bgcolor:"Background color",colorPicker:"Color picker","8pxgrid":"8px Grid",enabled:"Enabled",disabled:"Disabled",emptyIncSearch:"Search results is empty in current view.\\A Press [Enter] to expand search target.",emptyLetSearch:"First letter search results is empty in current view.",textLabel:"Text label",minsLeft:"$1 mins left",openAsEncoding:"Reopen with selected encoding",saveAsEncoding:"Save with the selected encoding",selectFolder:"Select folder",firstLetterSearch:"First letter search",presets:"Presets",tooManyToTrash:"It's too many items so it can't into trash.",TextArea:"TextArea",folderToEmpty:'Empty the folder "$1".',filderIsEmpty:'There are no items in a folder "$1".',preference:"Preference",language:"Language",clearBrowserData:"Initialize the settings saved in this browser",toolbarPref:"Toolbar settings",charsLeft:"... $1 chars left.",sum:"Sum",roughFileSize:"Rough file size",autoFocusDialog:"Focus on the element of dialog with mouseover",select:"Select",selectAction:"Action when select file",useStoredEditor:"Open with the editor used last time",selectinvert:"Invert selection",renameMultiple:"Are you sure you want to rename $1 selected items like $2?<br/>This cannot be undone!",batchRename:"Batch rename",plusNumber:"+ Number",asPrefix:"Add prefix",asSuffix:"Add suffix",changeExtention:"Change extention",columnPref:"Columns settings (List view)",reflectOnImmediate:"All changes will reflect immediately to the archive.",reflectOnUnmount:"Any changes will not reflect until un-mount this volume.",unmountChildren:"The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?",selectionInfo:"Selection Info",hashChecker:"Algorithms to show the file hash",infoItems:"Info Items (Selection Info Panel)",pressAgainToExit:"Press again to exit.",toolbar:"Toolbar",workspace:"Work Space",dialog:"Dialog",all:"All",iconSize:"Icon Size (Icons view)",editorMaximized:"Open the maximized editor window",editorConvNoApi:"Because conversion by API is not currently available, please convert on the website.",editorConvNeedUpload:"After conversion, you must be upload with the item URL or a downloaded file to save the converted file.",convertOn:"Convert on the site of $1",integrations:"Integrations",integrationWith:"This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.",showHidden:"Show hidden items",hideHidden:"Hide hidden items",toggleHidden:"Show/Hide hidden items",makefileTypes:'File types to enable with "New file"',typeOfTextfile:"Type of the Text file",add:"Add",theme:"Theme","default":"Default",description:"Description",website:"Website",author:"Author",email:"Email",license:"License",exportToSave:"This item can't be saved. To avoid losing the edits you need to export to your PC.",kindUnknown:"Unknown",kindRoot:"Volume Root",kindFolder:"Folder",kindSelects:"Selections",kindAlias:"Alias",kindAliasBroken:"Broken alias",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",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",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",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"}}),e.fn.elfinderbutton=function(t){return this.each(function(){var n,i,a="class",o=t.fm,r=o.res(a,"disabled"),s=o.res(a,"active"),l=o.res(a,"hover"),c="elfinder-button-menu-item",d="elfinder-button-menu-item-selected",p=e('<span class="elfinder-button-text">'+t.title+"</span>"),u="elfinder-button-icon-"+(t.className?t.className:t.name),h=e(this).addClass("ui-state-default elfinder-button").attr("title",t.title).append('<span class="elfinder-button-icon '+u+'"/>',p).on("mouseenter mouseleave",function(e){!h.hasClass(r)&&h["mouseleave"==e.type?"removeClass":"addClass"](l)}).on("click",function(e){h.hasClass(r)||(n&&t.variants.length>=1?(n.is(":hidden")&&o.getUI().click(),e.stopPropagation(),n.css(m()).slideToggle({duration:100,done:function(e){o[n.is(":visible")?"toFront":"toHide"](n)}})):o.exec(t.name,g(),{_userAction:!0,_currentType:"toolbar",_currentNode:h}))}),f=function(){o.toHide(n)},m=function(){var e=o.getUI(),t=e.offset(),n=h.offset();return{top:n.top-t.top,left:n.left-t.left,maxHeight:e.height()-40}},g=function(){var e,t=o.selected();return t.length||(t=(e=o.cwd())?[o.cwd().hash]:void 0),t};p.hide(),t.button=h,Array.isArray(t.variants)&&(h.addClass("elfinder-menubutton"),n=e('<div class="ui-front ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>').hide().appendTo(o.getUI()).on("mouseenter mouseleave","."+c,function(){e(this).toggleClass(l)}).on("click","."+c,function(i){var a=e(this).data("value");i.preventDefault(),i.stopPropagation(),h.removeClass(l),o.toHide(n),"undefined"==typeof a&&(a={}),"object"==typeof a&&(a._userAction=!0),o.exec(t.name,g(),a)}).on("close",f),o.bind("disable select",f).getUI().on("click",f),t.change(function(){n.html(""),e.each(t.variants,function(i,a){n.append(e('<div class="'+c+'">'+a[1]+"</div>").data("value",a[0]).addClass(a[0]==t.value?d:""))})})),t.change(function(){var e;i&&cancelAnimationFrame(i),i=requestAnimationFrame(function(){t.disabled()?h.removeClass(s+" "+l).addClass(r):(h.removeClass(r),h[t.active()?"addClass":"removeClass"](s)),t.syncTitleOnChange&&(e="elfinder-button-icon-"+(t.className?t.className:t.name),u!==e&&(h.children(".elfinder-button-icon").removeClass(u).addClass(e),u=e),p.html(t.title),h.attr("title",t.title))})}).change()})},e.fn.elfindercontextmenu=function(t){return this.each(function(){var n,i,a,o,r,s,l,c=(e(this),"elfinder-contextmenu-item"),d="elfinder-contextsubmenu-item",p="elfinder-contextmenu-extra-icon",u=t.res("class","hover"),h={distance:8,start:function(){f.data("drag",!0).data("touching")&&f.find("."+u).removeClass(u)},stop:function(){f.data("draged",!0).removeData("drag")}},f=e(this).addClass("touch-punch ui-helper-reset ui-front ui-widget ui-state-default ui-corner-all elfinder-contextmenu elfinder-contextmenu-"+t.direction).hide().on("touchstart",function(e){f.data("touching",!0).children().removeClass(u)}).on("touchend",function(e){f.removeData("touching")}).on("mouseenter mouseleave","."+c,function(t){e(this).toggleClass(u,!("mouseenter"!==t.type&&(f.data("draged")||!f.data("submenuKeep")))),f.data("draged")&&f.data("submenuKeep")&&f.find(".elfinder-contextmenu-sub:visible").parent().addClass(u)}).on("mouseenter mouseleave","."+p,function(t){e(this).parent().toggleClass(u,"mouseleave"===t.type)}).on("mouseenter mouseleave","."+c+",."+d,function(t){var n=function(t,n){e.each(n?r:a,function(e,i){if(t[0]===i)return(n?r:a)._cur=e,n?s=t:o=t,!1})};if(t.originalEvent){var i=e(this),l=function(){o&&!o.children("div.elfinder-contextmenu-sub:visible").length&&o.removeClass(u)};"mouseenter"===t.type?i.hasClass(d)?(s&&s.removeClass(u),o&&(r=o.find("div."+d)),n(i,!0)):(l(),n(i)):i.hasClass(d)?(s=null,r=null):(l(),function(e){setTimeout(function(){e===o&&(o=null)},250)}(o))}}).on("contextmenu",function(){return!1}).on("mouseup",function(){setTimeout(function(){f.removeData("draged")},100)}).draggable(h),m="ltr"===t.direction,g=m?"left":"right",v=Object.assign({},t.options.contextmenu),b='<div class="'+c+'{className}"><span class="elfinder-button-icon {icon} elfinder-contextmenu-icon"{style}/><span>{label}</span></div>',y=function(n,i,a,o){var r,s,l="",c="",d="";return o&&(o.className&&(l=" "+o.className),o.iconClass&&(d=o.iconClass,i=""),o.iconImg&&(r=o.iconImg.split(/ +/),s=r[1]&&r[2]?t.escape(r[1]+"px "+r[2]+"px"):"",c=" style=\"background:url('"+t.escape(r[0])+"') "+(s?s:"0 0")+" no-repeat;"+(s?"":"posbackground-size:contain;")+'"')),e(b.replace("{icon}",i?"elfinder-button-icon-"+i:d?d:"").replace("{label}",n).replace("{style}",c).replace("{className}",l)).on("click",function(e){e.stopPropagation(),e.preventDefault(),a()})},w=function(e){var t=e.split(/ +/),n=t[1]&&t[2]?t[1]+"px "+t[2]+"px":"";return{backgroundImage:'url("'+t[0]+'")',backgroundRepeat:"no-repeat",backgroundPosition:n?n:"",backgroundSize:n?"":"contain"}},x=function(){var n="touchstart.contextmenuAutoToggle";f.data("hideTm")&&clearTimeout(f.data("hideTm")),f.is(":visible")&&f.on("touchstart",function(e){e.originalEvent.touches.length>1||(f.stop(),t.toFront(f),f.data("hideTm")&&clearTimeout(f.data("hideTm")))}).data("hideTm",setTimeout(function(){f.is(":visible")&&(i.find(".elfinder-cwd-file").off(n),i.find(".elfinder-cwd-file.ui-selected").one(n,function(t){if(!(t.originalEvent.touches.length>1)){var a=e(t.target);return!f.first().length||a.is("input:checkbox")||a.hasClass("elfinder-cwd-select")?void i.find(".elfinder-cwd-file").off(n):(t.stopPropagation(),C(t.originalEvent.touches[0].pageX,t.originalEvent.touches[0].pageY),i.data("longtap",!0),void a.one("touchend",function(){setTimeout(function(){i.removeData("longtap")},80)}))}}).one("unselect."+t.namespace,function(){i.find(".elfinder-cwd-file").off(n)}),f.fadeOut({duration:300,fail:function(){f.css("opacity","1").show()},done:function(){t.toHide(f)}}))},4500))},k=function(n){var i=n.keyCode,l=e.ui.keyCode.ESCAPE,c=e.ui.keyCode.ENTER,p=e.ui.keyCode.LEFT,h=e.ui.keyCode.RIGHT,f=e.ui.keyCode.UP,m=e.ui.keyCode.DOWN,g="ltr"===t.direction?h:p,v=g===h?p:h;e.inArray(i,[l,c,p,h,f,m])!==-1&&(n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),i==l||i===v?o&&r&&s?(s.trigger("mouseleave").trigger("submenuclose"),o.addClass(u),r=null,s=null):i==l&&z():i==f||i==m?r?(s&&s.trigger("mouseleave"),i==m&&(!s||r.length<=++r._cur)?r._cur=0:i==f&&(!s||--r._cur<0)&&(r._cur=r.length-1),s=r.eq(r._cur).trigger("mouseenter")):(r=null,o&&o.trigger("mouseleave"),i==m&&(!o||a.length<=++a._cur)?a._cur=0:i==f&&(!o||--a._cur<0)&&(a._cur=a.length-1),o=a.eq(a._cur).addClass(u)):!o||i!=c&&i!==g||(o.hasClass("elfinder-contextmenu-group")?s?i==c&&s.click():(o.trigger("mouseenter"),r=o.find("div."+d),r._cur=0,s=r.first().addClass(u)):i==c&&o.click()))},C=function(i,a,c){var d,p=f.outerWidth(),u=f.outerHeight(),h=n.attr("style"),m=n.offset(),v=n.width(),b=n.height(),y=t.UA.Mobile?40:2,w=t.UA.Mobile?20:2,i=i-(m?m.left:0),a=a-(m?m.top:0),c=Object.assign(c||{},{top:Math.max(0,a+w+u<b?a+w:a-(a+u-b)),left:Math.max(0,i<p+y||i+y+p<v?i+y:i-y-p),opacity:"1"});l=!0,t.autoSync("stop"),n.width(v),f.stop().removeAttr("style").css(c),t.toFront(f),f.show(),n.attr("style",h),c[g]=parseInt(f.width()),f.find(".elfinder-contextmenu-sub").css(c),t.UA.iOS&&e("div.elfinder div.overflow-scrolling-touch").css("-webkit-overflow-scrolling","auto"),o=null,r=null,s=null,e(document).on("keydown."+t.namespace,k),d=e._data(document).events,d&&d.keydown&&d.keydown.unshift(d.keydown.pop()),t.UA.Mobile&&x(),requestAnimationFrame(function(){t.getUI().one("click."+t.namespace,z)})},z=function(){if(t.getUI().off("click."+t.namespace,z),e(document).off("keydown."+t.namespace,k),S=I=null,f.is(":visible")||f.children().length){t.toHide(f.removeAttr("style").empty().removeData("submenuKeep"));try{f.draggable("instance")||f.draggable(h)}catch(n){f.hasClass("ui-draggable")||f.draggable(h)}f.data("prevNode")&&(f.data("prevNode").after(f),f.removeData("prevNode")),t.trigger("closecontextmenu"),t.UA.iOS&&e("div.elfinder div.overflow-scrolling-touch").css("-webkit-overflow-scrolling","touch")}l&&t.searchStatus.state<1&&!t.searchStatus.ininc&&t.autoSync(),l=!1},T=function(i,o){var r,s=!1,l=!1,h=[],g="cwd"===i,b=0;S=i,I=o,(r=t.option("uiCmdMap",g?void 0:o[0]))||(r={}),g||(h=t.getDisabledCmds(o)),b=t.selected().length,b>1&&f.append('<div class="ui-corner-top ui-widget-header elfinder-contextmenu-header"><span>'+t.i18n("selectedItems",""+b)+"</span></div>"),a=e(),e.each(v[i]||[],function(v,b){var x,k,C,T,A,S;if("|"===b)return void(s&&(l=!0));if(r[b]?(k=r[b],C=!0):k=b,x=t.getCommand(k),!x||g||t.searchStatus.state&&x.disableOnSearch||(x.__disabled=x._disabled,x._disabled=!(x.alwaysEnabled||!!t._commands[k]&&!(e.inArray(b,h)!==-1||C&&h[k])),e.each(x.linkedCmds,function(e,n){var i;(i=t.getCommand(n))&&(i.__disabled=i._disabled,i._disabled=!(i.alwaysEnabled||!!t._commands[n]&&!h[n]))})),x&&!x._disabled&&x.getstate(o)!=-1){if(x.variants){if(!x.variants.length)return;T=y(x.title,x.className?x.className:x.name,function(){},x.contextmenuOpts),A=e('<div class="ui-front ui-corner-all elfinder-contextmenu-sub"/>').hide().css("max-height",t.getUI().height()-30).appendTo(T.append('<span class="elfinder-contextmenu-arrow"/>')),S=function(e){if(e){var i=n.attr("style");n.width(n.width()),A.css({top:"-1000px",left:"auto",right:"auto"});var a,o,r=T.offset(),s=r.left,l=r.top,c=T.outerWidth(),d=A.outerWidth(!0),p=A.outerHeight(!0),u=n.offset(),h=u.left+n.width(),g=u.top+n.height(),v=m,b=c;m?(o=s+c+d-h,o>10&&(s>d-5?(b-=5,v=!1):t.UA.Mobile||(b=c-o))):(o=d-s,o>0&&(s+c+d-15<h?(b-=5,v=!0):t.UA.Mobile||(b=c-o))),o=l+5+p-g,a=o>0&&l<g?5-o:o>0?30-p:5,f.find(".elfinder-contextmenu-sub:visible").hide(),A.css({top:a,left:v?b:"auto",right:v?"auto":b,overflowY:"auto"}).show(),n.attr("style",i)}else A.hide()},T.addClass("elfinder-contextmenu-group").on("mouseleave",".elfinder-contextmenu-sub",function(e){f.data("draged")||f.removeData("submenuKeep")}).on("submenuclose",".elfinder-contextmenu-sub",function(e){S(!1)}).on("click","."+d,function(n){var a,r;n.stopPropagation(),f.data("draged")||(r=e(this),x.keepContextmenu?(r.removeClass(u),T.addClass(u)):f.hide(),a=r.data("exec"),"undefined"==typeof a&&(a={}),"object"==typeof a&&(a._userAction=!0,a._currentType=i,a._currentNode=r),!x.keepContextmenu&&z(),t.exec(x.name,o,a))}).on("touchend",function(e){f.data("drag")||(S(!0),f.data("submenuKeep",!0))}).on("mouseenter mouseleave",function(t){f.data("touching")||(T.data("timer")&&(clearTimeout(T.data("timer")),T.removeData("timer")),e(t.target).closest(".elfinder-contextmenu-sub",f).length||("mouseleave"===t.type?f.data("submenuKeep")||T.data("timer",setTimeout(function(){T.removeData("timer"),S(!1)},250)):T.data("timer",setTimeout(function(){T.removeData("timer"),S(!0)},a.find("div.elfinder-contextmenu-sub:visible").length?250:0))))}),e.each(x.variants,function(t,n){var i,a="|"===n?'<div class="elfinder-contextmenu-separator"/>':e('<div class="'+c+" "+d+'"><span>'+n[1]+"</span></div>").data("exec",n[0]);"undefined"!=typeof n[2]&&(i=e("<span/>").addClass("elfinder-button-icon elfinder-contextmenu-icon"),/\//.test(n[2])?i.css(w(n[2])):i.addClass("elfinder-button-icon-"+n[2]),a.prepend(i).addClass(d+"-icon")),A.append(a)})}else T=y(x.title,x.className?x.className:x.name,function(){f.data("draged")||(!x.keepContextmenu&&z(),t.exec(x.name,o,{_userAction:!0,_currentType:i,_currentNode:T}))},x.contextmenuOpts),x.extra&&x.extra.node?(e('<span class="elfinder-button-icon elfinder-button-icon-'+(x.extra.icon||"")+" "+p+'"/>').append(x.extra.node).appendTo(T),e(x.extra.node).trigger("ready",{targets:o})):T.remove("."+p);x.extendsCmd&&T.children("span.elfinder-button-icon").addClass("elfinder-button-icon-"+x.extendsCmd),l&&f.append('<div class="elfinder-contextmenu-separator"/>'),f.append(T),s=!0,l=!1}x&&"undefined"!=typeof x.__disabled&&(x._disabled=x.__disabled,delete x.__disabled,e.each(x.linkedCmds,function(e,n){var i;(i=t.getCommand(n))&&(i._disabled=i.__disabled,delete i.__disabled)}))}),a=f.children("div."+c)},A=function(t){S="raw",e.each(t,function(e,t){var n;"|"===t?f.append('<div class="elfinder-contextmenu-separator"/>'):t.label&&"function"==typeof t.callback&&(n=y(t.label,t.icon,function(){f.data("draged")||(!t.remain&&z(),t.callback())},t.options||null),f.append(n))}),a=f.children("div."+c)},S=null,I=null;t.one("load",function(){n=t.getUI(),i=t.getUI("cwd"),t.bind("contextmenu",function(n){var a,o=n.data,r={};o.type&&"files"!==o.type&&i.trigger("unselectall"),z(),o.type&&o.targets?(t.trigger("contextmenucreate",o),T(o.type,o.targets),t.trigger("contextmenucreatedone",o)):o.raw&&A(o.raw),f.children().length&&(a=o.prevNode||null,a&&(f.data("prevNode",f.prev()),a.after(f)),o.fitHeight&&(r={maxHeight:Math.min(t.getUI().height(),e(window).height()),overflowY:"auto"},f.draggable("destroy").removeClass("ui-draggable")),C(o.x,o.y,r),o.opened&&"function"==typeof o.opened&&o.opened.call(f))}).one("destroy",function(){f.remove()}).bind("disable",z).bind("select",function(e){"files"===S&&(!e.data||e.data.selected.toString()!==I.toString())&&z()})}).shortcut({pattern:"mac"===t.OS?"ctrl+m":"contextmenu shift+f10",description:"contextmenu",callback:function(n){n.stopPropagation(),n.preventDefault(),e(document).one("contextmenu."+t.namespace,function(e){e.preventDefault(),e.stopPropagation()});var i,a,o,r,s=t.selected();s.length?(i="files",a=s,r=t.cwdHash2Elm(s[0])):(i="cwd",a=[t.cwd().hash],o=t.getUI("workzone").offset()),r&&r.length||(r=t.getUI("workzone")),o=r.offset(),o.top+=r.height()/2,o.left+=r.width()/2,t.trigger("contextmenu",{type:i,targets:a,x:o.left,y:o.top})}})})},e.fn.elfindercwd=function(t,n){return this.not(".elfinder-cwd").each(function(){var i,a,o,r,s,l,c,d=t.UA.Mobile,p="list"==t.viewType,u="select."+t.namespace,h="unselect."+t.namespace,f="disable."+t.namespace,m="enable."+t.namespace,g="class",v=t.res(g,"cwdfile"),b="."+v,y="ui-selected",w=t.res(g,"disabled"),x=t.res(g,"draggable"),k=t.res(g,"droppable"),C=t.res(g,"hover"),z=t.res(g,"active"),T=t.res(g,"adroppable"),A=v+"-tmp",S="elfinder-cwd-selectchk",I=t.options.loadTmbs>0?t.options.loadTmbs:5,O="",j={},M=[],D=[],F=void 0,E=[],U="",P=function(){for(var e="",t=0;t<E.length;t++)e+='<td class="elfinder-col-'+E[t]+'">{'+E[t]+"}</td>";return e},R=function(){return'<tr id="{id}" class="'+v+' {permsclass} {dirclass}" title="{tooltip}"{css}><td class="elfinder-col-name"><div class="elfinder-cwd-file-wrapper"><span class="elfinder-cwd-icon {mime}"{style}/>{marker}<span class="elfinder-cwd-filename">{name}</span></div>'+q+"</td>"+P()+"</tr>"},q=e.map(n.showSelectCheckboxUA,function(e){return!(!t.UA[e]&&!e.match(/^all$/i))||null}).length?'<div class="elfinder-cwd-select"><input type="checkbox" class="'+S+'"></div>':"",H=!1,_=null,N={icon:'<div id="{id}" class="'+v+' {permsclass} {dirclass} ui-corner-all" title="{tooltip}"><div class="elfinder-cwd-file-wrapper ui-corner-all"><div class="elfinder-cwd-icon {mime} ui-corner-all" unselectable="on"{style}/>{marker}</div><div class="elfinder-cwd-filename" title="{nametitle}">{name}</div>'+q+"</div>",row:""},L=t.res("tpl","perms"),W=t.res("tpl","lock"),B=t.res("tpl","symlink"),$={id:function(e){return t.cwdHash2Id(e.hash)},name:function(e){var n=t.escape(e.i18||e.name);return!p&&(n=n.replace(/([_.])/g,"​$1")),n},nametitle:function(e){return t.escape(e.i18||e.name)},permsclass:function(e){return t.perms2class(e)},perm:function(e){return t.formatPermissions(e)},dirclass:function(e){var i="directory"==e.mime?"directory":"";return e.isroot&&(i+=" isroot"),e.csscls&&(i+=" "+t.escape(e.csscls)),n.getClass&&(i+=" "+n.getClass(e)),i},style:function(e){return e.icon?t.getIconStyle(e):""},mime:function(e){var n=t.mime2class(e.mime);return e.icon&&(n+=" elfinder-cwd-bgurl"),n},size:function(e){return"directory"!==e.mime||e.size?t.formatSize(e.size):"-"},date:function(e){return t.formatDate(e)},kind:function(e){return t.mime2kind(e)},mode:function(e){return e.perm?t.formatFileMode(e.perm):""},modestr:function(e){return e.perm?t.formatFileMode(e.perm,"string"):""},modeoct:function(e){return e.perm?t.formatFileMode(e.perm,"octal"):""},modeboth:function(e){return e.perm?t.formatFileMode(e.perm,"both"):""},marker:function(e){return(e.alias||"symlink-broken"==e.mime?B:"")+(e.read&&e.write?"":L)+(e.locked?W:"")},tooltip:function(e){var n=t.formatDate(e)+(e.size>0?" ("+t.formatSize(e.size)+")":""),i="";return i=O&&e.path?t.escape(e.path.replace(/\/[^\/]*$/,"")):e.tooltip?t.escape(e.tooltip).replace(/\r/g," "):"",p&&(i+=(i?" ":"")+t.escape(e.i18||e.name)),i?i+" "+n:n}},K={},V=function(n,i){var o,r,s;if(n&&!K[n]&&("undefined"==typeof a&&(e("#elfinderAddBadgeStyle"+t.namespace).length&&e("#elfinderAddBadgeStyle"+t.namespace).remove(),a=e('<style id="addBadgeStyle'+t.namespace+'"/>').insertBefore(e("head").children(":first")).get(0).sheet||null),a)){if(n=n.toLowerCase(),s=n.split("/"),r=t.escape(t.mimeTypes[n]||(i.replace(/.bac?k$/i,"").match(/\.([^.]+)$/)||["",""])[1])){o=".elfinder-cwd-icon-"+s[0].replace(/(\.|\+)/g,"-"),"undefined"!=typeof s[1]&&(o+=".elfinder-cwd-icon-"+s[1].replace(/(\.|\+)/g,"-"));try{a.insertRule(o+':before{content:"'+r.toLowerCase()+'"}',0)}catch(l){}}K[n]=!0}},X=function(e){return e.mime&&"directory"!==e.mime&&!K[e.mime]&&V(e.mime,e.name),N[p?"row":"icon"].replace(/\{([a-z0-9_]+)\}/g,function(n,i){return $[i]?$[i](e,t):e[i]?e[i]:""})},G=e(),J=!1,Y=function(t,n){function i(e,t){return e[t+"All"]("[id]:not(."+w+"):not(.elfinder-cwd-parent):first")}var a,o,r,s,l,c=e.ui.keyCode,d=t==c.LEFT||t==c.UP,f=Ue.find("[id]."+y);if(f.length)if(a=f.filter(d?":first":":last"),r=i(a,d?"prev":"next"),r.length)if(p||t==c.LEFT||t==c.RIGHT)o=r;else if(s=a.position().top,l=a.position().left,o=a,d){do o=o.prev("[id]");while(o.length&&!(o.position().top<s&&o.position().left<=l));o.hasClass(w)&&(o=i(o,"next"))}else{do o=o.next("[id]");while(o.length&&!(o.position().top>s&&o.position().left>=l));o.hasClass(w)&&(o=i(o,"prev")),o.length||(r=Ue.find("[id]:not(."+w+"):last"),r.position().top>s&&(o=r))}else o=a;else o=G.length?d?G.prev():G:Ue.find("[id]:not(."+w+"):not(.elfinder-cwd-parent):"+(d?"last":"first"));o&&o.length&&!o.hasClass("elfinder-cwd-parent")&&(a&&n?o=a.add(a[d?"prevUntil":"nextUntil"]("#"+o.attr("id"))).add(o):f.trigger(h),o.trigger(u),re(o.filter(d?":first":":last")),oe())},Q={},Z=function(e){t.cwdHash2Elm(e).trigger(u)},ee=!1,te=function(){t.cwd().hash;q&&qe.find("input").prop("checked",!0),t.lazy(function(){var n;t.maxTargets&&(F||D).length>t.maxTargets?(ne({notrigger:!0}),n=e.map(F||D,function(e){return t.file(e)||null}),n=n.slice(0,t.maxTargets),Q={},e.each(n,function(e,n){Q[n.hash]=!0,t.cwdHash2Elm(n.hash).trigger(u)}),t.toast({mode:"warning",msg:t.i18n(["errMaxTargets",t.maxTargets])})):(Ue.find("[id]:not(."+y+"):not(.elfinder-cwd-parent)").trigger(u),Q=t.arrayFlip(F||D,!0)),oe(),q&&qe.data("pending",!1)},0,{repaint:!0})},ne=function(e){var t=e||{};q&&qe.find("input").prop("checked",!1),Object.keys(Q).length&&(J=!1,Q={},Ue.find("[id]."+y).trigger(h),q&&Ue.find("input:checkbox."+S).prop("checked",!1)),!t.notrigger&&oe(),q&&qe.data("pending",!1),Ue.removeClass("elfinder-cwd-allselected")},ie=function(){var n={};ee?ne():Object.keys(Q).length?(e.each(F||D,function(e,i){var a=t.cwdHash2Elm(i);Q[i]?a.length&&a.trigger(h):(n[i]=!0,a.length&&a.trigger(u))}),Q=n,oe()):te()},ae=void 0,oe=function(){var e=Object.keys(Q),n={selected:e,origin:"cwd"};ge&&(e.length>1||e[0]!==t.cwdId2Hash(ge.attr("id")))&&ge.hasClass(y)&&ge.trigger(h),ee=e.length&&e.length===(F||D).length&&(!t.maxTargets||e.length<=t.maxTargets),q&&(qe.find("input").prop("checked",ee),Ue[ee?"addClass":"removeClass"]("elfinder-cwd-allselected")),ee?n.selectall=!0:e.length||(n.unselectall=!0),t.trigger("select",n)},re=function(e,n){if(e.length){var i=e.position().top,a=e.outerHeight(!0),o=Pe.scrollTop(),r=Pe.get(0).clientHeight,s=we?we.outerHeight(!0):0;i+s+a>o+r?Pe.scrollTop(parseInt(i+s+a-r)):i<o&&Pe.scrollTop(i),p&&Pe.scrollLeft(0),!!n&&t.resources.blink(e,"lookme")}},se=[],le={},ce=function(e){for(var t=se.length;t--;)if(se[t].hash==e)return t;return-1},de="elfscrstart",pe="elfscrstop",ue=!1,he={disabled:!0,filter:"[id]:first",stop:oe,delay:250,appendTo:"body",autoRefresh:!1,selected:function(t,n){e(n.selected).trigger(u)},unselected:function(t,n){e(n.unselected).trigger(h)}},fe={},me=function(a,o){if(le.renderd){var r=(p?Ue.find("tbody:first"):Ue).children("[id]"+(n.oldSchool?":not(.elfinder-cwd-parent)":"")+":first");if(r.length){var s,l,c=Ue.data("selectable"),d=function(){var n=Pe.offset(),a=Pe.width(),o=e(window),s=r.width()/2,l=Math.min(n.left-o.scrollLeft()+("ltr"===t.direction?s:a-s),n.left+a-10),c=n.top-o.scrollTop()+10+(p?i:0);return{left:Math.max(0,Math.round(l)),top:Math.max(0,Math.round(c))}}(),u=a?r:e(document.elementFromPoint(d.left,d.top)),h={},f={},m=5,g=Math.ceil((le.hpi?Math.ceil(Le.data("rectangle").height/le.hpi*1.5):be)/m),y=function(){var e,n,i;for(i=0;i<m&&(e=u.attr("id"),e&&(le.getTmbs=[],n=t.cwdId2Hash(e),fe[n]=e,le.attachTmbs[n]&&(f[n]=le.attachTmbs[n]),c&&(h[e]=!0)),u=u.next(),u.length);i++);},w=function(){var e;Ue.data("selectable")&&(Object.assign(h,Q),e=Object.keys(h),e.length&&(he.filter="#"+e.join(", #"),Ue.selectable("enable").selectable("option",{filter:he.filter}).selectable("refresh"))),Object.keys(f).length&&(le.getTmbs=[],Ae(f))},x=function(){u.hasClass(v)||(u=u.closest(b))};if(fe={},c&&Ue.selectable("option","disabled"),u.length&&(u.hasClass(v)||u.closest(b).length||(l=t.getUI().find(".ui-dialog:visible,.ui-widget:visible"),l.length?(l.hide(),u=e(document.elementFromPoint(d.left,d.top)),l.show()):l=null),x(),u.length||(l&&l.hide(),u=e(document.elementFromPoint(d.left,d.top+5)),l&&l.show(),x())),u.length){if(u.attr("id"))if(a){for(var k=0;k<g&&(y(),u.length);k++);w()}else le.repaintJob&&"pending"===le.repaintJob.state()&&le.repaintJob.reject(),s=new Array(g),le.repaintJob=t.asyncJob(function(){y(),u.length||(w(),le.repaintJob&&"pending"===le.repaintJob.state()&&le.repaintJob.reject())},s).done(w)}else a&&le.renderd&&(o=o||0,o<10&&requestAnimationFrame(function(){me(a,++o)}))}}},ge=null,ve=function(n){var i=t.cwd().phash,a=t.file(i)||null,o=function(n){n&&(ge=e(X(e.extend(!0,{},n,{name:"..",i18:"..",mime:"directory"}))).addClass("elfinder-cwd-parent").on("dblclick",function(){var e=t.cwdId2Hash(this.id);t.trigger("select",{selected:[e]}).exec("open",e)}),(p?ge.children("td:first"):ge).children(".elfinder-cwd-select").remove(),(p?Ue.find("tbody"):Ue).prepend(ge),t.draggingUiHelper&&t.draggingUiHelper.data("refreshPositions",1))};a?o(a):t.getUI("tree").length?t.one("parents",function(){o(t.file(i)||null),Pe.trigger(pe)}):t.request({data:{cmd:"parents",target:t.cwd().hash},preventFail:!0}).done(function(e){o(t.file(i)||null),Pe.trigger(pe)})},be=t.options.showFiles,ye=function(){if(!(le.rendering||le.renderd&&!se.length)){var i,a,o=p?Ue.children("table").children("tbody"):Ue,r=!!e.htmlPrefilter,s=e(r?document.createDocumentFragment():"<div/>"),l=function(n){var i,a,l,c=n||null,h=[],f=!1,m={},g="self"===t.option("tmbUrl"),v=!le.renderd;i=se.splice(0,be+(c||0)/(le.hpi||1)),le.renderd+=i.length,se.length||(Re.hide(),Pe.off(pe,ye)),a=[],h=e.map(i,function(e){return e.hash&&e.name?("directory"==e.mime&&(f=!0),(e.tmb&&(1!=e.tmb||e.size>0)||g&&0===e.mime.indexOf("image/"))&&(m[e.hash]=e.tmb||"self"),j[e.hash]&&a.push(e.hash),X(e)):null}),s.empty().append(h.join("")),f&&!d&&Te(s),l=[],Object.keys(Q).length&&s.find("[id]:not(."+y+"):not(.elfinder-cwd-parent)").each(function(){Q[t.cwdId2Hash(this.id)]&&l.push(e(this))}),o.append(r?s:s.children()),l.length&&(e.each(l,function(e,t){t.trigger(u)}),oe()),a.length&&t.trigger("lockfiles",{files:a}),!le.hpi&&De(o,i.length),p&&(Ue.find("thead").show(),ke({fitWidth:!_})),Object.keys(m).length&&Object.assign(le.attachTmbs,m),v&&(d||Ue.data("selectable")||Ue.selectable(he).data("selectable",!0)),!ue&&Pe.trigger(pe)};le.renderd||(le.rendering=!0,Pe.scrollTop(0),i=t.cwd().phash,l(),n.oldSchool&&(i&&!O?ve(i):ge=e()),p&&(_&&Ce(),ke({fitWidth:!0})),le.itemH=(p?o.find("tr:first"):o.find("[id]:first")).outerHeight(!0),t.trigger("cwdrender"),le.rendering=!1,me(!0)),!le.rendering&&se.length?(a=Pe.height()+Pe.scrollTop()+t.options.showThreshold+le.row-le.renderd*le.hpi)>0?(le.rendering=!0,t.lazy(function(){l(a),le.rendering=!1})):!t.enabled()&&_e():_e()}},we=null,xe=t.UA.CSS.positionSticky&&t.UA.CSS.widthMaxContent,ke=function(a){if(i=0,n.listView.fixedHeader){var o,r,s,l,c,d,p,u,h,f,m,g,v,b=function(){var e,n;n="ltr"===t.direction?"left":"right",e=("ltr"===t.direction?Pe.scrollLeft():s.outerWidth(!0)-Pe.width()-Pe.scrollLeft())*-1,r.css(n)!==e&&r.css(n,e)},y=a||{};if(c=Ue.find("tbody"),u=c.children("tr:first"),u.length&&u.is(":visible")){if(s=c.parent(),we?(l=e("#"+t.namespace+"-cwd-thead"),p=l.children("tr:first")):(v=!0,c.addClass("elfinder-cwd-fixheader"),l=Ue.find("thead").attr("id",t.namespace+"-cwd-thead"),p=l.children("tr:first"),d=p.outerHeight(!0),Ue.css("margin-top",d-parseInt(s.css("padding-top"))),xe?(we=e('<div class="elfinder-table-header-sticky"/>').addClass(Ue.attr("class")).append(e("<table/>").append(l)),Ue.after(we),Pe.on("resize.fixheader",function(e){e.stopPropagation(),ke({fitWidth:!0})})):(r=e("<div/>").addClass(Ue.attr("class")).append(e("<table/>").append(l)),we=e("<div/>").addClass(Pe.attr("class")+" elfinder-cwd-fixheader").removeClass("ui-droppable native-droppable").css(Pe.position()).css({height:d,width:Ue.outerWidth()}).append(r),"rtl"===t.direction&&we.css("left",Pe.data("width")-Pe.width()+"px"),b(),Pe.after(we).on("scroll.fixheader resize.fixheader",function(e){b(),"resize"===e.type&&(e.stopPropagation(),we.css(Pe.position()),Pe.data("width",Pe.css("overflow","hidden").width()),Pe.css("overflow","auto"),ke())}))),v||y.fitWidth||Math.abs(u.outerWidth()-p.outerWidth())>2){o=E.length+1;for(var w=0;w<o&&(h=p.children("td:eq("+w+")"),f=u.children("td:eq("+w+")"),m=h.width(),g=f.width(),"undefined"==typeof h.data("delta")&&h.data("delta",h.outerWidth()-m-(f.outerWidth()-g)),g-=h.data("delta"),v||y.fitWidth||m!==g);w++)h.css("width",g+"px")}xe||(we.data("widthTimer")&&cancelAnimationFrame(we.data("widthTimer")),we.data("widthTimer",requestAnimationFrame(function(){we&&(we.css("width",We.width()+"px"),"rtl"===t.direction&&we.css("left",Pe.data("width")-Pe.width()+"px"))}))),i=l.height()}}},Ce=function(){if(p&&_){var t,n="elfinder-cwd-colwidth",i=Ue.find("tr[id]:first");i.hasClass(n)||(t=Ue.find("tr."+n),t.removeClass(n).find("td").css("width",""),i.addClass(n),Ue.find("table:first").css("table-layout","fixed"),e.each(e.merge(["name"],E),function(e,t){var n=_[t]||i.find("td.elfinder-col-"+t).width();i.find("td.elfinder-col-"+t).width(n)}))}},ze=Object.assign({},t.droppable,{over:function(n,i){var a,o,r,s=e(this),l=i.helper,c=n.shiftKey||n.ctrlKey||n.metaKey;return n.stopPropagation(),l.data("dropover",l.data("dropover")+1),s.data("dropover",!0),l.removeClass("elfinder-drag-helper-move elfinder-drag-helper-plus"),l.data("namespace")===t.namespace&&t.insideWorkzone(n.pageX,n.pageY)?(s.hasClass(t.res(g,"cwdfile"))?(a=t.cwdId2Hash(s.attr("id")),s.data("dropover",a)):(a=t.cwd().hash,t.cwd().write&&s.data("dropover",a)),
+r=t.file(l.data("files")[0]).phash===a,s.data("dropover")===a?e.each(l.data("files"),function(e,t){if(t===a||r&&!c&&!l.hasClass("elfinder-drag-helper-plus"))return s.removeClass(T),!1}):s.removeClass(T),l.data("locked")||r?o="elfinder-drag-helper-plus":(o="elfinder-drag-helper-move",c&&(o+=" elfinder-drag-helper-plus")),s.hasClass(T)&&l.addClass(o),void requestAnimationFrame(function(){s.hasClass(T)&&l.addClass(o)})):void s.removeClass(T)},out:function(t,n){var i=n.helper;t.stopPropagation(),i.removeClass("elfinder-drag-helper-move elfinder-drag-helper-plus").data("dropover",Math.max(i.data("dropover")-1,0)),e(this).removeData("dropover").removeClass(T)},deactivate:function(){e(this).removeData("dropover").removeClass(T)},drop:function(e,n){ne({notrigger:!0}),t.droppable.drop.call(this,e,n)}}),Te=function(n){n=n?n:p?Ue.find("tbody"):Ue;var i=n.children(".directory:not(."+k+",.elfinder-na,.elfinder-ro)");t.isCommandEnabled("paste")&&i.droppable(ze),t.isCommandEnabled("upload")&&i.addClass("native-droppable"),n.children(".isroot").each(function(n,i){var a=e(i),o=t.cwdId2Hash(i.id);t.isCommandEnabled("paste",o)?a.hasClass(k+",elfinder-na,elfinder-ro")||a.droppable(ze):a.hasClass(k)&&a.droppable("destroy"),t.isCommandEnabled("upload",o)?a.hasClass("native-droppable,elfinder-na,elfinder-ro")||a.addClass("native-droppable"):a.hasClass("native-droppable")&&a.removeClass("native-droppable")})},Ae=function(n,i){var a=function(t,n){e("<img/>").on("load",function(){t.find(".elfinder-cwd-icon").addClass(n.className).css("background-image","url('"+n.url+"')")}).attr("src",n.url)},o=function(e,n){var o,r,s=t.cwdHash2Elm(e);s.length&&("1"!=n?(o=t.file(e),o.tmb!==n&&(o.tmb=n),r=t.tmb(o),i?s.find(".elfinder-cwd-icon").addClass(r.className).css("background-image","url('"+r.url+"')"):a(s,r),delete le.attachTmbs[e]):i?Se([e]):le.tmbLoading[e]||le.getTmbs.push(e))};e.isPlainObject(n)&&Object.keys(n).length&&(Object.assign(le.attachTmbs,n),e.each(n,o),i||!le.getTmbs.length||Object.keys(le.tmbLoading).length||Se())},Se=function(n){var i=[],a=!1;return t.oldAPI?void t.request({data:{cmd:"tmb",current:t.cwd().hash},preventFail:!0}).done(function(e){e.images&&Object.keys(e.images).length&&Ae(e.images),e.tmb&&Se()}):(n?(a=!0,i=n.splice(0,I)):i=le.getTmbs.splice(0,I),void(i.length&&(a||fe[i[0]]||fe[i[i.length-1]])&&(e.each(i,function(e,t){le.tmbLoading[t]=!0}),t.request({data:{cmd:"tmb",targets:i},preventFail:!0}).done(function(t){var o,r=[];t.images&&((o=Object.keys(t.images).length)?(o<i.length&&e.each(i,function(e,n){t.images[n]||r.push(n)}),Ae(t.images,a)):r=i,r.length&&e.each(r,function(e,t){delete le.attachTmbs[t]})),a&&n.length&&Se(n)}).always(function(){le.tmbLoading={},!a&&le.getTmbs.length&&Se()}))))},Ie=function(n,i){var a,o,r,s,l,c,u=p?Ue.find("tbody"):Ue,h=n.length,f={},m=function(e){for(var n,i=Ue.find("[id]:first");i.length;){if(n=t.file(t.cwdId2Hash(i.attr("id"))),!i.hasClass("elfinder-cwd-parent")&&n&&t.compare(e,n)<0)return i;i=i.next("[id]")}},g=function(e){var n,i=se.length;for(n=0;n<i;n++)if(t.compare(e,se[n])<0)return n;return i||-1},v=!!e.htmlPrefilter,b=e(v?document.createDocumentFragment():"<div/>");if(h>be)Ee(),Q=t.arrayFlip(e.map(n,function(e){return e.hash}),!0),oe();else{for(h&&Le.removeClass("elfinder-cwd-wrapper-empty"),c="self"===t.option("tmbUrl");h--;)a=n[h],o=a.hash,t.cwdHash2Elm(o).length||((r=m(a))&&!r.length&&(r=null),!r&&(l=g(a))>=0?se.splice(l,0,a):(b.empty().append(X(a)),"directory"===a.mime&&!d&&Te(b),s=v?b:b.children(),r?r.before(s):u.append(s)),t.cwdHash2Elm(o).length&&(a.tmb&&(1!=a.tmb||a.size>0)||c&&0===a.mime.indexOf("image/"))&&(f[o]=a.tmb||"self"));p&&(Ce(),ke({fitWidth:!_})),De(u),Object.keys(f).length&&Object.assign(le.attachTmbs,f)}},Oe=function(n){var i,a,o,r,s=n.length,l=t.searchStatus.state>1,c=t.getCommand(t.currentReqCmd)||{};if(!t.cwd().hash&&!c.noChangeDirOnRemovedCwd)return e.each(M.reverse(),function(e,n){if(t.file(n))return r=!0,t.one(t.currentReqCmd+"done",function(){!t.cwd().hash&&t.exec("open",n)}),!1}),void(!r&&!t.cwd().hash&&t.exec("open",t.roots[Object.keys(t.roots)[0]]));for(;s--;){if(i=n[s],(a=t.cwdHash2Elm(i)).length)try{a.remove(),--le.renderd}catch(d){t.debug("error",d)}else(o=ce(i))!==-1&&se.splice(o,1);Q[i]&&delete Q[i],l&&(o=e.inArray(i,D))!==-1&&D.splice(o,1)}l&&t.trigger("cwdhasheschange",D),p&&(Ce(),ke({fitWidth:!_}))},je=function(){for(var e="",n="",i=0;i<E.length;i++)e=t.getColumnName(E[i]),n+='<td class="elfinder-cwd-view-th-'+E[i]+' sortable-item">'+e+"</td>";return n},Me=function(e){var t,n;e.height||(t=p?Ue.find("tbody"):Ue,n=t.find(p?"tr:first":"[id]:first"),e.height=n.outerHeight(!0),p||(e.width=n.outerWidth(!0)))},De=function(e,n){var i,a=e||(p?Ue.find("tbody"):Ue),o=Ke[t.viewType],r=1;se.length>0&&(le.hpi?p||(r=Math.floor(a.width()/o.width)):(Me(o),p?le.row=le.hpi=o.height:(r=Math.floor(a.width()/o.width),le.row=o.height,le.hpi=le.row/r)),i=Math.ceil((se.length+(n||0))/r),p&&we&&++i,Re.css({top:le.row*i+"px"}).show())},Fe={contextmenu:function(e){return e.preventDefault(),void 0!==Ue.data("longtap")?void e.stopPropagation():void t.trigger("contextmenu",{type:"cwd",targets:[t.cwd().hash],x:e.pageX,y:e.pageY})},touchstart:function(e){e.originalEvent.touches.length>1||(Ue.data("longtap")!==!1&&(Pe.data("touching",{x:e.originalEvent.touches[0].pageX,y:e.originalEvent.touches[0].pageY}),Ue.data("tmlongtap",setTimeout(function(){Ue.data("longtap",!0),t.trigger("contextmenu",{type:"cwd",targets:[t.cwd().hash],x:Pe.data("touching").x,y:Pe.data("touching").y})},500))),Ue.data("longtap",null))},touchend:function(e){"touchmove"===e.type?(!Pe.data("touching")||Math.abs(Pe.data("touching").x-e.originalEvent.touches[0].pageX)+Math.abs(Pe.data("touching").y-e.originalEvent.touches[0].pageY)>4)&&Pe.data("touching",null):setTimeout(function(){Ue.removeData("longtap")},80),clearTimeout(Ue.data("tmlongtap"))},click:function(e){Ue.data("longtap")&&(e.preventDefault(),e.stopPropagation())}},Ee=function(){t.lazy(function(){var n;Le.append(qe).removeClass("elfinder-cwd-wrapper-empty elfinder-search-result elfinder-incsearch-result elfinder-letsearch-result"),(t.searchStatus.state>1||t.searchStatus.ininc)&&Le.addClass("elfinder-search-result"+(t.searchStatus.ininc?" elfinder-"+("/"===O.substr(0,1)?"let":"inc")+"search-result":"")),le.attachThumbJob&&le.attachThumbJob._abort(),Ue.data("selectable")&&Ue.selectable("disable").selectable("destroy").removeData("selectable"),t.trigger("cwdinit"),G=e();try{Ue.empty()}catch(i){Ue.html("")}we&&(Pe.off("scroll.fixheader resize.fixheader"),we.remove(),we=null),Ue.removeClass("elfinder-cwd-view-icons elfinder-cwd-view-list").addClass("elfinder-cwd-view-"+(p?"list":"icons")).attr("style","").css("height","auto"),Re.hide(),Pe[p?"addClass":"removeClass"]("elfinder-cwd-wrapper-list")._padding=parseInt(Pe.css("padding-top"))+parseInt(Pe.css("padding-bottom")),t.UA.iOS&&Pe.removeClass("overflow-scrolling-touch").addClass("overflow-scrolling-touch"),p&&(Ue.html("<table><thead/><tbody/></table>"),n=e('<tr class="ui-state-default"><td class="elfinder-cwd-view-th-name">'+t.getColumnName("name")+"</td>"+je()+"</tr>"),Ue.find("thead").hide().append(n).find("td:first").append(qe),e.fn.sortable&&n.addClass("touch-punch touch-punch-keep-default").sortable({axis:"x",distance:8,items:"> .sortable-item",start:function(t,n){e(n.item[0]).data("dragging",!0),n.placeholder.width(n.helper.removeClass("ui-state-hover").width()).removeClass("ui-state-active").addClass("ui-state-hover").css("visibility","visible")},update:function(n,i){var a,o,r=e(i.item[0]).attr("class").split(" ")[0].replace("elfinder-cwd-view-th-","");E=e.map(e(this).children(),function(t){var n=e(t).attr("class").split(" ")[0].replace("elfinder-cwd-view-th-","");return o||(r===n?o=!0:a=n),"name"===n?null:n}),N.row=R(),t.storage("cwdCols",E),a=".elfinder-col-"+a+":first",r=".elfinder-col-"+r+":first",t.lazy(function(){Ue.find("tbody tr").each(function(){var t=e(this);t.children(a).after(t.children(r))})})},stop:function(t,n){setTimeout(function(){e(n.item[0]).removeData("dragging")},100)}}),n.find("td").addClass("touch-punch").resizable({handles:"ltr"===t.direction?"e":"w",start:function(t,n){var i=Ue.find("td.elfinder-col-"+n.element.attr("class").split(" ")[0].replace("elfinder-cwd-view-th-","")+":first");n.element.data("dragging",!0).data("resizeTarget",i).data("targetWidth",i.width()),H=!0,"fixed"!==Ue.find("table").css("table-layout")&&(Ue.find("tbody tr:first td").each(function(){e(this).width(e(this).width())}),Ue.find("table").css("table-layout","fixed"))},resize:function(e,t){t.element.data("resizeTarget").width(t.element.data("targetWidth")-(t.originalSize.width-t.size.width))},stop:function(n,i){H=!1,ke({fitWidth:!0}),_={},Ue.find("tbody tr:first td").each(function(){var t=e(this).attr("class").split(" ")[0].replace("elfinder-col-","");_[t]=e(this).width()}),t.storage("cwdColWidth",_),setTimeout(function(){i.element.removeData("dragging")},100)}}).find(".ui-resizable-handle").addClass("ui-icon ui-icon-grip-dotted-vertical")),se=e.map(F||D,function(e){return t.file(e)||null}),se=t.sortFiles(se),F?F=e.map(se,function(e){return e.hash}):D=e.map(se,function(e){return e.hash}),le={renderd:0,attachTmbs:{},getTmbs:[],tmbLoading:{},lazyOpts:{tm:0}},Le[se.length<1?"addClass":"removeClass"]("elfinder-cwd-wrapper-empty"),Pe.off(pe,ye).on(pe,ye).trigger(pe),t.cwd().write?(Pe[t.isCommandEnabled("upload")?"addClass":"removeClass"]("native-droppable"),Pe.droppable(t.isCommandEnabled("paste")?"enable":"disable")):Pe.removeClass("native-droppable").droppable("disable").removeClass("ui-state-disabled")})},Ue=e(this).addClass("ui-helper-clearfix elfinder-cwd").attr("unselectable","on").on("click."+t.namespace,b,function(n){var i,a,o,r,s,l=this.id?e(this):e(this).parents("[id]:first"),c=e(n.target);if(q&&(c.is("input:checkbox."+S)||c.hasClass("elfinder-cwd-select")))return n.stopPropagation(),n.preventDefault(),l.trigger(l.hasClass(y)?h:u),oe(),void requestAnimationFrame(function(){c.prop("checked",l.hasClass(y))});if(Ue.data("longtap")||c.hasClass("elfinder-cwd-nonselect"))return void n.stopPropagation();if(U||(U=l.attr("id"),setTimeout(function(){U=""},500)),n.shiftKey&&(i=l.prevAll(ae||"."+y+":first"),a=l.nextAll(ae||"."+y+":first"),o=i.length,r=a.length),n.shiftKey&&(o||r))s=o?l.prevUntil("#"+i.attr("id")):l.nextUntil("#"+a.attr("id")),s.add(l).trigger(u);else if(n.ctrlKey||n.metaKey)l.trigger(l.hasClass(y)?h:u);else{if(Pe.data("touching")&&l.hasClass(y))return Pe.data("touching",null),void t.dblclick({file:t.cwdId2Hash(this.id)});ne({notrigger:!0}),l.trigger(u)}oe()}).on("dblclick."+t.namespace,b,function(n){if(U){var i=t.cwdId2Hash(U);n.stopPropagation(),this.id!==U&&(e(this).trigger(h),e("#"+U).trigger(u),oe()),t.dblclick({file:i})}}).on("touchstart."+t.namespace,b,function(n){if(!(n.originalEvent.touches.length>1)){var i,a=this.id?e(this):e(this).parents("[id]:first"),o=e(n.target),r=n.target.nodeName;if("INPUT"===r&&"text"===n.target.type||"TEXTAREA"===r||o.hasClass("elfinder-cwd-nonselect"))return void n.stopPropagation();if(a.find("input:text,textarea").length)return n.stopPropagation(),void n.preventDefault();Pe.data("touching",{x:n.originalEvent.touches[0].pageX,y:n.originalEvent.touches[0].pageY}),q&&(o.is("input:checkbox."+S)||o.hasClass("elfinder-cwd-select"))||(i=a.prevAll("."+y+":first").length+a.nextAll("."+y+":first").length,Ue.data("longtap",null),(Object.keys(Q).length||p&&"TD"!==n.target.nodeName||!p&&this!==n.target)&&(Ue.data("longtap",!1),a.addClass(C),a.data("tmlongtap",setTimeout(function(){Ue.data("longtap",!0),a.trigger(u),oe(),t.trigger("contextmenu",{type:"files",targets:t.selected(),x:n.originalEvent.touches[0].pageX,y:n.originalEvent.touches[0].pageY})},500))))}}).on("touchmove."+t.namespace+" touchend."+t.namespace,b,function(n){var i,a=e(n.target);if(!q||!a.is("input:checkbox."+S)&&!a.hasClass("elfinder-cwd-select")){if("INPUT"==n.target.nodeName||"TEXTAREA"==n.target.nodeName)return void n.stopPropagation();i=this.id?e(this):e(this).parents("[id]:first"),clearTimeout(i.data("tmlongtap")),"touchmove"===n.type?(Pe.data("touching",null),i.removeClass(C)):(Pe.data("touching")&&!Ue.data("longtap")&&i.hasClass(y)&&(n.preventDefault(),Pe.data("touching",null),t.dblclick({file:t.cwdId2Hash(this.id)})),setTimeout(function(){Ue.removeData("longtap")},80))}}).on("mouseenter."+t.namespace,b,function(n){if(!ue){var i=e(this),a=null;if(!(d||i.data("dragRegisted")||i.hasClass(A)||i.hasClass(x)||i.hasClass(w))){if(i.data("dragRegisted",!0),!t.isCommandEnabled("copy",t.searchStatus.state>1||i.hasClass("isroot")?t.cwdId2Hash(i.attr("id")):void 0))return;i.on("mousedown",function(n){var a=n.shiftKey||n.altKey,o=!1;a&&!t.UA.IE&&Ue.data("selectable")&&(Ue.selectable("disable").selectable("destroy").removeData("selectable"),requestAnimationFrame(function(){Ue.selectable(he).selectable("option",{disabled:!1}).selectable("refresh").data("selectable",!0)})),i.removeClass("ui-state-disabled"),a?i.draggable("option","disabled",!0).attr("draggable","true"):(i.hasClass(y)||(o=p?e(n.target).closest("span,tr").is("tr"):e(n.target).hasClass("elfinder-cwd-file")),o?i.draggable("option","disabled",!0):i.draggable("option","disabled",!1).removeAttr("draggable").draggable("option","cursorAt",{left:50-parseInt(e(n.currentTarget).css("margin-left")),top:47}))}).on("dragstart",function(n){var i=n.dataTransfer||n.originalEvent.dataTransfer||null;if(a=null,i&&!t.UA.IE){var o,r=this.id?e(this):e(this).parents("[id]:first"),s=e("<span>"),l="",c=null,d=null,p=[],h=function(n){var i,a=n.mime,o=t.tmb(n);return i='<div class="elfinder-cwd-icon elfinder-cwd-icon-drag '+t.mime2class(a)+' ui-corner-all"/>',o&&(i=e(i).addClass(o.className).css("background-image","url('"+o.url+"')").get(0).outerHTML),i},f=[];if(r.trigger(u),oe(),e.each(Q,function(n){var i=t.file(n),a=i.url;if(i&&"directory"!==i.mime){if(a){if("1"==a)return f.push(n),!0}else a=t.url(i.hash);a&&(a=t.convAbsUrl(a),p.push(n),e("<a>").attr("href",a).text(a).appendTo(s),l+=a+"\n",c||(c=i.mime+":"+i.name+":"+a),d||(d=a+"\n"+i.name))}}),f.length)return e.each(f,function(e,n){var i=t.file(n);i.url="",t.request({data:{cmd:"url",target:n},notify:{type:"url",cnt:1},preventDefault:!0}).always(function(e){i.url=e.url?e.url:"1"})}),!1;if(!l)return!1;i.setDragImage&&(a=e('<div class="elfinder-drag-helper html5-native"></div>').append(h(t.file(p[0]))).appendTo(e(document.body)),(o=p.length)>1&&a.append(h(t.file(p[o-1]))+'<span class="elfinder-drag-num">'+o+"</span>"),i.setDragImage(a.get(0),50,47)),i.effectAllowed="copyLink",i.setData("DownloadURL",c),i.setData("text/x-moz-url",d),i.setData("text/uri-list",l),i.setData("text/plain",l),i.setData("text/html",s.html()),i.setData("elfinderfrom",window.location.href+t.cwd().hash),i.setData("elfinderfrom:"+i.getData("elfinderfrom"),"")}}).on("dragend",function(e){ne({notrigger:!0}),a&&a.remove()}).draggable(t.draggable)}}}).on(u,b,function(n){var i=e(this),a=t.cwdId2Hash(i.attr("id"));J||i.hasClass(w)||(ae="#"+this.id,i.addClass(y).children().addClass(C).find("input:checkbox."+S).prop("checked",!0),Q[a]||(Q[a]=!0),G=Ue.find("[id]."+y+":last").next())}).on(h,b,function(n){var i=e(this),a=t.cwdId2Hash(i.attr("id"));J||(i.removeClass(y).children().removeClass(C).find("input:checkbox."+S).prop("checked",!1),Ue.hasClass("elfinder-cwd-allselected")&&(q&&qe.children("input").prop("checked",!1),Ue.removeClass("elfinder-cwd-allselected")),Q[a]&&delete Q[a])}).on(f,b,function(){var t=e(this).removeClass(C+" "+y).addClass(w),n=t.children(),i=p?t:n.find("div.elfinder-cwd-file-wrapper,div.elfinder-cwd-filename");n.removeClass(C+" "+y),t.hasClass(k)&&t.droppable("disable"),i.hasClass(x)&&i.draggable("disable")}).on(m,b,function(){var t=e(this).removeClass(w),n=p?t:t.children("div.elfinder-cwd-file-wrapper,div.elfinder-cwd-filename");t.hasClass(k)&&t.droppable("enable"),n.hasClass(x)&&n.draggable("enable")}).on("scrolltoview",b,function(t,n){re(e(this),!n||"undefined"==typeof n.blink||n.blink)}).on("mouseenter."+t.namespace+" mouseleave."+t.namespace,b,function(n){var i="mouseenter"===n.type;i&&(ue||t.UA.Mobile)||(t.trigger("hover",{hash:t.cwdId2Hash(e(this).attr("id")),type:n.type}),e(this).toggleClass(C,"mouseenter"==n.type))}).on("mouseenter."+t.namespace+" mouseleave."+t.namespace,".elfinder-cwd-file-wrapper,.elfinder-cwd-filename",function(t){var n="mouseenter"===t.type;n&&ue||e(this).closest(b).children(".elfinder-cwd-file-wrapper,.elfinder-cwd-filename").toggleClass(z,"mouseenter"==t.type)}).on("contextmenu."+t.namespace,function(n){var i=e(n.target).closest(b);if(i.get(0)!==n.target||Q[t.cwdId2Hash(i.get(0).id)])return i.find("input:text,textarea").length?void n.stopPropagation():void(i.length&&("TD"!=n.target.nodeName||Q[t.cwdId2Hash(i.get(0).id)])&&(n.stopPropagation(),n.preventDefault(),i.hasClass(w)||Pe.data("touching")||(i.hasClass(y)||(ne({notrigger:!0}),i.trigger(u),oe()),t.trigger("contextmenu",{type:"files",targets:t.selected(),x:n.pageX,y:n.pageY}))))}).on("click."+t.namespace,function(e){e.target!==this||Ue.data("longtap")||!e.shiftKey&&!e.ctrlKey&&!e.metaKey&&ne()}).on("create."+t.namespace,function(n,i){var a=p?Ue.find("tbody"):Ue,o=a.find(".elfinder-cwd-parent"),r=i.move||!1,s=e(X(i)).addClass(A),l=t.selected();l.length?r&&t.trigger("lockfiles",{files:l}):ne(),o.length?o.after(s):a.prepend(s),Ce(),Pe.scrollTop(0).scrollLeft(0)}).on("unselectall",ne).on("selectfile",function(e,n){t.cwdHash2Elm(n).trigger(u),oe()}).on("colwidth",function(){p&&(Ue.find("table").css("table-layout","").find("td").css("width",""),ke({fitWidth:!0}),t.storage("cwdColWidth",_=null))}).on("iconpref",function(e,t){Ue.removeClass(function(e,t){return(t.match(/\belfinder-cwd-size\S+/g)||[]).join(" ")}),s=t?parseInt(t.size)||0:0,p||(s>0&&Ue.addClass("elfinder-cwd-size"+s),le.renderd&&requestAnimationFrame(function(){Ke.icons={},le.hpi=null,De(Ue,le.renderd),me()}))}).on("onwheel"in document?"wheel":"mousewheel",function(e){var i,a,o;!p&&(e.ctrlKey&&!e.metaKey||!e.ctrlKey&&e.metaKey)&&(e.stopPropagation(),e.preventDefault(),i=Ue.data("wheelTm"),"undefined"!=typeof i?(clearTimeout(i),Ue.data("wheelTm",setTimeout(function(){Ue.removeData("wheelTm")},200))):(Ue.data("wheelTm",!1),a=s||0,o=e.originalEvent.deltaY?e.originalEvent.deltaY:-e.originalEvent.wheelDelta,o>0?s>0&&(a=s-1):s<n.iconsView.sizeMax&&(a=s+1),a!==s&&(t.storage("iconsize",a),Ue.trigger("iconpref",{size:a}))))}),Pe=e('<div class="elfinder-cwd-wrapper"/>').droppable(Object.assign({},ze,{autoDisable:!1})).on("contextmenu."+t.namespace,Fe.contextmenu).on("touchstart."+t.namespace,Fe.touchstart).on("touchmove."+t.namespace+" touchend."+t.namespace,Fe.touchend).on("click."+t.namespace,Fe.click).on("scroll."+t.namespace,function(){ue||(Ue.data("selectable")&&Ue.selectable("disable"),Pe.trigger(de)),ue=!0,le.scrtm&&cancelAnimationFrame(le.scrtm),le.scrtm&&Math.abs((le.scrolltop||0)-(le.scrolltop=this.scrollTop||e(this).scrollTop()))<5&&(le.scrtm=0,Pe.trigger(pe)),le.scrtm=requestAnimationFrame(function(){le.scrtm=0,Pe.trigger(pe)})}).on(pe,function(){ue=!1,me()}),Re=e("<div> </div>").css({position:"absolute",width:"1px",height:"1px"}).hide(),qe=q?e('<div class="elfinder-cwd-selectall"><input type="checkbox"/></div>').attr("title",t.i18n("selectall")).on("touchstart mousedown click",function(t){return t.stopPropagation(),t.preventDefault(),!e(this).data("pending")&&"click"!==t.type&&(qe.data("pending",!0),void(Ue.hasClass("elfinder-cwd-allselected")?(qe.find("input").prop("checked",!1),requestAnimationFrame(function(){ne()})):te()))}):e(),He=null,_e=function(t){var n=function(){if("undefined"!=typeof le.renderd){var t=0;Pe.siblings("div.elfinder-panel:visible").each(function(){t+=e(this).outerHeight(!0)}),Pe.height(Le.height()-t-Pe._padding)}};t&&n(),He&&cancelAnimationFrame(He),He=requestAnimationFrame(function(){!t&&n();var e,i;Ue.css("height","auto"),e=Pe[0].clientHeight-parseInt(Pe.css("padding-top"))-parseInt(Pe.css("padding-bottom"))-parseInt(Ue.css("margin-top")),i=Ue.outerHeight(!0),i<e&&Ue.height(e)}),p&&!H&&(t?Pe.trigger("resize.fixheader"):ke()),me()},Ne=e(this).parent().on("resize",_e),Le=Ne.children(".elfinder-workzone").append(Pe.append(this).append(Re)),We=e('<div class="elfinder-cwd-message-board"/>').insertAfter(Ue),Be=e('<div class="elfinder-cwd-expires" />'),$e=function(){var e,n,i;o&&clearTimeout(o),l&&t.volumeExpires[l]&&(n=t.volumeExpires[l]-+new Date/1e3,i=n%60+.1,e=Math.floor(n/60),Be.html(t.i18n(["minsLeft",e])).show(),e&&(o=setTimeout($e,1e3*i)))},Ke={icons:{},list:{}};t.UA.ltIE10||We.append(e('<div class="elfinder-cwd-trash" />').html(t.i18n("volume_Trash"))).append(Be),$=Object.assign($,n.replacement||{});try{_=t.storage("cwdColWidth")?t.storage("cwdColWidth"):null}catch(Ve){_=null}t.bind("columnpref",function(i){var a=i.data||{};(E=t.storage("cwdCols"))?(E=e.grep(E,function(e){return n.listView.columns.indexOf(e)!==-1}),n.listView.columns.length>E.length&&e.each(n.listView.columns,function(e,t){E.indexOf(t)===-1&&E.push(t)})):E=n.listView.columns;var o=t.storage("columnhides")||null;o&&Object.keys(o).length&&(E=e.grep(E,function(e){return!o[e]})),N.row=R(),p&&a.repaint&&Ee()}).trigger("columnpref"),d&&e("body").on("touchstart touchmove touchend",function(e){}),q&&Ue.addClass("elfinder-has-checkbox"),e(window).on("scroll."+t.namespace,function(){c&&cancelAnimationFrame(c),c=requestAnimationFrame(function(){Pe.trigger(pe)})}),e(document).on("keydown."+t.namespace,function(n){n.keyCode==e.ui.keyCode.ESCAPE&&(t.getUI().find(".ui-widget:visible").length||ne())}),t.one("init",function(){var n,i,a,o,s=document.createElement("style"),l=0;document.head&&(document.head.appendChild(s),n=s.sheet,n.insertRule('.elfinder-cwd-wrapper-empty .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+t.i18n("emptyFolder")+'" }',l++),n.insertRule('.elfinder-cwd-wrapper-empty .native-droppable .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+t.i18n("emptyFolder"+(d?"LTap":"Drop"))+'" }',l++),n.insertRule('.elfinder-cwd-wrapper-empty .ui-droppable-disabled .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+t.i18n("emptyFolder")+'" }',l++),n.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+t.i18n("emptySearch")+'" }',l++),n.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-incsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+t.i18n("emptyIncSearch")+'" }',l++),n.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-letsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+t.i18n("emptyLetSearch")+'" }',l++)),(o=t.storage("iconsize")||0)&&Ue.trigger("iconpref",{size:o}),d||(t.one("open",function(){n&&t.zIndex&&n.insertRule(".ui-selectable-helper{z-index:"+t.zIndex+";}",l++)}),a=e('<div style="position:absolute"/>'),i=t.getUI(),i.on("resize",function(e,t){var n;e.preventDefault(),e.stopPropagation(),t&&t.fullscreen&&(n=i.offset(),"on"===t.fullscreen?(a.css({top:n.top*-1,left:n.left*-1}).appendTo(i),he.appendTo=a):(a.detach(),he.appendTo="body"),Ue.data("selectable")&&Ue.selectable("option",{appendTo:he.appendTo}))})),r=t.getUI("tree").length}).bind("enable",function(){_e()}).bind("request.open",function(){le.getTmbs=[]}).one("open",function(){t.maxTargets&&(I=Math.min(t.maxTargets,I))}).bind("open add remove searchend",function(){var n=t.cwd().hash,i=this.type;if(("open"===i||"searchend"===i||t.searchStatus.state<2)&&(D=e.map(t.files(n),function(e){return e.hash}),t.trigger("cwdhasheschange",D)),"open"===i){var a=function(){var n=!1;return e.each(M,function(e,i){if(t.trashes[i])return n=!0,!1}),n},o=n&&(!t.file(n)||r)?r?function(){var n=e.Deferred();return t.one("treesync",function(e){e.data.always(function(){n.resolve()})}),n}():t.request({data:{cmd:"parents",target:t.cwd().hash},preventFail:!0}):null,s=t.cwd();s.volumeid!==l&&(Be.empty().hide(),l&&Pe.removeClass("elfinder-cwd-wrapper-"+l),l=s.volumeid,$e(),Pe.addClass("elfinder-cwd-wrapper-"+l)),e.when(o).done(function(){M=t.parents(s.hash),Pe[a()?"addClass":"removeClass"]("elfinder-cwd-wrapper-trash")}),F=void 0,ne({notrigger:!0}),Ee()}}).bind("search",function(n){D=e.map(n.data.files,function(e){return e.hash}),t.trigger("cwdhasheschange",D),F=void 0,t.searchStatus.ininc=!1,Ee(),t.autoSync("stop")}).bind("searchend",function(e){(O||F)&&(O="",F?t.trigger("incsearchend",e.data):e.data&&e.data.noupdate||Ee()),t.autoSync()}).bind("searchstart",function(e){ne(),O=e.data.query}).bind("incsearchstart",function(n){Q={},t.lazy(function(){var i,a,o="";a=O=n.data.query||"",a?("/"===a.substr(0,1)&&(a=a.substr(1),o="^"),i=new RegExp(o+a.replace(/([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g,"\\$1"),"i"),F=e.grep(D,function(e){var n=t.file(e);return!(!n||!(n.name.match(i)||n.i18&&n.i18.match(i)))}),t.trigger("incsearch",{hashes:F,query:a}).searchStatus.ininc=!0,Ee(),t.autoSync("stop")):t.trigger("incsearchend")})}).bind("incsearchend",function(e){O="",t.searchStatus.ininc=!1,F=void 0,e.data&&e.data.noupdate||Ee(),t.autoSync()}).bind("sortchange",function(){var e=Pe.scrollLeft(),n=Ue.hasClass("elfinder-cwd-allselected");Ee(),t.one("cwdrender",function(){Pe.scrollLeft(e),n&&(Q=t.arrayFlip(F||D,!0)),(n||Object.keys(Q).length)&&oe()})}).bind("viewchange",function(){var e="list"==t.storage("view"),n=Ue.hasClass("elfinder-cwd-allselected");e!=p&&(p=e,t.viewType=p?"list":"icons",s&&t.one("cwdinit",function(){Ue.trigger("iconpref",{size:s})}),Ee(),_e(),n&&(Ue.addClass("elfinder-cwd-allselected"),qe.find("input").prop("checked",!0)),Object.keys(Q).length&&oe())}).bind("wzresize",function(){var e,n=p?Ue.find("tbody"):Ue;_e(!0),le.hpi&&De(n,n.find("[id]").length),e=Ue.offset(),Le.data("rectangle",Object.assign({width:Le.width(),height:Le.height(),cwdEdge:"ltr"===t.direction?e.left:e.left+Ue.width()},Le.offset())),le.itemH=(p?n.find("tr:first"):n.find("[id]:first")).outerHeight(!0)}).bind("changeclipboard",function(t){j={},t.data&&t.data.clipboard&&t.data.clipboard.length&&e.each(t.data.clipboard,function(e,t){t.cut&&(j[t.hash]=!0)})}).bind("resMixinMake",function(){Ce()}).bind("tmbreload",function(t){var n={},i=t.data&&t.data.files?t.data.files:null;e.each(i,function(e,t){t.tmb&&"1"!=t.tmb&&(n[t.hash]=t.tmb)}),Object.keys(n).length&&Ae(n,!0)}).add(function(n){var i=O?new RegExp(O.replace(/([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g,"\\$1"),"i"):null,a=t.searchStatus.mime,o=t.searchStatus.state>1,r=o&&t.searchStatus.target?t.searchStatus.target:t.cwd().hash,s=t.path(r),l=function(n){var l,c;return l=n.phash===r,!l&&o&&(c=n.path||t.path(n.hash),l=s&&0===c.indexOf(s),!l&&t.searchStatus.mixed&&(l=!!e.grep(t.searchStatus.mixed,function(e){return 0===n.hash.indexOf(e)}).length)),l&&o&&(l=a?0===n.mime.indexOf(a):!!(n.name.match(i)||n.i18&&n.i18.match(i))),l},c=e.grep(n.data.added||[],function(e){return!!l(e)});Ie(c),2===t.searchStatus.state&&(e.each(c,function(t,n){e.inArray(n.hash,D)===-1&&D.push(n.hash)}),t.trigger("cwdhasheschange",D)),p&&_e(),Pe.trigger(pe)}).change(function(n){var i,a=t.cwd().hash,o=t.selected();O?e.each(n.data.changed||[],function(n,a){t.cwdHash2Elm(a.hash).length&&(Oe([a.hash]),Ie([a],"change"),e.inArray(a.hash,o)!==-1&&Z(a.hash),i=!0)}):e.each(e.grep(n.data.changed||[],function(e){return e.phash==a}),function(n,a){t.cwdHash2Elm(a.hash).length&&(Oe([a.hash]),Ie([a],"change"),e.inArray(a.hash,o)!==-1&&Z(a.hash),i=!0)}),i&&(t.trigger("cwdhasheschange",D),p&&_e(),Pe.trigger(pe)),oe()}).remove(function(e){var t=p?Ue.find("tbody"):Ue;Oe(e.data.removed||[]),oe(),se.length<1&&t.children(b).length<1?(Le.addClass("elfinder-cwd-wrapper-empty"),q&&qe.find("input").prop("checked",!1),Re.hide(),Pe.off(pe,ye),_e()):(De(t),Pe.trigger(pe))}).dragstart(function(t){var n=e(t.data.target),i=t.data.originalEvent;n.hasClass(v)&&(n.hasClass(y)||(!(i.ctrlKey||i.metaKey||i.shiftKey)&&ne({notrigger:!0}),n.trigger(u),oe())),Ue.removeClass(w).data("selectable")&&Ue.selectable("disable"),J=!0}).dragstop(function(){Ue.data("selectable")&&Ue.selectable("enable"),J=!1}).bind("lockfiles unlockfiles selectfiles unselectfiles",function(n){var i,a,o,r={lockfiles:f,unlockfiles:m,selectfiles:u,unselectfiles:h},s=r[n.type],l=n.data.files||[],c=l.length,d=n.data.helper||e();if(c>0&&(i=t.parents(l[0])),s!==u&&s!==h||(o=s===u,e.each(l,function(e,t){var n=Ue.hasClass("elfinder-cwd-allselected");Q[t]?(n&&(q&&qe.children("input").prop("checked",!1),Ue.removeClass("elfinder-cwd-allselected"),n=!1),!o&&delete Q[t]):o&&(Q[t]=!0)})),!d.data("locked")){for(;c--;)try{t.cwdHash2Elm(l[c]).trigger(s)}catch(n){}!n.data.inselect&&oe()}Pe.data("dropover")&&i.indexOf(Pe.data("dropover"))!==-1&&(a="lockfiles"!==n.type,d.toggleClass("elfinder-drag-helper-plus",a),Pe.toggleClass(T,a))}).bind("mkdir mkfile duplicate upload rename archive extract paste multiupload",function(n){if("upload"!=n.type||!n.data._multiupload){var i=t.cwd().hash;ne({notrigger:!0}),e.each((n.data.added||[]).concat(n.data.changed||[]),function(e,t){t&&t.phash==i&&Z(t.hash)}),oe()}}).shortcut({pattern:"ctrl+a",description:"selectall",callback:te}).shortcut({pattern:"ctrl+shift+i",description:"selectinvert",callback:ie}).shortcut({pattern:"left right up down shift+left shift+right shift+up shift+down",description:"selectfiles",type:"keydown",callback:function(e){Y(e.keyCode,e.shiftKey)}}).shortcut({pattern:"home",description:"selectffile",callback:function(e){ne({notrigger:!0}),re(Ue.find("[id]:first").trigger(u)),oe()}}).shortcut({pattern:"end",description:"selectlfile",callback:function(e){ne({notrigger:!0}),re(Ue.find("[id]:last").trigger(u)),oe()}}).shortcut({pattern:"page_up",description:"pageTurning",callback:function(e){le.itemH&&Pe.scrollTop(Math.round(Pe.scrollTop()-Math.floor((Pe.height()+(p?le.itemH*-1:16))/le.itemH)*le.itemH))}}).shortcut({pattern:"page_down",description:"pageTurning",callback:function(e){le.itemH&&Pe.scrollTop(Math.round(Pe.scrollTop()+Math.floor((Pe.height()+(p?le.itemH*-1:16))/le.itemH)*le.itemH))}})}),this},e.fn.elfinderdialog=function(t,n){var i,a,o,r,s=window.navigator.platform.indexOf("Win")!=-1,l={},c={enabled:!1,width:!1,height:!1,defaultSize:null},d=function(t){var i,a;c.enabled&&(a=n.options.dialogContained?o:e(window),i={maxWidth:c.width?a.width()-l.width:null,maxHeight:c.height?a.height()-l.height:null},Object.assign(r,i),t.css(i).trigger("resize"),t.data("hasResizable")&&(t.resizable("option","maxWidth")<i.maxWidth||t.resizable("option","maxHeight")<i.maxHeight)&&t.resizable("option",i))},p=function(e){var t=e.data;i&&cancelAnimationFrame(i),i=requestAnimationFrame(function(){c.enabled&&d(t)})},u=function(){var e="elfinder-dialog",t=o.children("."+e+"."+n.res("class","editing")+":visible");n[t.length?"disable":"enable"]()},h={};return n&&n.ui?o=n.getUI():(o=this.closest(".elfinder"),n||(n=o.elfinder("instance"))),"string"==typeof t?((a=this.closest(".ui-dialog")).length&&("open"===t?"none"===a.css("display")&&(a.trigger("posinit").show().trigger("open").hide(),a.fadeIn(120,function(){n.trigger("dialogopened",{dialog:a})})):"close"===t||"destroy"===t?(a.stop(!0),(a.is(":visible")||o.is(":hidden"))&&(a.trigger("close"),n.trigger("dialogclosed",{dialog:a})),"destroy"===t&&(a.remove(),n.trigger("dialogremoved",{dialog:a}))):"toTop"===t?(a.trigger("totop"),n.trigger("dialogtotoped",{dialog:a})):"posInit"===t?(a.trigger("posinit"),n.trigger("dialogposinited",{dialog:a})):"tabstopsInit"===t?(a.trigger("tabstopsInit"),n.trigger("dialogtabstopsinited",{dialog:a})):"checkEditing"===t&&u()),this):(t=Object.assign({},e.fn.elfinderdialog.defaults,t),t.allowMinimize&&"auto"===t.allowMinimize&&(t.allowMinimize=!!this.find("textarea,input").length),t.openMaximized=t.allowMinimize&&t.openMaximized,t.headerBtnPos&&"auto"===t.headerBtnPos&&(t.headerBtnPos=s?"right":"left"),t.headerBtnOrder&&"auto"===t.headerBtnOrder&&(t.headerBtnOrder=s?"close:maximize:minimize":"close:minimize:maximize"),t.modal&&t.allowMinimize&&(t.allowMinimize=!1),n.options.dialogContained?c.width=c.height=c.enabled=!0:(c.width="window"===t.maxWidth,
+c.height="window"===t.maxHeight,(c.width||c.height)&&(c.enabled=!0)),h=n.arrayFlip(t.propagationEvents,!0),this.filter(":not(.ui-dialog-content)").each(function(){var i,a,f=e(this).addClass("ui-dialog-content ui-widget-content"),m="elfinder-dialog-active",g="elfinder-dialog",v="elfinder-dialog-notify",b="ui-state-hover",y="elfinder-tabstop",w="elfinder-focus",x="elfinder-dialog-modal",k=parseInt(1e6*Math.random()),C=e('<div class="ui-dialog-titlebar ui-widget-header ui-corner-top ui-helper-clearfix"><span class="elfinder-dialog-title">'+t.title+"</span></div>"),z=e('<div class="ui-dialog-buttonset"/>'),T=e('<div class=" ui-helper-clearfix ui-dialog-buttonpane ui-widget-content"/>').append(z),A=0,S=0,I=e(),O=e('<div style="width:100%;height:100%;position:absolute;top:0px;left:0px;"/>').hide(),j=function(){t.optimizeNumber&&P.find("input[type=number]").each(function(){e(this).attr("inputmode","numeric"),e(this).attr("pattern","[0-9]*")})},M=function(){I=P.find("."+y),I.length&&(I.attr("tabindex","-1"),I.filter("."+w).length||z.children("."+y+":"+(s?"first":"last")).addClass(w))},D=function(t){var n=I.filter(":visible:enabled"),i=t?null:n.filter("."+w+":first");return i&&i.length||(i=n.first()),t&&e.each(n,function(e,a){if(a===t&&n[e+1])return i=n.eq(e+1),!1}),i},F=function(t){var n=I.filter(":visible:enabled"),i=n.last();return e.each(n,function(e,a){if(a===t&&n[e-1])return i=n.eq(e-1),!1}),i},E=function(){e.each(t.headerBtnOrder.split(":").reverse(),function(e,t){U[t]&&U[t]()}),s&&C.children(".elfinder-titlebar-button").addClass("elfinder-titlebar-button-right")},U={close:function(){C.prepend(e('<span class="ui-widget-header ui-dialog-titlebar-close ui-corner-all elfinder-titlebar-button"><span class="ui-icon ui-icon-closethick"/></span>').on("mousedown",function(e){e.preventDefault(),e.stopPropagation(),f.elfinderdialog("close")}))},maximize:function(){t.allowMaximize&&(P.on("resize",function(e,t){var n,i;if(e.preventDefault(),e.stopPropagation(),t&&t.maximize){if(i=C.find(".elfinder-titlebar-full"),n="on"===t.maximize,i.children("span.ui-icon").toggleClass("ui-icon-plusthick",!n).toggleClass("ui-icon-arrowreturnthick-1-s",n),n){try{P.hasClass("ui-draggable")&&P.draggable("disable"),P.hasClass("ui-resizable")&&P.resizable("disable")}catch(e){}f.css("width","100%").css("height",P.height()-P.children(".ui-dialog-titlebar").outerHeight(!0)-T.outerHeight(!0))}else{f.attr("style",i.data("style")),i.removeData("style"),R();try{P.hasClass("ui-draggable")&&P.draggable("enable"),P.hasClass("ui-resizable")&&P.resizable("enable")}catch(e){}}P.trigger("resize",{init:!0})}}),C.prepend(e('<span class="ui-widget-header ui-corner-all elfinder-titlebar-button elfinder-titlebar-full"><span class="ui-icon ui-icon-plusthick"/></span>').on("mousedown",function(i){var a=e(this);i.preventDefault(),i.stopPropagation(),P.hasClass("elfinder-maximized")||"undefined"!=typeof a.data("style")||(f.height(f.height()),a.data("style",f.attr("style")||"")),n.toggleMaximize(P),"function"==typeof t.maximize&&t.maximize.call(f[0])})))},minimize:function(){var i,a,o;t.allowMinimize&&(i=e('<span class="ui-widget-header ui-corner-all elfinder-titlebar-button elfinder-titlebar-minimize"><span class="ui-icon ui-icon-minusthick"/></span>').on("mousedown",function(i){var r=e(this),s=n.getUI("bottomtray"),l={width:70,height:24},c=e("<div/>").css(l).addClass(P.get(0).className+" elfinder-dialog-minimized"),d={};i.preventDefault(),i.stopPropagation(),P.data("minimized")?(P.removeData("minimized").before(a.css(Object.assign({position:"absolute"},a.offset()))),n.toFront(a),a.animate(Object.assign({width:P.width(),height:P.height()},o),function(){P.show(),n.toFront(P),a.remove(),R(),u(),P.trigger("resize",{init:!0}),"function"==typeof t.minimize&&t.minimize.call(f[0])})):(o=P.data("minimized",!0).position(),a=P.clone().on("mousedown",function(){r.trigger("mousedown")}).removeClass("ui-draggable ui-resizable elfinder-frontmost"),s.append(c),Object.assign(d,c.offset(),l),c.remove(),a.height(P.height()).children(".ui-dialog-content:first").empty(),n.toHide(P.before(a)),a.children(".ui-dialog-content:first,.ui-dialog-buttonpane,.ui-resizable-handle").remove(),a.find(".elfinder-titlebar-minimize,.elfinder-titlebar-full").remove(),a.find(".ui-dialog-titlebar-close").on("mousedown",function(e){e.stopPropagation(),e.preventDefault(),a.remove(),P.show(),f.elfinderdialog("close")}),a.animate(d,function(){a.attr("style","").css({maxWidth:P.width()}).addClass("elfinder-dialog-minimized").appendTo(s),u(),"function"==typeof t.minimize&&t.minimize.call(f[0])}))}),C.on("dblclick",function(t){e(this).children(".elfinder-titlebar-minimize").trigger("mousedown")}).prepend(i),P.on("togleminimize",function(){i.trigger("mousedown")}))}},P=e('<div class="ui-front ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable std42-dialog touch-punch '+g+" "+t.cssClass+'"/>').hide().append(f).appendTo(o).draggable({containment:n.options.dialogContained?o:null,handle:".ui-dialog-titlebar",start:function(){O.show()},drag:function(e,t){var i=t.offset.top,a=t.offset.left;i<0&&(t.position.top=t.position.top-i),a<0&&(t.position.left=t.position.left-a),n.options.dialogContained&&(t.position.top<0&&(t.position.top=0),t.position.left<0&&(t.position.left=0))},stop:function(e,n){O.hide(),P.css({height:t.height}),f.data("draged",!0)}}).css({width:t.width,height:t.height,minWidth:t.minWidth,minHeight:t.minHeight,maxWidth:t.maxWidth,maxHeight:t.maxHeight}).on("touchstart touchmove touchend click dblclick mouseup mouseenter mouseleave mouseout mouseover mousemove",function(e){!h[e.type]&&e.stopPropagation()}).on("mousedown",function(t){!h[t.type]&&t.stopPropagation(),requestAnimationFrame(function(){P.is(":visible")&&!P.hasClass("elfinder-frontmost")&&(a=e(":focus"),a.length||(a=void 0),P.trigger("totop"))})}).on("open",function(){P.data("margin-y",f.outerHeight(!0)-f.height()),c.enabled&&(t.height&&"auto"!==t.height&&P.trigger("resize",{init:!0}),c.defaultSize||(c.defaultSize={width:f.width(),height:f.height()}),d(P),P.trigger("resize").trigger("posinit"),o.on("resize."+n.namespace,P,p)),P.hasClass(v)||o.children("."+g+":visible:not(."+v+")").each(function(){var t=e(this),n=parseInt(t.css("top")),i=parseInt(t.css("left")),a=parseInt(P.css("top")),o=parseInt(P.css("left")),r=Math.abs(n-a)<10,s=Math.abs(i-o)<10;t[0]!=P[0]&&(r||s)&&P.css({top:r?n+10:a,left:s?i+10:o})}),P.data("modal")&&(P.addClass(x),n.getUI("overlay").elfinderoverlay("show")),P.trigger("totop"),t.openMaximized&&n.toggleMaximize(P),n.trigger("dialogopen",{dialog:P}),"function"==typeof t.open&&e.proxy(t.open,f[0])(),t.closeOnEscape&&e(document).on("keydown."+k,function(t){t.keyCode==e.ui.keyCode.ESCAPE&&P.hasClass("elfinder-frontmost")&&f.elfinderdialog("close")}),P.hasClass(n.res("class","editing"))&&u()}).on("close",function(i){var a,r;t.beforeclose&&"function"==typeof t.beforeclose?(r=t.beforeclose(),r&&r.promise||(r=r?e.Deferred().resolve():e.Deferred().reject())):r=e.Deferred().resolve(),r.done(function(){c.enabled&&o.off("resize."+n.namespace,p),t.closeOnEscape&&e(document).off("keyup."+k),t.allowMaximize&&n.toggleMaximize(P,!1),n.toHide(P),P.data("modal")&&n.getUI("overlay").elfinderoverlay("hide"),"function"==typeof t.close&&e.proxy(t.close,f[0])(),t.destroyOnClose&&P.parent().length&&P.hide().remove(),a=o.children("."+g+":visible"),P.hasClass(n.res("class","editing"))&&u()})}).on("totop frontmost",function(){var e=n.storage("autoFocusDialog");P.data("focusOnMouseOver",e?e>0:n.options.uiOptions.dialog.focusOnMouseOver),P.data("minimized")&&C.children(".elfinder-titlebar-minimize").trigger("mousedown"),!P.data("modal")&&n.getUI("overlay").is(":visible")?n.getUI("overlay").before(P):n.toFront(P),o.children("."+g+":not(."+x+")").removeClass(m),P.addClass(m),!n.UA.Mobile&&(a||D()).trigger("focus"),a=void 0}).on("posinit",function(){var i,a,s,l,c,d,p,u=t.position;if(!P.hasClass("elfinder-maximized")){if(!u&&!P.data("resizing")){if(p=o.hasClass("elfinder-fullscreen"),P.css(p?{maxWidth:"100%",maxHeight:"100%",overflow:"auto"}:r),n.UA.Mobile&&!p&&P.data("rotated")===n.UA.Rotated)return;P.data("rotated",n.UA.Rotated),c=e(window),i=o.offset(),l={width:P.outerWidth(!0),height:P.outerHeight(!0)},l.right=i.left+l.width,l.bottom=i.top+l.height,d={scrLeft:c.scrollLeft(),scrTop:c.scrollTop(),width:c.width(),height:c.height()},d.right=d.scrLeft+d.width,d.bottom=d.scrTop+d.height,n.options.dialogContained||p?(a=0,s=0):(a=i.top*-1+d.scrTop,s=i.left*-1+d.scrLeft),u={top:l.height>=d.height?a:Math.max(a,parseInt((o.height()-l.height)/2-42)),left:l.width>=d.width?s:Math.max(s,parseInt((o.width()-l.width)/2))},l.right+u.left>d.right&&(u.left=Math.max(s,d.right-l.right)),l.bottom+u.top>d.bottom&&(u.top=Math.max(a,d.bottom-l.bottom))}t.absolute&&(u.position="absolute"),u&&P.css(u)}}).on("resize",function(n,i){var a,o,r=0,s=i&&i.init;i&&(i.minimize||i.maxmize)||P.data("minimized")||(n.stopPropagation(),n.preventDefault(),P.children(".ui-widget-header,.ui-dialog-buttonpane").each(function(){r+=e(this).outerHeight(!0)}),a=s||!c.enabled||n.originalEvent||P.hasClass("elfinder-maximized")?P.height()-r-P.data("margin-y"):Math.min(c.defaultSize.height,Math.max(parseInt(P.css("max-height")),parseInt(P.css("min-height")))-r-P.data("margin-y")),f.height(a),s||(R(),o=f.height(),o=a<o?o+r+P.data("margin-y"):t.minHeight,P.css("min-height",o),P.data("hasResizable")&&P.resizable("option",{minHeight:o}),"function"==typeof t.resize&&e.proxy(t.resize,f[0])(n,i)))}).on("tabstopsInit",M).on("focus","."+y,function(){e(this).addClass(b).parent("label").addClass(b),this.id&&e(this).parent().find("label[for="+this.id+"]").addClass(b)}).on("click","select."+y,function(){var t=e(this);t.data("keepFocus")?t.removeData("keepFocus"):t.data("keepFocus",!0)}).on("blur","."+y,function(){e(this).removeClass(b).removeData("keepFocus").parent("label").removeClass(b),this.id&&e(this).parent().find("label[for="+this.id+"]").removeClass(b)}).on("mouseenter mouseleave","."+y+",label",function(n){var i,a=e(this);("LABEL"!==this.nodeName||a.children("."+y).length||(i=a.attr("for"))&&e("#"+i).hasClass(y))&&(t.btnHoverFocus&&P.data("focusOnMouseOver")?"mouseenter"!==n.type||e(":focus").data("keepFocus")||a.trigger("focus"):a.toggleClass(b,"mouseenter"==n.type))}).on("keydown","."+y,function(t){var n,i,a=e(this);if(a.is(":focus")){if(n=t.keyCode===e.ui.keyCode.ESCAPE,t.keyCode===e.ui.keyCode.ENTER?(t.preventDefault(),a.trigger("click")):t.keyCode===e.ui.keyCode.TAB&&t.shiftKey||t.keyCode===e.ui.keyCode.LEFT||t.keyCode==e.ui.keyCode.UP?i="prev":t.keyCode!==e.ui.keyCode.TAB&&t.keyCode!=e.ui.keyCode.RIGHT&&t.keyCode!=e.ui.keyCode.DOWN||(i="next"),i&&(a.is("textarea")&&!t.ctrlKey&&!t.metaKey||a.is("select,span.ui-slider-handle")&&t.keyCode!==e.ui.keyCode.TAB||a.is("input:not(:checkbox,:radio)")&&!t.ctrlKey&&!t.metaKey&&t.keyCode===e.ui.keyCode["prev"===i?"LEFT":"RIGHT"]))return void t.stopPropagation();n?a.is("input:not(:checkbox,:radio),textarea")&&""!==a.val()&&(a.val(""),t.stopPropagation()):t.stopPropagation(),i&&(t.preventDefault(),("prev"===i?F:D)(this).trigger("focus"))}}).data({modal:t.modal}),R=function(){var e,t=n.getUI();t.hasClass("elfinder-fullscreen")&&(e=P.position(),P.css("top",Math.max(Math.min(Math.max(e.top,0),t.height()-100),0)),P.css("left",Math.max(Math.min(Math.max(e.left,0),t.width()-200),0)))};P.prepend(C),E(),e.each(t.buttons,function(t,n){var i=e('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only elfinder-btncnt-'+S++ +" "+y+'"><span class="ui-button-text">'+t+"</span></button>").on("click",e.proxy(n,f[0]));n._cssClass&&i.addClass(n._cssClass),s?z.append(i):z.prepend(i)}),z.children().length&&(P.append(T),P.show(),T.find("button").each(function(t,n){A+=e(n).outerWidth(!0)}),P.hide(),A+=20,P.width()<A&&P.width(A)),P.append(O),c.enabled&&(l.width=P.outerWidth(!0)-P.width()+(P.outerWidth()-P.width())/2,l.height=P.outerHeight(!0)-P.height()+(P.outerHeight()-P.height())/2),n.options.dialogContained&&(i={maxWidth:o.width()-l.width,maxHeight:o.height()-l.height},t.maxWidth=t.maxWidth?Math.min(i.maxWidth,t.maxWidth):i.maxWidth,t.maxHeight=t.maxHeight?Math.min(i.maxHeight,t.maxHeight):i.maxHeight,P.css(i)),r={maxWidth:P.css("max-width"),maxHeight:P.css("max-height"),overflow:P.css("overflow")},t.resizable&&P.resizable({minWidth:t.minWidth,minHeight:t.minHeight,maxWidth:t.maxWidth,maxHeight:t.maxHeight,start:function(){O.show(),P.data("resizing")!==!0&&P.data("resizing")&&clearTimeout(P.data("resizing")),P.data("resizing",!0)},stop:function(e,t){O.hide(),P.data("resizing",setTimeout(function(){P.data("resizing",!1)},200)),c.enabled&&(c.defaultSize={width:f.width(),height:f.height()})}}).data("hasResizable",!0),j(),M(),"function"==typeof t.create&&e.proxy(t.create,this)(),t.autoOpen&&(t.open?requestAnimationFrame(function(){f.elfinderdialog("open")}):f.elfinderdialog("open")),t.resize&&n.bind("themechange",function(){setTimeout(function(){P.data("margin-y",f.outerHeight(!0)-f.height()),P.trigger("resize",{init:!0})},300)})}),this)},e.fn.elfinderdialog.defaults={cssClass:"",title:"",modal:!1,resizable:!0,autoOpen:!0,closeOnEscape:!0,destroyOnClose:!1,buttons:{},btnHoverFocus:!0,position:null,absolute:!1,width:320,height:"auto",minWidth:200,minHeight:70,maxWidth:null,maxHeight:null,allowMinimize:"auto",allowMaximize:!1,openMaximized:!1,headerBtnPos:"auto",headerBtnOrder:"auto",optimizeNumber:!0,propagationEvents:["mousemove","mouseup"]},e.fn.elfinderfullscreenbutton=function(t){return this.each(function(){var n,i=e(this).elfinderbutton(t),a=i.children(".elfinder-button-icon");t.change(function(){n&&cancelAnimationFrame(n),n=requestAnimationFrame(function(){var e=t.value;a.addClass("elfinder-button-icon-fullscreen").toggleClass("elfinder-button-icon-unfullscreen",e),t.className=e?"unfullscreen":""})})})},e.fn.elfindernavbar=function(t,n){return this.not(".elfinder-navbar").each(function(){var i,a,o,r,s,l,c,d=e(this).hide().addClass("ui-state-default elfinder-navbar"),p=d.css("overflow","hidden").parent(),u=p.children(".elfinder-workzone").append(d),h="ltr"==t.direction,f=function(){var e=t.getUI("cwd"),n=t.getUI("workzone"),i=n.data("rectangle"),a=e.offset();n.data("rectangle",Object.assign(i,{cwdEdge:"ltr"===t.direction?a.left:a.left+e.width()}))},m=function(){d.css("overflow","hidden"),i=Math.round(d.outerHeight()-d.height()),a=Math.round(c.outerWidth()-c.innerWidth()),d.css("overflow","auto")};t.one("init",function(){c=t.getUI("navdock");var e=function(){m(),t.bind("wzresize",function(){var e=0;c.width(d.outerWidth()-a),c.children().length>1&&(e=c.outerHeight(!0)),d.height(u.height()-e-i)}).trigger("wzresize")};t.cssloaded?e():t.one("cssloaded",e)}).one("opendone",function(){o&&o.trigger("resize"),d.css("overflow","auto")}).bind("themechange",m),t.UA.Touch&&(s=t.storage("autoHide")||{},"undefined"==typeof s.navbar&&(s.navbar=n.autoHideUA&&n.autoHideUA.length>0&&e.grep(n.autoHideUA,function(e){return!!t.UA[e]}).length,t.storage("autoHide",s)),s.navbar&&t.one("init",function(){d.children().length&&t.uiAutoHide.push(function(){d.stop(!0,!0).trigger("navhide",{duration:"slow",init:!0})})}),t.bind("load",function(){d.children().length&&(r=e('<div class="elfinder-navbar-swipe-handle"/>').hide().appendTo(u),"none"!==r.css("pointer-events")&&(r.remove(),r=null))}),d.on("navshow navhide",function(e,n){var i="navshow"===e.type?"show":"hide",a=n&&n.duration?n.duration:"fast",o=n&&n.handleW?n.handleW:Math.max(50,t.getUI().width()/10);d.stop(!0,!0)[i]({duration:a,step:function(){t.trigger("wzresize")},complete:function(){r&&("show"===i?r.stop(!0,!0).hide():(r.width(o?o:""),t.resources.blink(r,"slowonce"))),t.trigger("navbar"+i),n.init&&t.trigger("uiautohide"),f()}}),s.navbar="show"!==i,t.storage("autoHide",Object.assign(t.storage("autoHide"),{navbar:s.navbar}))}).on("touchstart",function(n){e(this)["scroll"+("ltr"===t.direction?"Right":"Left")]()>5&&(n.originalEvent._preventSwipeX=!0)})),t.UA.Mobile||(o=d.resizable({handles:h?"e":"w",minWidth:n.minWidth||150,maxWidth:n.maxWidth||500,resize:function(){t.trigger("wzresize")},stop:function(e,n){t.storage("navbarWidth",n.size.width),f()}}).on("resize scroll",function(n){var i=e(this),a=i.data("posinit");n.preventDefault(),n.stopPropagation(),h||"resize"!==n.type||d.css("left",0),a&&cancelAnimationFrame(a),i.data("posinit",requestAnimationFrame(function(){var e=t.UA.Opera&&d.scrollLeft()?20:2;o.css("top",0).css({top:parseInt(d.scrollTop())+"px",left:h?"auto":parseInt(d.scrollRight()-e)*-1,right:h?parseInt(d.scrollLeft()-e)*-1:"auto"}),"resize"===n.type&&t.getUI("cwd").trigger("resize")}))}).children(".ui-resizable-handle").addClass("ui-front")),(l=t.storage("navbarWidth"))?d.width(l):t.UA.Mobile&&t.one("cssloaded",function(){var n=function(){l=d.parent().width()/2,d.data("defWidth")>l?d.width(l):d.width(d.data("defWidth")),d.data("width",d.width()),t.trigger("wzresize")};d.data("defWidth",d.width()),e(window).on("resize."+t.namespace,n),n()})}),this},e.fn.elfindernavdock=function(t,n){return this.not(".elfinder-navdock").each(function(){var i,a,o=e(this).hide().addClass("ui-state-default elfinder-navdock touch-punch"),r=o.parent(),s=(r.children(".elfinder-workzone").append(o),function(n,i){var a,r=i||o.height(),s=n-r,l=Object.keys(c).length,d=l?s/l:0;s&&(a=o.css("overflow"),o.css("overflow","hidden"),o.height(n),e.each(c,function(e,n){n.height(n.height()+d).trigger("resize."+t.namespace)}),t.trigger("wzresize"),o.css("overflow",a))}),l=e('<div class="ui-front ui-resizable-handle ui-resizable-n"/>').appendTo(o),c={},d=(parseInt(n.initMaxHeight)||50)/100,p=(parseInt(n.maxHeight)||90)/100;o.data("addNode",function(e,n){var r,u,h,f=t.getUI("workzone").height(),m=f*d;return n=Object.assign({first:!1,sizeSync:!0,init:!1},n),e.attr("id")||e.attr("id",t.namespace+"-navdock-"+ +new Date),n.sizeSync&&(c[e.attr("id")]=e),r=o.height(),u=r+e.outerHeight(!0),n.first?l.after(e):o.append(e),a=!0,o.resizable("enable").height(u).show(),t.trigger("wzresize"),n.init&&(h=t.storage("navdockHeight"),u=h?h:u>m?m:u,i=u),s(Math.min(u,f*p)),o}).data("removeNode",function(n,i){var r=e("#"+n);return delete c[n],o.height(o.height()-e("#"+n).outerHeight(!0)),i?"detach"===i?r=r.detach():i.append(r):r.remove(),o.children().length<=1&&(a=!1,o.resizable("disable").height(0).hide()),t.trigger("wzresize"),r}),n.disabled||t.one("init",function(){var e;t.getUI("navbar").children().not(".ui-resizable-handle").length&&(o.data("dockEnabled",!0),o.resizable({maxHeight:t.getUI("workzone").height()*p,handles:{n:l},start:function(n,i){e=o.css("overflow"),o.css("overflow","hidden"),t.trigger("navdockresizestart",{event:n,ui:i},!0)},resize:function(e,n){o.css("top",""),t.trigger("wzresize",{inNavdockResize:!0})},stop:function(n,a){t.trigger("navdockresizestop",{event:n,ui:a},!0),o.css("top",""),i=a.size.height,t.storage("navdockHeight",i),s(i,a.originalSize.height),o.css("overflow",e)}}),t.bind("wzresize",function(e){var n,a;o.is(":visible")&&(n=t.getUI("workzone").height()*p,e.data&&e.data.inNavdockResize||(a=o.height(),n<i?Math.abs(a-n)>1&&s(n):Math.abs(a-i)>1&&s(i)),o.resizable("option","maxHeight",n))}).bind("themechange",function(){var e=Math.round(o.height());requestAnimationFrame(function(){var t=Math.round(o.height()),n=e-t;0!==n&&s(o.height(),t-n)})})),t.bind("navbarshow navbarhide",function(e){o[a&&"navbarshow"===e.type?"show":"hide"]()})})}),this},e.fn.elfinderoverlay=function(t){var n,i,a,o,r=this.parent().elfinder("instance");return this.filter(":not(.elfinder-overlay)").each(function(){t=Object.assign({},t),e(this).addClass("ui-front ui-widget-overlay elfinder-overlay").hide().on("mousedown",function(e){e.preventDefault(),e.stopPropagation()}).data({cnt:0,show:"function"==typeof t.show?t.show:function(){},hide:"function"==typeof t.hide?t.hide:function(){}})}),"show"==t&&(n=this.eq(0),i=n.data("cnt")+1,a=n.data("show"),r.toFront(n),n.data("cnt",i),n.is(":hidden")&&(n.show(),a())),"hide"==t&&(n=this.eq(0),i=n.data("cnt")-1,o=n.data("hide"),n.data("cnt",i),i<=0&&(n.hide(),o())),this},e.fn.elfinderpanel=function(t){return this.each(function(){var n=e(this).addClass("elfinder-panel ui-state-default ui-corner-all"),i="margin-"+("ltr"==t.direction?"left":"right");t.one("load",function(e){var a=t.getUI("navbar");n.css(i,parseInt(a.outerWidth(!0))),a.on("resize",function(e){e.preventDefault(),e.stopPropagation(),n.is(":visible")&&n.css(i,parseInt(a.outerWidth(!0)))})})})},e.fn.elfinderpath=function(t,n){return this.each(function(){var a,o,r="",s="",l=[],c="statusbar",d=t.res("class","hover"),p="path"+(i.prototype.uniqueid?i.prototype.uniqueid:"")+"-",u=e('<div class="ui-widget-header ui-helper-clearfix elfinder-workzone-path"/>'),h=e(this).addClass("elfinder-path").html(" ").on("mousedown","span.elfinder-path-dir",function(n){var i=e(this).attr("id").substr(p.length);n.preventDefault(),i!=t.cwd().hash&&(e(this).addClass(d),r?t.exec("search",r,{target:i,mime:l.join(" ")}):t.trigger("select",{selected:[i]}).exec("open",i))}).prependTo(t.getUI("statusbar").show()),f=e('<div class="elfinder-path-roots"/>').on("click",function(n){n.stopPropagation(),n.preventDefault();var i=e.map(t.roots,function(e){return t.file(e)}),a=[];e.each(i,function(e,n){n.phash||t.root(t.cwd().hash,!0)===n.hash||a.push({label:t.escape(n.i18||n.name),icon:"home",callback:function(){t.exec("open",n.hash)},options:{iconClass:n.csscls||"",iconImg:n.icon||""}})}),t.trigger("contextmenu",{raw:a,x:n.pageX,y:n.pageY})}).append('<span class="elfinder-button-icon elfinder-button-icon-menu" />').appendTo(u),m=function(n){var i=[],a=[];return e.each(t.parents(n),function(e,o){var r=n===o?"elfinder-path-dir elfinder-path-cwd":"elfinder-path-dir",s=t.file(o),l=t.escape(s.i18||s.name);a.push(l),i.push('<span id="'+p+o+'" class="'+r+'" title="'+a.join(t.option("separator"))+'">'+l+"</span>")}),i.join('<span class="elfinder-path-other">'+t.option("separator")+"</span>")},g=function(){var n;h.children("span.elfinder-path-dir").attr("style",""),n="ltr"===t.direction?e("#"+p+t.cwd().hash).prevAll("span.elfinder-path-dir:first"):e(),h.scrollLeft(n.length?n.position().left:0)},v=function(){if(!t.UA.CSS.flex){var n,i,a=h.children("span.elfinder-path-dir"),o=a.length;if("workzone"===c||o<2)return void a.attr("style","");h.width(h.css("max-width")),a.css({maxWidth:100/o+"%",display:"inline-block"}),n=h.width()-9,h.children("span.elfinder-path-other").each(function(){n-=e(this).width()}),i=[],a.each(function(t){var a=e(this),o=a.width();n-=o,o<this.scrollWidth&&i.push(t)}),h.width(""),i.length?(n>0&&(n/=i.length,e.each(i,function(t,i){var o=e(a[i]);o.css("max-width",o.width()+n)})),a.last().attr("style","")):a.attr("style","")}};t.one("init",function(){a=t.getUI("tree").length,o=t.getUI("stat").length,!a&&n.toWorkzoneWithoutNavbar&&(u.append(h).insertBefore(t.getUI("workzone")),c="workzone",t.bind("open",g).one("opendone",function(){t.getUI().trigger("resize")}))}).bind("open searchend parents",function(){r="",s="",l=[],h.html(m(t.cwd().hash)),Object.keys(t.roots).length>1?(h.css("margin",""),f.show()):(h.css("margin",0),f.hide()),!o&&v()}).bind("searchstart",function(e){e.data&&(r=e.data.query||"",s=e.data.target||"",l=e.data.mimes||[])}).bind("search",function(e){var n="";n=s?m(s):t.i18n("btnAll"),h.html('<span class="elfinder-path-other">'+t.i18n("searcresult")+": </span>"+n),v()}).bind("navbarshow navbarhide",function(){var e=t.getUI("workzone");"navbarshow"===this.type?(t.unbind("open",g),h.prependTo(t.getUI("statusbar")),u.detach(),c="statusbar"):(u.append(h).insertBefore(e),c="workzone",g(),t.bind("open",g)),t.trigger("uiresize")}).bind("resize uistatchange",v)})},e.fn.elfinderplaces=function(t,n){return this.each(function(){var i={},a="class",o=t.res(a,"navdir"),r=t.res(a,"navcollapse"),s=t.res(a,"navexpand"),l=t.res(a,"hover"),c=t.res(a,"treeroot"),d=t.res(a,"adroppable"),p=t.res("tpl","placedir"),u=t.res("tpl","perms"),h=e(t.res("tpl","navspinner")),f=n.suffix?n.suffix:"",m="places"+f,g=null,v=function(e){return e.substr(6)},b=function(e){return"place-"+e},y=function(t){return e(document.getElementById(b(t)))},w=function(){var n=[],a={};n=e.map(D.children().find("[id]"),function(e){return v(e.id)}),n.length?e.each(n.reverse(),function(e,t){a[t]=i[t]}):a=null,t.storage(m,a)},x=function(){var a,o;m="places"+(n.suffix?n.suffix:""),i={},a=t.storage(m),"string"==typeof a?(a=e.grep(a.split(","),function(e){return!!e}),e.each(a,function(e,t){var n=t.split("#");i[n[0]]=n[1]?n[1]:n[0]})):e.isPlainObject(a)&&(i=a),t.trigger("placesload",{dirs:i,storageKey:m},!0),o=Object.keys(i),o.length&&(M.prepend(h),t.request({data:{cmd:"info",targets:o},preventDefault:!0}).done(function(n){var a={};n.files&&n.files.length&&t.cache(n.files),e.each(n.files,function(e,t){var n=t.hash;a[n]=t}),e.each(i,function(e,t){C(a[e]||Object.assign({notfound:!0},t))}),t.storage("placesState")>0&&M.trigger("click")}).always(function(){h.remove()}))},k=function(n,i){return e(p.replace(/\{id\}/,b(n?n.hash:i)).replace(/\{name\}/,t.escape(n?n.i18||n.name:i)).replace(/\{cssclass\}/,n?t.perms2class(n)+(n.notfound?" elfinder-na":"")+(n.csscls?" "+n.csscls:""):"").replace(/\{permissions\}/,!n||n.read&&n.write&&!n.notfound?"":u).replace(/\{title\}/,n&&n.path?t.escape(n.path):"").replace(/\{symlink\}/,"").replace(/\{style\}/,n&&n.icon?t.getIconStyle(n):""))},C=function(e){var n,a;return"directory"===e.mime&&(a=e.hash,t.files().hasOwnProperty(a)||t.trigger("tree",{tree:[e]}),n=k(e,a),i[a]=e,D.prepend(n),M.addClass(r),O.toggle(D.children().length>1),!0)},z=function(e){var t,n,a=null;return i[e]&&(delete i[e],t=y(e),t.length&&(a=t.text(),t.parent().remove(),n=D.children().length,O.toggle(n>1),n||(M.removeClass(r),F.removeClass(s),D.slideToggle(!1)))),a},T=function(e){var n=y(e),i=n.parent(),a=i.prev("div"),o="ui-state-hover",r=t.getUI("contextmenu");g&&clearTimeout(g),a.length&&(r.find(":first").data("placesHash",e),n.addClass(o),i.insertBefore(a),a=i.prev("div"),g=setTimeout(function(){n.removeClass(o),r.find(":first").data("placesHash")===e&&r.hide().empty()},1500)),a.length||(n.removeClass(o),r.hide().empty())},A=function(e,t){var n=e.hash,a=y(t||n),o=k(e,n);return a.length>0&&(a.parent().replaceWith(o),i[n]=e,!0)},S=function(){D.empty(),M.removeClass(r),F.removeClass(s),D.slideToggle(!1)},I=function(){e.each(i,function(n,i){var a=t.file(n)||i,r=k(a,n),s=null;return a||r.hide(),!(!D.children().length||(e.each(D.children(),function(){var t=e(this);if((a.i18||a.name).localeCompare(t.children("."+o).text())<0)return s=!r.insertBefore(t)}),null===s))||void(!y(n).length&&D.append(r))}),w()},O=e('<span class="elfinder-button-icon elfinder-button-icon-sort elfinder-places-root-icon" title="'+t.i18n("cmdsort")+'"/>').hide().on("click",function(e){e.stopPropagation(),D.empty(),I()}),j=k({hash:"root-"+t.namespace,name:t.i18n(n.name,"places"),read:!0,write:!0}),M=j.children("."+o).addClass(c).on("click",function(e){e.stopPropagation(),M.hasClass(r)&&(F.toggleClass(s),D.slideToggle(),t.storage("placesState",F.hasClass(s)?1:0))}).append(O),D=j.children("."+t.res(a,"navsubtree")),F=e(this).addClass(t.res(a,"tree")+" elfinder-places ui-corner-all").hide().append(j).appendTo(t.getUI("navbar")).on("mouseenter mouseleave","."+o,function(t){e(this).toggleClass("ui-state-hover","mouseenter"==t.type)}).on("click","."+o,function(n){var i=e(this);return i.data("longtap")?void n.stopPropagation():void(!i.hasClass("elfinder-na")&&t.exec("open",i.attr("id").substr(6)))}).on("contextmenu","."+o+":not(."+c+")",function(n){var i=e(this),a=i.attr("id").substr(6);n.preventDefault(),t.trigger("contextmenu",{raw:[{label:t.i18n("moveUp"),icon:"up",remain:!0,callback:function(){T(a),w()}},"|",{label:t.i18n("rmFromPlaces"),icon:"rm",callback:function(){z(a),w()}}],x:n.pageX,y:n.pageY}),i.addClass("ui-state-hover"),t.getUI("contextmenu").children().on("mouseenter",function(){i.addClass("ui-state-hover")}),t.bind("closecontextmenu",function(){i.removeClass("ui-state-hover")})}).droppable({tolerance:"pointer",accept:".elfinder-cwd-file-wrapper,.elfinder-tree-dir,.elfinder-cwd-file",hoverClass:t.res("class","adroppable"),classes:{"ui-droppable-hover":t.res("class","adroppable")},over:function(n,a){var o=a.helper,r=e.grep(o.data("files"),function(e){return"directory"===t.file(e).mime&&!i[e]});n.stopPropagation(),o.data("dropover",o.data("dropover")+1),t.insideWorkzone(n.pageX,n.pageY)&&(r.length>0?(o.addClass("elfinder-drag-helper-plus"),t.trigger("unlockfiles",{files:o.data("files"),helper:o})):e(this).removeClass(d))},out:function(t,n){var i=n.helper;t.stopPropagation(),i.removeClass("elfinder-drag-helper-move elfinder-drag-helper-plus").data("dropover",Math.max(i.data("dropover")-1,0)),e(this).removeData("dropover").removeClass(d)},drop:function(n,a){var o=a.helper,r=!0;e.each(o.data("files"),function(e,n){var a=t.file(n);a&&"directory"==a.mime&&!i[a.hash]?C(a):r=!1}),w(),r&&o.hide()}}).on("touchstart","."+o+":not(."+c+")",function(n){if(!(n.originalEvent.touches.length>1))var i=e(this).attr("id").substr(6),a=e(this).addClass(l).data("longtap",null).data("tmlongtap",setTimeout(function(){a.data("longtap",!0),t.trigger("contextmenu",{raw:[{label:t.i18n("rmFromPlaces"),icon:"rm",callback:function(){z(i),w()}}],x:n.originalEvent.touches[0].pageX,y:n.originalEvent.touches[0].pageY})},500))}).on("touchmove touchend","."+o+":not(."+c+")",function(t){clearTimeout(e(this).data("tmlongtap")),"touchmove"==t.type&&e(this).removeClass(l)});e.fn.sortable&&D.addClass("touch-punch").sortable({appendTo:t.getUI(),revert:!1,helper:function(n){var i=e(n.target).parent();return i.children().removeClass("ui-state-hover"),e('<div class="ui-widget elfinder-place-drag elfinder-'+t.direction+'"/>').append(e('<div class="elfinder-navbar"/>').show().append(i.clone()))},stop:function(t,n){var i=e(n.item[0]),a=F.offset().top,o=F.offset().left,r=F.width(),s=F.height(),l=t.pageX,c=t.pageY;l>o&&l<o+r&&c>a&&c<c+s||(z(v(i.children(":first").attr("id"))),w())},update:function(e,t){w()}}),e(this).on("regist",function(t,n){var a=!1;e.each(n,function(e,t){t&&"directory"==t.mime&&!i[t.hash]&&C(t)&&(a=!0)}),a&&w()}),t.one("load",function(){t.oldAPI||(F.show().parent().show(),x(),t.change(function(t){var n=!1;e.each(t.data.changed,function(e,t){i[t.hash]&&("directory"!==t.mime?z(t.hash)&&(n=!0):A(t)&&(n=!0))}),n&&w()}).bind("rename",function(t){var n=!1;t.data.removed&&e.each(t.data.removed,function(e,i){t.data.added[e]&&A(t.data.added[e],i)&&(n=!0)}),n&&w()}).bind("rm paste",function(t){var n=[],i=!1;t.data.removed&&e.each(t.data.removed,function(e,t){var i=z(t);i&&n.push(i)}),n.length&&(i=!0),t.data.added&&n.length&&e.each(t.data.added,function(t,i){1!==e.inArray(i.name,n)&&"directory"==i.mime&&C(i)}),i&&w()}).bind("sync netmount",function(){var a,o=this,r=n.suffix?n.suffix:"";return"sync"===o.type&&f!==r?(f=r,S(),void x()):(a=Object.keys(i),void(a.length&&(M.prepend(h),t.request({data:{cmd:"info",targets:a},preventDefault:!0}).done(function(n){var a={},r=!1,s=t.cwd().hash;e.each(n.files||[],function(e,n){var i=n.hash;a[i]=n,t.files().hasOwnProperty(n.hash)||t.trigger("tree",{tree:[n]})}),e.each(i,function(e,t){t.notfound===Boolean(a[e])?t.phash===s&&"netmount"!==o.type||a[e]&&"directory"!==a[e].mime?z(e)&&(r=!0):A(a[e]||Object.assign({notfound:!0},t))&&(r=!0):a[e]&&a[e].phash!=s&&A(a[e])}),r&&w()}).always(function(){h.remove()}))))}))})})},e.fn.elfindersearchbutton=function(t){return this.each(function(){var n,i,a,o,r=!1,s=t.fm,l=(s.res("class","disabled"),t.options.incsearch||{enable:!1}),c=t.options.searchTypes,d=function(e){return s.namespace+s.escape(e)},p=s.getUI("toolbar"),u=s.res("class","searchbtn"),h=e(this).hide().addClass("ui-widget-content elfinder-button "+u).on("click",function(e){e.stopPropagation()}),f=function(){var e=s.getUI(),t=e.offset(),n=h.offset();return{top:n.top-t.top,maxHeight:e.height()-40}},m=function(){b.data("inctm")&&clearTimeout(b.data("inctm"));var n=e.trim(b.val()),a=!e("#"+d("SearchFromAll")).prop("checked"),o=e("#"+d("SearchMime")).prop("checked"),l="";
+a&&(a=e("#"+d("SearchFromVol")).prop("checked")?s.root(s.cwd().hash):s.cwd().hash),o&&(o=n,n="."),i&&(l=i.children("input:checked").val()),n?(b.trigger("focus"),t.exec(n,a,o,l).done(function(){r=!0}).fail(function(){g()})):s.trigger("searchend")},g=function(){b.data("inctm")&&clearTimeout(b.data("inctm")),b.val("").trigger("blur"),(r||v)&&(r=!1,v="",s.lazy(function(){s.trigger("searchend")}))},v="",b=e('<input type="text" size="42"/>').on("focus",function(){!h.hasClass("ui-state-active")&&s.getUI().click(),o=!0,v="",h.addClass("ui-state-active"),s.trigger("uiresize"),n&&n.css(f()).slideDown(function(){h.addClass("ui-state-active"),s.toFront(n)})}).on("blur",function(){o=!1,n?n.data("infocus")?n.data("infocus",!1):n.slideUp(function(){h.removeClass("ui-state-active"),s.trigger("uiresize"),s.toHide(n)}):h.removeClass("ui-state-active")}).appendTo(h).on("keypress",function(e){e.stopPropagation()}).on("keydown",function(t){t.stopPropagation(),t.keyCode===e.ui.keyCode.ENTER?m():t.keyCode===e.ui.keyCode.ESCAPE&&(t.preventDefault(),g())});l.enable&&(l.minlen=l.minlen||2,l.wait=l.wait||500,b.attr("title",s.i18n("incSearchOnly")).on("compositionstart",function(){b.data("composing",!0)}).on("compositionend",function(){b.removeData("composing"),b.trigger("input")}).on("input",function(){b.data("composing")||(b.data("inctm")&&clearTimeout(b.data("inctm")),b.data("inctm",setTimeout(function(){var e=b.val();(0===e.length||e.length>=l.minlen)&&(v!==e&&s.trigger("incsearchstart",{query:e}),v=e,""===e&&s.searchStatus.state>1&&s.searchStatus.query&&b.val(s.searchStatus.query).trigger("select"))},l.wait)))}),s.UA.ltIE8&&b.on("keydown",function(e){229===e.keyCode&&(b.data("imetm")&&clearTimeout(b.data("imetm")),b.data("composing",!0),b.data("imetm",setTimeout(function(){b.removeData("composing")},100)))}).on("keyup",function(t){b.data("imetm")&&clearTimeout(b.data("imetm")),b.data("composing")?t.keyCode===e.ui.keyCode.ENTER&&b.trigger("compositionend"):b.trigger("input")})),e('<span class="ui-icon ui-icon-search" title="'+t.title+'"/>').appendTo(h).on("mousedown",function(e){e.stopPropagation(),e.preventDefault(),h.hasClass("ui-state-active")?m():b.trigger("focus")}),e('<span class="ui-icon ui-icon-close"/>').appendTo(h).on("mousedown",function(e){e.stopPropagation(),e.preventDefault(),""!==b.val()||h.hasClass("ui-state-active")?g():b.trigger("focus")}),s.bind("toolbarload",function(){var e=h.parent();if(e.length&&(p.prepend(h.show()),e.remove(),s.UA.ltIE7)){var t=h.children("ltr"==s.direction?".ui-icon-close":".ui-icon-search");t.css({right:"",left:parseInt(h.width())-t.outerWidth(!0)})}}),s.one("init",function(){s.getUI("cwd").on("touchstart click",function(){o&&b.trigger("blur")})}).one("open",function(){n=s.api<2.1?null:e('<div class="ui-front ui-widget ui-widget-content elfinder-button-menu elfinder-button-search-menu ui-corner-all"/>').append(e('<div class="buttonset"/>').append(e('<input id="'+d("SearchFromCwd")+'" name="serchfrom" type="radio" checked="checked"/><label for="'+d("SearchFromCwd")+'">'+s.i18n("btnCwd")+"</label>"),e('<input id="'+d("SearchFromVol")+'" name="serchfrom" type="radio"/><label for="'+d("SearchFromVol")+'">'+s.i18n("btnVolume")+"</label>"),e('<input id="'+d("SearchFromAll")+'" name="serchfrom" type="radio"/><label for="'+d("SearchFromAll")+'">'+s.i18n("btnAll")+"</label>")),e('<div class="buttonset elfinder-search-type"/>').append(e('<input id="'+d("SearchName")+'" name="serchcol" type="radio" checked="checked" value="SearchName"/><label for="'+d("SearchName")+'">'+s.i18n("btnFileName")+"</label>"))).hide().appendTo(s.getUI()),n&&(c&&(i=n.find(".elfinder-search-type"),e.each(t.options.searchTypes,function(t,n){i.append(e('<input id="'+d(t)+'" name="serchcol" type="radio" value="'+s.escape(t)+'"/><label for="'+d(t)+'">'+s.i18n(n.name)+"</label>"))})),n.find("div.buttonset").buttonset(),e("#"+d("SearchFromAll")).next("label").attr("title",s.i18n("searchTarget",s.i18n("btnAll"))),c&&e.each(c,function(t,n){n.title&&e("#"+d(t)).next("label").attr("title",s.i18n(n.title))}),n.on("mousedown","div.buttonset",function(e){e.stopPropagation(),n.data("infocus",!0)}).on("click","input",function(t){t.stopPropagation(),e.trim(b.val())?m():b.trigger("focus")}).on("close",function(){b.trigger("blur")}))}).bind("searchend",function(){b.val("")}).bind("open parents",function(){var t=[],n=s.file(s.root(s.cwd().hash));n&&(e.each(s.parents(s.cwd().hash),function(e,n){t.push(s.file(n).name)}),e("#"+d("SearchFromCwd")).next("label").attr("title",s.i18n("searchTarget",t.join(s.option("separator")))),e("#"+d("SearchFromVol")).next("label").attr("title",s.i18n("searchTarget",n.name)))}).bind("open",function(){v&&g()}).bind("cwdinit",function(){a=!1}).bind("cwdrender",function(){a=!0}).bind("keydownEsc",function(){v&&"/"===v.substr(0,1)&&(v="",b.val(""),s.trigger("searchend"))}).shortcut({pattern:"ctrl+f f3",description:t.title,callback:function(){b.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:s.i18n("firstLetterSearch"),callback:function(t){if(a){var n,i=t.originalEvent.keyCode,o=function(){var t=s.selected(),n=e.ui.keyCode[!t.length||s.cwdHash2Elm(t[0]).next("[id]").length?"RIGHT":"HOME"];e(document).trigger(e.Event("keydown",{keyCode:n,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1}))};i>=96&&i<=105&&(i-=48),n="/"+String.fromCharCode(i),v!==n?(b.val(n),v=n,s.trigger("incsearchstart",{query:n}).one("cwdrender",o)):o()}}})})},e.fn.elfindersortbutton=function(t){return this.each(function(){var n,i=t.fm,a=t.name,o="class",r=i.res(o,"disabled"),s=i.res(o,"hover"),l="elfinder-button-menu-item",c=l+"-selected",d=c+"-asc",p=c+"-desc",u=e('<span class="elfinder-button-text">'+t.title+"</span>"),h=e(this).addClass("ui-state-default elfinder-button elfinder-menubutton elfiner-button-"+a).attr("title",t.title).append('<span class="elfinder-button-icon elfinder-button-icon-'+a+'"/>',u).on("mouseenter mouseleave",function(e){!h.hasClass(r)&&h.toggleClass(s,"mouseenter"===e.type)}).on("click",function(e){h.hasClass(r)||(e.stopPropagation(),m.is(":hidden")&&i.getUI().click(),m.css(v()).slideToggle({duration:100,done:function(e){i[m.is(":visible")?"toFront":"toHide"](m)}}))}),f=function(){i.toHide(m)},m=e('<div class="ui-front ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>').hide().appendTo(i.getUI()).on("mouseenter mouseleave","."+l,function(t){e(this).toggleClass(s,"mouseenter"===t.type)}).on("click",function(e){e.preventDefault(),e.stopPropagation()}).on("close",f),g=function(){m.children("[rel]").removeClass(c+" "+d+" "+p).filter('[rel="'+i.sortType+'"]').addClass(c+" "+("asc"==i.sortOrder?d:p)),m.children(".elfinder-sort-stick").toggleClass(c,i.sortStickFolders),m.children(".elfinder-sort-tree").toggleClass(c,i.sortAlsoTreeview)},v=function(){var e=i.getUI().offset(),t=h.offset();return{top:t.top-e.top,left:t.left-e.left}};u.hide(),e.each(i.sortRules,function(t,n){m.append(e('<div class="'+l+'" rel="'+t+'"><span class="ui-icon ui-icon-arrowthick-1-n"/><span class="ui-icon ui-icon-arrowthick-1-s"/>'+i.i18n("sort"+t)+"</div>").data("type",t))}),m.children().on("click",function(n){t.exec([],e(this).removeClass(s).attr("rel"))}),e('<div class="'+l+" "+l+'-separated elfinder-sort-ext elfinder-sort-stick"><span class="ui-icon ui-icon-check"/>'+i.i18n("sortFoldersFirst")+"</div>").appendTo(m).on("click",function(){t.exec([],"stick")}),i.one("init",function(){i.ui.tree&&null!==i.options.sortAlsoTreeview&&e('<div class="'+l+" "+l+'-separated elfinder-sort-ext elfinder-sort-tree"><span class="ui-icon ui-icon-check"/>'+i.i18n("sortAlsoTreeview")+"</div>").appendTo(m).on("click",function(){t.exec([],"tree")})}).bind("disable select",f).bind("open",function(){m.children("[rel]").each(function(){var t=e(this);t.toggle(i.sorters[t.attr("rel")])})}).bind("sortchange",g).getUI().on("click",f),m.children().length>1?t.change(function(){n&&cancelAnimationFrame(n),n=requestAnimationFrame(function(){h.toggleClass(r,t.disabled()),g()})}).change():h.addClass(r)})},e.fn.elfinderstat=function(t){return this.each(function(){var n=e(this).addClass("elfinder-stat-size"),i=e('<div class="elfinder-stat-selected"/>').on("click","a",function(n){var i=e(this).data("hash");n.preventDefault(),t.exec("opendir",[i])}),a=t.i18n("items"),o=t.i18n("selected"),r=t.i18n("size"),s=function(i){var o=0,r=0,s=t.cwd(),l=!0,c=!0;(s.sizeInfo||s.size)&&(r=s.size,l=!1),e.each(i,function(e,t){o++,l&&(r+=parseInt(t.size)||0,c!==!0||"directory"!==t.mime||t.sizeInfo||(c=!1))}),n.html(a+': <span class="elfinder-stat-incsearch"></span>'+o+', <span class="elfinder-stat-size'+(c?" elfinder-stat-size-recursive":"")+'">'+t.i18n(c?"sum":"size")+": "+t.formatSize(r)+"</span>").attr("title",n.text()),t.trigger("uistatchange")},l=function(e){n.find("span.elfinder-stat-incsearch").html(e?e.hashes.length+" / ":""),n.attr("title",n.text()),t.trigger("uistatchange")},c=function(n){var a,s,l=0,c=0,d=[];1===n.length?(s=n[0],l=s.size,2===t.searchStatus.state&&(a=t.escape(s.path?s.path.replace(/\/[^\/]*$/,""):".."),d.push('<a href="#elf_'+s.phash+'" data-hash="'+s.hash+'" title="'+a+'">'+a+"</a>")),d.push(t.escape(s.i18||s.name)),i.html(d.join("/")+(l>0?", "+t.formatSize(l):""))):n.length?(e.each(n,function(e,t){c++,l+=parseInt(t.size)||0}),i.html(c?o+": "+c+", "+r+": "+t.formatSize(l):" ")):i.html(""),i.attr("title",i.text()),t.trigger("uistatchange")};t.getUI("statusbar").prepend(n).append(i).show(),t.UA.Mobile&&e.fn.tooltip&&t.getUI("statusbar").tooltip({classes:{"ui-tooltip":"elfinder-ui-tooltip ui-widget-shadow"},tooltipClass:"elfinder-ui-tooltip ui-widget-shadow",track:!0}),t.bind("cwdhasheschange",function(n){s(e.map(n.data,function(e){return t.file(e)}))}).change(function(i){var a=i.data.changed||[],o=t.cwd().hash;e.each(a,function(){if(this.hash===o)return this.size&&(n.children(".elfinder-stat-size").addClass("elfinder-stat-size-recursive").html(t.i18n("sum")+": "+t.formatSize(this.size)),n.attr("title",n.text())),!1})}).select(function(){c(t.selectedFiles())}).bind("open",function(){c([])}).bind("incsearch",function(e){l(e.data)}).bind("incsearchend",function(){l()})})},e.fn.elfindertoast=function(t,n){var i=Object.assign({mode:"success",msg:"",showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1500,hideEasing:"swing",onHidden:void 0,timeOut:3e3,extNode:void 0,button:void 0,width:void 0},e.isPlainObject(n.options.uiOptions.toast.defaults)?n.options.uiOptions.toast.defaults:{});return this.each(function(){t=Object.assign({},i,t||{});var a,o=e(this),r=function(e){o.stop(),n.toFront(o),o[t.showMethod]({duration:t.showDuration,easing:t.showEasing,complete:function(){t.onShown&&t.onShown(),!e&&t.timeOut&&(a=setTimeout(s,t.timeOut))}})},s=function(){o[t.hideMethod]({duration:t.hideDuration,easing:t.hideEasing,complete:function(){t.onHidden&&t.onHidden(),o.remove()}})};o.on("click",function(e){e.stopPropagation(),e.preventDefault(),a&&clearTimeout(a),t.onHidden&&t.onHidden(),o.stop().remove()}).on("mouseenter mouseleave",function(e){t.timeOut&&(a&&clearTimeout(a),a=null,"mouseenter"===e.type?r(!0):a=setTimeout(s,t.timeOut))}).hide().addClass("toast-"+t.mode).append(e('<div class="elfinder-toast-msg"/>').html(t.msg.replace(/%([a-zA-Z0-9]+)%/g,function(e,t){return n.i18n(t)}))),t.extNode&&o.append(t.extNode),t.button&&o.append(e('<button class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"/>').append(e('<span class="ui-button-text"/>').text(n.i18n(t.button.text))).on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"==t.type)}).on("click",t.button.click||function(){})),t.width&&o.css("max-width",t.width),r()})},e.fn.elfindertoolbar=function(t,n){return this.not(".elfinder-toolbar").each(function(){var i,a,o,r,s,l,c,d,p,u=t._commands,h=e(this).addClass("ui-helper-clearfix ui-widget-header elfinder-toolbar"),f={displayTextLabel:!1,labelExcludeUA:["Mobile"],autoHideUA:["Mobile"],showPreferenceButton:"none"},m=function(t){return e.grep(t,function(t){return!e.isPlainObject(t)||(f=Object.assign(f,t),!1)})},g=function(n){var l,c;for(e.each(v,function(e,t){t.detach()}),h.empty(),i=b.length;i--;)if(b[i]){for(r=e('<div class="ui-widget-content ui-corner-all elfinder-buttonset"/>'),a=b[i].length;a--;)l=b[i][a],n&&n[l]||!(o=u[l])||(s="elfinder"+o.options.ui,!v[l]&&e.fn[s]&&(v[l]=e("<div/>")[s](o)),v[l]&&(v[l].children(".elfinder-button-text")[d?"show":"hide"](),r.prepend(v[l])));r.children().length&&h.prepend(r),r.children(":gt(0)").before('<span class="ui-widget-content elfinder-toolbar-button-separator"/>')}(c=u.preference)&&("always"===f.showPreferenceButton||!h.children().length&&"auto"===f.showPreferenceButton)&&(r=e('<div class="ui-widget-content ui-corner-all elfinder-buttonset"/>'),l="preference",s="elfinder"+o.options.ui,v[l]=e("<div/>")[s](c),v[l].children(".elfinder-button-text")[d?"show":"hide"](),r.prepend(v[l]),h.append(r)),!h.data("swipeClose")&&h.children().length?h.show():h.hide(),x=h[0].clientHeight,t.trigger("toolbarload").trigger("uiresize")},v={},b=m(n||[]),y=null,w="",x=0,k=[];f.showPreferenceButton=f.showPreferenceButton.toLowerCase(),"none"!==f.displayTextLabel&&(d=t.storage("toolbarTextLabel"),d=null===d?f.displayTextLabel&&(!f.labelExcludeUA||!f.labelExcludeUA.length||!e.grep(f.labelExcludeUA,function(e){return!!t.UA[e]}).length):1==d,k.push({label:t.i18n("textLabel"),icon:"text",callback:function(){d=!d,h.css("height","").find(".elfinder-button-text")[d?"show":"hide"](),t.trigger("uiresize").storage("toolbarTextLabel",d?"1":"0")}})),f.preferenceInContextmenu&&u.preference&&k.push({label:t.i18n("toolbarPref"),icon:"preference",callback:function(){t.exec("preference",void 0,{tab:"toolbar"})}}),k.length&&h.on("contextmenu",function(e){e.stopPropagation(),e.preventDefault(),t.trigger("contextmenu",{raw:k,x:e.pageX,y:e.pageY})}).on("touchstart",function(e){e.originalEvent.touches.length>1||(h.data("tmlongtap")&&clearTimeout(h.data("tmlongtap")),h.removeData("longtap").data("longtap",{x:e.originalEvent.touches[0].pageX,y:e.originalEvent.touches[0].pageY}).data("tmlongtap",setTimeout(function(){h.removeData("longtapTm").trigger({type:"contextmenu",pageX:h.data("longtap").x,pageY:h.data("longtap").y}).data("longtap",{longtap:!0})},500)))}).on("touchmove touchend",function(e){h.data("tmlongtap")&&(("touchend"===e.type||Math.abs(h.data("longtap").x-e.originalEvent.touches[0].pageX)+Math.abs(h.data("longtap").y-e.originalEvent.touches[0].pageY)>4)&&clearTimeout(h.data("tmlongtap")),h.removeData("longtapTm"))}).on("click",function(e){h.data("longtap")&&h.data("longtap").longtap&&(e.stopImmediatePropagation(),e.preventDefault())}).on("touchend click",".elfinder-button",function(e){h.data("longtap")&&h.data("longtap").longtap&&(e.stopImmediatePropagation(),e.preventDefault())}),h.prev().length&&h.parent().prepend(this),g(),t.bind("open sync select toolbarpref",function(){var n,i,a,o=Object.assign({},t.option("disabledFlip")),r=t.storage("toolbarhides");if(!r&&Array.isArray(f.defaultHides)&&(r={},e.each(f.defaultHides,function(){r[this]=!0}),t.storage("toolbarhides",r)),"select"===this.type){if(t.searchStatus.state<2)return;i=t.selected(),i.length&&(o=t.getDisabledCmds(i,!0))}e.each(r,function(e){o[e]||(o[e]=!0)}),Object.keys(t.commandMap).length&&e.each(t.commandMap,function(e,t){"hidden"===t&&(o[e]=!0)}),a=Object.keys(o),y&&y.toString()===a.sort().toString()||(g(a.length?o:null),n=!0),y=a.sort(),(n||w!==JSON.stringify(t.commandMap))&&(w=JSON.stringify(t.commandMap),n||e.each(e("div.elfinder-button"),function(){var t=e(this).data("origin");t&&e(this).after(t).detach()}),Object.keys(t.commandMap).length&&e.each(t.commandMap,function(n,i){var a,o=t._commands[i],r=o?"elfinder"+o.options.ui:null;r&&e.fn[r]&&(a=v[n],a&&(!v[i]&&e.fn[r]&&(v[i]=e("<div/>")[r](o),v[i]&&(v[i].children(".elfinder-button-text")[d?"show":"hide"](),o.extendsCmd&&v[i].children("span.elfinder-button-icon").addClass("elfinder-button-icon-"+o.extendsCmd))),v[i]&&(a.after(v[i]),v[i].data("origin",a.detach()))))}))}).bind("resize",function(e){p&&cancelAnimationFrame(p),p=requestAnimationFrame(function(){var e=h[0].clientHeight;x!==e&&(x=e,t.trigger("uiresize"))})}),t.UA.Touch&&(c=t.storage("autoHide")||{},"undefined"==typeof c.toolbar&&(c.toolbar=f.autoHideUA&&f.autoHideUA.length>0&&e.grep(f.autoHideUA,function(e){return!!t.UA[e]}).length,t.storage("autoHide",c)),c.toolbar&&t.one("init",function(){t.uiAutoHide.push(function(){h.stop(!0,!0).trigger("toggle",{duration:500,init:!0})})}),t.bind("load",function(){l=e('<div class="elfinder-toolbar-swipe-handle"/>').hide().appendTo(t.getUI()),"none"!==l.css("pointer-events")&&(l.remove(),l=null)}),h.on("toggle",function(e,n){var i=t.getUI("workzone"),a=h.is(":hidden"),o=i.height(),r=h.height(),s=h.outerHeight(!0),d=s-r,p=Object.assign({step:function(e){i.height(o+(a?(e+d)*-1:r-e)),t.trigger("resize")},always:function(){requestAnimationFrame(function(){h.css("height",""),t.trigger("uiresize"),l&&(a?l.stop(!0,!0).hide():(l.height(n.handleH?n.handleH:""),t.resources.blink(l,"slowonce"))),a&&h.scrollTop("0px"),n.init&&t.trigger("uiautohide")})}},n);h.data("swipeClose",!a).stop(!0,!0).animate({height:"toggle"},p),c.toolbar=!a,t.storage("autoHide",Object.assign(t.storage("autoHide"),{toolbar:c.toolbar}))}).on("touchstart",function(e){h.scrollBottom()>5&&(e.originalEvent._preventSwipeY=!0)}))}),this},e.fn.elfindertree=function(t,n){var i=t.res("class","tree");return this.not("."+i).each(function(){var a,o,r,s,l="class",c=t.UA.Mobile,d=t.res(l,"treeroot"),p=n.openRootOnLoad,u=n.openCwdOnOpen,h=u||n.syncTree,f=t.res(l,"navsubtree"),m=t.res(l,"treedir"),g="span."+m,v=t.res(l,"navcollapse"),b=t.res(l,"navexpand"),y="elfinder-subtree-loaded",w="elfinder-subtree-chksubdir",x=t.res(l,"navarrow"),k=t.res(l,"active"),C=t.res(l,"adroppable"),z=t.res(l,"hover"),T=t.res(l,"disabled"),A=t.res(l,"draggable"),S=t.res(l,"droppable"),I="elfinder-navbar-wrapper-root",O="elfinder-navbar-wrapper-pastable",j="elfinder-navbar-wrapper-uploadable",M=function(e){var t=se.offset().left;return t<=e&&e<=t+se.width()},D={},F=[],E=function(n){var i=[];if(e.each(n,function(e,n){D[n]&&i.push(t.navId2Hash(n)),delete D[n]}),i.length)return t.request({data:{cmd:"subdirs",targets:i,preventDefault:!0}}).done(function(n){n&&n.subdirs&&e.each(n.subdirs,function(e,n){var i=t.navHash2Elm(e);i.removeClass(w),i[n?"addClass":"removeClass"](v)})})},U=null,P=function(){var n=Object.keys(D);n.length&&(U&&U._abort(),a&&clearTimeout(a),F=[],U=t.asyncJob(function(n){return t.isInWindow(e("#"+n))?n:null},n,{numPerOnce:200}).done(function(e){e.length&&(F=e,q())}))},R=0,q=function(){var e,i=n.subdirsMaxConn-R,o=t.maxTargets?Math.min(t.maxTargets,n.subdirsAtOnce):n.subdirsAtOnce;if(a&&cancelAnimationFrame(a),F.length)if(i>0)for(e=0;e<i;e++)F.length&&(R++,E(F.splice(0,o)).always(function(){R--,q()}));else a=requestAnimationFrame(function(){F.length&&q()})},H=t.droppable.drop,_=e.extend(!0,{},t.droppable,{over:function(n,i){var a,o,r=e(this),s=i.helper,l=z+" "+C;return n.stopPropagation(),s.data("dropover",s.data("dropover")+1),r.data("dropover",!0),i.helper.data("namespace")===t.namespace&&t.insideWorkzone(n.pageX,n.pageY)?M(n.clientX)?(s.removeClass("elfinder-drag-helper-move elfinder-drag-helper-plus"),r.addClass(z),r.is("."+v+":not(."+b+")")&&r.data("expandTimer",setTimeout(function(){r.is("."+v+"."+z)&&r.children("."+x).trigger("click")},500)),r.is(".elfinder-ro,.elfinder-na")?void r.removeClass(C):(a=t.navId2Hash(r.attr("id")),r.data("dropover",a),e.each(i.helper.data("files"),function(e,n){if(n===a||t.file(n).phash===a&&!i.helper.hasClass("elfinder-drag-helper-plus"))return r.removeClass(l),!1}),s.data("locked")?o="elfinder-drag-helper-plus":(o="elfinder-drag-helper-move",(n.shiftKey||n.ctrlKey||n.metaKey)&&(o+=" elfinder-drag-helper-plus")),r.hasClass(C)&&s.addClass(o),void requestAnimationFrame(function(){r.hasClass(C)&&s.addClass(o)}))):void r.removeClass(l):(r.removeClass(l),void s.removeClass("elfinder-drag-helper-move elfinder-drag-helper-plus"))},out:function(t,n){var i=e(this),a=n.helper;t.stopPropagation(),M(t.clientX)&&a.removeClass("elfinder-drag-helper-move elfinder-drag-helper-plus"),a.data("dropover",Math.max(a.data("dropover")-1,0)),i.data("expandTimer")&&clearTimeout(i.data("expandTimer")),i.removeData("dropover").removeClass(z+" "+C)},deactivate:function(){e(this).removeData("dropover").removeClass(z+" "+C)},drop:function(e,t){M(e.clientX)&&H.call(this,e,t)}}),N=e(t.res("tpl","navspinner")),L=t.res("tpl","navdir"),W=t.res("tpl","perms"),B=(t.res("tpl","lock"),t.res("tpl","symlink")),$={},K={id:function(e){return t.navHash2Id(e.hash)},name:function(e){return t.escape(e.i18||e.name)},cssclass:function(e){var i=(e.phash&&!e.isroot?"":d)+" "+m+" "+t.perms2class(e);return e.dirs&&!e.link&&(i+=" "+v)&&e.dirs==-1&&(i+=" "+w),n.getClass&&(i+=" "+n.getClass(e)),e.csscls&&(i+=" "+t.escape(e.csscls)),i},root:function(t){var n="";return!t.phash||t.isroot?(n+=" "+I,!t.disabled||t.disabled.length<1?n+=" "+O+" "+j:(e.inArray("paste",t.disabled)===-1&&(n+=" "+O),e.inArray("upload",t.disabled)===-1&&(n+=" "+j)),n):""},permissions:function(e){return e.read&&e.write?"":W},symlink:function(e){return e.alias?B:""},style:function(e){return e.icon?t.getIconStyle(e):""}},V=function(e){return L.replace(/(?:\{([a-z]+)\})/gi,function(t,n){var i=K[n]?K[n](e):e[n]||"";return"id"===n&&e.dirs==-1&&(D[i]=i),i})},X=function(n,i){return e.map(n||[],function(e){return"directory"!==e.mime||i&&!t.navHash2Elm(e.hash).length?null:e})},G=function(e){return e?t.navHash2Elm(e).next("."+f):oe},J=function(e,n){for(var i,a=e.children(":first");a.length;){if(i=t.file(t.navId2Hash(a.children("[id]").attr("id"))),(i=t.file(t.navId2Hash(a.children("[id]").attr("id"))))&&Q(n,i)<0)return a;a=a.next()}return e.children("button.elfinder-navbar-pager-next")},Y=function(i){for(var a,o,r,s,l,d,p=i.length,u=[],h=p,f=e(),m={},g=t.cwd(),v=function(i,a,o,r){var s={},l=0,d=t.newAPI?Math.min(1e4,Math.max(10,n.subTreeMax)):1e4,p=function(){s={},e.each(a,function(e,t){s[t.hash]=e})},u=function(t){"prepare"===t?e.each(a,function(e,t){t.node&&i.append(t.node.hide())}):"done"===t&&e.each(a,function(e,t){t.node&&t.node.detach().show()})},h=function(t,n){var i;return t.stopPropagation(),n.select?void v(f(n.select)):n.change?void u(n.change):(n.removed&&n.removed.length&&(a=e.grep(a,function(e){return n.removed.indexOf(e.hash)===-1||(!i&&(i=!0),!1)})),n.added&&n.added.length&&(a=a.concat(e.grep(n.added,function(e){return void 0===s[e.hash]&&(!i&&(i=!0),!0)}))),void(i&&(a.sort(Q),p(),v(l))))},f=function(e){if(void 0!==s[e])return Math.floor(s[e]/d)*d},m=t.navId2Hash(i.prev("[id]").attr("id")),v=function(n,o){var r,s,u,y,w,x,k,C,z=[],T={};delete $[m],l=n,i.off("update."+t.namespace,h),a.length>d&&(i.on("update."+t.namespace,h),void 0===n&&(u=0,p(),n=f(g.hash),void 0===n&&(n=0)),y=a.slice(n,n+d),$[m]=i,w=n?Math.max(-1,n-d):-1,x=n+d>=a.length?0:n+d,r=Math.ceil(a.length/d),s=Math.ceil(n/d)),e.each(y||a,function(e,t){z.push(V(t)),t.node&&(T[t.hash]=t.node)}),k=w>-1?e('<button class="elfinder-navbar-pager elfinder-navbar-pager-prev"/>').text(t.i18n("btnPrevious",s,r)).button({icons:{primary:"ui-icon-caret-1-n"}}).on("click",function(e){e.preventDefault(),e.stopPropagation(),v(w,"up")}):e(),C=x?e('<button class="elfinder-navbar-pager elfinder-navbar-pager-next"/>').text(t.i18n("btnNext",s+2,r)).button({icons:{primary:"ui-icon-caret-1-s"}}).on("click",function(e){e.preventDefault(),e.stopPropagation(),v(x,"down")}):e(),b(),i.empty()[y?"addClass":"removeClass"]("elfinder-navbar-hasmore").append(k,z.join(""),C),e.each(T,function(e,n){t.navHash2Elm(e).parent().replaceWith(n)}),o&&Z(t.navHash2Id(y["up"===o?y.length-1:0].hash)),!c&&t.lazy(function(){ie(null,i)})},b=function(){e.each(i.children(".elfinder-navbar-wrapper"),function(n,i){var o,r,l=e(i),c=l.children("[id]:first");c.hasClass(y)&&(o=t.navId2Hash(c.attr("id")),o&&void 0!==(r=s[o])&&(a[r].node=l.detach()))})};v()},b={},w=[],x=!0;h--;)a=i[h],m[a.hash]||t.navHash2Elm(a.hash).length||(m[a.hash]=!0,(o=G(a.phash)).length?a.phash&&((s=!o.children().length)||o.hasClass("elfinder-navbar-hasmore")||(r=J(o,a)).length)?s?(b[a.phash]||(b[a.phash]=[]),b[a.phash].push(a)):r?(d=V(a),r.before(d),!c&&(f=f.add(d))):w.push(a):(d=V(a),o[x||a.phash?"append":"prepend"](d),x=!1,a.phash&&!a.isroot||(l=t.navHash2Elm(a.hash).parent()),!c&&ie(null,l)):u.push(a));return Object.keys(b).length&&e.each(b,function(e,t){var n=G(e);t.sort(Q),v(n,t)}),w.length&&o.trigger("update."+t.namespace,{added:w}),u.length&&u.length<p?void Y(u):void(!c&&f.length&&t.lazy(function(){ie(f)}))},Q=function(e,n){if(t.sortAlsoTreeview){var i,a="asc"==t.sortOrder,o=t.sortType,r=t.sortRules;return i=a?r[t.sortType](e,n):r[t.sortType](n,e),"name"!==o&&0===i?i=a?r.name(e,n):r.name(n,e):i}return t.sortRules.name(e,n)},Z=function(i){var a,r,s,l,c,d,p=e.Deferred();return o&&clearTimeout(o),o=setTimeout(function(){a=e(document.getElementById(i||t.navHash2Id(t.cwd().hash))),a.length?((u?a:a.parent()).parents(".elfinder-navbar-wrapper").children("."+y).addClass(b).next("."+f).show(),r=oe.parent().stop(!1,!0),s=r.offset().top,l=r.height(),c=s+l-a.outerHeight(),d=a.offset().top,d<s||d>c?r.animate({scrollTop:r.scrollTop()+d-s-l/3},{duration:n.durations.autoScroll,complete:function(){p.resolve()}}):p.resolve()):p.reject()},100),p},ee=function(e){var n,i,a,o=e||t.cwd(),r=o.hash?[o.hash]:[];for(i=t.root(o.hash),a=t.file(i);a&&(n=a.phash)&&(r.unshift(n),i=t.root(n),a=t.file(i),!t.navHash2Elm(a.hash).hasClass(y)););return r},te=function(e){var n=e||t.cwd(),i=n.hash,a=t.navHash2Elm(i);if(!a.length){for(;n&&n.phash;)$[n.phash]&&!t.navHash2Elm(n.hash).length&&$[n.phash].trigger("update."+t.namespace,{select:n.hash}),n=t.file(n.phash);a=t.navHash2Elm(i)}return a},ne=function(n,i){var a,o,s=t.cwd(),l=s.hash,c=void 0===i?h:i,d=function(n){var i,r,s=e.Deferred(),l=[],d=ee(n),p=function(e,n,i){var a={cmd:e,target:n};return i&&(a.until=i),t.request({data:a,preventFail:!0})};return l=e.map(d,function(e){var n,a,o=t.file(e),r=!!o&&t.isRoot(o),s=t.navHash2Elm(e),l=function(e,n){var i,a,o=n||1;return a=!!(i=t.file(e))&&i.phash,a&&o>1?l(a,--o):a},c=function(){var i=l(e);for(n=i;i&&!t.navHash2Elm(i).hasClass(y);)n=i,i=l(i);return i||(n=void 0,i=t.root(e)),i}();return s.hasClass(y)||!r&&o&&t.navHash2Elm(o.phash).hasClass(y)?null:(r||c===l(e)||c===l(e,2)?(n=void 0,a="tree",r||(e=l(e))):a="parents",i||(i="tree"===a?e:c),p(a,e,n))}),l.length?(te(t.file(i)),r=t.navHash2Id(i),c&&Z(r),a=e("#"+r),o=e(t.res("tpl","navspinner")).insertBefore(a.children("."+x)),a.removeClass(v),e.when.apply(e,l).done(function(){var e,t,n,i={};if(t=arguments.length,t>0)for(n=0;n<t;n++)e=arguments[n].tree||[],i[d[n]]=Object.assign([],X(e));s.resolve(i)}).fail(function(){s.reject()}),s):s.resolve()},u=function(i,o){var r,l=function(){p&&a&&(G(a.hash).show().prev(g).addClass(b),p=!1),c?Z().done(P):P()};i&&e.each(i,function(e,n){n&&Y(n),te(t.file(e)),n&&ae(n,y)}),n&&(t.api<2.1&&n.push(s),Y(n)),r=te(),r.hasClass(k)||(oe.find(g+"."+k).removeClass(k),r.addClass(k)),r.parents(".elfinder-navbar-wrapper").children("."+m).addClass(y),i?t.lazy(l).done(function(){o.resolve()}):(l(),o.resolve())},f=function(e){a&&(o.remove(),a.addClass(v+(e?"":" "+y)))},w=e.Deferred();return t.navHash2Elm(l).length?u(void 0,w):(r=!0,d().done(function(e){u(e,w),f()}).fail(function(){f(!0),w.reject()}).always(function(){r=!1})),t.trigger("treesync",w),w},ie=function(n,i){n||(i&&!i.closest("div."+I).hasClass(j)||(i||oe.find("div."+j)).find(g+":not(.elfinder-ro,.elfinder-na)").addClass("native-droppable"),n=!i||i.closest("div."+I).hasClass(O)?(i||oe.find("div."+O)).find(g+":not(."+S+")"):e(),i&&i.children("div."+I).each(function(){ie(null,e(this))})),n.length&&t.asyncJob(function(t){e(t).droppable(_)},e.makeArray(n),{interval:20,numPerOnce:100})},ae=function(n,i){var a=i==y?"."+v+":not(."+y+")":":not(."+v+")";e.each(n,function(n,o){t.navHash2Elm(o.phash).filter(a).filter(function(){return e.grep(e(this).next("."+f).children(),function(t){return!e(t).children().hasClass(d)}).length>0}).addClass(i)})},oe=e(this).addClass(i).on("mouseenter mouseleave",g,function(n){var i="mouseenter"===n.type;if(!i||!re){var a=e(this);a.hasClass(C+" "+T)||(c||!i||a.data("dragRegisted")||a.hasClass(d+" "+A+" elfinder-na elfinder-wo")||(a.data("dragRegisted",!0),t.isCommandEnabled("copy",t.navId2Hash(a.attr("id")))&&a.draggable(t.draggable)),a.toggleClass(z,i))}}).on("dragenter",g,function(t){if(t.originalEvent.dataTransfer){var n=e(this);n.addClass(z),n.is("."+v+":not(."+b+")")&&n.data("expandTimer",setTimeout(function(){n.is("."+v+"."+z)&&n.children("."+x).trigger("click")},500))}}).on("dragleave",g,function(t){if(t.originalEvent.dataTransfer){var n=e(this);n.data("expandTimer")&&clearTimeout(n.data("expandTimer")),n.removeClass(z)}}).on("click",g,function(n){var i=e(this),a=t.navId2Hash(i.attr("id"));t.file(a);return i.data("longtap")?(i.removeData("longtap"),void n.stopPropagation()):(i.hasClass(k)||(oe.find(g+"."+k).removeClass(k),i.addClass(k)),void(a==t.cwd().hash||i.hasClass(T)?(i.hasClass(v)&&i.children("."+x).trigger("click"),t.select({selected:[a],origin:"navbar"})):t.exec("open",a).done(function(){t.one("opendone",function(){t.select({selected:[a],origin:"navbar"})})})))}).on("touchstart",g,function(n){if(!(n.originalEvent.touches.length>1)){var i,a=n.originalEvent;return"INPUT"===n.target.nodeName?void n.stopPropagation():void(i=e(this).addClass(z).removeData("longtap").data("tmlongtap",setTimeout(function(e){i.data("longtap",!0),t.trigger("contextmenu",{type:"navbar",targets:[t.navId2Hash(i.attr("id"))],x:a.touches[0].pageX,y:a.touches[0].pageY})},500)))}}).on("touchmove touchend",g,function(t){return"INPUT"===t.target.nodeName?void t.stopPropagation():(clearTimeout(e(this).data("tmlongtap")),void("touchmove"==t.type&&e(this).removeClass(z)))}).on("click",g+"."+v+" ."+x,function(i){var a,o=e(this),r=o.parent(g),s=r.next("."+f),l=e.Deferred(),c=30;i.stopPropagation(),r.hasClass(y)?(r.toggleClass(b),t.lazy(function(){a=r.hasClass(b)?s.children().length+s.find("div.elfinder-navbar-subtree[style*=block]").children().length:s.find("div:visible").length,a>c?(s.toggle(),t.draggingUiHelper&&t.draggingUiHelper.data("refreshPositions",1),P()):s.stop(!0,!0)[r.hasClass(b)?"slideDown":"slideUp"](n.durations.slideUpDown,function(){t.draggingUiHelper&&t.draggingUiHelper.data("refreshPositions",1),P()})}).always(function(){l.resolve()})):(N.insertBefore(o),r.removeClass(v),t.request({cmd:"tree",target:t.navId2Hash(r.attr("id"))}).done(function(e){Y(Object.assign([],X(e.tree))),s.children().length&&(r.addClass(v+" "+b),s.children().length>c?(s.show(),t.draggingUiHelper&&t.draggingUiHelper.data("refreshPositions",1),P()):s.stop(!0,!0).slideDown(n.durations.slideUpDown,function(){t.draggingUiHelper&&t.draggingUiHelper.data("refreshPositions",1),P()}))}).always(function(e){N.remove(),r.addClass(y),t.one("treedone",function(){l.resolve()})})),o.data("dfrd",l)}).on("contextmenu",g,function(n){var i=e(this);return i.find("input:text").length?void n.stopPropagation():(n.preventDefault(),t.trigger("contextmenu",{type:"navbar",targets:[t.navId2Hash(e(this).attr("id"))],x:n.pageX,y:n.pageY}),i.addClass("ui-state-hover"),t.getUI("contextmenu").children().on("mouseenter",function(){i.addClass("ui-state-hover")}),void t.bind("closecontextmenu",function(){i.removeClass("ui-state-hover")}))}).on("scrolltoview",g,function(n,i){var a=e(this);Z(a.attr("id")).done(function(){i&&"undefined"!==i.blink&&!i.blink||t.resources.blink(a,"lookme")})}).on("create."+t.namespace,function(n,i){var a=G(i.phash),o=i.move||!1,r=e(V(i)).addClass("elfinder-navbar-wrapper-tmp"),s=t.selected();o&&s.length&&t.trigger("lockfiles",{files:s}),a.prepend(r)}),re=!1,se=t.getUI("navbar").append(oe).show().on("scroll",function(){re=!0,
+s&&cancelAnimationFrame(s),s=requestAnimationFrame(function(){re=!1,P()})}),le=t.sortAlsoTreeview;t.open(function(e){var n=e.data,i=X(n.files),a=t.getUI("contextmenu");n.init&&oe.empty(),t.UA.iOS&&se.removeClass("overflow-scrolling-touch").addClass("overflow-scrolling-touch"),i.length?t.lazy(function(){a.data("cmdMaps")||a.data("cmdMaps",{}),Y(i),ae(i,y),ne(i)}):ne()}).add(function(e){var t=X(e.data.added);t.length&&(Y(t),ae(t,v))}).change(function(n){if(!r){var i,a,o,s,l,d,p,u,h,m,v,w,x=X(n.data.changed,!0),k=x.length,C=k;e();for(e.each($,function(e,n){n.trigger("update."+t.namespace,{change:"prepare"})});C--;)if(i=x[C],a=i.phash,(o=t.navHash2Elm(i.hash)).length){if(v=o.parent(),a){if(l=o.closest("."+f),d=G(a),p=o.parent().next(),u=J(d,i),!d.length)continue;d[0]===l[0]&&p.get(0)===u.get(0)||(u.length?u.before(v):d.append(v))}h=o.hasClass(b),m=o.hasClass(y),s=e(V(i)),o.replaceWith(s.children(g)),!c&&ie(null,v),i.dirs&&(h||m)&&(o=t.navHash2Elm(i.hash))&&o.next("."+f).children().length&&(h&&o.addClass(b),m&&o.addClass(y)),w|=i.dirs==-1}w&&P(),e.each($,function(e,n){n.trigger("update."+t.namespace,{change:"done"})}),k&&ne(void 0,!1)}}).remove(function(n){var i,a,o,r=n.data.removed,s=r.length;for(e.each($,function(e,n){n.trigger("update."+t.namespace,{removed:r}),n.trigger("update."+t.namespace,{change:"prepare"})});s--;)(i=t.navHash2Elm(r[s])).length&&(o=!0,a=i.closest("."+f),i.parent().detach(),a.children().length||a.hide().prev(g).removeClass(v+" "+b+" "+y));o&&t.getUI("navbar").children(".ui-resizable-handle").trigger("resize"),e.each($,function(e,n){n.trigger("update."+t.namespace,{change:"done"})})}).bind("lockfiles unlockfiles",function(n){var i="lockfiles"==n.type,a=!!n.data.helper&&n.data.helper.data("locked"),o=i&&!a?"disable":"enable",r=e.grep(n.data.files||[],function(e){var n=t.file(e);return!(!n||"directory"!=n.mime)});e.each(r,function(e,n){var r=t.navHash2Elm(n);r.length&&!a&&(r.hasClass(A)&&r.draggable(o),r.hasClass(S)&&r.droppable(o),r[i?"addClass":"removeClass"](T))})}).bind("sortchange",function(){if(t.sortAlsoTreeview||le!==t.sortAlsoTreeview){var n,i,a=[],o={},r={},s="",l=!1;t.lazy(function(){n=X(t.files()),le=t.sortAlsoTreeview,oe.empty(),Y(e.map(t.roots,function(e){var n=t.file(e);return n&&!n.phash?n:null})),Object.keys($).length?(a=ee(),a.length>1?(e.each(a,function(e,n){var i=t.file(t.root(n)).volumeid;0===e&&(s=i),r[i]=n,o[n]=[]}),e.each(n,function(e,t){return t.volumeid?void o[r[t.volumeid]||r[s]].push(t):(l=!0,!1)})):l=!0,l?e.each(a,function(e,a){Y(n),i=te(t.file(a)),ae(n,y)}):e.each(o,function(e,n){Y(n),i=te(t.file(e)),ae(n,y)})):(Y(n),i=te(),ae(n,y)),ne()},100)}})}),this},e.fn.elfinderuploadbutton=function(t){return this.each(function(){var n,i=t.fm,a=e(this).elfinderbutton(t).off("click"),o=e("<form/>").appendTo(a),r=e('<input type="file" multiple="true" title="'+t.fm.i18n("selectForUpload")+'"/>').on("change",function(){var t=e(this);t.val()&&(i.exec("upload",{input:t.remove()[0]},void 0,i.cwd().hash),r.clone(!0).appendTo(o))}).on("dragover",function(e){e.originalEvent.dataTransfer.dropEffect="copy"});o.append(r.clone(!0)),t.change(function(){n&&cancelAnimationFrame(n),n=requestAnimationFrame(function(){var e=t.disabled();o.is("visible")?!e&&o.hide():e&&o.show()})}).change()})},e.fn.elfinderviewbutton=function(t){return this.each(function(){var n,i=e(this).elfinderbutton(t),a=i.children(".elfinder-button-icon"),o=i.children(".elfinder-button-text");t.change(function(){n&&cancelAnimationFrame(n),n=requestAnimationFrame(function(){var e="icons"==t.value;a.toggleClass("elfinder-button-icon-view-list",e),t.className=e?"view-list":"",t.title=t.fm.i18n(e?"viewlist":"viewicons"),i.attr("title",t.title),o.html(t.title)})})})},e.fn.elfinderworkzone=function(t){var n="elfinder-workzone";return this.not("."+n).each(function(){var i,a=e(this).addClass(n),o=Math.round(a.height()),r=a.parent(),s=function(){i=a.outerHeight(!0)-a.height()},l=function(s){var l=r.height()-i,c=r.attr("style"),d=Math.round(a.height());s&&(s.preventDefault(),s.stopPropagation()),r.css("overflow","hidden").children(":visible:not(."+n+")").each(function(){var t=e(this);"absolute"!=t.css("position")&&"fixed"!=t.css("position")&&(l-=t.outerHeight(!0))}),r.attr("style",c||""),l=Math.max(0,Math.round(l)),o===l&&d===l||(o=Math.round(a.height()),a.height(l),t.trigger("wzresize"))},c=function(){i=a.outerHeight(!0)-a.height(),l()};s(),r.on("resize."+t.namespace,l),t.one("cssloaded",c).bind("uiresize",l).bind("themechange",s)}),this},i.prototype.commands.archive=function(){var t,n=this,i=n.fm,a=[];this.variants=[],this.disableOnSearch=!1,this.nextAction={},i.bind("open reload",function(){n.variants=[],e.each(a=i.option("archivers").create||[],function(e,t){n.variants.push([t,i.mime2kind(t)])}),n.change()}),this.getstate=function(n){var o,r=this.files(n),s=r.length,l=s&&!i.isRoot(r[0])&&(i.file(r[0].phash)||{}).write&&!e.grep(r,function(e){return!e.read}).length;return l&&i.searchStatus.state>1&&(o=i.cwd().volumeid,l=s===e.grep(r,function(e){return!(!e.read||0!==e.hash.indexOf(o))}).length),l&&!this._disabled&&a.length&&(s||t&&"pending"==t.state())?0:-1},this.exec=function(o,r){var s,l,c=this.files(o),d=c.length,p=r||a[0],u=i.file(c[0].phash)||null,h=["errArchive","errPerm","errCreatingTempDir","errFtpDownloadFile","errFtpUploadFile","errFtpMkdir","errArchiveExec","errExtractExec","errRm"];if(t=e.Deferred().fail(function(e){e&&i.error(e)}),!d||!a.length||e.inArray(p,a)===-1)return t.reject();if(!u.write)return t.reject(h);for(s=0;s<d;s++)if(!c[s].read)return t.reject(h);return n.mime=p,n.prefix=(d>1?"Archive":c[0].name)+(i.option("archivers").createext?"."+i.option("archivers").createext[p]:""),n.data={targets:n.hashes(o),type:p},i.cwd().hash!==u.hash?l=i.exec("open",u.hash).done(function(){i.one("cwdrender",function(){i.selectfiles({files:o}),t=e.proxy(i.res("mixin","make"),n)()})}):(i.selectfiles({files:o}),t=e.proxy(i.res("mixin","make"),n)()),t}},(i.prototype.commands.back=function(){this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+left backspace"}],this.getstate=function(){return this.fm.history.canBack()?0:-1},this.exec=function(){return this.fm.history.back()}}).prototype={forceLoad:!0},i.prototype.commands.chmod=function(){this.updateOnSelect=!1;var t=this.fm,n={0:"owner",1:"group",2:"other"},i={read:t.i18n("read"),write:t.i18n("write"),execute:t.i18n("execute"),perm:t.i18n("perm"),kind:t.i18n("kind"),files:t.i18n("files")},a=function(e){return!isNaN(parseInt(e,8)&&parseInt(e,8)<=511)||e.match(/^([r-][w-][x-]){3}$/i)};this.tpl={main:'<div class="ui-helper-clearfix elfinder-info-title"><span class="elfinder-cwd-icon {class} ui-corner-all"/>{title}</div>{dataTable}',itemTitle:'<strong>{name}</strong><span id="elfinder-info-kind">{kind}</span>',groupTitle:"<strong>{items}: {num}</strong>",dataTable:'<table id="{id}-table-perm"><tr><td>{0}</td><td>{1}</td><td>{2}</td></tr></table><div class="">'+i.perm+': <input class="elfinder-tabstop elfinder-focus" id="{id}-perm" type="text" size="4" maxlength="3" value="{value}"></div>',fieldset:'<fieldset id="{id}-fieldset-{level}"><legend>{f_title}{name}</legend><input type="checkbox" value="4" class="elfinder-tabstop" id="{id}-read-{level}-perm"{checked-r}> <label for="{id}-read-{level}-perm">'+i.read+'</label><br><input type="checkbox" value="6" class="elfinder-tabstop" id="{id}-write-{level}-perm"{checked-w}> <label for="{id}-write-{level}-perm">'+i.write+'</label><br><input type="checkbox" value="5" class="elfinder-tabstop" id="{id}-execute-{level}-perm"{checked-x}> <label for="{id}-execute-{level}-perm">'+i.execute+"</label><br>"},this.shortcuts=[{}],this.getstate=function(e){var t=this.fm;return e=e||t.selected(),0==e.length&&(e=[t.cwd().hash]),this.checkstate(this.files(e))?0:-1},this.checkstate=function(t){var n=t.length;if(!n)return!1;var i=e.grep(t,function(e){return!(!(e.isowner&&e.perm&&a(e.perm))||1!=n&&"directory"==e.mime)}).length;return n==i},this.exec=function(t){var o=this.hashes(t),r=this.files(o);r.length||(o=[this.fm.cwd().hash],r=this.files(o));var s,l,c=this.fm,d=e.Deferred().always(function(){c.enable()}),p=this.tpl,u=r.length,h=r[0],f=c.namespace+"-perm-"+h.hash,m=p.main,g=' checked="checked"',v=function(){var e={};return e[c.i18n("btnApply")]=b,e[c.i18n("btnCancel")]=function(){A.elfinderdialog("close")},e},b=function(){var t,n=e.trim(e("#"+f+"-perm").val());return!!a(n)&&(A.elfinderdialog("close"),t={cmd:"chmod",targets:o,mode:n},void c.request({data:t,notify:{type:"chmod",cnt:u}}).fail(function(e){d.reject(e)}).done(function(n){n.changed&&n.changed.length&&(n.undo={cmd:"chmod",callback:function(){var t=[];return e.each(S,function(e,n){t.push(c.request({data:{cmd:"chmod",targets:n,mode:e},notify:{type:"undo",cnt:n.length}}))}),e.when.apply(null,t)}},n.redo={cmd:"chmod",callback:function(){return c.request({data:t,notify:{type:"redo",cnt:o.length}})}}),d.resolve(n)}))},y=function(){for(var t,i="",a=0;a<3;a++)t=0,e("#"+f+"-read-"+n[a]+"-perm").is(":checked")&&(t=4|t),e("#"+f+"-write-"+n[a]+"-perm").is(":checked")&&(t=2|t),e("#"+f+"-execute-"+n[a]+"-perm").is(":checked")&&(t=1|t),i+=t.toString(8);e("#"+f+"-perm").val(i)},w=function(t){for(var i,a=0;a<3;a++)i=parseInt(t.slice(a,a+1),8),e("#"+f+"-read-"+n[a]+"-perm").prop("checked",!1),e("#"+f+"-write-"+n[a]+"-perm").prop("checked",!1),e("#"+f+"-execute-"+n[a]+"-perm").prop("checked",!1),4==(4&i)&&e("#"+f+"-read-"+n[a]+"-perm").prop("checked",!0),2==(2&i)&&e("#"+f+"-write-"+n[a]+"-perm").prop("checked",!0),1==(1&i)&&e("#"+f+"-execute-"+n[a]+"-perm").prop("checked",!0);y()},x=function(e){for(var t,n,i,a="777",o="",r=e.length,s=0;s<r;s++){t=z(e[s].perm),S[t]||(S[t]=[]),S[t].push(e[s].hash),o="";for(var l=0;l<3;l++)n=parseInt(t.slice(l,l+1),8),i=parseInt(a.slice(l,l+1),8),4!=(4&n)&&4==(4&i)&&(i-=4),2!=(2&n)&&2==(2&i)&&(i-=2),1!=(1&n)&&1==(1&i)&&(i-=1),o+=i.toString(8);a=o}return a},k=function(e){return e?":"+e:""},C=function(e,t){for(var a,o,r="",s=p.dataTable,l=0;l<3;l++)a=parseInt(e.slice(l,l+1),8),r+=a.toString(8),o=p.fieldset.replace("{f_title}",c.i18n(n[l])).replace("{name}",k(t[n[l]])).replace(/\{level\}/g,n[l]),s=s.replace("{"+l+"}",o).replace("{checked-r}",4==(4&a)?g:"").replace("{checked-w}",2==(2&a)?g:"").replace("{checked-x}",1==(1&a)?g:"");return s=s.replace("{value}",r).replace("{valueCaption}",i.perm)},z=function(e){if(isNaN(parseInt(e,8))){for(var t=e.split(""),n=[],i=0,a=t.length;i<a;i++)0===i||3===i||6===i?t[i].match(/[r]/i)?n.push(1):t[i].match(/[-]/)&&n.push(0):1===i||4===i||7===i?t[i].match(/[w]/i)?n.push(1):t[i].match(/[-]/)&&n.push(0):t[i].match(/[x]/i)?n.push(1):t[i].match(/[-]/)&&n.push(0);n.splice(3,0,","),n.splice(7,0,",");for(var o=n.join(""),r=o.split(","),s=[],l=0,c=r.length;l<c;l++){var d=parseInt(r[l],2).toString(8);s.push(d)}e=s.join("")}else e=parseInt(e,8).toString(8);return e},T={title:this.title,width:"auto",buttons:v(),close:function(){e(this).elfinderdialog("destroy")}},A=c.getUI().find("#"+f),S={},I="";return A.length?(A.elfinderdialog("toTop"),e.Deferred().resolve()):(m=m.replace("{class}",u>1?"elfinder-cwd-icon-group":c.mime2class(h.mime)),u>1?s=p.groupTitle.replace("{items}",c.i18n("items")).replace("{num}",u):(s=p.itemTitle.replace("{name}",h.name).replace("{kind}",c.mime2kind(h)),I=c.tmb(h)),l=C(x(r),1==r.length?r[0]:{}),m=m.replace("{title}",s).replace("{dataTable}",l).replace(/{id}/g,f),A=this.fmDialog(m,T),A.attr("id",f),I&&e("<img/>").on("load",function(){A.find(".elfinder-cwd-icon").addClass(I.className).css("background-image","url('"+I.url+"')")}).attr("src",I.url),e("#"+f+"-table-perm :checkbox").on("click",function(){y("perm")}),e("#"+f+"-perm").on("keydown",function(t){var n=t.keyCode;if(n==e.ui.keyCode.ENTER)return t.stopPropagation(),void b()}).on("focus",function(t){e(this).trigger("select")}).on("keyup",function(t){3==e(this).val().length&&(e(this).trigger("select"),w(e(this).val()))}),d)}},i.prototype.commands.colwidth=function(){this.alwaysEnabled=!0,this.updateOnSelect=!1,this.getstate=function(){return"fixed"===this.fm.getUI("cwd").find("table").css("table-layout")?0:-1},this.exec=function(){return this.fm.getUI("cwd").trigger("colwidth"),e.Deferred().resolve()}},i.prototype.commands.copy=function(){this.shortcuts=[{pattern:"ctrl+c ctrl+insert"}],this.getstate=function(t){var n=this.files(t),i=n.length;return i&&e.grep(n,function(e){return!!e.read}).length==i?0:-1},this.exec=function(t){var n=this.fm,i=e.Deferred().fail(function(e){n.error(e)});return e.each(this.files(t),function(e,t){if(!t.read)return!i.reject(["errCopy",t.name,"errPerm"])}),"rejected"==i.state()?i:i.resolve(n.clipboard(this.hashes(t)))}},i.prototype.commands.cut=function(){var t=this.fm;this.shortcuts=[{pattern:"ctrl+x shift+insert"}],this.getstate=function(n){var i=this.files(n),a=i.length;return a&&e.grep(i,function(e){return!(!e.read||e.locked||t.isRoot(e))}).length==a?0:-1},this.exec=function(n){var i=e.Deferred().fail(function(e){t.error(e)});return e.each(this.files(n),function(e,n){return!n.read||n.locked||t.isRoot(n)?!i.reject(["errCopy",n.name,"errPerm"]):n.locked?!i.reject(["errLocked",n.name]):void 0}),"rejected"==i.state()?i:i.resolve(t.clipboard(this.hashes(n),!0))}},i.prototype.commands.zipdl=function(){},i.prototype.commands.download=function(){var t=this,n=this.fm,i=null,a=!1,o=!1,r=!1,s=window.location.pathname||"/",l=function(r,s){var l,c;if(null!==i&&(n.searchStatus.state>1?o=n.searchStatus.mixed:n.leafRoots[n.cwd().hash]&&(l=n.cwd().volumeid,e.each(r,function(e,t){if(0!==t.indexOf(l))return o=!0,!1})),a=n.isCommandEnabled("zipdl",r[0])),o){if(c=i?"zipdl":"download",r=e.grep(r,function(e){var t=n.file(e),a=!(!t||!i&&"directory"===t.mime||!n.isCommandEnabled(c,e));return t&&s&&!a&&n.cwdHash2Elm(t.hash).trigger("unselect"),a}),!r.length)return[]}else if(!n.isCommandEnabled("download",r[0]))return[];return e.grep(t.files(r),function(e){var t=!(!e.read||!a&&"directory"==e.mime);return s&&!t&&n.cwdHash2Elm(e.hash).trigger("unselect"),t})};this.linkedCmds=["zipdl"],this.shortcuts=[{pattern:"shift+enter"}],this.getstate=function(e){var t=this.hashes(e),i=t.length,o=this.options.maxRequests||10;return i<1?-1:(i=l(t).length,i&&(a||i<=o&&(!n.UA.IE&&!n.UA.Mobile||1==i))?0:-1)},n.bind("contextmenu",function(n){var i,a,o=t.fm,r=null,s=function(t){var n=t.url||o.url(t.hash);return{icon:"link",node:e("<a/>").attr({href:n,target:"_blank",title:o.i18n("link")}).text(t.name).on("mousedown click touchstart touchmove touchend contextmenu",function(e){e.stopPropagation()}).on("dragstart",function(n){var i=n.dataTransfer||n.originalEvent.dataTransfer||null;if(r=null,i){var a=function(t){var n,i=t.mime,a=o.tmb(t);return n='<div class="elfinder-cwd-icon '+o.mime2class(i)+' ui-corner-all"/>',a&&(n=e(n).addClass(a.className).css("background-image","url('"+a.url+"')").get(0).outerHTML),n};i.effectAllowed="copyLink",i.setDragImage&&(r=e('<div class="elfinder-drag-helper html5-native">').append(a(t)).appendTo(e(document.body)),i.setDragImage(r.get(0),50,47)),o.UA.IE||(i.setData("elfinderfrom",window.location.href+t.phash),i.setData("elfinderfrom:"+i.getData("elfinderfrom"),""))}}).on("dragend",function(e){r&&r.remove()})}};if(t.extra=null,n.data&&(i=n.data.targets||[],1===i.length&&(a=o.file(i[0]))&&"directory"!==a.mime))if("1"!=a.url)t.extra=s(a);else{var l;t.extra={icon:"link",node:e("<a/>").attr({href:"#",title:o.i18n("getLink"),draggable:"false"}).text(a.name).on("click touchstart",function(e){if(!("touchstart"===e.type&&e.originalEvent.touches.length>1)){var t=l.parent();e.stopPropagation(),e.preventDefault(),t.removeClass("ui-state-disabled").addClass("elfinder-button-icon-spinner"),o.request({data:{cmd:"url",target:a.hash},preventDefault:!0}).always(function(e){if(t.removeClass("elfinder-button-icon-spinner"),e.url){var n=o.file(a.hash);n.url=e.url,l.replaceWith(s(a).node)}else t.addClass("ui-state-disabled")})}})},l=t.extra.node,l.ready(function(){requestAnimationFrame(function(){l.parent().addClass("ui-state-disabled").css("pointer-events","auto")})})}}).one("open",function(){n.api>=2.1012&&(i=n.getCommand("zipdl")),r=n.api>2.1038&&!n.isCORS}),this.exec=function(n){var i,c,d,p,u,h,f,m=this.hashes(n),g=this.fm,v=(g.options.url,l(m,!0)),b=e.Deferred(),y="",w={},x=!1,k=function(n){return function(){var i,a,o,r=e.Deferred(),s=g.file(g.root(n[0])),l=1===n.length,d=s?s.i18||s.name:null;return l?(i=g.file(n[0]))&&(a=i.i18||i.name):(e.each(n,function(){var e=g.file(this);return!e||o&&o!==e.phash?(o=null,!1):void(o=e.phash)}),o&&(i=g.file(o))&&(a=(i.i18||i.name)+"-"+n.length)),a&&(d=a),d&&(d=" ("+d+")"),g.request({data:{cmd:"zipdl",targets:n},notify:{type:"zipdl",cnt:1,hideCnt:!0,msg:g.i18n("ntfzipdl")+d},cancel:!0,eachCancel:!0,preventDefault:!0}).done(function(i){var o,s,l,d,u,h,f={},m="dlw"+ +new Date;i.error?(g.error(i.error),r.resolve()):i.zipdl&&(o=i.zipdl,a?(h=g.splitFileExtention(o.name||""),a+=h[1]?"."+h[1]:".zip"):a=o.name,p&&(!g.UA.Safari||g.isSameOrigin(g.options.url))||x?(c=g.options.url+(g.options.url.indexOf("?")===-1?"?":"&")+"cmd=zipdl&download=1",e.each([n[0],o.file,a,o.mime],function(e,t){c+="&targets%5B%5D="+encodeURIComponent(t)}),e.each(g.customData,function(e,t){c+="&"+encodeURIComponent(e)+"="+encodeURIComponent(t)}),c+="&"+encodeURIComponent(a),l=e("<a/>").attr("href",c).attr("download",g.escape(a)).on("click",function(){r.resolve(),s&&s.elfinderdialog("destroy")}),x?(l.attr("target","_blank").append('<span class="elfinder-button-icon elfinder-button-icon-download"></span>'+g.escape(a)),f[g.i18n("btnCancel")]=function(){s.elfinderdialog("destroy")},s=t.fmDialog(l,{title:g.i18n("link"),buttons:f,width:"200px",destroyOnClose:!0,close:function(){"resolved"!==r.state()&&r.resolve()}})):(C(l.hide().appendTo("body").get(0)),l.remove())):(d=e('<form action="'+g.options.url+'" method="post" target="'+m+'" style="display:none"/>').append('<input type="hidden" name="cmd" value="zipdl"/>').append('<input type="hidden" name="download" value="1"/>'),e.each([n[0],o.file,a,o.mime],function(e,t){d.append('<input type="hidden" name="targets[]" value="'+g.escape(t)+'"/>')}),e.each(g.customData,function(e,t){d.append('<input type="hidden" name="'+e+'" value="'+g.escape(t)+'"/>')}),d.attr("target",m).appendTo("body"),u=e('<iframe style="display:none" name="'+m+'">').appendTo("body").ready(function(){d.submit().remove(),r.resolve(),setTimeout(function(){u.remove()},2e4)})))}).fail(function(e){e&&g.error(e),r.resolve()}),r.promise()}},C=function(e){var t;"function"==typeof MouseEvent?t=new MouseEvent("click"):(t=document.createEvent("MouseEvents"),t.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null)),e.dispatchEvent(t)},z=function(e){var t,n="elfdl"+e;t=document.cookie.split(n+"="),2===t.length?(h&&clearTimeout(h),document.cookie=n+"=; path="+s+"; max-age=0",T()):setTimeout(function(){z(e)},200)},T=function(){g.ui.notify.children(".elfinder-notify-download").length&&g.notify({type:"download",cnt:-1})},A=[];if(!v.length)return b.reject();if(u=e.grep(v,function(e){return"directory"!==e.mime}).length,d=e("<a>").hide().appendTo("body"),p="string"==typeof d.get(0).download,a&&(u!==v.length||u>=(this.options.minFilesZipdl||1)))return d.remove(),x=!p&&g.UA.Mobile,o?(w={},e.each(v,function(e,t){var n=t.hash.split("_",2);w[n[0]]?w[n[0]].push(t.hash):w[n[0]]=[t.hash]}),!x&&g.UA.Mobile&&Object.keys(w).length>1&&(x=!0)):w=[e.map(v,function(e){return e.hash})],b=g.sequence(e.map(w,function(e){return k(e)})).always(function(){g.trigger("download",{files:v})});for(A=[],i=0;i<v.length;i++)c=g.openUrl(v[i].hash,!0),r&&c.substr(0,g.options.url.length)===g.options.url&&(f=g.getRequestId(),A.push(f),c+="&cpath="+s+"&reqid="+f,h=setTimeout(function(){g.notify({type:"download",cnt:1,cancel:g.UA.IE||g.UA.Edge?void 0:function(){A.length&&e.each(A,function(){g.request({data:{cmd:"abort",id:this},preventDefault:!0})}),A=[]}})},g.notifyDelay),z(f)),!p||g.UA.Safari&&!g.isSameOrigin(c)?g.UA.Mobile?setTimeout(function(){window.open(c)||(g.error("errPopup"),h&&cleaerTimeout(h),T())},100):y+='<iframe class="downloader" id="downloader-'+v[i].hash+'" style="display:none" src="'+c+'"/>':C(d.attr("href",c).attr("download",g.escape(v[i].name)).get(0));return d.remove(),e(y).appendTo("body").ready(function(){setTimeout(function(){e(y).each(function(){e("#"+e(this).attr("id")).remove()})},2e4+1e4*i)}),g.trigger("download",{files:v}),b.resolve()}},i.prototype.commands.duplicate=function(){var t=this.fm;this.getstate=function(n){var i=this.files(n),a=i.length;return a&&t.cwd().write&&e.grep(i,function(e){return!(!e.read||e.phash!==t.cwd().hash||t.isRoot(e))}).length==a?0:-1},this.exec=function(t){var n=this.fm,i=this.files(t),a=i.length,o=e.Deferred().fail(function(e){e&&n.error(e)});return a?(e.each(i,function(e,t){if(!t.read||!n.file(t.phash).write)return!o.reject(["errCopy",t.name,"errPerm"])}),"rejected"==o.state()?o:n.request({data:{cmd:"duplicate",targets:this.hashes(t)},notify:{type:"copy",cnt:a},navigate:{toast:{inbuffer:{msg:n.i18n(["complete",n.i18n("cmdduplicate")])}}}})):o.reject()}},i.prototype.commands.edit=function(){var t,n=this,i=this.fm,a=i.res("class","editing"),o=[],r=[],s=!1,l=function(e){return e.replace(/\s+$/,"")},c=function(t){var a,o=e('<select class="ui-corner-all"/>');return t&&e.each(t,function(e,t){a=i.escape(t.value),o.append('<option value="'+a+'">'+(t.caption?i.escape(t.caption):a)+"</option>")}),e.each(n.options.encodings,function(e,t){o.append('<option value="'+t+'">'+t+"</option>")}),o},d=function(){var t,a;return a="string"==typeof n.options.dialogWidth&&(t=n.options.dialogWidth.match(/(\d+)%/))?parseInt(i.getUI().width()*(t[1]/100)):parseInt(n.options.dialogWidth||650),Math.min(a,e(window).width())},p=function(t){var a,l,c,d=t.length;return d>1&&(a=t[0].mime,l=t[0].name.replace(/^.*(\.[^.]+)$/,"$1")),e.grep(t,function(t){var p;return!c&&"directory"!==t.mime&&(p=t.read&&(s||i.mimeIsText(t.mime)||e.inArray(t.mime,1===d?o:r)!==-1)&&(!n.onlyMimes.length||e.inArray(t.mime,n.onlyMimes)!==-1)&&(1===d||t.mime===a&&t.name.substr(l.length*-1)===l)&&!!i.uploadMimeCheck(t.mime,t.phash)&&v(t,d)&&Object.keys(m).length,p||(c=!0),p)})},u=function(e){var t,n=i.file(e);i.request({cmd:"info",targets:[e],preventDefault:!0}).done(function(e){var a;e&&e.files&&e.files.length&&(t=e.files[0],n.ts==t.ts&&n.size==t.size||(a={changed:[t]},i.updateCache(a),i.change(a)))})},h=function(t,o,r,s,p){var h,m,g,v,b,y,x=e.Deferred(),k=!1,C=function(){return!!k||(i.toast({mode:"warning",msg:i.i18n("nowLoading")}),!1)},z=function(){var t,n,i=v?v.val():void 0,a=e.Deferred().fail(function(e){g.show().find("button.elfinder-btncnt-0,button.elfinder-btncnt-1").hide()});return C()?(h.editor&&(h.editor.save(h[0],h.editor.instance),t=h.editor.confObj,t.info&&(t.info.schemeContent||t.info.arrayBufferContent)&&(i="scheme")),n=M(),D(n),n.promise?n.done(function(e){x.notifyWith(h,[i,h.data("hash"),m,a])}).fail(function(e){a.reject(e)}):x.notifyWith(h,[i,h.data("hash"),m,a]),a):a.resolve()},T=function(){C()&&z().fail(function(e){e&&i.error(e)})},A=function(){h.elfinderdialog("close")},S=function(){C()&&(z().done(function(){k=!1,g.show(),A()}).fail(function(e){g.show(),e&&i.error(e)}),g.hide())},I=function(){if(C()){var t=m,r=i.file(o.phash)?o.phash:i.cwd().hash,s=function(e){d.addClass(a).fadeIn(function(){e&&i.error(e)}),m=t,i.disable()},l=function(){n.mime=E.mime||o.mime,n.prefix=(E.name||o.name).replace(/ \d+(\.[^.]+)?$/,"$1"),n.requestCmd="mkfile",n.nextAction={},n.data={target:r},e.proxy(i.res("mixin","make"),n)().done(function(e){e.added&&e.added.length?(h.data("hash",e.added[0].hash),z().done(function(){k=!1,g.show(),A(),d.fadeIn()}).fail(s)):s()}).progress(function(e){e&&"errUploadMime"===e&&h.trigger("saveAsFail")}).fail(s).always(function(){delete n.mime,delete n.prefix,delete n.nextAction,delete n.data}),i.trigger("unselectfiles",{files:[o.hash]})},c=null,d=i.getUI().children("."+n.dialogClass+":visible");g.is(":hidden")&&(d=d.add(g)),d.removeClass(a).fadeOut(),i.enable(),i.searchStatus.state<2&&r!==i.cwd().hash&&(c=i.exec("open",[r],{thash:r})),e.when([c]).done(function(){c?i.one("cwdrender",l):l()}).fail(s)}},O=function(){var t,n,a=e.Deferred();return k?(h.editor&&h.editor.save(h[0],h.editor.instance),t=M(),t&&t.promise?(n=setTimeout(function(){i.notify({type:"chkcontent",cnt:1,hideCnt:!0})},100),t.always(function(){n&&clearTimeout(n),i.notify({type:"chkcontent",cnt:-1})}).done(function(e){a.resolve(m!==e)}).fail(function(e){a.resolve(e||!0)})):a.resolve(m!==t),a):a.resolve(!1)},j={title:i.escape(o.name),width:d(),buttons:{},cssClass:a,maxWidth:"window",maxHeight:"window",allowMinimize:!0,allowMaximize:!0,openMaximized:w()||p&&p.info&&p.info.openMaximized,btnHoverFocus:!1,closeOnEscape:!1,propagationEvents:["mousemove","mouseup","click"],minimize:function(){var e;h.editor&&g.closest(".ui-dialog").is(":hidden")&&(e=h.editor.confObj,e.info&&e.info.syncInterval&&u(o.hash))},close:function(){var e=function(){var e;x.resolve(),h.editor&&(h.editor.close(h[0],h.editor.instance),e=h.editor.confObj,e.info&&e.info.syncInterval&&u(o.hash)),h.elfinderdialog("destroy")},t="undefined"!=typeof E.name,a=t?{label:"btnSaveAs",callback:function(){requestAnimationFrame(I)}}:{label:"btnSaveClose",callback:function(){z().done(function(){e()})}};O().done(function(o){var r=["confirmNotSave"];o?("string"==typeof o&&r.unshift(o),i.confirm({title:n.title,text:r,accept:a,cancel:{label:"btnClose",callback:e},buttons:t?null:[{label:"btnSaveAs",callback:function(){requestAnimationFrame(I)}}]})):e()})},open:function(){var e,n,a;if(h.initEditArea.call(h,t,o,r,i),h.editor){if(e=h.editor.load(h[0])||null,e&&e.done)e.always(function(){k=!0}).done(function(e){h.editor.instance=e,h.editor.focus(h[0],h.editor.instance),D(M()),requestAnimationFrame(function(){g.trigger("resize")})}).fail(function(e){e&&i.error(e),h.elfinderdialog("destroy")});else{if(k=!0,e&&("string"==typeof e||Array.isArray(e)))return i.error(e),void h.elfinderdialog("destroy");h.editor.instance=e,h.editor.focus(h[0],h.editor.instance),D(M()),requestAnimationFrame(function(){g.trigger("resize")})}n=h.editor.confObj,n.info&&n.info.syncInterval&&(a=parseInt(n.info.syncInterval))&&setTimeout(function(){F(a)},a)}else k=!0,D(M())},resize:function(e,t){h.editor&&h.editor.resize(h[0],h.editor.instance,e,t||{})}},M=function(){return h.getContent.call(h,h[0])},D=function(e){e&&e.promise?e.done(function(e){m=e}):m=e},F=function(e){g.is(":visible")&&(u(o.hash),setTimeout(function(){F(e)},e))},E={};if(p&&(p.html&&(h=e(p.html)),b={init:p.init||null,load:p.load,getContent:p.getContent||null,save:p.save,beforeclose:"function"==typeof p.beforeclose?p.beforeclose:void 0,close:"function"==typeof p.close?p.close:function(){},focus:"function"==typeof p.focus?p.focus:function(){},resize:"function"==typeof p.resize?p.resize:function(){},instance:null,doSave:T,doCancel:A,doClose:S,file:o,fm:i,confObj:p,trigger:function(e,t){i.trigger("editEditor"+e,Object.assign({},p.info||{},t))}}),!h){if(!i.mimeIsText(o.mime))return x.reject("errEditorNotFound");!function(){var n=function(){v&&O().done(function(e){e?v.attr("title",i.i18n("saveAsEncoding")).addClass("elfinder-edit-changed"):v.attr("title",i.i18n("openAsEncoding")).removeClass("elfinder-edit-changed")})};h=e('<textarea class="elfinder-file-edit" rows="20" id="'+t+'-ta"></textarea>').on("input propertychange",n),h.editor&&h.editor.info&&!h.editor.info.useTextAreaEvent||h.on("keydown",function(t){var n,i,a=t.keyCode;t.stopPropagation(),a==e.ui.keyCode.TAB&&(t.preventDefault(),this.setSelectionRange&&(n=this.value,i=this.selectionStart,this.value=n.substr(0,i)+"\t"+n.substr(this.selectionEnd),i+=1,this.setSelectionRange(i,i))),(t.ctrlKey||t.metaKey)&&(a!="Q".charCodeAt(0)&&a!="W".charCodeAt(0)||(t.preventDefault(),A()),a=="S".charCodeAt(0)&&(t.preventDefault(),T()))}).on("mouseenter",function(){this.focus()}),h.initEditArea=function(t,a,o){var r=s&&"unknown"!==s?[{value:s}]:[],l=e("<select/>").hide(),d=function(t){t&&l.appendTo(v.parent()),l.empty().append(e("<option/>").text(v.val())),v.width(l.width())};h.hide().val(o),""!==o&&s&&"UTF-8"===s||r.push({value:"UTF-8"}),v=c(r).on("touchstart",function(e){e.stopPropagation()}).on("change",function(){O().done(function(e){e||""===M()||(A(),f(a,v.val(),p).fail(function(e){e&&i.error(e)}))}),d()}).on("mouseover",n),h.parent().next().prepend(e('<div class="ui-dialog-buttonset elfinder-edit-extras"/>').append(v)),d(!0)}}()}return h.data("hash",o.hash),b&&(h.editor=b,"function"==typeof b.beforeclose&&(j.beforeclose=function(){return b.beforeclose(h[0],b.instance)}),"function"==typeof b.init&&(h.initEditArea=b.init),"function"==typeof b.getContent&&(h.getContent=b.getContent)),h.initEditArea||(h.initEditArea=function(){}),h.getContent||(h.getContent=function(){return l(h.val())}),p&&p.info&&p.info.preventGet||(j.buttons[i.i18n("btnSave")]=T,j.buttons[i.i18n("btnSaveClose")]=S,j.buttons[i.i18n("btnSaveAs")]=I,j.buttons[i.i18n("btnCancel")]=A),p&&"function"==typeof p.prepare&&p.prepare(h,j,o),g=n.fmDialog(h,j).attr("id",t).on("keydown keyup keypress",function(e){e.stopPropagation()}).css({overflow:"hidden",minHeight:"7em"}).addClass("elfinder-edit-editor").closest(".ui-dialog").on("changeType",function(t,n){if(n.extention&&n.mime){var a=(n.extention,n.mime,e(this).children(".ui-dialog-buttonpane").children(".ui-dialog-buttonset"));a.children(".elfinder-btncnt-0,.elfinder-btncnt-1").hide(),E.name=i.splitFileExtention(o.name)[0]+"."+n.extention,E.mime=n.mime,n.keepEditor||a.children(".elfinder-btncnt-2").trigger("click")}}),y=(i.options.dialogContained?elfNode:e(window)).width(),g.width()>y&&g.width(y),x.promise()},f=function(t,a,o){var r,s,l,d=t.hash,p=(i.options,e.Deferred()),u="edit-"+i.namespace+"-"+t.hash,m=i.getUI().find("#"+u),g=a?a:0;if(m.length)return m.elfinderdialog("toTop"),p.resolve();if(!(t.read&&(t.write||o.info&&o.info.converter)))return s=["errOpen",t.name,"errPerm"],p.reject(s);if(o&&o.info){if("function"==typeof o.info.edit)return l=o.info.edit.call(i,t,o),l.promise?l.done(function(){p.resolve()}).fail(function(e){p.reject(e)}):l?p.resolve():p.reject(),p;o.info.urlAsContent||o.info.preventGet||o.info.noContent?(r=e.Deferred(),o.info.urlAsContent?i.url(d,{async:!0,onetime:!0,temporary:!0}).done(function(e){r.resolve({content:e})}):r.resolve({})):r=i.request({data:{cmd:"get",target:d,conv:g,_t:t.ts},options:{type:"get",cache:!0},notify:{type:"file",cnt:1},preventDefault:!0}),r.done(function(a){var r,s,l;a.doconv?i.confirm({title:n.title,text:"unknown"===a.doconv?"confirmNonUTF8":"confirmConvUTF8",accept:{label:"btnConv",callback:function(){p=f(t,r.val(),o)}},cancel:{label:"btnCancel",callback:function(){p.reject()}},optionsCallback:function(t){t.create=function(){var t=e('<div class="elfinder-dialog-confirm-encoding"/>'),n={value:a.doconv};"unknown"===a.doconv&&(n.caption="-"),r=c([n]),e(this).next().find(".ui-dialog-buttonset").prepend(t.append(e("<label>"+i.i18n("encoding")+" </label>").append(r)))}}}):(o&&o.info&&o.info.preventGet||!i.mimeIsText(t.mime)||(s=new RegExp("^(data:"+t.mime.replace(/([.+])/g,"\\$1")+";base64,)","i"),o.info.dataScheme?window.btoa&&!a.content.match(s)&&(a.content="data:"+t.mime+";base64,"+btoa(a.content)):window.atob&&(l=a.content.match(s))&&(a.content=atob(a.content.substr(l[1].length)))),h(u,t,a.content,a.encoding,o).done(function(e){p.resolve(e)}).progress(function(e,t,n,a){var o=this;t&&(d=t),i.request({options:{type:"post"},data:{cmd:"put",target:d,encoding:e||n.encoding,content:n},notify:{type:"save",cnt:1},syncOnFail:!0,preventFail:!0,navigate:{target:"changed",toast:{inbuffer:{msg:i.i18n(["complete",i.i18n("btnSave")])}}}}).fail(function(e){p.reject(e),a.reject()}).done(function(e){requestAnimationFrame(function(){o.trigger("focus"),o.editor&&o.editor.focus(o[0],o.editor.instance)}),a.resolve()})}).fail(function(e){p.reject(e)}))}).fail(function(e){var t=i.parseError(e);t=Array.isArray(t)?t[0]:t,"errConvUTF8"!==t&&i.sync(),p.reject(e)})}return p.promise()},m={},g={info:{id:"textarea",name:"TextArea",useTextAreaEvent:!0},
+load:function(t){this.trigger("Prepare",{node:t,editorObj:void 0,instance:void 0,opts:{}}),t.setSelectionRange&&t.setSelectionRange(0,0),e(t).trigger("focus").show()},save:function(){}},v=function(a,o){var r=function(t,n){if(n){if("*"===n[0]||e.inArray(t,n)!==-1)return!0;var a,o;for(o=n.length,a=0;a<o;a++)if(0===t.indexOf(n[a]))return!0;return!1}return i.mimeIsText(t)},s=function(e,t){if(!t||!t.length)return!0;var n,i,a=e.replace(/^.+\.([^.]+)|(.+)$/,"$1$2").toLowerCase();for(i=t.length,n=0;n<i;n++)if(a===t[n].toLowerCase())return!0;return!1},l=n.options.editors||[],c=i.cwd().write;return t=i.storage("storedEditors")||{},m={},l.length||(l=[g]),e.each(l,function(e,t){var n;(1===o||!t.info.single)&&(t.info&&t.info.converter?c:a.write)&&(a.size>0||!t.info.converter&&(t.info.canMakeEmpty||t.info.canMakeEmpty!==!1&&i.mimeIsText(a.mime)))&&(!t.info.maxSize||a.size<=t.info.maxSize)&&r(a.mime,t.mimes||null)&&s(a.name,t.exts||null)&&"function"==typeof t.load&&"function"==typeof t.save&&(n=t.info.name?t.info.name:"Editor "+e,t.id=t.info.id?t.info.id:"editor"+e,t.name=n,t.i18n=i.i18n(n),m[t.id]=t)}),!!Object.keys(m).length},b=function(n,a){n&&a&&(e.isPlainObject(t)||(t={}),t[n]=a.id,i.storage("storedEditors",t),i.trigger("selectfiles",{files:i.selected()}))},y=function(){var e=i.storage("useStoredEditor");return e?e>0:n.options.useStoredEditor},w=function(){var e=i.storage("editorMaximized");return e?e>0:n.options.editorMaximized},x=function(t,n){var a=[];return e.each(m,function(e,o){a.push({label:i.escape(o.i18n),icon:o.info&&o.info.icon?o.info.icon:"edit",options:{iconImg:o.info&&o.info.iconImg?i.baseUrl+o.info.iconImg:void 0},callback:function(){b(t[0].mime,o),n&&n.call(o)}})}),a},k=function(e){return e.toLowerCase().replace(/ +/g,"")},C=function(e){var n=t[e];return n&&Object.keys(m).length?m[k(n)]:void 0};this.shortcuts=[{pattern:"ctrl+e"}],this.init=function(){var t,n,i=this,a=this.fm,l=this.options,c=[];this.onlyMimes=this.options.mimes||[],a.one("open",function(){l.editors&&Array.isArray(l.editors)&&(a.trigger("canMakeEmptyFile",{mimes:Object.keys(a.storage("mkfileTextMimes")||{}).concat(l.makeTextMimes||["text/plain"])}),e.each(l.editors,function(e,t){t.info&&t.info.cmdCheck&&c.push(t.info.cmdCheck)}),c.length?a.api>=2.103?n=a.request({data:{cmd:"editor",name:c,method:"enabled"},preventDefault:!0}).done(function(e){t=e}).fail(function(){t={}}):(t={},n=e.Deferred().resolve()):n=e.Deferred().resolve(),n.always(function(){t&&(l.editors=e.grep(l.editors,function(e){return!e.info||!e.info.cmdCheck||!!t[e.info.cmdCheck]})),e.each(l.editors,function(e,t){t.setup&&"function"==typeof t.setup&&t.setup.call(t,l,a),t.disabled||(t.mimes&&Array.isArray(t.mimes)&&(o=o.concat(t.mimes),t.info&&t.info.single||(r=r.concat(t.mimes))),!s&&t.mimes&&"*"===t.mimes[0]&&(s=!0),t.info||(t.info={}),t.info.integrate&&a.trigger("helpIntegration",Object.assign({cmd:"edit"},t.info.integrate)),t.info.canMakeEmpty&&a.trigger("canMakeEmptyFile",{mimes:t.mimes}))}),o=(e.uniqueSort||e.unique)(o),r=(e.uniqueSort||e.unique)(r),l.editors=e.grep(l.editors,function(e){return!e.disabled})}))}).bind("select",function(){m=null}).bind("contextmenucreate",function(t){var n,o,r=function(e){var t=i.title;a.one("contextmenucreatedone",function(){i.title=t}),i.title=a.escape(e.i18n),e.info&&e.info.iconImg&&(i.contextmenuOpts={iconImg:a.baseUrl+e.info.iconImg}),delete i.variants};i.contextmenuOpts=void 0,"files"===t.data.type&&i.enabled()&&(n=a.file(t.data.targets[0]),v(n,t.data.targets.length)&&(Object.keys(m).length>1?y()&&(o=C(n.mime))?(r(o),i.extra={icon:"menu",node:e("<span/>").attr({title:a.i18n("select")}).on("click touchstart",function(t){if(!("touchstart"===t.type&&t.originalEvent.touches.length>1)){var n=e(this);t.stopPropagation(),t.preventDefault(),a.trigger("contextmenu",{raw:x(a.selectedFiles(),function(){var e=a.selected();a.exec("edit",e,{editor:this}),a.trigger("selectfiles",{files:e})}),x:n.offset().left,y:n.offset().top})}})}):(delete i.extra,i.variants=[],e.each(m,function(e,t){i.variants.push([{editor:t},t.i18n,t.info&&t.info.iconImg?a.baseUrl+t.info.iconImg:"edit"])})):(r(m[Object.keys(m)[0]]),delete i.extra)))}).bind("canMakeEmptyFile",function(t){if(t.data&&t.data.resetTexts){var n=a.arrayFlip(i.options.makeTextMimes||["text/plain"]),o=a.storage("mkfileHides")||{};e.each(a.storage("mkfileTextMimes")||{},function(e,t){n[e]||(delete a.mimesCanMakeEmpty[e],delete o[e])}),a.storage("mkfileTextMimes",null),Object.keys(o).length?a.storage("mkfileHides",o):a.storage("mkfileHides",null)}})},this.getstate=function(e){var t=this.files(e),n=t.length;return n&&p(t).length==n?0:-1},this.exec=function(t,n){var i,a=this.fm,o=p(this.files(t)),r=e.map(o,function(e){return e.hash}),s=[],l=n&&n.editor?n.editor:null,c=e(n&&n._currentNode?n._currentNode:a.cwdHash2Elm(r[0])),d=function(){var t=e.Deferred();return!l&&Object.keys(m).length>1?y()&&(l=C(o[0].mime))?t.resolve(l):(a.trigger("contextmenu",{raw:x(o,function(){t.resolve(this)}),x:c.offset().left,y:c.offset().top+22,opened:function(){a.one("closecontextmenu",function(){requestAnimationFrame(function(){"pending"===t.state()&&t.reject()})})}}),a.trigger("selectfiles",{files:r}),t):(Object.keys(m).length>1&&l&&b(o[0].mime,l),t.resolve(l?l:Object.keys(m).length?m[Object.keys(m)[0]]:null))},u=e.Deferred();return null===m&&v(o[0],r.length),c.length||(c=a.getUI("cwd")),d().done(function(t){for(;i=o.shift();)s.push(f(i,void 0,t).fail(function(e){e&&a.error(e)}));s.length?e.when.apply(null,s).done(function(){u.resolve()}).fail(function(){u.reject()}):u.reject()}).fail(function(){u.reject()}),u}},i.prototype.commands.empty=function(){var t,n,i=function(e){var i=t.files(e);return i.length||(i=[n.cwd()]),i};this.linkedCmds=["rm"],this.init=function(){t=this,n=this.fm},this.getstate=function(t){var n,a=i(t);return n=a.length,e.grep(a,function(e){return!(!e.read||!e.write||"directory"!==e.mime)}).length==n?0:-1},this.exec=function(t){var a=i(t),o=a.length,r=e.Deferred().done(function(){var t={changed:{}};n.toast({msg:n.i18n(['"'+s.join('", ')+'"',"complete",n.i18n("cmdempty")])}),e.each(a,function(e,n){t.changed[n.hash]=n}),n.change(t)}).always(function(){var t=n.cwd().hash;n.trigger("selectfiles",{files:e.map(a,function(e){return t===e.phash?e.hash:null})})}),s=[],l=function(e){"number"==typeof e?(s.push(a[e].name),delete a[e].dirs):e&&n.error(e),--o<1&&r[s.length?"resolve":"reject"]()};return e.each(a,function(t,i){var a;return i.write&&"directory"===i.mime?n.isCommandEnabled("rm",i.hash)?(a=setTimeout(function(){n.notify({type:"search",cnt:1,hideCnt:!(o>1)})},n.notifyDelay),void n.request({data:{cmd:"open",target:i.hash},preventDefault:!0,asNotOpen:!0}).done(function(r){var s=[];a&&clearTimeout(a),n.ui.notify.children(".elfinder-notify-search").length&&n.notify({type:"search",cnt:-1,hideCnt:!(o>1)}),r&&r.files&&r.files.length?r.files.length>n.maxTargets?l(["errEmpty",i.name,"errMaxTargets",n.maxTargets]):(n.updateCache(r),e.each(r.files,function(e,t){return!t.write||t.locked?(l(["errEmpty",i.name,"errRm",t.name,"errPerm"]),s=[],!1):void s.push(t.hash)}),s.length&&n.exec("rm",s,{_userAction:!0,addTexts:[n.i18n("folderToEmpty",i.name)]}).fail(function(e){n.trigger("unselectfiles",{files:n.selected()}),l(n.parseError(e)||"")}).done(function(){l(t)})):(n.toast({mode:"warning",msg:n.i18n("filderIsEmpty",i.name)}),l(""))}).fail(function(e){l(n.parseError(e)||"")})):(l(["errCmdNoSupport",'"rm"']),null):(l(["errEmpty",i.name,"errPerm"]),null)}),r}},i.prototype.commands.extract=function(){var t=this,n=t.fm,i=[],a=function(t){return e.grep(t,function(t){return!(!t.read||e.inArray(t.mime,i)===-1)})};this.variants=[],this.disableOnSearch=!0,n.bind("open reload",function(){i=n.option("archivers").extract||[],n.api>2?t.variants=[[{makedir:!0},n.i18n("cmdmkdir")],[{},n.i18n("btnCwd")]]:t.variants=[[{},n.i18n("btnCwd")]],t.change()}),this.getstate=function(e){var t=this.files(e),n=t.length;return n&&this.fm.cwd().write&&a(t).length==n?0:-1},this.exec=function(t,a){var o,r,s,l=this.files(t),c=e.Deferred(),d=l.length,p=a&&a.makedir?1:0,u=!1,h=!1,f=0,m=e.map(n.files(t),function(e){return e.name}),g={};e.grep(n.files(t),function(e){return g[e.name]=e,!1});var v=function(e){switch(e){case"overwrite_all":u=!0;break;case"omit_all":h=!0}},b=function(t){t.read&&n.file(t.phash).write?e.inArray(t.mime,i)===-1?(r=["errExtract",t.name,"errNoArchive"],n.error(r),c.reject(r)):n.request({data:{cmd:"extract",target:t.hash,makedir:p},notify:{type:"extract",cnt:1},syncOnFail:!0,navigate:{toast:p?{incwd:{msg:n.i18n(["complete",n.i18n("cmdextract")]),action:{cmd:"open",msg:"cmdopen"}},inbuffer:{msg:n.i18n(["complete",n.i18n("cmdextract")]),action:{cmd:"open",msg:"cmdopen"}}}:{inbuffer:{msg:n.i18n(["complete",n.i18n("cmdextract")])}}}}).fail(function(e){"rejected"!=c.state()&&c.reject(e)}).done(function(){}):(r=["errExtract",t.name,"errPerm"],n.error(r),c.reject(r))},y=function(t,i){var a=t[i],r=n.splitFileExtention(a.name)[0],l=e.inArray(r,m)>=0,w=function(){i+1<d?y(t,i+1):c.resolve()};!p&&l&&"directory"!=g[r].mime?n.confirm({title:n.i18n("ntfextract"),text:["errExists",r,"confirmRepl"],accept:{label:"btnYes",callback:function(e){if(s=e?"overwrite_all":"overwrite",v(s),u||h){if(u){for(o=i;o<d;o++)b(t[o]);c.resolve()}}else"overwrite"==s&&b(a),i+1<d?y(t,i+1):c.resolve()}},reject:{label:"btnNo",callback:function(e){s=e?"omit_all":"omit",v(s),!u&&!h&&i+1<d?y(t,i+1):h&&c.resolve()}},cancel:{label:"btnCancel",callback:function(){c.resolve()}},all:i+1<d}):p?(b(a),w()):0==f?n.confirm({title:n.i18n("cmdextract"),text:[n.i18n("cmdextract")+' "'+a.name+'"',"confirmRepl"],accept:{label:"btnYes",callback:function(e){e&&(f=1),b(a),w()}},reject:{label:"btnNo",callback:function(e){e&&(f=-1),w()}},cancel:{label:"btnCancel",callback:function(){c.resolve()}},all:i+1<d}):(f>0&&b(a),w())};return this.enabled()&&d&&i.length?(d>0&&y(l,0),c):c.reject()}},(i.prototype.commands.forward=function(){this.alwaysEnabled=!0,this.updateOnSelect=!0,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:!0},i.prototype.commands.fullscreen=function(){var t=this,n=this.fm,i=function(e,n){e.preventDefault(),e.stopPropagation(),n&&n.fullscreen&&t.update(void 0,"on"===n.fullscreen)};this.alwaysEnabled=!0,this.updateOnSelect=!1,this.syncTitleOnChange=!0,this.value=!1,this.options={ui:"fullscreenbutton"},this.getstate=function(){return 0},this.exec=function(){var i=n.getUI().get(0),a=i===n.toggleFullscreen(i);return t.title=n.i18n(a?"reinstate":"cmdfullscreen"),t.update(void 0,a),e.Deferred().resolve()},n.bind("init",function(){n.getUI().off("resize."+n.namespace,i).on("resize."+n.namespace,i)})},(i.prototype.commands.getfile=function(){var t=this,n=this.fm,i=function(n){var i=t.options;return n=e.grep(n,function(e){return!("directory"==e.mime&&!i.folders||!e.read)}),i.multiple||1==n.length?n:[]};this.alwaysEnabled=!0,this.callback=n.options.getFileCallback,this._disabled="function"==typeof this.callback,this.getstate=function(e){var t=this.files(e),n=t.length;return this.callback&&n&&i(t).length==n?0:-1},this.exec=function(n){var i,a,o,r=this.fm,s=this.options,l=this.files(n),c=l.length,d=r.option("url"),p=r.option("tmbUrl"),u=e.Deferred().done(function(e){var n,i=function(){"close"==s.oncomplete?r.hide():"destroy"==s.oncomplete&&r.destroy()},a=function(e){"close"==s.onerror?r.hide():"destroy"==s.onerror?r.destroy():e&&r.error(e)};r.trigger("getfile",{files:e});try{n=t.callback(e,r)}catch(o){return void a(["Error in `getFileCallback`.",o.message])}"object"==typeof n&&"function"==typeof n.done?n.done(i).fail(a):i()}),h=function(t){return s.onlyURL?s.multiple?e.map(l,function(e){return e.url}):l[0].url:s.multiple?l:l[0]},f=[];for(i=0;i<c;i++){if(a=l[i],"directory"==a.mime&&!s.folders)return u.reject();a.baseUrl=d,"1"==a.url?f.push(r.request({data:{cmd:"url",target:a.hash},notify:{type:"url",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.url){var t=r.file(this.hash);t.url=this.url=e.url}}.bind(a))):a.url=r.url(a.hash),s.onlyURL||(s.getPath&&(a.path=r.path(a.hash),""===a.path&&a.phash&&!function(){var t=e.Deferred();f.push(t),r.path(a.hash,!1,{}).done(function(e){a.path=e}).fail(function(){a.path=""}).always(function(){t.resolve()})}()),a.tmb&&1!=a.tmb&&(a.tmb=p+a.tmb),a.width||a.height||(a.dim?(o=a.dim.split("x"),a.width=o[0],a.height=o[1]):s.getImgSize&&a.mime.indexOf("image")!==-1&&f.push(r.request({data:{cmd:"dim",target:a.hash},notify:{type:"dim",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.dim){var t=e.dim.split("x"),n=r.file(this.hash);n.width=this.width=t[0],n.height=this.height=t[1]}}.bind(a)))))}return f.length?(e.when.apply(null,f).always(function(){u.resolve(h(l))}),u):u.resolve(h(l))}}).prototype={forceLoad:!0},(i.prototype.commands.help=function(){var t,n,i,a,o,r,s=this.fm,l=this,c='<div class="elfinder-help-link"> <a href="{url}" target="_blank">{link}</a></div>',d='<div class="elfinder-help-team"><div>{author}</div>{work}</div>',p=/\{url\}/,u=/\{link\}/,h=/\{author\}/,f=/\{work\}/,m="replace",g="ui-priority-primary",v="ui-priority-secondary",b="elfinder-help-license",y='<li class="'+s.res("class","tabstab")+' elfinder-help-tab-{id}"><a href="#'+s.namespace+'-help-{id}" class="ui-tabs-anchor">{title}</a></li>',w=['<div class="ui-tabs ui-widget ui-widget-content ui-corner-all elfinder-help">','<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-top">'],x='<div class="elfinder-help-shortcut"><div class="elfinder-help-shortcut-pattern">{pattern}</div> {descrip}</div>',k='<div class="elfinder-help-separator"/>',C=e("base").length?document.location.href.replace(/#.*$/,""):"",z=s.res("class","tabsactive"),T=function(){var e;return e=s.theme&&s.theme.author?d[m]("elfinder-help-team","elfinder-help-team elfinder-help-term-theme")[m](h,s.i18n(s.theme.author)+(s.theme.email?" <"+s.theme.email+">":""))[m](f,s.i18n("theme")+" ("+s.i18n(s.theme.name)+")"):'<div class="elfinder-help-team elfinder-help-term-theme" style="display:none"></div>'},A=function(){w.push('<div id="'+s.namespace+'-help-about" class="ui-tabs-panel ui-widget-content ui-corner-bottom"><div class="elfinder-help-logo"/>'),w.push("<h3>elFinder</h3>"),w.push('<div class="'+g+'">'+s.i18n("webfm")+"</div>"),w.push('<div class="'+v+'">'+s.i18n("ver")+": "+s.version+"</div>"),w.push('<div class="'+v+'">'+s.i18n("protocolver")+': <span class="apiver"></span></div>'),w.push('<div class="'+v+'">jQuery/jQuery UI: '+e().jquery+"/"+e.ui.version+"</div>"),w.push(k),w.push(c[m](p,"https://studio-42.github.io/elFinder/")[m](u,s.i18n("homepage"))),w.push(c[m](p,"https://github.com/Studio-42/elFinder/wiki")[m](u,s.i18n("docs"))),w.push(c[m](p,"https://github.com/Studio-42/elFinder")[m](u,s.i18n("github"))),w.push(k),w.push('<div class="'+g+'">'+s.i18n("team")+"</div>"),w.push(d[m](h,'Dmitry "dio" Levashov <dio@std42.ru>')[m](f,s.i18n("chiefdev"))),w.push(d[m](h,"Naoki Sawada <hypweb+elfinder@gmail.com>")[m](f,s.i18n("developer"))),w.push(d[m](h,"Troex Nevelin <troex@fury.scancode.ru>")[m](f,s.i18n("maintainer"))),w.push(d[m](h,"Alexey Sukhotin <strogg@yandex.ru>")[m](f,s.i18n("contributor"))),s.i18[s.lang].translator&&e.each(s.i18[s.lang].translator.split(", "),function(){w.push(d[m](h,e.trim(this))[m](f,s.i18n("translator")+" ("+s.i18[s.lang].language+")"))}),w.push(T()),w.push(k),w.push('<div class="'+b+'">'+s.i18n("icons")+': Pixelmixer, <a href="http://p.yusukekamiyamane.com" target="_blank">Fugue</a>, <a href="https://icons8.com" target="_blank">Icons8</a></div>'),w.push(k),w.push('<div class="'+b+'">Licence: 3-clauses BSD Licence</div>'),w.push('<div class="'+b+'">Copyright © 2009-2019, Studio 42</div>'),w.push('<div class="'+b+'">„ …'+s.i18n("dontforget")+" ”</div>"),w.push("</div>")},S=function(){var t=s.shortcuts();w.push('<div id="'+s.namespace+'-help-shortcuts" class="ui-tabs-panel ui-widget-content ui-corner-bottom">'),t.length?(w.push('<div class="ui-widget-content elfinder-help-shortcuts">'),e.each(t,function(e,t){w.push(x.replace(/\{pattern\}/,t[0]).replace(/\{descrip\}/,t[1]))}),w.push("</div>")):w.push('<div class="elfinder-help-disabled">'+s.i18n("shortcutsof")+"</div>"),w.push("</div>")},I=function(){w.push('<div id="'+s.namespace+'-help-help" class="ui-tabs-panel ui-widget-content ui-corner-bottom">'),w.push('<a href="https://github.com/Studio-42/elFinder/wiki" target="_blank" class="elfinder-dont-panic"><span>DON\'T PANIC</span></a>'),w.push("</div>")},O=!1,j=function(){O=!0,w.push('<div id="'+s.namespace+'-help-integrations" class="ui-tabs-panel ui-widget-content ui-corner-bottom"/>')},M=!1,D=function(){M=!0,w.push('<div id="'+s.namespace+'-help-debug" class="ui-tabs-panel ui-widget-content ui-corner-bottom">'),w.push('<div class="ui-widget-content elfinder-help-debug"><ul></ul></div>'),w.push("</div>")},F=function(){var n,i,a,c,d,p,u=function(t,n){return e.each(n,function(n,i){t.append(e("<dt/>").text(n)),"undefined"==typeof i?t.append(e("<dd/>").append(e("<span/>").text("undfined"))):"object"!=typeof i||i?"object"==typeof i&&(e.isPlainObject(i)||i.length)?t.append(e("<dd/>").append(u(e("<dl/>"),i))):t.append(e("<dd/>").append(e("<span/>").text(i&&"object"==typeof i?"[]":i?i:'""'))):t.append(e("<dd/>").append(e("<span/>").text("null")))}),t},h=r.children("li").length;(l.debug.options||l.debug.debug)&&(h>=5&&(d=r.children("li:last"),p=o.children("div:last"),p.is(":hidden")?(d.remove(),p.remove()):(d.prev().remove(),p.prev().remove())),a=s.namespace+"-help-debug-"+ +new Date,n=e("<li/>").html('<a href="'+C+"#"+a+'">'+l.debug.debug.cmd+"</a>").prependTo(r),i=e('<div id="'+a+'"/>').data("debug",l.debug),n.on("click.debugrender",function(){var t=i.data("debug");i.removeData("debug"),t&&(i.hide(),t.debug&&(c=e("<fieldset>").append(e("<legend/>").text("debug"),u(e("<dl/>"),t.debug)),i.append(c)),t.options&&(c=e("<fieldset>").append(e("<legend/>").text("options"),u(e("<dl/>"),t.options)),i.append(c)),i.show()),n.off("click.debugrender")}),r.after(i),t&&o.tabs("refresh"))},E="";this.alwaysEnabled=!0,this.updateOnSelect=!1,this.state=-1,this.shortcuts=[{pattern:"f1",description:this.title}],s.bind("load",function(){var c,d,p,u,h,f,g=l.options.view||["about","shortcuts","help","integrations","debug"];(c=e.inArray("preference",g))!==-1&&g.splice(c,1),e.fn.tabs||(c=e.inArray(g,"debug"))!==-1&&g.splice(c,1),e.each(g,function(e,t){w.push(y[m](/\{id\}/g,t)[m](/\{title\}/,s.i18n(t)))}),w.push("</ul>"),e.inArray("about",g)!==-1&&A(),e.inArray("shortcuts",g)!==-1&&S(),e.inArray("help",g)!==-1&&(d=s.i18nBaseUrl+"help/%s.html.js",I()),e.inArray("integrations",g)!==-1&&j(),e.inArray("debug",g)!==-1&&D(),w.push("</div>"),E=e(w.join("")),E.find(".ui-tabs-nav li").on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"===t.type)}).on("focus blur","a",function(t){e(t.delegateTarget).toggleClass("ui-state-focus","focusin"===t.type)}).children().on("click",function(t){var n=e(this);t.preventDefault(),t.stopPropagation(),n.parent().addClass(z).siblings().removeClass(z),E.children(".ui-tabs-panel").hide().filter(n.attr("href")).show()}).filter(":first").trigger("click"),O&&(n=E.find(".elfinder-help-tab-integrations").hide(),i=E.find("#"+s.namespace+"-help-integrations").hide().append(e('<div class="elfinder-help-integrations-desc"/>').html(s.i18n("integrationWith"))),s.bind("helpIntegration",function(t){var a,o,r,l,c=i.children("ul:first");t.data&&(e.isPlainObject(t.data)?(a=Object.assign({link:"",title:"",banner:""},t.data),(a.title||a.link)&&(a.title||(a.title=a.link),o=a.link?e("<a/>").attr("href",a.link).attr("target","_blank").text(a.title):e("<span/>").text(a.title),a.banner&&(o=e("<span/>").append(e("<img/>").attr(a.banner),o)))):(o=e(t.data),o.filter("a").each(function(){var t=e(this);t.attr("target")||t.attr("target","_blank")})),o&&(n.show(),c.length||(c=e('<ul class="elfinder-help-integrations"/>').appendTo(i)),a&&a.cmd?(l="elfinder-help-integration-"+a.cmd,r=c.find("ul."+l),r.length||(r=e('<ul class="'+l+'"/>'),c.append(e("<li/>").append(e("<span/>").html(s.i18n("cmd"+a.cmd))).append(r))),o=r.append(e("<li/>").append(o))):c.append(e("<li/>").append(o))))}).bind("themechange",function(){E.find("div.elfinder-help-term-theme").replaceWith(T())})),M&&(a=E.find(".elfinder-help-tab-debug").hide(),o=E.find("#"+s.namespace+"-help-debug").children("div:first"),r=o.children("ul:first").on("click",function(e){e.preventDefault(),e.stopPropagation()}),l.debug={},s.bind("backenddebug",function(e){M&&e.data&&e.data.debug&&(l.debug={options:e.data.options,debug:Object.assign({cmd:s.currentReqCmd},e.data.debug)},l.dialog&&F())})),E.find("#"+s.namespace+"-help-about").find(".apiver").text(s.api),l.dialog=l.fmDialog(E,{title:l.title,width:530,maxWidth:"window",maxHeight:"window",autoOpen:!1,destroyOnClose:!1,close:function(){M&&(a.hide(),o.tabs("destroy")),t=!1}}).on("click",function(e){e.stopPropagation()}).css({overflow:"hidden"}),p=l.dialog.children(".ui-tabs"),u=p.children(".ui-tabs-nav:first"),h=p.children(".ui-tabs-panel"),f=l.dialog.outerHeight(!0)-l.dialog.height(),l.dialog.closest(".ui-dialog").on("resize",function(){h.height(l.dialog.height()-f-u.outerHeight(!0)-20)}),d&&l.dialog.one("initContents",function(){e.ajax({url:l.options.helpSource?l.options.helpSource:d.replace("%s",s.lang),dataType:"html"}).done(function(t){e("#"+s.namespace+"-help-help").html(t)}).fail(function(){e.ajax({url:d.replace("%s","en"),dataType:"html"}).done(function(t){e("#"+s.namespace+"-help-help").html(t)})})}),l.state=0,s.trigger("helpBuilded",l.dialog)}).one("open",function(){var e=!1;s.one("backenddebug",function(){e=!0}).one("opendone",function(){requestAnimationFrame(function(){!e&&M&&(M=!1,a.hide(),o.hide(),r.hide())})})}),this.getstate=function(){return 0},this.exec=function(n,i){var s=i?i.tab:void 0,l=function(){M&&(o.tabs(),r.find("a:first").trigger("click"),a.show(),t=!0)};return l(),this.dialog.trigger("initContents").elfinderdialog("open").find((s?".elfinder-help-tab-"+s:".ui-tabs-nav li")+" a:first").trigger("click"),e.Deferred().resolve()}}).prototype={forceLoad:!0},i.prototype.commands.hidden=function(){this.hidden=!0,this.updateOnSelect=!1,this.getstate=function(){return-1}},i.prototype.commands.hide=function(){var t,n,i,a,o=this,r={};this.syncTitleOnChange=!0,this.shortcuts=[{pattern:"ctrl+shift+dot",description:this.fm.i18n("toggleHidden")}],this.init=function(){var e=this.fm;t=e.storage("hide")||{items:{}},n=Object.keys(t.items).length,this.title=e.i18n(t.show?"hideHidden":"showHidden"),o.update(void 0,o.title)},this.fm.bind("select contextmenucreate closecontextmenu",function(e,r){var s=(e.data?e.data.selected||e.data.targets:null)||r.selected();"select"===e.type&&e.data?a=e.data.origin:"contextmenucreate"===e.type&&(i=e.data.type),!s.length||("contextmenucreate"!==e.type&&"navbar"!==a||"cwd"===i)&&s[0]===r.cwd().hash?o.title=r.i18n(t.show?"hideHidden":"showHidden"):o.title=r.i18n("cmdhide"),"closecontextmenu"!==e.type?o.update("cwd"===i?n?0:-1:void 0,o.title):(i="",requestAnimationFrame(function(){o.update(void 0,o.title)}))}),this.getstate=function(e){return"cwd"!==i&&(e||this.fm.selected()).length||n?0:-1},this.exec=function(i,s){var l,c,d=this.fm,p=e.Deferred().done(function(){d.trigger("hide",{items:h,opts:s})}).fail(function(e){d.error(e)}),u=s||{},h=u.targets?u.targets:i||d.selected(),f=[];if(t=d.storage("hide")||{},e.isPlainObject(t)||(t={}),e.isPlainObject(t.items)||(t.items={}),("shortcut"===s._currentType||!h.length||"navbar"!==s._currentType&&"navbar"!==a&&h[0]===d.cwd().hash)&&(t.show?u.hide=!0:Object.keys(t.items).length&&(u.show=!0)),u.reset&&(u.show=!0,n=0),u.show||u.hide){if(u.show?t.show=!0:delete t.show,u.show)return d.storage("hide",u.reset?null:t),o.title=d.i18n("hideHidden"),o.update(u.reset?-1:void 0,o.title),e.each(t.items,function(e){var t=d.file(e,!0);t&&(d.searchStatus.state||!t.phash||d.file(t.phash))&&f.push(t)}),f.length&&(d.updateCache({added:f}),d.add({added:f})),u.reset&&(t={items:{}}),p.resolve();h=Object.keys(t.items)}return h.length&&(e.each(h,function(e,n){var i;t.items[n]||(i=d.file(n),i&&(r[n]=i.i18||i.name),t.items[n]=r[n]?r[n]:n)}),n=Object.keys(t.items).length,l=this.files(h),d.storage("hide",t),d.remove({removed:h}),t.show&&this.exec(void 0,{hide:!0}),u.hide||(c={},c.undo={cmd:"hide",callback:function(){var t=d.storage("hide");t&&(e.each(h,function(e,n){delete t.items[n]}),n=Object.keys(t.items).length,d.storage("hide",t),d.trigger("hide",{items:h,opts:{}}),o.update(n?0:-1)),d.updateCache({added:l}),d.add({added:l})}},c.redo={cmd:"hide",callback:function(){return d.exec("hide",void 0,{targets:h})}})),"rejected"==p.state()?p:p.resolve(c)}},(i.prototype.commands.home=function(){this.title="Home",this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+home ctrl+shift+up",description:"Home"}],this.getstate=function(){var e=this.fm.root(),t=this.fm.cwd().hash;return e&&t&&e!=t?0:-1},this.exec=function(){return this.fm.exec("open",this.fm.root())}}).prototype={forceLoad:!0},(i.prototype.commands.info=function(){var t=this.fm,n="elfinder-spinner",i="elfinder-info-button",a={calc:t.i18n("calc"),size:t.i18n("size"),unknown:t.i18n("unknown"),path:t.i18n("path"),aliasfor:t.i18n("aliasfor"),modify:t.i18n("modify"),perms:t.i18n("perms"),locked:t.i18n("locked"),dim:t.i18n("dim"),kind:t.i18n("kind"),files:t.i18n("files"),folders:t.i18n("folders"),roots:t.i18n("volumeRoots"),items:t.i18n("items"),yes:t.i18n("yes"),no:t.i18n("no"),link:t.i18n("link"),owner:t.i18n("owner"),group:t.i18n("group"),perm:t.i18n("perm"),getlink:t.i18n("getLink")},o=function(e,t){return t?e.replace(/\u200B/g,""):e.replace(/(\/|\\)/g,"$1")};this.items=["size","aliasfor","path","link","dim","modify","perms","locked","owner","group","perm"],this.options.custom&&Object.keys(this.options.custom).length&&e.each(this.options.custom,function(e,t){t.label&&this.items.push(t.label)}),this.tpl={main:'<div class="ui-helper-clearfix elfinder-info-title {dirclass}"><span class="elfinder-cwd-icon {class} ui-corner-all"{style}/>{title}</div><table class="elfinder-info-tb">{content}</table>',itemTitle:'<strong>{name}</strong><span class="elfinder-info-kind">{kind}</span>',groupTitle:"<strong>{items}: {num}</strong>",row:'<tr><td class="elfinder-info-label">{label} : </td><td class="{class}">{value}</td></tr>',spinner:'<span>{text}</span> <span class="'+n+" "+n+'-{name}"/>'},this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+i"}],this.init=function(){e.each(a,function(e,n){a[e]=t.i18n(n)})},this.getstate=function(){return 0},this.exec=function(t){var r=this.files(t);r.length||(r=this.files([this.fm.cwd().hash]));var s,l,c,d,p,u,h,f,m,g=this,v=this.fm,b=this.options,y=this.tpl,w=y.row,x=r.length,k=[],C=y.main,z="{label}",T="{value}",A=[],S=null,I={title:v.i18n("selectionInfo"),width:"auto",close:function(){e(this).elfinderdialog("destroy"),S&&"pending"===S.state()&&S.reject(),e.grep(A,function(e){e&&"pending"===e.state()&&e.reject()})}},O=[],j=function(e,t,i){D.find("."+n+"-"+t).parent().html(e).addClass(i||"")},M=v.namespace+"-info-"+e.map(r,function(e){return e.hash}).join("-"),D=v.getUI().find("#"+M),F=[],E="",U="elfinder-font-mono elfinder-info-hash";if(!x)return e.Deferred().reject();if(D.length)return D.elfinderdialog("toTop"),e.Deferred().resolve();if(m=v.storage("infohides")||v.arrayFlip(b.hideItems,!0),1===x){if(c=r[0],c.icon&&(E=" "+v.getIconStyle(c)),C=C.replace("{dirclass}",c.csscls?v.escape(c.csscls):"").replace("{class}",v.mime2class(c.mime)).replace("{style}",E),d=y.itemTitle.replace("{name}",v.escape(c.i18||c.name)).replace("{kind}",'<span title="'+v.escape(c.mime)+'">'+v.mime2kind(c)+"</span>"),l=v.tmb(c),c.read?"directory"!=c.mime||c.alias?s=v.formatSize(c.size):(s=y.spinner.replace("{text}",a.calc).replace("{name}","size"),O.push(c.hash)):s=a.unknown,!m.size&&k.push(w.replace(z,a.size).replace(T,s)),!m.aleasfor&&c.alias&&k.push(w.replace(z,a.aliasfor).replace(T,c.alias)),m.path||((h=v.path(c.hash,!0))?k.push(w.replace(z,a.path).replace(T,o(v.escape(h))).replace("{class}","elfinder-info-path")):(k.push(w.replace(z,a.path).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}","path")).replace("{class}","elfinder-info-path")),A.push(v.path(c.hash,!0,{notify:null}).fail(function(){j(a.unknown,"path")}).done(function(e){j(o(e),"path")})))),!m.link&&c.read){var P,R=v.escape(c.name);if("1"==c.url)k.push(w.replace(z,a.link).replace(T,'<button class="'+i+" "+n+'-url">'+a.getlink+"</button>"));else{if(c.url)P=c.url;else if("directory"===c.mime)if(b.nullUrlDirLinkSelf&&null===c.url){var q=window.location;P=q.pathname+q.search+"#elf_"+c.hash}else""!==c.url&&v.option("url",!v.isRoot(c)&&c.phash||c.hash)&&(P=v.url(c.hash));else P=v.url(c.hash);P&&k.push(w.replace(z,a.link).replace(T,'<a href="'+P+'" target="_blank">'+R+"</a>"))}}m.dim||(c.dim?k.push(w.replace(z,a.dim).replace(T,c.dim)):c.mime.indexOf("image")!==-1&&(c.width&&c.height?k.push(w.replace(z,a.dim).replace(T,c.width+"x"+c.height)):(k.push(w.replace(z,a.dim).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}","dim"))),A.push(v.request({data:{cmd:"dim",target:c.hash},preventDefault:!0}).fail(function(){j(a.unknown,"dim")}).done(function(e){if(j(e.dim||a.unknown,"dim"),e.dim){var t=e.dim.split("x"),n=v.file(c.hash);n.width=t[0],n.height=t[1]}}))))),!m.modify&&k.push(w.replace(z,a.modify).replace(T,v.formatDate(c))),!m.perms&&k.push(w.replace(z,a.perms).replace(T,v.formatPermissions(c))),!m.locked&&k.push(w.replace(z,a.locked).replace(T,c.locked?a.yes:a.no)),!m.owner&&c.owner&&k.push(w.replace(z,a.owner).replace(T,c.owner)),!m.group&&c.group&&k.push(w.replace(z,a.group).replace(T,c.group)),!m.perm&&c.perm&&k.push(w.replace(z,a.perm).replace(T,v.formatFileMode(c.perm))),window.ArrayBuffer&&(v.options.cdns.sparkmd5||v.options.cdns.jssha)&&"directory"!==c.mime&&c.size>0&&(!b.showHashMaxsize||c.size<=b.showHashMaxsize)&&(f=[],e.each(v.storage("hashchekcer")||b.showHashAlgorisms,function(e,t){c[t]?k.push(w.replace(z,v.i18n(t)).replace(T,c[t]).replace("{class}",U)):(k.push(w.replace(z,v.i18n(t)).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}",t))),f.push(t))}),A.push(v.getContentsHashes(c.hash,f).progress(function(t){e.each(f,function(e,n){t[n]&&j(t[n],n,U)})}).always(function(){e.each(f,function(e,t){j(a.unknown,t)})}))),b.custom&&e.each(b.custom,function(t,n){m[n.label]||n.mimes&&!e.grep(n.mimes,function(e){return c.mime===e||0===c.mime.indexOf(e+"/")}).length||n.hashRegex&&!c.hash.match(n.hashRegex)||(k.push(w.replace(z,v.i18n(n.label)).replace(T,n.tpl.replace("{id}",M))),n.action&&"function"==typeof n.action&&F.push(n.action))})}else C=C.replace("{class}","elfinder-cwd-icon-group"),d=y.groupTitle.replace("{items}",a.items).replace("{num}",x),p=e.grep(r,function(e){return"directory"==e.mime}).length,p?(u=e.grep(r,function(e){return!("directory"!==e.mime||e.phash&&!e.isroot)}).length,p-=u,k.push(w.replace(z,a.kind).replace(T,u===x||p===x?a[u?"roots":"folders"]:e.map({roots:u,folders:p,files:x-u-p},function(e,t){return e?a[t]+" "+e:null}).join(", "))),!m.size&&k.push(w.replace(z,a.size).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}","size"))),O=e.map(r,function(e){return e.hash})):(s=0,e.each(r,function(e,t){var n=parseInt(t.size);n>=0&&s>=0?s+=n:s="unknown"}),k.push(w.replace(z,a.kind).replace(T,a.files)),!m.size&&k.push(w.replace(z,a.size).replace(T,v.formatSize(s))));return C=C.replace("{title}",d).replace("{content}",k.join("").replace(/{class}/g,"")),D=g.fmDialog(C,I),D.attr("id",M).one("mousedown",".elfinder-info-path",function(){e(this).html(o(e(this).html(),!0))}),v.UA.Mobile&&e.fn.tooltip&&D.children(".ui-dialog-content .elfinder-info-title").tooltip({classes:{"ui-tooltip":"elfinder-ui-tooltip ui-widget-shadow"},tooltipClass:"elfinder-ui-tooltip ui-widget-shadow",track:!0}),c&&"1"==c.url&&D.on("click","."+n+"-url",function(){e(this).parent().html(y.spinner.replace("{text}",v.i18n("ntfurl")).replace("{name}","url")),
+v.request({data:{cmd:"url",target:c.hash},preventDefault:!0}).fail(function(){j(R,"url")}).done(function(e){if(e.url){j('<a href="'+e.url+'" target="_blank">'+R+"</a>"||R,"url");var t=v.file(c.hash);t.url=e.url}else j(R,"url")})}),l&&e("<img/>").on("load",function(){D.find(".elfinder-cwd-icon").addClass(l.className).css("background-image","url('"+l.url+"')")}).attr("src",l.url),O.length&&(S=v.getSize(O).done(function(e){j(e.formated,"size")}).fail(function(){j(a.unknown,"size")})),F.length&&e.each(F,function(e,t){try{t(c,v,D)}catch(n){v.debug("error",n)}}),e.Deferred().resolve()}}).prototype={forceLoad:!0},i.prototype.commands.mkdir=function(){var t,n=this.fm,i=this;this.value="",this.disableOnSearch=!0,this.updateOnSelect=!1,this.syncTitleOnChange=!0,this.mime="directory",this.prefix="untitled folder",this.exec=function(a,o){var r;return a&&a.length&&o&&o._currentType&&"navbar"===o._currentType?(this.origin=o._currentType,this.data={target:a[0]}):(r=n.cwd().hash===a[0],this.origin=t&&!r?t:"cwd",delete this.data),a||this.options.intoNewFolderToolbtn||n.getUI("cwd").trigger("unselectall"),this.move=this.value===n.i18n("cmdmkdirin"),e.proxy(n.res("mixin","make"),i)()},this.shortcuts=[{pattern:"ctrl+shift+n"}],this.init=function(){this.options.intoNewFolderToolbtn&&(this.syncTitleOnChange=!0)},n.bind("select contextmenucreate closecontextmenu",function(e){var a=(e.data?e.data.selected||e.data.targets:null)||n.selected();i.className="mkdir",t=e.data&&a.length?e.data.origin||e.data.type||"":"",i.options.intoNewFolderToolbtn||""!==t||(t="cwd"),a.length&&"navbar"!==t&&"cwd"!==t&&n.cwd().hash!==a[0]?(i.title=n.i18n("cmdmkdirin"),i.className+=" elfinder-button-icon-mkdirin"):i.title=n.i18n("cmdmkdir"),"closecontextmenu"!==e.type?i.update(void 0,i.title):requestAnimationFrame(function(){i.update(void 0,i.title)})}),this.getstate=function(i){var a=n.cwd(),o="navbar"===t||i&&i[0]!==a.hash?this.files(i||n.selected()):[],r=o.length;return"navbar"===t?r&&o[0].write&&o[0].read?0:-1:!a.write||r&&e.grep(o,function(e){return!(!e.read||e.locked)}).length!=r?-1:0}},i.prototype.commands.mkfile=function(){var t=this;this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="text/plain",this.prefix="untitled file.txt",this.variants=[],this.getTypeName=function(e,n){var i,a=t.fm;return i=(i=a.messages["kind"+a.kinds[e]])?a.i18n(["extentiontype",n.toUpperCase(),i]):a.i18n(["extentionfile",n.toUpperCase()])},this.fm.bind("open reload canMakeEmptyFile",function(){var n=t.fm,i=n.storage("mkfileHides")||{};t.variants=[],n.mimesCanMakeEmpty&&e.each(n.mimesCanMakeEmpty,function(e,a){a&&!i[e]&&n.uploadMimeCheck(e)&&t.variants.push([e,t.getTypeName(e,a)])}),t.change()}),this.getstate=function(){return this.fm.cwd().write?0:-1},this.exec=function(n,i){var a,o,r=t.fm;if(a=r.mimesCanMakeEmpty[i]){if(r.uploadMimeCheck(i))return this.mime=i,this.prefix=r.i18n(["untitled file",a]),e.proxy(r.res("mixin","make"),t)();o=["errMkfile",t.getTypeName(i,a)]}return e.Deferred().reject(o)}},i.prototype.commands.netmount=function(){var t,n=this,i=!1;this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){var t=n.fm;n.drivers=t.netDrivers,n.drivers.length&&requestAnimationFrame(function(){e.each(n.drivers,function(){var e=n.options[this];e&&(i=!0,e.integrateInfo&&t.trigger("helpIntegration",Object.assign({cmd:"netmount"},e.integrateInfo)))})})}},this.getstate=function(){return i?0:-1},this.exec=function(){var i,a=n.fm,o=e.Deferred(),r=n.options,s=function(){var s,l=function(){c.protocol.trigger("change","winfocus")},c={protocol:e("<select/>").on("change",function(e,n){var o=this.value;t.find(".elfinder-netmount-tr").hide(),t.find(".elfinder-netmount-tr-"+o).show(),i&&i.children(".ui-dialog-buttonpane:first").find("button").show(),"function"==typeof r[o].select&&r[o].select(a,e,n),requestAnimationFrame(function(){t.find("input:text.elfinder-tabstop:visible:first").trigger("focus")})}).addClass("ui-corner-all")},d={title:a.i18n("netMountDialogTitle"),resizable:!1,modal:!0,destroyOnClose:!1,open:function(){e(window).on("focus."+a.namespace,l),c.protocol.trigger("change")},close:function(){"pending"==o.state()&&o.reject(),e(window).off("focus."+a.namespace,l)},buttons:{}},p=function(){var i=c.protocol.val(),s={cmd:"netmount",protocol:i},l=r[i];return e.each(t.find("input.elfinder-netmount-inputs-"+i),function(t,n){var i,a;a=e(n),a.is(":radio,:checkbox")?a.is(":checked")&&(i=e.trim(a.val())):i=e.trim(a.val()),i&&(s[n.name]=i)}),s.host?(a.request({data:s,notify:{type:"netmount",cnt:1,hideCnt:!0}}).done(function(e){var t;e.added&&e.added.length&&(e.added[0].phash&&(t=a.file(e.added[0].phash))&&(t.dirs||(t.dirs=1,a.change({changed:[t]}))),a.one("netmountdone",function(){a.exec("open",e.added[0].hash)})),o.resolve()}).fail(function(e){l.fail&&"function"==typeof l.fail&&l.fail(a,a.parseError(e)),o.reject(e)}),void n.dialog.elfinderdialog("close")):a.trigger("error",{error:"errNetMountHostReq",opts:{modal:!0}})},u=e('<form autocomplete="off"/>').on("keydown","input",function(t){var n,i=!0;t.keyCode===e.ui.keyCode.ENTER&&(e.each(u.find("input:visible:not(.elfinder-input-optional)"),function(){if(""===e(this).val())return i=!1,n=e(this),!1}),i?p():n.trigger("focus"))}),h=e("<div/>");return t=e('<table class="elfinder-info-tb elfinder-netmount-tb"/>').append(e("<tr/>").append(e("<td>"+a.i18n("protocol")+"</td>")).append(e("<td/>").append(c.protocol))),e.each(n.drivers,function(n,i){r[i]&&(c.protocol.append('<option value="'+i+'">'+a.i18n(r[i].name||i)+"</option>"),e.each(r[i].inputs,function(n,o){o.attr("name",n),"hidden"!=o.attr("type")?(o.addClass("ui-corner-all elfinder-netmount-inputs-"+i),t.append(e("<tr/>").addClass("elfinder-netmount-tr elfinder-netmount-tr-"+i).append(e("<td>"+a.i18n(n)+"</td>")).append(e("<td/>").append(o)))):(o.addClass("elfinder-netmount-inputs-"+i),h.append(o))}),r[i].protocol=c.protocol)}),t.append(h),t.find(".elfinder-netmount-tr").hide(),d.buttons[a.i18n("btnMount")]=p,d.buttons[a.i18n("btnCancel")]=function(){n.dialog.elfinderdialog("close")},t.find("select,input").addClass("elfinder-tabstop"),s=n.fmDialog(u.append(t),d),i=s.closest(".ui-dialog"),s.ready(function(){c.protocol.trigger("change"),s.elfinderdialog("posInit")}),s};return n.dialog?n.dialog.elfinderdialog("open"):n.dialog=s(),o.promise()},n.fm.bind("netmount",function(e){var i=e.data||null,a=n.options;i&&i.protocol&&a[i.protocol]&&"function"==typeof a[i.protocol].done&&(a[i.protocol].done(n.fm,i),t.find("select,input").addClass("elfinder-tabstop"),n.dialog.elfinderdialog("tabstopsInit"))})},i.prototype.commands.netunmount=function(){this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){this.drivers=this.fm.netDrivers}},this.getstate=function(e){var t,n=this.fm;return e&&this.drivers.length&&!this._disabled&&(t=n.file(e[0]))&&t.netkey?0:-1},this.exec=function(t){var n=this,i=this.fm,a=e.Deferred().fail(function(e){e&&i.error(e)}),o=i.file(t[0]),r=function(t){var n,a=[];return i.leafRoots&&(n=[],e.each(i.leafRoots,function(a,o){var r,s=i.parents(a);(r=e.inArray(t,s))!==-1&&(r=s.length-r,e.each(o,function(e,t){n.push({i:r,hash:t})}))}),n.length&&(n.sort(function(e,t){return e.i<t.i}),e.each(n,function(e,t){a.push(t.hash)}))),a};return this._disabled?a.reject():("pending"==a.state()&&i.confirm({title:n.title,text:i.i18n("confirmUnmount",o.name),accept:{label:"btnUnmount",callback:function(){var t=o.hash,s=r(t),l=[],c=[],d=function(){e.when(l).done(function(){i.request({data:{cmd:"netmount",protocol:"netunmount",host:o.netkey,user:t,pass:"dum"},notify:{type:"netunmount",cnt:1,hideCnt:!0},preventFail:!0}).fail(function(e){a.reject(e)}).done(function(e){o.volumeid&&delete i.volumeExpires[o.volumeid],a.resolve()})}).fail(function(e){c.length&&i.remove({removed:c}),a.reject(e)})};s.length?i.confirm({title:n.title,text:function(){var t=["unmountChildren"];return e.each(s,function(e,n){t.push([i.file(n).name])}),t}(),accept:{label:"btnUnmount",callback:function(){e.each(s,function(e,t){var n=i.file(t);n.netkey&&l.push(i.request({data:{cmd:"netmount",protocol:"netunmount",host:n.netkey,user:n.hash,pass:"dum"},notify:{type:"netunmount",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){e.removed&&(n.volumeid&&delete i.volumeExpires[n.volumeid],c=c.concat(e.removed))}))}),d()}},cancel:{label:"btnCancel",callback:function(){a.reject()}}}):(l=null,d())}},cancel:{label:"btnCancel",callback:function(){a.reject()}}}),a)}},(i.prototype.commands.open=function(){var t=this.fm;this.alwaysEnabled=!0,this.noChangeDirOnRemovedCwd=!0,this._handlers={dblclick:function(e){e.preventDefault(),t.exec("open",e.data&&e.data.file?[e.data.file]:void 0)},"select enable disable reload":function(e){this.update("disable"==e.type?-1:void 0)}},this.shortcuts=[{pattern:"ctrl+down numpad_enter"+("mac"!=t.OS&&" enter")}],this.getstate=function(n){var i=this.files(n),a=i.length;return 1==a?i[0].read?0:-1:a&&!t.UA.Mobile&&e.grep(i,function(e){return!("directory"==e.mime||!e.read)}).length==a?0:-1},this.exec=function(n,i){var a,o,r,s,l,c,d,p,u,h,f,m,g,v,b=e.Deferred().fail(function(e){e&&t.error(e)}),y=this.files(n),w=y.length,x="object"==typeof i&&i.thash,k=this.options,C=k.into||"window";if(!w&&!x)return b.reject();if(x||1==w&&(a=y[0])&&"directory"==a.mime)return x||!a||a.read?t.keyState.ctrlKey&&(t.keyState.shiftKey||"function"!=typeof t.options.getFileCallback)&&t.getCommand("opennew")?t.exec("opennew",[x?x:a.hash]):t.request({data:{cmd:"open",target:x||a.hash},notify:{type:"open",cnt:1,hideCnt:!0},syncOnFail:!0,lazy:!1}):b.reject(["errOpen",a.name,"errPerm"]);if(y=e.grep(y,function(e){return"directory"!=e.mime}),w!=y.length)return b.reject();var z=function(){var i,g,v;try{u=new RegExp(t.option("dispInlineRegex"),"i")}catch(x){u=!1}for(h=e("<a>").hide().appendTo(e("body")),f="string"==typeof h.get(0).download,w=y.length;w--;){if(g="elf_open_window",a=y[w],!a.read)return b.reject(["errOpen",a.name,"errPerm"]);if(m=u&&a.mime.match(u),o=t.openUrl(a.hash,!m),t.UA.Mobile||!m){if(f)m?h.attr("target","_blank"):h.attr("download",a.name),h.attr("href",o).get(0).click();else if(i=window.open(o),!i)return b.reject("errPopup")}else{if(v="string"==typeof k.method&&"get"===k.method.toLowerCase(),!v&&0===o.indexOf(t.options.url)&&t.customData&&Object.keys(t.customData).length&&!a.mime.match(/^(?:video|audio)/)&&(o=""),"window"===C?(l=d=Math.round(2*screen.availWidth/3),c=p=Math.round(2*screen.availHeight/3),parseInt(a.width)&&parseInt(a.height)?(l=parseInt(a.width),c=parseInt(a.height)):a.dim&&(r=a.dim.split("x"),l=parseInt(r[0]),c=parseInt(r[1])),d>=l&&p>=c?(d=l,p=c):l-d>c-p?p=Math.round(c*(d/l)):d=Math.round(l*(p/c)),s="width="+d+",height="+p,i=window.open(o,g,s+",top=50,left=50,scrollbars=yes,resizable=yes,titlebar=no")):("tabs"===C&&(g=a.hash),i=window.open("about:blank",g)),!i)return b.reject("errPopup");if(""===o){var z=document.createElement("form");z.action=t.options.url,z.method="POST",z.target=g,z.style.display="none";var T=Object.assign({},t.customData,{cmd:"file",target:a.hash,_t:a.ts||parseInt(+new Date/1e3)});e.each(T,function(e,t){var n=document.createElement("input");n.name=e,n.value=t,z.appendChild(n)}),document.body.appendChild(z),z.submit()}else"window"!==C&&(i.location=o);e(i).trigger("focus")}}return h.remove(),b.resolve(n)};if(w>1)t.confirm({title:"openMulti",text:["openMultiConfirm",w+""],accept:{label:"cmdopen",callback:function(){z()}},cancel:{label:"btnCancel",callback:function(){b.reject()}},buttons:t.getCommand("zipdl")&&t.isCommandEnabled("zipdl",t.cwd().hash)?[{label:"cmddownload",callback:function(){t.exec("download",n),b.reject()}}]:[]});else{if(g=t.storage("selectAction")||k.selectAction,g&&(e.each(g.split("/"),function(){var e=this.valueOf();return("open"===e||!(v=t.getCommand(e))||!v.enabled())&&void(v=null)}),v))return t.exec(v.name);z()}return b}}).prototype={forceLoad:!0},i.prototype.commands.opendir=function(){this.alwaysEnabled=!0,this.getstate=function(){var e,t=this.fm.selected(),n=t.length;return 1!==n?-1:(e=this.fm.getUI("workzone"),e.hasClass("elfinder-search-result")?0:-1)},this.exec=function(t){var n,i=this.fm,a=e.Deferred(),o=this.files(t),r=o.length;return r&&o[0].phash?(n=o[0].phash,i.trigger("searchend",{noupdate:!0}),i.request({data:{cmd:"open",target:n},notify:{type:"open",cnt:1,hideCnt:!0},syncOnFail:!1}),a):a.reject()}},i.prototype.commands.opennew=function(){var t=this.fm;this.shortcuts=[{pattern:("function"==typeof t.options.getFileCallback?"shift+":"")+"ctrl+enter"}],this.getstate=function(e){var t=this.files(e),n=t.length;return 1===n&&"directory"===t[0].mime&&t[0].read?0:-1},this.exec=function(t){var n,i,a,o,r=e.Deferred(),s=this.files(t),l=s.length,c=this.options;return 1===l&&(n=s[0])&&"directory"===n.mime?(i=window.location,a=c.url?c.url:i.pathname,c.useOriginQuery&&(a.match(/\?/)?i.search&&(a+="&"+i.search.substr(1)):a+=i.search),a+="#elf_"+n.hash,o=window.open(a,"_blank"),setTimeout(function(){o.focus()},1e3),r.resolve()):r.reject()}},i.prototype.commands.paste=function(){this.updateOnSelect=!1,this.handlers={changeclipboard:function(){this.update()}},this.shortcuts=[{pattern:"ctrl+v shift+insert"}],this.getstate=function(e){if(this._disabled)return-1;if(e){if(Array.isArray(e)){if(1!=e.length)return-1;e=this.fm.file(e[0])}}else e=this.fm.cwd();return this.fm.clipboard().length&&"directory"==e.mime&&e.write?0:-1},this.exec=function(t,n){var i,a,o=this,r=o.fm,s=n||{},l=t?this.files(t)[0]:r.cwd(),c=r.clipboard(),d=c.length,p=!!d&&c[0].cut,u=s._cmd?s._cmd:p?"move":"copy",h="err"+u.charAt(0).toUpperCase()+u.substr(1),f=[],m=[],g=e.Deferred().fail(function(e){e&&r.error(e)}).always(function(){r.unlockfiles({files:e.map(c,function(e){return e.hash})})}),v=function(t){return t.length&&r._commands.duplicate?r.exec("duplicate",t):e.Deferred().resolve()},b=function(t){var n,i=e.Deferred(),a=[],c={},d=function(t,n){for(var i=[],a=t.length;a--;)e.inArray(t[a].name,n)!==-1&&i.unshift(a);return i},h=function(e){var n=a[e],o=t[n],s=e==a.length-1;o&&r.confirm({title:r.i18n(u+"Files"),text:["errExists",o.name,"restore"===u?"confirmRest":"confirmRepl"],all:!s,accept:{label:"btnYes",callback:function(n){s||n?m(t):h(++e)}},reject:{label:"btnNo",callback:function(n){var i;if(n)for(i=a.length;e<i--;)t[a[i]].remove=!0;else t[a[e]].remove=!0;s||n?m(t):h(++e)}},cancel:{label:"btnCancel",callback:function(){i.resolve()}},buttons:[{label:"btnBackup",callback:function(n){var i;if(n)for(i=a.length;e<i--;)t[a[i]].rename=!0;else t[a[e]].rename=!0;s||n?m(t):h(++e)}}]})},f=function(n){var i,o={};n&&(Array.isArray(n)?n.length&&("string"==typeof n[0]?a=d(t,n):(e.each(n,function(e,t){o[t.name]=t.hash}),a=d(t,e.map(o,function(e,t){return t})),e.each(t,function(e,t){o[t.name]&&(c[o[t.name]]=t.name)}))):(i=[],a=e.map(n,function(e){return"string"==typeof e?e:(i=i.concat(e),!1)}),i.length&&(a=a.concat(i)),a=d(t,a),c=n)),a.length?h(0):m(t)},m=function(t){var n,a,o=[],d=e.grep(t,function(e){return e.rename&&o.push(e.name),!e.remove}),h=d.length;return h?(n=e.map(d,function(e){return e.hash}),a={cmd:"paste",dst:l.hash,targets:n,cut:p?1:0,renames:o,hashes:c,suffix:r.options.backupSuffix},r.api<2.1&&(a.src=d[0].phash),void r.request({data:a,notify:{type:u,cnt:h},navigate:{toast:s.noToast?{}:{inbuffer:{msg:r.i18n(["complete",r.i18n("cmd"+u)]),action:{cmd:"open",msg:"cmdopendir",data:[l.hash],done:"select",cwdNot:l.hash}}}}}).done(function(t){var n={},o=t.added&&t.added.length?t.added:null;p&&o&&(e.each(d,function(t,i){var a=i.phash,r=function(t){var n;return e.each(o,function(e,i){if(i.name===t)return n=i.hash,!1}),n},s=r(i.name);s&&(n[a]?n[a].push(s):n[a]=[s])}),Object.keys(n).length&&(t.undo={cmd:"move",callback:function(){var t=[];return e.each(n,function(e,n){t.push(r.request({data:{cmd:"paste",dst:e,targets:n,cut:1},notify:{type:"undo",cnt:n.length}}))}),e.when.apply(null,t)}},t.redo={cmd:"move",callback:function(){return r.request({data:a,notify:{type:"redo",cnt:h}})}})),i.resolve(t)}).fail(function(){i.reject()}).always(function(){r.unlockfiles({files:d})})):i.resolve()};return r.isCommandEnabled(o.name,l.hash)&&t.length?(r.oldAPI?m(t):r.option("copyOverwrite",l.hash)?(n=e.map(t,function(e){return e.name}),l.hash==r.cwd().hash?f(e.map(r.files(),function(e){return e.phash==l.hash?{hash:e.hash,name:e.name}:null})):r.request({data:{cmd:"ls",target:l.hash,intersect:n},notify:{type:"prepare",cnt:1,hideCnt:!0},preventFail:!0}).always(function(e){f(e.list)})):m(t),i):i.resolve()};return d&&l&&"directory"==l.mime?l.write?(i=r.parents(l.hash),e.each(c,function(t,n){return n.read?p&&n.locked?!g.reject(["errLocked",n.name]):e.inArray(n.hash,i)!==-1?!g.reject(["errCopyInItself",n.name]):n.mime&&"directory"!==n.mime&&!r.uploadMimeCheck(n.mime,l.hash)?!g.reject([h,n.name,"errUploadMime"]):(a=r.parents(n.hash),a.pop(),e.inArray(l.hash,a)!==-1&&e.grep(a,function(e){var t=r.file(e);return t.phash==l.hash&&t.name==n.name}).length?!g.reject(["errReplByChild",n.name]):void(n.phash==l.hash?m.push(n.hash):f.push({hash:n.hash,phash:n.phash,name:n.name}))):!g.reject([h,n.name,"errPerm"])}),"rejected"==g.state()?g:(e.when(v(m),b(f)).done(function(e,t){g.resolve(t&&t.undo?t:void 0)}).fail(function(){g.reject()}).always(function(){p&&r.clipboard([])}),g)):g.reject([h,c[0].name,"errPerm"]):g.reject()}},i.prototype.commands.places=function(){var t=this,n=this.fm,i=function(n){return e.grep(t.files(n),function(e){return"directory"==e.mime})},a=null;this.getstate=function(e){var t=this.hashes(e),n=t.length;return a&&n&&n==i(t).length?0:-1},this.exec=function(t){var n=this.files(t);return a.trigger("regist",[n]),e.Deferred().resolve()},n.one("load",function(){a=n.ui.places})},i.prototype.commands.preference=function(){var t,n,i=this,a=this.fm,o="replace",r='<li class="'+a.res("class","tabstab")+' elfinder-preference-tab-{id}"><a href="#'+a.namespace+'-preference-{id}" id="'+a.namespace+'-preference-tab-{id}" class="ui-tabs-anchor {class}">{title}</a></li>',s=e('<div class="ui-tabs ui-widget ui-widget-content ui-corner-all elfinder-preference">'),l=e('<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-top">'),c=e('<div class="elfinder-preference-tabs ui-tabs-panel ui-widget-content ui-corner-bottom"/>'),d=(e("base").length?document.location.href.replace(/#.*$/,""):"",function(t){e("#"+a.namespace+"-preference-tab-"+t).trigger("mouseover").trigger("click"),n=t}),p=a.res("class","tabsactive"),u=function(){var u=i.options.categories||{language:["language"],theme:["theme"],toolbar:["toolbarPref"],workspace:["iconSize","columnPref","selectAction","makefileTypes","useStoredEditor","editorMaximized","showHidden"],dialog:["autoFocusDialog"],selectionInfo:["infoItems","hashChecker"],reset:["clearBrowserData"],all:!0},h=i.options.prefs||["language","theme","toolbarPref","iconSize","columnPref","selectAction","makefileTypes","useStoredEditor","editorMaximized","showHidden","infoItems","hashChecker","autoFocusDialog","clearBrowserData"];h=a.arrayFlip(h,!0),a.options.getFileCallback&&delete h.selectAction,h.language&&(h.language=function(){var t=e("<select/>").on("change",function(){var t=e(this).val();a.storage("lang",t),e("#"+a.id).elfinder("reload")}),n=[],o=i.options.langs||{ar:"اللغة العربية",bg:"Български",ca:"Català",cs:"Čeština",da:"Dansk",de:"Deutsch",el:"Ελληνικά",en:"English",es:"Español",fa:"فارسی",fo:"Føroyskt",fr:"Français",he:"עברית",hr:"Hrvatski",hu:"Magyar",id:"Bahasa Indonesia",it:"Italiano",ja:"日本語",ko:"한국어",nl:"Nederlands",no:"Norsk",pl:"Polski",pt_BR:"Português",ro:"Română",ru:"Pусский",si:"සිංහල",sk:"Slovenčina",sl:"Slovenščina",sr:"Srpski",sv:"Svenska",tr:"Türkçe",ug_CN:"ئۇيغۇرچە",uk:"Український",vi:"Tiếng Việt",zh_CN:"简体中文",zh_TW:"正體中文"};return e.each(o,function(e,t){n.push('<option value="'+e+'">'+t+"</option>")}),t.append(n.join("")).val(a.lang)}()),h.theme&&(h.theme=function(){var t=a.options.themes?Object.keys(a.options.themes).length:0;if(0===t||1===t&&a.options.themes["default"])return null;var n=e("<select/>").on("change",function(){var t=e(this).val();a.changeTheme(t).storage("theme",t)}),i={image:'<img class="elfinder-preference-theme elfinder-preference-theme-image" src="$2" />',link:'<a href="$1" target="_blank" title="$3">$2</a>',data:'<dt>$1</dt><dd><span class="elfinder-preference-theme elfinder-preference-theme-$0">$2</span></dd>'},o=["image","description","author","email","license"],r=e('<button class="ui-button ui-corner-all ui-widget elfinder-preference-theme-default"/>').text(a.i18n("default")).on("click",function(e){n.val("default").trigger("change")}),s=e('<div class="elfinder-reference-hide-taball"/>').on("click","button",function(){var t=e(this).data("themeid");n.val(t).trigger("change")});return a.options.themes["default"]||n.append('<option value="default">'+a.i18n("default")+"</option>"),e.each(a.options.themes,function(t,r){var l,c=e('<option class="elfinder-theme-option-'+t+'" value="'+t+'">'+a.i18n(t)+"</option>"),d=e('<fieldset class="ui-widget ui-widget-content ui-corner-all elfinder-theme-list-'+t+'"><legend>'+a.i18n(t)+'</legend><div><span class="elfinder-spinner"/></div></fieldset>');n.append(c),s.append(d),l=setTimeout(function(){d.find("span.elfinder-spinner").replaceWith(a.i18n(["errRead",t]))},1e4),a.getTheme(t).always(function(){l&&clearTimeout(l)}).done(function(r){var s,l=e(),p=e("<dl/>");s=r.link?i.link.replace(/\$1/g,r.link).replace(/\$3/g,a.i18n("website")):"$2",r.name&&c.html(a.i18n(r.name)),d.children("legend").html(s.replace(/\$2/g,a.i18n(r.name)||t)),e.each(o,function(o,s){var l,c=i[s]||i.data;r[s]&&(l=c.replace(/\$0/g,a.escape(s)).replace(/\$1/g,a.i18n(s)).replace(/\$2/g,a.i18n(r[s])),"image"===s&&r.link&&(l=e(l).on("click",function(){n.val(t).trigger("change")}).attr("title",a.i18n("select"))),p.append(l))}),l=l.add(p),l=l.add(e('<div class="elfinder-preference-theme-btn"/>').append(e('<button class="ui-button ui-corner-all ui-widget"/>').data("themeid",t).html(a.i18n("select")))),d.find("span.elfinder-spinner").replaceWith(l)}).fail(function(){d.find("span.elfinder-spinner").replaceWith(a.i18n(["errRead",t]))})}),e("<div/>").append(n.val(a.theme&&a.theme.id?a.theme.id:"default"),r,s)}()),h.toolbarPref&&(h.toolbarPref=function(){var t=e.map(a.options.uiOptions.toolbar,function(t){return e.isArray(t)?t:null}),n=[],i=a.storage("toolbarhides")||{};return e.each(t,function(){var e=this,t=a.i18n("cmd"+e);t==="cmd"+e&&(t=a.i18n(e)),n.push('<span class="elfinder-preference-toolbar-item"><label><input type="checkbox" value="'+e+'" '+(i[e]?"":"checked")+"/>"+t+"</label></span>")}),e(n.join(" ")).on("change","input",function(){var t=e(this).val(),n=e(this).is(":checked");n||i[t]?n&&i[t]&&delete i[t]:i[t]=!0,a.storage("toolbarhides",i),a.trigger("toolbarpref")})}()),h.iconSize&&(h.iconSize=function(){var t=a.options.uiOptions.cwd.iconsView.sizeMax||3,n=a.storage("iconsize")||0,i=e('<div class="touch-punch"/>').slider({classes:{"ui-slider-handle":"elfinder-tabstop"},value:n,max:t,slide:function(e,t){a.getUI("cwd").trigger("iconpref",{size:t.value})},change:function(e,t){a.storage("iconsize",t.value)}});return a.getUI("cwd").on("iconpref",function(e,t){i.slider("option","value",t.size)}),i}()),h.columnPref&&(h.columnPref=function(){var t=a.options.uiOptions.cwd.listView.columns,n=[],i=a.storage("columnhides")||{};return e.each(t,function(){var e=this,t=a.getColumnName(e);n.push('<span class="elfinder-preference-column-item"><label><input type="checkbox" value="'+e+'" '+(i[e]?"":"checked")+"/>"+t+"</label></span>")}),e(n.join(" ")).on("change","input",function(){var t=e(this).val(),n=e(this).is(":checked");n||i[t]?n&&i[t]&&delete i[t]:i[t]=!0,a.storage("columnhides",i),a.trigger("columnpref",{repaint:!0})})}()),h.selectAction&&(h.selectAction=function(){var t=e("<select/>").on("change",function(){var t=e(this).val();a.storage("selectAction","default"===t?null:t)}),n=[],o=i.options.selectActions,r=a.getCommand("open").options.selectAction||"open";return e.inArray(r,o)===-1&&o.unshift(r),e.each(o,function(t,i){var o=e.map(i.split("/"),function(e){var t=a.i18n("cmd"+e);return t==="cmd"+e&&(t=a.i18n(e)),t});n.push('<option value="'+i+'">'+o.join("/")+"</option>")}),t.append(n.join("")).val(a.storage("selectAction")||r)}()),h.makefileTypes&&(h.makefileTypes=function(){var t=a.storage("mkfileHides")||{},n=function(){var n=[];return t=a.storage("mkfileHides")||{},e.each(a.mimesCanMakeEmpty,function(e,i){var o=a.getCommand("mkfile").getTypeName(e,i);n.push('<span class="elfinder-preference-column-item" title="'+a.escape(o)+'"><label><input type="checkbox" value="'+e+'" '+(t[e]?"":"checked")+"/>"+i+"</label></span>")}),n.join(" ")},i=e("<div/>").on("change","input",function(){var n=e(this).val(),i=e(this).is(":checked");i||t[n]?i&&t[n]&&delete t[n]:t[n]=!0,a.storage("mkfileHides",t),a.trigger("canMakeEmptyFile")}).append(n()),o=e("<div/>").append(e('<input type="text" placeholder="'+a.i18n("typeOfTextfile")+'"/>').on("keydown",function(t){t.keyCode===e.ui.keyCode.ENTER&&e(this).next().trigger("click")}),e('<button class="ui-button"/>').html(a.i18n("add")).on("click",function(){var t,n=e(this).prev(),i=n.val(),o=a.getUI("toast"),r=function(){return o.appendTo(n.closest(".ui-dialog")),a.toast({msg:a.i18n("errUsupportType"),mode:"warning",onHidden:function(){1===o.children().length&&o.appendTo(a.getUI())}}),n.trigger("focus"),!1};if(!i.match(/\//)){if(i=a.arrayFlip(a.mimeTypes)[i],!i)return r();n.val(i)}return a.mimeIsText(i)&&a.mimeTypes[i]?(a.trigger("canMakeEmptyFile",{mimes:[i],unshift:!0}),t={},t[i]=a.mimeTypes[i],a.storage("mkfileTextMimes",Object.assign(t,a.storage("mkfileTextMimes")||{})),n.val(""),o.appendTo(n.closest(".ui-dialog")),void a.toast({msg:a.i18n(["complete",i+" ("+t[i]+")"]),onHidden:function(){1===o.children().length&&o.appendTo(a.getUI())}})):r()}),e('<button class="ui-button"/>').html(a.i18n("reset")).on("click",function(){a.one("canMakeEmptyFile",{done:function(){i.empty().append(n())}}),a.trigger("canMakeEmptyFile",{resetTexts:!0})}));return a.bind("canMakeEmptyFile",{done:function(e){e.data&&e.data.mimes&&e.data.mimes.length&&i.empty().append(n())}}),e("<div/>").append(i,o)}()),h.useStoredEditor&&(h.useStoredEditor=e('<input type="checkbox"/>').prop("checked",function(){var e=a.storage("useStoredEditor");return e?e>0:a.options.commandsOptions.edit.useStoredEditor}()).on("change",function(t){a.storage("useStoredEditor",e(this).is(":checked")?1:-1)})),h.editorMaximized&&(h.editorMaximized=e('<input type="checkbox"/>').prop("checked",function(){var e=a.storage("editorMaximized");return e?e>0:a.options.commandsOptions.edit.editorMaximized}()).on("change",function(t){a.storage("editorMaximized",e(this).is(":checked")?1:-1)})),h.showHidden&&!function(){var t,n=function(){var n,i=a.storage("hide"),o=[];i&&i.items&&e.each(i.items,function(e,t){o.push(a.escape(t))}),r.prop("disabled",!o.length)[o.length?"removeClass":"addClass"]("ui-state-disabled"),n=o.length?o.join("\n"):"",h.showHidden.attr("title",n),t&&h.showHidden.tooltip("option","content",n.replace(/\n/g,"<br>")).tooltip("close")},i=e('<input type="checkbox"/>').prop("checked",function(){var e=a.storage("hide");return e&&e.show}()).on("change",function(t){var n={};n[e(this).is(":checked")?"show":"hide"]=!0,a.exec("hide",void 0,n)}),o=e('<button class="ui-button ui-corner-all ui-widget"/>').append(a.i18n("reset")).on("click",function(){a.exec("hide",void 0,{reset:!0}),e(this).parent().find("input:first").prop("checked",!1),n()}),r=e().add(i).add(o);h.showHidden=e("<div/>").append(i,o),a.bind("hide",function(e){var t=e.data;t.opts&&(t.opts.show||t.opts.hide)||n()}),a.UA.Mobile&&e.fn.tooltip&&(t=!0,h.showHidden.tooltip({classes:{"ui-tooltip":"elfinder-ui-tooltip ui-widget-shadow"},tooltipClass:"elfinder-ui-tooltip ui-widget-shadow",track:!0}).css("user-select","none"),o.css("user-select","none")),n()}(),h.infoItems&&(h.infoItems=function(){var t=a.getCommand("info").items,n=[],i=a.storage("infohides")||a.arrayFlip(a.options.commandsOptions.info.hideItems,!0);return e.each(t,function(){var e=this,t=a.i18n(e);n.push('<span class="elfinder-preference-info-item"><label><input type="checkbox" value="'+e+'" '+(i[e]?"":"checked")+"/>"+t+"</label></span>")}),e(n.join(" ")).on("change","input",function(){var t=e(this).val(),n=e(this).is(":checked");n||i[t]?n&&i[t]&&delete i[t]:i[t]=!0,a.storage("infohides",i),a.trigger("infopref",{repaint:!0})})}()),h.hashChecker&&a.hashCheckers.length&&(h.hashChecker=function(){var t=[],n=a.arrayFlip(a.storage("hashchekcer")||a.options.commandsOptions.info.showHashAlgorisms,!0);return e.each(a.hashCheckers,function(){var e=this,i=a.i18n(e);t.push('<span class="elfinder-preference-hashchecker-item"><label><input type="checkbox" value="'+e+'" '+(n[e]?"checked":"")+"/>"+i+"</label></span>")}),e(t.join(" ")).on("change","input",function(){var t=e(this).val(),i=e(this).is(":checked");i?n[t]=!0:n[t]&&delete n[t],a.storage("hashchekcer",e.grep(a.hashCheckers,function(e){return n[e]}))})}()),h.autoFocusDialog&&(h.autoFocusDialog=e('<input type="checkbox"/>').prop("checked",function(){var e=a.storage("autoFocusDialog");return e?e>0:a.options.uiOptions.dialog.focusOnMouseOver}()).on("change",function(t){a.storage("autoFocusDialog",e(this).is(":checked")?1:-1)})),h.clearBrowserData&&(h.clearBrowserData=e("<button/>").text(a.i18n("reset")).button().on("click",function(t){t.preventDefault(),a.storage(),e("#"+a.id).elfinder("reload")})),e.each(u,function(t,i){var s,d;i===!0?d=1:i&&(s=e(),e.each(i,function(t,n){var i,o,r,l="";(i=h[n])&&(d=2,o=a.i18n(n),r=e(i).filter('input[type="checkbox"]'),r.length||(r=e(i).find('input[type="checkbox"]')),1===r.length?(r.attr("id")||r.attr("id","elfinder-preference-"+n+"-checkbox"),o='<label for="'+r.attr("id")+'">'+o+"</label>"):r.length>1&&(l=" elfinder-preference-checkboxes"),s=s.add(e('<dt class="elfinder-preference-'+n+l+'">'+o+"</dt>")).add(e('<dd class="elfinder-preference-'+n+l+'"/>').append(i)))})),d&&(l.append(r[o](/\{id\}/g,t)[o](/\{title\}/,a.i18n(t))[o](/\{class\}/,n===t?"elfinder-focus":"")),2===d&&c.append(e('<div id="'+a.namespace+"-preference-"+t+'" class="elfinder-preference-content"/>').hide().append(e("<dl/>").append(s))))}),l.on("click","a",function(t){var n=e(t.target),i=n.attr("href");t.preventDefault(),t.stopPropagation(),l.children().removeClass(p),n.removeClass("ui-state-hover").parent().addClass(p),i.match(/all$/)?c.addClass("elfinder-preference-taball").children().show():(c.removeClass("elfinder-preference-taball").children().hide(),e(i).show())}).on("focus blur","a",function(t){e(this).parent().toggleClass("ui-state-focus","focusin"===t.type)}).on("mouseenter mouseleave","li",function(t){e(this).toggleClass("ui-state-hover","mouseenter"===t.type)}),c.find("a,input,select,button").addClass("elfinder-tabstop"),s.append(l,c),t=i.fmDialog(s,{title:i.title,width:i.options.width||600,height:i.options.height||400,maxWidth:"window",maxHeight:"window",autoOpen:!1,destroyOnClose:!1,allowMinimize:!1,open:function(){n&&d(n),n=null},resize:function(){c.height(t.height()-l.outerHeight(!0)-(c.outerHeight(!0)-c.height())-5)}}).on("click",function(e){e.stopPropagation()}).css({overflow:"hidden"}),t.closest(".ui-dialog").css({overflow:"hidden"}).addClass("elfinder-bg-translucent"),n="all"};this.shortcuts=[{pattern:"ctrl+comma",description:this.title}],this.alwaysEnabled=!0,this.getstate=function(){return 0},this.exec=function(n,i){return!t&&u(),i&&(i.tab?d(i.tab):"cwd"===i._currentType&&d("workspace")),t.elfinderdialog("open"),e.Deferred().resolve()}},(i.prototype.commands.quicklook=function(){var t,n,i,a,o,r,s,l,c,d,p=this,u=p.fm,h=0,f=1,m=2,g=3,v=4,b=h,y=Element.update?"quicklookupdate":"update",w="elfinder-quicklook-navbar-icon",x="elfinder-quicklook-fullscreen",k="elfinder-quicklook-info-wrapper",C=function(t){e(document).trigger(e.Event("keydown",{keyCode:t,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1}))},z=function(e){var t=u.getUI().offset(),n=function(){var t=e.find(".elfinder-cwd-file-wrapper");return t.length?t:e}(),i=n.offset()||{top:0,
+left:0};return{opacity:0,width:n.width(),height:n.height()-30,top:i.top-t.top,left:i.left-t.left}},T=function(){var i=p.options.contain,a=i?u.getUI():e(window),o=u.getUI().offset(),r=Math.min(t,a.width()-10),s=Math.min(n,a.height()-80);return{opacity:1,width:r,height:s,top:parseInt((a.height()-s-60)/2+(i?0:a.scrollTop()-o.top)),left:parseInt((a.width()-r)/2+(i?0:a.scrollLeft()-o.left))}},A={},S=function(e,t){var n=t||e.substr(0,e.indexOf("/")),i=A[n]?A[n]:A[n]=document.createElement(n),a=!1;try{a=i.canPlayType&&i.canPlayType(e)}catch(o){}return!(!a||""===a||"no"==a)},I=window.navigator.platform.indexOf("Win")!=-1,O=!1,j=!1,M=!1,D=null,F=e.ui.keyCode.LEFT,E=e.ui.keyCode.RIGHT,U="mousemove touchstart "+("onwheel"in document?"wheel":"onmousewheel"in document?"mousewheel":"DOMMouseScroll"),P=e('<span class="elfinder-dialog-title elfinder-quicklook-title"/>'),R=e("<div/>"),q=e('<div class="elfinder-quicklook-info"/>'),H=e('<div class="ui-front elfinder-quicklook-cover"/>'),_=e('<div class="'+w+" "+w+'-fullscreen"/>').on("click touchstart",function(t){if(!M){var n=p.window,i=n.hasClass(x),o=e(window),r=function(){p.preview.trigger("changesize")};t.stopPropagation(),t.preventDefault(),i?(J="",L(),n.toggleClass(x).css(n.data("position")),o.trigger(p.resize).off(p.resize,r),K.off("mouseenter mouseleave"),H.off(U)):(n.toggleClass(x).data("position",{left:n.css("left"),top:n.css("top"),width:n.width(),height:n.height(),display:"block"}).removeAttr("style"),e(window).on(p.resize,r).trigger(p.resize),H.on(U,function(e){j||("mousemove"!==e.type&&"touchstart"!==e.type||(L(),D=setTimeout(function(){(u.UA.Mobile||K.parent().find(".elfinder-quicklook-navbar:hover").length<1)&&K.fadeOut("slow",function(){H.show()})},3e3)),H.is(":visible")&&(W(),H.data("tm",setTimeout(function(){H.show()},3e3))))}).show().trigger("mousemove"),K.on("mouseenter mouseleave",function(e){j||("mouseenter"===e.type?L():H.trigger("mousemove"))})),u.zIndex&&n.css("z-index",u.zIndex+1),u.UA.Mobile?K.attr("style",J):K.attr("style",J).draggable(i?"destroy":{start:function(){j=!0,M=!0,H.show(),L()},stop:function(){j=!1,J=p.navbar.attr("style"),requestAnimationFrame(function(){M=!1})}}),e(this).toggleClass(w+"-fullscreen-off");var s=n;a.is(".ui-resizable")&&(s=s.add(a)),s.resizable(i?"enable":"disable").removeClass("ui-state-disabled"),n.trigger("viewchange")}}),N=function(){p.update(void 0,function(){var t=p.fm,n=t.selectedFiles(),i=n.length,a=(p.docked(),function(){var a=0;return e.each(n,function(e,t){var n=parseInt(t.ts);a>=0?n>a&&(a=n):a="unknown"}),{hash:n[0].hash+"/"+ +new Date,name:t.i18n("items")+": "+i,mime:"group",size:G,ts:a,files:e.map(n,function(e){return e.hash}),getSize:!0}});return i||(i=1,n=[t.cwd()]),1===i?n[0]:a()}())},L=function(){p.window.hasClass(x)&&(D&&clearTimeout(D),D=null,K.stop(!0,!0).css("display","block"),W())},W=function(){H.data("tm")&&clearTimeout(H.data("tm")),H.removeData("tm"),H.hide()},B=e('<div class="'+w+" "+w+'-prev"/>').on("click touchstart",function(e){return!M&&C(F),!1}),$=e('<div class="'+w+" "+w+'-next"/>').on("click touchstart",function(e){return!M&&C(E),!1}),K=e('<div class="elfinder-quicklook-navbar"/>').append(B).append(_).append($).append('<div class="elfinder-quicklook-navbar-separator"/>').append(e('<div class="'+w+" "+w+'-close"/>').on("click touchstart",function(e){return!M&&p.window.trigger("close"),!1})),V=e('<span class="ui-front ui-icon elfinder-icon-close ui-icon-closethick"/>').on("mousedown",function(e){e.stopPropagation(),p.window.trigger("close")}),X=e('<span class="ui-front ui-icon elfinder-icon-minimize ui-icon-minusthick"/>').on("mousedown",function(e){e.stopPropagation(),p.docked()?p.window.trigger("navdockout"):p.window.trigger("navdockin")}),G='<span class="elfinder-spinner-text">'+u.i18n("calc")+'</span><span class="elfinder-spinner"/>',J="",Y=!0;this.cover=H,this.evUpdate=y,(this.navbar=K)._show=L,this.resize="resize."+u.namespace,this.info=e("<div/>").addClass(k).append(R).append(q),this.autoPlay=function(){return!!p.opened()&&!!p.options[p.docked()?"dockAutoplay":"autoplay"]},this.preview=e('<div class="elfinder-quicklook-preview ui-helper-clearfix"/>').on("change",function(){L(),K.attr("style",J),p.docked()&&K.hide(),p.preview.attr("style","").removeClass("elfinder-overflow-auto"),p.info.attr("style","").hide(),p.cover.removeClass("elfinder-quicklook-coverbg"),R.removeAttr("class").attr("style",""),q.html("")}).on(y,function(t){var n,i,a=(p.preview,t.file),r='<div class="elfinder-quicklook-info-data">{value}</div>',s=function(){var s=p.window.css("overflow","hidden");i=u.escape(a.i18||a.name),!a.read&&t.stopImmediatePropagation(),p.window.data("hash",a.hash),p.preview.off("changesize").trigger("change").children().remove(),P.html(i),B.css("visibility",""),$.css("visibility",""),a.hash===u.cwdId2Hash(o.find("[id]:not(.elfinder-cwd-parent):first").attr("id"))&&B.css("visibility","hidden"),a.hash===u.cwdId2Hash(o.find("[id]:last").attr("id"))&&$.css("visibility","hidden"),"directory"===a.mime?c=[a.hash]:"group"===a.mime&&a.getSize&&(c=a.files),q.html(r.replace(/\{value\}/,i)+r.replace(/\{value\}/,u.mime2kind(a))+r.replace(/\{value\}/,c.length?G:u.formatSize(a.size))+r.replace(/\{value\}/,u.i18n("modify")+": "+u.formatDate(a))),c.length&&(l=u.getSize(c).done(function(e){q.find("span.elfinder-spinner").parent().html(e.formated)}).fail(function(){q.find("span.elfinder-spinner").parent().html(u.i18n("unknown"))}).always(function(){l=null}),l._hash=a.hash),R.addClass("elfinder-cwd-icon ui-corner-all "+u.mime2class(a.mime)),a.icon&&R.css(u.getIconStyle(a,!0)),p.info.attr("class",k),a.csscls&&p.info.addClass(a.csscls),a.read&&(n=u.tmb(a))&&e("<img/>").hide().appendTo(p.preview).on("load",function(){R.addClass(n.className).css("background-image","url('"+n.url+"')"),e(this).remove()}).attr("src",n.url),p.info.delay(100).fadeIn(10),p.window.hasClass(x)&&H.trigger("mousemove"),s.css("overflow","")},c=[];a&&!Object.keys(a).length&&(a=u.cwd()),a&&l&&"pending"===l.state()&&l._hash!==a.hash&&l.reject(),a&&(t.forceUpdate||p.window.data("hash")!==a.hash)?s():t.stopImmediatePropagation()}),this.window=e('<div class="ui-front ui-helper-reset ui-widget elfinder-quicklook touch-punch" style="position:absolute"/>').hide().addClass(u.UA.Touch?"elfinder-touch":"").on("click",function(e){var t=this;e.stopPropagation(),b===m&&requestAnimationFrame(function(){b===m&&u.toFront(t)})}).append(e('<div class="ui-dialog-titlebar ui-widget-header ui-corner-top ui-helper-clearfix elfinder-quicklook-titlebar"/>').append(e('<span class="ui-widget-header ui-dialog-titlebar-close ui-corner-all elfinder-titlebar-button elfinder-quicklook-titlebar-icon'+(I?" elfinder-titlebar-button-right":"")+'"/>').append(V,X),P),this.preview,p.info.hide(),H.hide(),K).draggable({handle:"div.elfinder-quicklook-titlebar"}).on("open",function(e,t){var n=p.window,i=p.value,a=u.getUI("cwd"),o=function(e){b=e,p.update(1,p.value),p.change(),n.trigger("resize."+u.namespace)};Y||b!==h?b===v&&(u.getUI("navdock").data("addNode")(c),o(g),p.preview.trigger("changesize"),u.storage("previewDocked","1"),0===u.getUI("navdock").width()&&n.trigger("navdockout")):(i&&i.hash!==r&&(a=u.cwdHash2Elm(i.hash.split("/",2)[0])),J="",K.attr("style",""),b=f,a.trigger("scrolltoview"),W(),n.css(t||z(a)).show().animate(T(),550,function(){o(m),L()}),u.toFront(n))}).on("close",function(e,t){var n,i=p.window,a=p.preview.trigger("change"),r=(p.value,(i.data("hash")||"").split("/",2)[0]),s=function(e,n){b=e,n&&u.toHide(i),a.children().remove(),p.update(0,p.value),i.data("hash",""),t&&t.resolve()};p.opened()&&(l&&"pending"===l.state()&&l.reject(),p.docked()?(c=u.getUI("navdock").data("removeNode")(p.window.attr("id"),"detach"),s(v),u.storage("previewDocked","2")):(b=f,i.hasClass(x)&&_.click(),r&&(n=o.find("#"+r)).length?i.animate(z(n),500,function(){s(h,!0)}):s(h,!0)))}).on("navdockin",function(e,t){var n=p.window,a=u.getUI("navdock"),o=s||a.width(),r=t||{};Y&&(r.init=!0),b=g,i=n.attr("style"),n.toggleClass("ui-front").removeClass("ui-widget").draggable("disable").resizable("disable").removeAttr("style").css({width:"100%",height:o,boxSizing:"border-box",paddingBottom:0,zIndex:"unset"}),K.hide(),X.toggleClass("ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize"),u.toHide(n,!0),a.data("addNode")(n,r),p.preview.trigger("changesize"),u.storage("previewDocked","1")}).on("navdockout",function(t){var n=p.window,a=u.getUI("navdock"),o=(e.Deferred(),z(p.preview));s=n.outerHeight(),a.data("removeNode")(n.attr("id"),u.getUI()),n.toggleClass("ui-front").addClass("ui-widget").draggable("enable").resizable("enable").attr("style",i),X.toggleClass("ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize"),b=h,n.trigger("open",o),u.storage("previewDocked","0")}).on("resize."+u.namespace,function(){p.preview.trigger("changesize")}),this.alwaysEnabled=!0,this.value=null,this.handlers={select:function(e,t){d&&cancelAnimationFrame(d),e.data&&e.data.selected&&e.data.selected.length?p.opened()&&N():d=requestAnimationFrame(function(){p.opened()&&N()})},error:function(){p.window.is(":visible")&&p.window.trigger("close")},"searchshow searchhide":function(){this.opened()&&this.window.trigger("close")},navbarshow:function(){requestAnimationFrame(function(){p.docked()&&p.preview.trigger("changesize")})},destroy:function(){p.window.remove()}},this.shortcuts=[{pattern:"space"}],this.support={audio:{ogg:S("audio/ogg;"),webm:S("audio/webm;"),mp3:S("audio/mpeg;"),wav:S("audio/wav;"),m4a:S("audio/mp4;")||S("audio/x-m4a;")||S("audio/aac;"),flac:S("audio/flac;"),amr:S("audio/amr;")},video:{ogg:S("video/ogg;"),webm:S("video/webm;"),mp4:S("video/mp4;"),mkv:S("video/x-matroska;")||S("video/webm;"),"3gp":S("video/3gpp;")||S("video/mp4;"),m3u8:S("application/x-mpegURL","video")||S("application/vnd.apple.mpegURL","video"),mpd:S("application/dash+xml","video")}},A={},this.closed=function(){return b==h||b==v},this.opened=function(){return b==m||b==g},this.docked=function(){return b==g},this.addIntegration=function(e){requestAnimationFrame(function(){u.trigger("helpIntegration",Object.assign({cmd:"quicklook"},e))})},this.init=function(){var i,l=this.options,c=this.window,d=this.preview;t=l.width>0?parseInt(l.width):450,n=l.height>0?parseInt(l.height):300,"auto"!==l.dockHeight&&(s=parseInt(l.dockHeight),s||(s=void 0)),u.one("load",function(){O=u.getUI("navdock").data("dockEnabled"),!O&&X.hide(),a=u.getUI(),o=u.getUI("cwd"),u.zIndex&&c.css("z-index",u.zIndex+1),c.appendTo(a),e(document).on("keydown."+u.namespace,function(t){t.keyCode==e.ui.keyCode.ESCAPE&&p.opened()&&!p.docked()&&c.hasClass("elfinder-frontmost")&&c.trigger("close")}),c.resizable({handles:"se",minWidth:350,minHeight:120,resize:function(){d.trigger("changesize")}}),p.change(function(){p.opened()&&p.value&&(p.value.tmb&&1==p.value.tmb&&(p.value=Object.assign({},u.file(p.value.hash))),d.trigger(e.Event(y,{file:p.value})))}),d.on(y,function(e){var t,n,a;if(t=e.file){if(n=t.hash,a=u.searchStatus.mixed&&u.searchStatus.state>1,"directory"!==t.mime)if(parseInt(t.size)||t.mime.match(l.mimeRegexNotEmptyCheck)){if(p.dispInlineRegex=i,a||u.optionsByHashes[n])try{p.dispInlineRegex=new RegExp(u.option("dispInlineRegex",n),"i")}catch(e){try{p.dispInlineRegex=new RegExp(u.isRoot(t)?u.options.dispInlineRegex:u.option("dispInlineRegex",t.phash),"i")}catch(e){p.dispInlineRegex=/^$/}}}else e.stopImmediatePropagation();else p.dispInlineRegex=/^$/;p.info.show()}else e.stopImmediatePropagation()}),e.each(u.commands.quicklook.plugins||[],function(e,t){"function"==typeof t&&new t(p)})}).one("open",function(){var e,t=Number(u.storage("previewDocked")||l.docked);O&&t>=1&&(e=p.window,p.exec(),e.trigger("navdockin",{init:!0}),2===t?e.trigger("close"):(p.update(void 0,u.cwd()),p.change())),Y=!1}).bind("open",function(){r=u.cwd().hash,p.value=u.cwd();try{i=new RegExp(u.option("dispInlineRegex"),"i")}catch(e){i=/^$/}}).bind("change",function(t){t.data&&t.data.changed&&p.opened()&&e.each(t.data.changed,function(){if(p.window.data("hash")===this.hash)return p.window.data("hash",null),p.preview.trigger(y),!1})}).bind("navdockresizestart navdockresizestop",function(e){H["navdockresizestart"===e.type?"show":"hide"]()})},this.getstate=function(){return p.opened()?1:0},this.exec=function(){return p.closed()&&N(),p.enabled()&&p.window.trigger(p.opened()?"close":"open"),e.Deferred().resolve()},this.hideinfo=function(){this.info.stop(!0,!0).hide()}}).prototype={forceLoad:!0},i.prototype.commands.quicklook.plugins=[function(t){var n,i,a=["image/jpeg","image/png","image/gif","image/svg+xml","image/x-ms-bmp"],o=t.preview;n=new Image,n.onload=n.onerror=function(){2==n.height&&a.push("image/webp")},n.src="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA",e.each(navigator.mimeTypes,function(t,n){var i=n.type;0===i.indexOf("image/")&&e.inArray(i,a)&&a.push(i)}),o.on(t.evUpdate,function(n){var r,s,l,c=t.fm,d=n.file,p=!1,u=null,h=function(e){var t=c.file(d.hash);t.width=e[0],t.height=e[1]},f=function(){var e,t,n,i,a;u&&u.state&&"pending"===u.state()&&u.reject(),p||(p=!0,e=s.get(0),t=d.width&&d.height?{w:d.width,h:d.height}:e.naturalWidth?null:{w:s.width(),h:s.height()},t&&s.removeAttr("width").removeAttr("height"),n=d.width||e.naturalWidth||e.width||s.width(),i=d.height||e.naturalHeight||e.height||s.height(),d.width&&d.height||h([n,i]),t&&s.width(t.w).height(t.h),a=(n/i).toFixed(2),o.on("changesize",function(){var e,t,n=parseInt(o.width()),i=parseInt(o.height());a<(n/i).toFixed(2)?(t=i,e=Math.floor(t*a)):(e=n,t=Math.floor(e/a)),s.width(e).height(t).css("margin-top",t<i?Math.floor((i-t)/2):0)}).trigger("changesize"),s.fadeIn(100))},m=function(){l.remove(),t.hideinfo()};i||(i=c.arrayFlip(a)),i[d.mime]&&t.dispInlineRegex.test(d.mime)&&(n.stopImmediatePropagation(),l=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+c.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),r=c.openUrl(d.hash),s=e("<img/>").hide().appendTo(o).on("load",function(){m(),f()}).on("error",function(){l.remove()}).attr("src",r),d.width&&d.height?f():d.size>(t.options.getDimThreshold||0)&&(u=c.request({data:{cmd:"dim",target:d.hash},preventDefault:!0}).done(function(e){if(e.dim){var t=e.dim.split("x");d.width=t[0],d.height=t[1],h(t),f()}})))})},function(t){var n,i=t.fm,a=i.arrayFlip(["image/vnd.adobe.photoshop","image/x-photoshop"]),o=t.preview,r=function(e,a,r){try{i.replaceXhrSend(),n.fromURL(e).then(function(e){var n;a.attr("src",e.image.toBase64()),requestAnimationFrame(function(){n=(a.width()/a.height()).toFixed(2),o.on("changesize",function(){var e,t,i=parseInt(o.width()),r=parseInt(o.height());n<(i/r).toFixed(2)?(t=r,e=Math.floor(t*n)):(e=i,t=Math.floor(e/n)),a.width(e).height(t).css("margin-top",t<r?Math.floor((r-t)/2):0)}).trigger("changesize"),r.remove(),t.hideinfo(),a.fadeIn(100)})},function(){r.remove(),a.remove()}),i.restoreXhrSend()}catch(s){i.restoreXhrSend(),r.remove(),a.remove()}};o.on(t.evUpdate,function(s){var l,c,d,p,u,h=s.file;a[h.mime]&&i.options.cdns.psd&&!i.UA.ltIE10&&t.dispInlineRegex.test(h.mime)&&(s.stopImmediatePropagation(),d=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+i.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),l=i.openUrl(h.hash),i.isSameOrigin(l)||(l=i.openUrl(h.hash,!0)),c=e("<img/>").hide().appendTo(o),n?r(l,c,d):(p=window.define,u=window.require,window.require=null,window.define=null,i.loadScript([i.options.cdns.psd],function(){n=require("psd"),p?window.define=p:delete window.define,u?window.require=u:delete window.require,r(l,c,d)})))})},function(t){var n=t.fm,i=n.arrayFlip(["text/html","application/xhtml+xml"]),a=t.preview;a.on(t.evUpdate,function(o){var r,s,l=o.file;i[l.mime]&&t.dispInlineRegex.test(l.mime)&&(!t.options.getSizeMax||l.size<=t.options.getSizeMax)&&(o.stopImmediatePropagation(),s=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),a.one("change",function(){"pending"==r.state()&&r.reject()}).addClass("elfinder-overflow-auto"),r=n.request({data:{cmd:"get",target:l.hash,conv:1,_t:l.ts},options:{type:"get",cache:!0},preventDefault:!0}).done(function(n){t.hideinfo();var i=e('<iframe class="elfinder-quicklook-preview-html"/>').appendTo(a)[0].contentWindow.document;i.open(),i.write(n.content),i.close()}).always(function(){s.remove()}))})},function(t){var n=t.fm,i=n.arrayFlip(["text/x-markdown"]),a=t.preview,o=null,r=function(n,i){t.hideinfo();var r=e('<iframe class="elfinder-quicklook-preview-html"/>').appendTo(a)[0].contentWindow.document;r.open(),r.write(o(n.content)),r.close(),i.remove()},s=function(e){o=!1,e.remove()};a.on(t.evUpdate,function(l){var c,d,p=l.file;i[p.mime]&&n.options.cdns.marked&&o!==!1&&t.dispInlineRegex.test(p.mime)&&(!t.options.getSizeMax||p.size<=t.options.getSizeMax)&&(l.stopImmediatePropagation(),d=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),a.one("change",function(){"pending"==c.state()&&c.reject()}).addClass("elfinder-overflow-auto"),c=n.request({data:{cmd:"get",target:p.hash,conv:1,_t:p.ts},options:{type:"get",cache:!0},preventDefault:!0}).done(function(e){o||window.marked?(o||(o=window.marked),r(e,d)):n.loadScript([n.options.cdns.marked],function(t){o=t||window.marked||!1,delete window.marked,o?r(e,d):s(d)},{tryRequire:!0,error:function(){s(d)}})}).fail(function(){s(d)}))})},function(t){if(t.options.viewerjs){var n=t.fm,i=t.preview,a=t.options.viewerjs,o=a.url?n.arrayFlip(a.mimes||[]):[];a.url&&i.on("update",function(r){var s,l,c=(t.window,r.file);if(o[c.mime]){var d=n.openUrl(c.hash);d&&n.isSameOrigin(d)&&(r.stopImmediatePropagation(),l=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),s=e('<iframe class="elfinder-quicklook-preview-iframe"/>').css("background-color","transparent").on("load",function(){t.hideinfo(),l.remove(),s.css("background-color","#fff")}).on("error",function(){l.remove(),s.remove()}).appendTo(i).attr("src",a.url+"#"+d),i.one("change",function(){l.remove(),s.off("load").remove()}))}})}},function(t){var n=t.fm,i="application/pdf",a=t.preview,o=!1,r="";n.UA.Safari&&"mac"===n.OS&&!n.UA.iOS||n.UA.IE||n.UA.Firefox?o=!0:e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){if(t.type===i)return!(o=!0)})}),o&&("undefined"==typeof t.options.pdfToolbar||t.options.pdfToolbar||(r="#toolbar=0"),a.on(t.evUpdate,function(s){var l=s.file;o&&l.mime===i&&t.dispInlineRegex.test(l.mime)&&(s.stopImmediatePropagation(),t.hideinfo(),t.cover.addClass("elfinder-quicklook-coverbg"),e('<object class="elfinder-quicklook-preview-pdf" data="'+n.openUrl(l.hash)+r+'" type="application/pdf" />').on("error",function(e){o=!1,t.update(void 0,n.cwd()),t.update(void 0,l)}).appendTo(a))}))},function(t){var n=t.fm,i="application/x-shockwave-flash",a=t.preview,o=!1;e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){if(t.type===i)return!(o=!0)})}),o&&a.on(t.evUpdate,function(o){var r,s=o.file;s.mime===i&&t.dispInlineRegex.test(s.mime)&&(o.stopImmediatePropagation(),t.hideinfo(),r=e('<embed class="elfinder-quicklook-preview-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="'+n.openUrl(s.hash)+'" quality="high" type="application/x-shockwave-flash" wmode="transparent" />').appendTo(a))})},function(t){var n,i,a,o,r=t.fm,s=t.preview,l={"audio/mpeg":"mp3","audio/mpeg3":"mp3","audio/mp3":"mp3","audio/x-mpeg3":"mp3","audio/x-mp3":"mp3","audio/x-wav":"wav","audio/wav":"wav","audio/x-m4a":"m4a","audio/aac":"m4a","audio/mp4":"m4a","audio/x-mp4":"m4a","audio/ogg":"ogg","audio/webm":"webm","audio/flac":"flac","audio/x-flac":"flac","audio/amr":"amr"},c=t.window,d=t.navbar,p="string"==typeof t.options.mediaControlsList&&t.options.mediaControlsList?' controlsList="'+r.escape(t.options.mediaControlsList)+'"':"",u=function(){d.css("bottom",c.hasClass("elfinder-quicklook-fullscreen")?"50px":"")},h=function(t,i){return e('<audio class="elfinder-quicklook-preview-audio ui-front" controls'+p+' preload="auto" autobuffer><source src="'+t+'" /></audio>').on("change",function(e){e.stopPropagation()}).on("error",function(e){n&&n.data("hash")===i&&g()}).data("hash",i).appendTo(s)},f=function(t){var n,i=e.Deferred(),o=e.Deferred().done(function(){r.getContents(t).done(function(e){try{var t=a.toWAV(new Uint8Array(e));t?i.resolve(URL.createObjectURL(new Blob([t],{type:"audio/x-wav"}))):i.reject()}catch(n){i.reject()}}).fail(function(){i.reject()})}).fail(function(){a=!1,i.reject()});return window.TextEncoder&&window.URL&&URL.createObjectURL&&"undefined"==typeof a?(n=window.AMR,delete window.AMR,r.loadScript([r.options.cdns.amr],function(){a=!!window.AMR&&window.AMR,window.AMR=n,o[a?"resolve":"reject"]()},{error:function(){o.reject()}})):o[a?"resolve":"reject"](),i},m=function(e){var t,i=n.data("hash");o&&(t=e.play()),t&&t["catch"]&&t["catch"](function(t){e.paused||n&&n.data("hash")===i&&g()})},g=function(){if(n&&n.parent().length){var e=n[0],t=n.children("source").attr("src");c.off("viewchange.audio");try{e.pause(),n.empty(),t.match(/^blob:/)&&URL.revokeObjectURL(t),e.src="",e.load()}catch(i){}n.remove(),n=null}};s.on(t.evUpdate,function(e){var s,d,p=e.file,g=l[p.mime];l[p.mime]&&t.dispInlineRegex.test(p.mime)&&((s=t.support.audio[g])||"amr"===g)&&(o=t.autoPlay(),i=p.hash,d=s?r.openUrl(i):"",s?(e.stopImmediatePropagation(),n=h(d,i),m(n[0]),c.on("viewchange.audio",u),u()):r.options.cdns.amr&&"amr"===g&&a!==!1&&(e.stopImmediatePropagation(),n=h(d,i),f(p.hash).done(function(e){if(i===p.hash){var t=n[0];try{n.children("source").attr("src",e),t.pause(),t.load(),m(t),c.on("viewchange.audio",u),u()}catch(a){URL.revokeObjectURL(e),n.remove()}}else URL.revokeObjectURL(e)}).fail(function(){n.remove()})))}).on("change",g)},function(t){var n,i,a,o,r,s,l,c=t.fm,d=t.preview,p={"video/mp4":"mp4","video/x-m4v":"mp4","video/quicktime":"mp4","video/ogg":"ogg","application/ogg":"ogg","video/webm":"webm","video/x-matroska":"mkv","video/3gpp":"3gp","application/vnd.apple.mpegurl":"m3u8","application/x-mpegurl":"m3u8","application/dash+xml":"mpd","video/x-flv":"flv"},u=t.window,h=t.navbar,f="string"==typeof t.options.mediaControlsList&&t.options.mediaControlsList?' controlsList="'+c.escape(t.options.mediaControlsList)+'"':"",m=function(){c.UA.iOS?u.hasClass("elfinder-quicklook-fullscreen")?(d.css("height","-webkit-calc(100% - 50px)"),h._show()):d.css("height",""):h.css("bottom",u.hasClass("elfinder-quicklook-fullscreen")?"50px":"")},g=function(i,a){var r,s=function(e){p>1&&(l&&clearTimeout(l),l=setTimeout(function(){!r&&x(!0)},800))},p=0;o=null,a=a||{},t.hideinfo(),n=e('<video class="elfinder-quicklook-preview-video" controls'+f+' preload="auto" autobuffer playsinline></video>').on("change",function(e){e.stopPropagation()}).on("timeupdate progress",s).on("canplay",function(){r=!0}).data("hash",i.hash),n[0].addEventListener("error",function(e){a.src&&c.convAbsUrl(a.src)===c.convAbsUrl(e.target.src)&&(++p,s())},!0),a.src&&n.append('<source src="'+a.src+'" type="'+i.mime+'"/><source src="'+a.src+'"/>'),n.appendTo(d),u.on("viewchange.video",m),m()},v=function(e){var t;g(e),t=new i,t.loadSource(c.openUrl(e.hash)),t.attachMedia(n[0]),s&&t.on(i.Events.MANIFEST_PARSED,function(){w(n[0])})},b=function(e){g(e),o=window.dashjs.MediaPlayer().create(),o.getDebug().setLogToBrowserConsole(!1),o.initialize(n[0],c.openUrl(e.hash),s),o.on("error",function(e){x(!0)})},y=function(e){if(!r.isSupported())return void(r=!1);var t=r.createPlayer({type:"flv",url:c.openUrl(e.hash)});g(e),t.on(r.Events.ERROR,function(){t.destroy(),x(!0)}),t.attachMediaElement(n[0]),t.load(),w(t)},w=function(e){var t,i=n.data("hash");s&&(t=e.play()),t&&t["catch"]&&t["catch"](function(t){e.paused||n&&n.data("hash")===i&&x(!0)})},x=function(e){if(l&&clearTimeout(l),n&&n.parent().length){var i=n[0];u.off("viewchange.video"),o&&o.reset();try{i.pause(),n.empty(),i.src="",i.load()}catch(a){}n.remove(),n=null}e&&t.info.show()};d.on(t.evUpdate,function(e){var o,l=e.file,d=l.mime.toLowerCase(),u=p[d];p[d]&&t.dispInlineRegex.test(l.mime)&&(("m3u8"===u||"mpd"===u&&!c.UA.iOS||"flv"===u)&&!c.UA.ltIE10||t.support.video[u])&&(s=t.autoPlay(),t.support.video[u]&&("m3u8"!==u||c.UA.Safari)?(e.stopImmediatePropagation(),g(l,{src:c.openUrl(l.hash)}),w(n[0])):i!==!1&&c.options.cdns.hls&&"m3u8"===u?(e.stopImmediatePropagation(),i?v(l):(o=window.Hls,delete window.Hls,c.loadScript([c.options.cdns.hls],function(e){i=e||window.Hls||!1,window.Hls=o,i&&v(l)},{tryRequire:!0,error:function(){i=!1}}))):a!==!1&&c.options.cdns.dash&&"mpd"===u?(e.stopImmediatePropagation(),a?b(l):c.loadScript([c.options.cdns.dash],function(){a=!!window.dashjs,a&&b(l)},{tryRequire:!0,error:function(){a=!1}})):r!==!1&&c.options.cdns.flv&&"flv"===u&&(e.stopImmediatePropagation(),r?y(l):(o=window.flvjs,delete window.flvjs,c.loadScript([c.options.cdns.flv],function(e){r=e||window.flvjs||!1,window.flvjs=o,r&&y(l)},{tryRequire:!0,error:function(){r=!1}}))))}).on("change",x)},function(t){var n,i=t.preview,a=[],o=t.window,r=t.navbar;e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){(0===t.type.indexOf("audio/")||0===t.type.indexOf("video/"))&&a.push(t.type)})}),a=t.fm.arrayFlip(a),i.on(t.evUpdate,function(s){var l,c=s.file,d=c.mime,p=function(){r.css("bottom",o.hasClass("elfinder-quicklook-fullscreen")?"50px":"")};a[c.mime]&&t.dispInlineRegex.test(c.mime)&&(s.stopImmediatePropagation(),(l=0===d.indexOf("video/"))&&t.hideinfo(),n=e('<embed src="'+t.fm.openUrl(c.hash)+'" type="'+d+'" class="elfinder-quicklook-preview-'+(l?"video":"audio")+'"/>').appendTo(i),o.on("viewchange.embed",p),p())}).on("change",function(){n&&n.parent().length&&(o.off("viewchange.embed"),n.remove(),n=null)})},function(t){var n,i=t.fm,a=i.arrayFlip(["application/zip","application/x-gzip","application/x-tar"]),o=t.preview,r=function(){var e,t,n,a=[];for(this.Y(),n=this.i,e=0,t=n.length;e<t;++e)a[e]=n[e].filename+(n[e].J?" ("+i.formatSize(n[e].J)+")":"");return a},s=function(e){for(var t,n,a,o,r,s=[],l=e.length,c=0,d=function(e){return String.fromCharCode.apply(null,e).replace(/\0+$/,"")};c<l&&0!==e[c];)t=e.subarray(c,c+512),n=d(t.subarray(0,100)),(a=d(t.subarray(345,500)))&&(n=a+n),o=parseInt(d(t.subarray(124,136)),8),r=512*Math.ceil(o/512),"././@LongLink"===n&&(n=d(e.subarray(c+512,c+512+r))),"pax_global_header"!==n&&s.push(n+(o?" ("+i.formatSize(o)+")":"")),c=c+512+r;return s};window.Uint8Array&&window.DataView&&i.options.cdns.zlibUnzip&&i.options.cdns.zlibGunzip&&o.on(t.evUpdate,function(l){var c=l.file,d="application/x-tar"===c.mime;if(a[c.mime]&&(d||("undefined"==typeof n||n)&&("application/zip"===c.mime||"application/x-gzip"===c.mime))){var p,u,h,f,m=function(){h=i.openUrl(c.hash),i.isSameOrigin(h)||(h=i.openUrl(c.hash,!0)),p=i.request({data:{cmd:"get"},options:{url:h,type:"get",cache:!0,dataType:"binary",responseType:"arraybuffer",processData:!1}}).fail(function(){u.remove()}).done(function(e){var t,a;try{"application/zip"===c.mime?(t=new n.Unzip(new Uint8Array(e)),a=r.call(t)):"application/x-gzip"===c.mime?(t=new n.Gunzip(new Uint8Array(e)),a=s(t.decompress())):"application/x-tar"===c.mime&&(a=s(new Uint8Array(e))),g(a)}catch(o){u.remove(),i.debug("error",o)}})},g=function(n){var a,r;n&&n.length&&(n=e.map(n,function(e){return i.decodeRawString(e)}),n.sort(),u.remove(),a="<strong>"+i.escape(c.mime)+"</strong> ("+i.formatSize(c.size)+")<hr/>",r=e('<div class="elfinder-quicklook-preview-archive-wrapper">'+a+'<pre class="elfinder-quicklook-preview-text">'+i.escape(n.join("\n"))+"</pre></div>").on("touchstart",function(t){e(this)["scroll"+("ltr"===i.direction?"Right":"Left")]()>5&&(t.originalEvent._preventSwipeX=!0)}).appendTo(o),t.hideinfo())};l.stopImmediatePropagation(),u=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+i.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),o.one("change",function(){"pending"===p.state()&&p.reject(),u.remove()}),n?m():(window.Zlib&&(f=window.Zlib,delete window.Zlib),i.loadScript([i.options.cdns.zlibUnzip,i.options.cdns.zlibGunzip],function(){window.Zlib&&(n=window.Zlib)?(f?window.Zlib=f:delete window.Zlib,m()):error()}))}})},function(t){var n,i=t.fm,a=i.arrayFlip(["application/x-rar"]),o=t.preview;window.DataView&&o.on(t.evUpdate,function(r){var s=r.file;if(a[s.mime]&&i.options.cdns.rar&&n!==!1){var l,c,d,p,u,h=function(a){if(p)return void l.remove();try{d=n({file:a,type:2,xhrHeaders:i.customHeaders,xhrFields:i.xhrFields},function(n){l.remove();var a,r,c=[];return p||n?void(n&&i.debug("error",n)):(e.each(d.entries,function(){c.push(this.path+(this.size?" ("+i.formatSize(this.size)+")":""))}),void(c.length&&(c=e.map(c,function(e){return i.decodeRawString(e)}),c.sort(),a="<strong>"+i.escape(s.mime)+"</strong> ("+i.formatSize(s.size)+")<hr/>",r=e('<div class="elfinder-quicklook-preview-archive-wrapper">'+a+'<pre class="elfinder-quicklook-preview-text">'+i.escape(c.join("\n"))+"</pre></div>").on("touchstart",function(t){e(this)["scroll"+("ltr"===i.direction?"Right":"Left")]()>5&&(t.originalEvent._preventSwipeX=!0)}).appendTo(o),t.hideinfo())))})}catch(r){l.remove()}},f=function(){n=!1,l.remove()};r.stopImmediatePropagation(),l=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+i.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),o.one("change",function(){d&&(d.abort=!0),l.remove(),p=!0}),c=i.openUrl(s.hash),i.isSameOrigin(c)||(c=i.openUrl(s.hash,!0)),n?h(c):(window.RarArchive&&(u=window.RarArchive,delete window.RarArchive),i.loadScript([i.options.cdns.rar],function(){i.hasRequire?require(["rar"],function(e){n=e,h(c)},f):(n=window.RarArchive)?(u?window.RarArchive=u:delete window.RarArchive,h(c)):f()},{tryRequire:!0,error:f}))}})},function(t){var n,i=t.fm,a=i.arrayFlip(t.options.sharecadMimes||[]),o=t.preview;t.window;t.options.sharecadMimes.length&&t.addIntegration({title:"ShareCAD.org CAD and 3D-Models viewer",link:"https://sharecad.org/DWGOnlinePlugin"}),o.on(t.evUpdate,function(r){var s=r.file;if(a[s.mime.toLowerCase()]&&!i.option("onetimeUrl",s.hash)){var l,c;t.window;r.stopImmediatePropagation(),"1"==s.url&&(o.hide(),e('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+i.i18n("getLink")+"</button></div>").appendTo(t.info.find(".elfinder-quicklook-info")).on("click",function(){var n=e(this);n.html('<span class="elfinder-spinner">'),i.request({data:{cmd:"url",target:s.hash},preventDefault:!0}).always(function(){n.html("")}).done(function(e){var n=i.file(s.hash);s.url=n.url=e.url||"",s.url&&o.trigger({type:t.evUpdate,file:s,forceUpdate:!0})})})),""!==s.url&&"1"!=s.url&&(o.one("change",function(){l.remove(),n.off("load").remove(),n=null}).addClass("elfinder-overflow-auto"),l=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+i.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),c=i.convAbsUrl(i.url(s.hash)),n=e('<iframe class="elfinder-quicklook-preview-iframe" scrolling="no"/>').css("background-color","transparent").appendTo(o).on("load",function(){t.hideinfo(),l.remove(),t.preview.after(t.info),e(this).css("background-color","#fff").show()}).on("error",function(){l.remove(),t.preview.after(t.info)}).attr("src","//sharecad.org/cadframe/load?url="+encodeURIComponent(c)),t.info.after(t.preview))}})},function(t){var n,i,a,o,r,s=t.fm,l={"application/vnd.google-earth.kml+xml":!0,
+"application/vnd.google-earth.kmz":!0},c=t.preview;t.options.googleMapsApiKey&&(t.addIntegration({title:"Google Maps",link:"https://www.google.com/intl/"+s.lang.replace("_","-")+"/help/terms_maps.html"}),n=window.google&&google.maps,i=function(e,i){var a=t.options.googleMapsOpts.maps;s.forExternalUrl(e.hash).done(function(e){if(e)try{new n.KmlLayer(e,Object.assign({map:new n.Map(i.get(0),a)},t.options.googleMapsOpts.kml)),t.hideinfo()}catch(r){o()}else o()})},a=window.gm_authFailure,o=function(){r=null},r="https://maps.googleapis.com/maps/api/js?key="+t.options.googleMapsApiKey,window.gm_authFailure=function(){o(),a&&a()},c.on(t.evUpdate,function(a){var o=a.file;if(r&&l[o.mime.toLowerCase()]){var d,p=(t.window,"1"==o.url&&!s.option("onetimeUrl",o.hash));a.stopImmediatePropagation(),p&&(c.hide(),e('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+s.i18n("getLink")+"</button></div>").appendTo(t.info.find(".elfinder-quicklook-info")).on("click",function(){var n=e(this);n.html('<span class="elfinder-spinner">'),s.request({data:{cmd:"url",target:o.hash},preventDefault:!0}).always(function(){n.html("")}).done(function(e){var n=s.file(o.hash);o.url=n.url=e.url||"",o.url&&c.trigger({type:t.evUpdate,file:o,forceUpdate:!0})})})),""===o.url||p||(d=e('<div style="width:100%;height:100%;"/>').appendTo(c),c.one("change",function(){d.remove(),d=null}),n?i(o,d):s.loadScript([r],function(){n=window.google&&google.maps,n&&i(o,d)}))}}))},function(t){var n,i,a=t.fm,o=Object.assign(a.arrayFlip(t.options.googleDocsMimes||[],"g"),a.arrayFlip(t.options.officeOnlineMimes||[],"m")),r=t.preview,s=(t.window,t.navbar),l={g:"docs.google.com/gview?embedded=true&url=",m:"view.officeapps.live.com/op/embed.aspx?wdStartOn=0&src="},c={g:"56px",m:"24px"},d={xls:5242880,xlsb:5242880,xlsx:5242880,xlsm:5242880,other:10485760};t.options.googleDocsMimes.length&&(i=!0,t.addIntegration({title:"Google Docs Viewer",link:"https://docs.google.com/"})),t.options.officeOnlineMimes.length&&(i=!0,t.addIntegration({title:"MS Online Doc Viewer",link:"https://products.office.com/office-online/view-office-documents-online"})),i&&r.on(t.evUpdate,function(i){var p,u=i.file;if(u.size<=26214400&&(p=o[u.mime])){var h,f=t.window,m=function(){s.css("bottom",f.hasClass("elfinder-quicklook-fullscreen")?c[p]:"")},g=a.mimeTypes[u.mime],v="1"==u.url&&!a.option("onetimeUrl",u.hash);"m"===p&&(d[g]&&u.size>d[g]||u.size>d.other)&&(p="g"),v&&(r.hide(),e('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+a.i18n("getLink")+"</button></div>").appendTo(t.info.find(".elfinder-quicklook-info")).on("click",function(){var n=e(this);n.html('<span class="elfinder-spinner">'),a.request({data:{cmd:"url",target:u.hash},preventDefault:!0}).always(function(){n.html("")}).done(function(e){var n=a.file(u.hash);u.url=n.url=e.url||"",u.url&&r.trigger({type:t.evUpdate,file:u,forceUpdate:!0})})})),""===u.url||v||(i.stopImmediatePropagation(),r.one("change",function(){f.off("viewchange.googledocs"),h.remove(),n.off("load").remove(),n=null}).addClass("elfinder-overflow-auto"),h=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+a.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),n=e('<iframe class="elfinder-quicklook-preview-iframe"/>').css("background-color","transparent").appendTo(r),a.forExternalUrl(u.hash).done(function(i){i?(u.ts&&(i+=(i.match(/\?/)?"&":"?")+"_t="+u.ts),n.on("load",function(){t.hideinfo(),h.remove(),t.preview.after(t.info),e(this).css("background-color","#fff").show()}).on("error",function(){h.remove(),t.preview.after(t.info)}).attr("src","https://"+l[p]+encodeURIComponent(i))):(h.remove(),n.remove())}),f.on("viewchange.googledocs",m),m(),t.info.after(t.preview))}})},function(t){var n=t.fm,i=t.preview,a=parseInt(t.options.textMaxlen)||2e3,o=function(){n.options.cdns.prettify?(n.loadScript([n.options.cdns.prettify+(n.options.cdns.prettify.match(/\?/)?"&":"?")+"autorun=false"]),o=function(){return!0}):o=function(){return!1}},r=function(e,t){o()&&("undefined"==typeof window.PR&&t--?setTimeout(function(){r(e,t)},100):"object"==typeof window.PR?(e.css("cursor","wait"),requestAnimationFrame(function(){PR.prettyPrint&&PR.prettyPrint(null,e.get(0)),e.css("cursor","")})):o=function(){return!1})};i.on(t.evUpdate,function(s){var l,c,d=s.file;d.mime;n.mimeIsText(d.mime)&&(!t.options.getSizeMax||d.size<=t.options.getSizeMax)&&(s.stopImmediatePropagation(),"undefined"==typeof window.PR&&o(),c=e('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(t.info.find(".elfinder-quicklook-info")),i.one("change",function(){"pending"==l.state()&&l.reject()}),l=n.request({data:{cmd:"get",target:d.hash,conv:1,_t:d.ts},options:{type:"get",cache:!0},preventDefault:!0}).done(function(o){var s,l,c,p,u=new RegExp("^(data:"+d.mime.replace(/([.+])/g,"\\$1")+";base64,)","i"),h=o.content;t.hideinfo(),window.atob&&(p=h.match(u))&&(h=atob(h.substr(p[1].length))),l=h.length-a,l>100?s=h.substr(0,a)+"...":l=0,c=e('<div class="elfinder-quicklook-preview-text-wrapper"><pre class="elfinder-quicklook-preview-text prettyprint"></pre></div>'),l&&c.append(e('<div class="elfinder-quicklook-preview-charsleft"><hr/><span>'+n.i18n("charsLeft",n.toLocaleString(l))+"</span></div>").on("click",function(){var t=c.scrollTop();e(this).remove(),c.children("pre").removeClass("prettyprinted").text(h).scrollTop(t),r(c,100)})),c.children("pre").text(s||h),c.on("touchstart",function(t){e(this)["scroll"+("ltr"===n.direction?"Right":"Left")]()>5&&(t.originalEvent._preventSwipeX=!0)}).appendTo(i),r(c,100)}).always(function(){c.remove()}))})}],(i.prototype.commands.reload=function(){"use strict";var t=this,n=!1;this.alwaysEnabled=!0,this.updateOnSelect=!0,this.shortcuts=[{pattern:"ctrl+shift+r f5"}],this.getstate=function(){return 0},this.init=function(){this.fm.bind("search searchend",function(){n="search"==this.type})},this.fm.bind("contextmenu",function(){var n=t.fm;n.options.sync>=1e3&&(t.extra={icon:"accept",node:e("<span/>").attr({title:n.i18n("autoSync")}).on("click touchstart",function(t){"touchstart"===t.type&&t.originalEvent.touches.length>1||(t.stopPropagation(),t.preventDefault(),e(this).parent().toggleClass("ui-state-disabled",n.options.syncStart).parent().removeClass("ui-state-hover"),n.options.syncStart=!n.options.syncStart,n.autoSync(n.options.syncStart?null:"stop"))}).on("ready",function(){e(this).parent().toggleClass("ui-state-disabled",!n.options.syncStart).css("pointer-events","auto")})})}),this.exec=function(){var t=this.fm;if(!n){var i=t.sync(),a=setTimeout(function(){t.notify({type:"reload",cnt:1,hideCnt:!0}),i.always(function(){t.notify({type:"reload",cnt:-1})})},t.notifyDelay);return i.always(function(){clearTimeout(a),t.trigger("reload")})}e("div.elfinder-toolbar > div."+t.res("class","searchbtn")+" > span.ui-icon-search").click()}}).prototype={forceLoad:!0},i.prototype.commands.rename=function(){"use strict";this.alwaysEnabled=!0,this.syncTitleOnChange=!0;var t=this,n=t.fm,i=function(t,i,a,o){var r,s=i?[a.hash].concat(i):[a.hash],l=s.length,c={};if(n.lockfiles({files:s}),n.isRoot(a)){if((r=n.storage("rootNames"))||(r={}),""===o){if(!r[a.hash])return t&&t.reject(),void n.unlockfiles({files:s}).trigger("selectfiles",{files:s});a.name=a._name,a.i18=a._i18,delete r[a.hash],delete a._name,delete a._i18}else"undefined"==typeof a._name&&(a._name=a.name,a._i18=a.i18),a.name=r[a.hash]=o,delete a.i18;return n.storage("rootNames",r),c={changed:[a]},n.updateCache(c),n.change(c),t&&t.resolve(c),void n.unlockfiles({files:s}).trigger("selectfiles",{files:s})}c={cmd:"rename",name:o,target:a.hash},l>1&&(c.targets=i,o.match(/\*/)&&(c.q=o)),n.request({data:c,notify:{type:"rename",cnt:l},navigate:{}}).fail(function(e){var i=n.parseError(e);t&&t.reject(),i&&Array.isArray(i)&&"errRename"===i[0]||n.sync()}).done(function(i){var r;i.added&&i.added.length&&1===l&&(i.undo={cmd:"rename",callback:function(){return n.request({data:{cmd:"rename",target:i.added[0].hash,name:a.name},notify:{type:"undo",cnt:1}})}},i.redo={cmd:"rename",callback:function(){return n.request({data:{cmd:"rename",target:a.hash,name:o},notify:{type:"rename",cnt:1}})}}),t&&t.resolve(i),(r=n.cwd().hash)&&r!==a.hash||n.exec("open",e.map(i.added,function(e){return"directory"===e.mime?e.hash:null})[0])}).always(function(){n.unlockfiles({files:s}).trigger("selectfiles",{files:s})})},a=function(e,t){var i,a,o,r=t||n.selected(),s=n.splitFileExtention(e),l=n.file(r[0]),c=n.file(r[1]);return i=s[1]?"."+s[1]:"",s[1]&&"*"===s[0]?(a='"'+n.splitFileExtention(l.name)[0]+i+'", ',a+='"'+n.splitFileExtention(c.name)[0]+i+'"'):s[0].length>1&&("*"===s[0].substr(-1)?(o=s[0].substr(0,s[0].length-1),a='"'+o+l.name+'", ',a+='"'+o+c.name+'"'):"*"===s[0].substr(0,1)&&(o=s[0].substr(1),a='"'+n.splitFileExtention(l.name)[0]+o+i+'", ',a+='"'+n.splitFileExtention(c.name)[0]+o+i+'"')),a||(a='"'+s[0]+"1"+i+'", "'+s[0]+"2"+i+'"'),r.length>2&&(a+=" ..."),a},o=function(){var o,r=n.selected(),s='<input name="type" type="radio" class="elfinder-tabstop">',l=function(t,i){return e('<label class="elfinder-rename-batch-checks">'+n.i18n(i)+"</label>").prepend(t)},c=e('<input type="text" class="ui-corner-all elfinder-tabstop">'),d=e(s),p=e(s),u=e(s),h=e(s),f=e("<div/>").append(l(d,"plusNumber"),l(p,"asPrefix"),l(u,"asSuffix"),l(h,"changeExtention")),m=e('<div class="elfinder-rename-batch-preview"/>'),g=e('<div class="elfinder-rename-batch"/>').append(e('<div class="elfinder-rename-batch-name"/>').append(c),e('<div class="elfinder-rename-batch-type"/>').append(f),m),v={title:n.i18n("batchRename"),modal:!0,destroyOnClose:!0,width:Math.min(380,n.getUI().width()-20),buttons:{},open:function(){c.on("input",y).trigger("focus")}},b=function(){var e=c.val(),t=n.splitFileExtention(n.file(r[0]).name)[1];return(""!==e||d.is(":checked"))&&(p.is(":checked")?e+="*":u.is(":checked")?e="*"+e+"."+t:h.is(":checked")?e="*."+e:t&&(e+="."+t)),e},y=function(){var e=b();""!==e?m.html(n.i18n(["renameMultiple",r.length,a(e)])):m.empty()},w=f.find("input:radio").on("change",y);v.buttons[n.i18n("btnApply")]=function(){var e,t,a=b();""!==a&&(o.elfinderdialog("close"),t=r,e=n.file(t.shift()),i(void 0,t,e,a))},v.buttons[n.i18n("btnCancel")]=function(){o.elfinderdialog("close")},e.fn.checkboxradio?w.checkboxradio({create:function(e,t){this===d.get(0)&&d.prop("checked",!0).change()}}):f.buttonset({create:function(e,t){d.prop("checked",!0).change()}}),o=t.fmDialog(g,v)};this.noChangeDirOnRemovedCwd=!0,this.shortcuts=[{pattern:"f2"+("mac"==n.OS?" enter":"")},{pattern:"shift+f2",description:"batchRename",callback:function(){n.selected().length>1&&o()}}],this.getstate=function(i){var a,r,s,l,c,d,p=this.files(i),u=p.length;return u?(u>1&&p[0].phash&&(a=p[0].phash,r=n.splitFileExtention(p[0].name)[1].toLowerCase(),s=p[0].mime),1===u&&(d=n.isRoot(p[0])),c=1===u&&(d||!p[0].locked)||n.api>2.103&&u===e.grep(p,function(e){return!(l||e.locked||e.phash!==a||n.isRoot(e)||s!==e.mime&&r!==n.splitFileExtention(e.name)[1].toLowerCase())||(l&&(l=!0),!1)}).length?0:-1,!d&&0===c&&n.option("disabledFlip",p[0].hash).rename&&(c=-1),c!==-1&&u>1?t.extra={icon:"preference",node:e("<span/>").attr({title:n.i18n("batchRename")}).on("click touchstart",function(e){"touchstart"===e.type&&e.originalEvent.touches.length>1||(e.stopPropagation(),e.preventDefault(),n.getUI().trigger("click"),o())})}:delete t.extra,c):-1},this.exec=function(t,o){var r,s=(n.getUI("cwd"),t||!!n.selected().length&&n.selected()||[n.cwd().hash]),l=s.length,c=n.file(s.shift()),d=".elfinder-cwd-filename",p=o||{},u=n.cwd().hash==c.hash,h="navbar"===p._currentType||"files"===p._currentType?p._currentType:u?"navbar":"files",f="files"!==h,m=n[f?"navHash2Elm":"cwdHash2Elm"](c.hash),g=!f&&"list"!=n.storage("view"),v=function(){requestAnimationFrame(function(){x&&x.trigger("blur")})},b=function(){T.is(":hidden")||T.elfinderoverlay("hide").off("click close",A),z.removeClass("ui-front").css("position","").off("unselect."+n.namespace,v),g?C&&C.css("max-height",""):f||z.css("width","").parent("td").css("overflow","")},y=e.Deferred().fail(function(e){var t=x.parent(),i=n.escape(c.i18||c.name);x.off(),g&&(i=i.replace(/([_.])/g,"​$1")),requestAnimationFrame(function(){f?x.replaceWith(i):t.length?(x.remove(),t.html(i)):m.find(d).html(i)}),e&&n.error(e)}).always(function(){b(),n.unbind("resize",S),n.enable()}),w=function(t){var o=e.trim(x.val()),r=(n.splitFileExtention(o),!0),d=function(){x.off(),b(),f?x.replaceWith(n.escape(o)):C.html(n.escape(o)),i(y,s,c,o)};if(T.is(":hidden")||z.css("z-index",""),""===o){if(!n.isRoot(c))return A();f?x.replaceWith(n.escape(c.name)):C.html(n.escape(c.name))}if(!I&&z.length){if(x.off("blur"),1===l&&o===c.name)return y.reject();if(n.options.validName&&n.options.validName.test)try{r=n.options.validName.test(o)}catch(t){r=!1}if("."===o||".."===o||!r)return I=!0,n.error("directory"===c.mime?"errInvDirname":"errInvName",{modal:!0,close:function(){setTimeout(k,120)}}),!1;if(1===l&&n.fileByName(o,c.phash))return I=!0,n.error(["errExists",o],{modal:!0,close:function(){setTimeout(k,120)}}),!1;1===l?d():(n.confirm({title:"cmdrename",text:["renameMultiple",l,a(o,[c.hash].concat(s))],accept:{label:"btnYes",callback:d},cancel:{label:"btnCancel",callback:function(){setTimeout(function(){I=!0,k()},120)}}}),setTimeout(function(){n.trigger("unselectfiles",{files:n.selected()}).trigger("selectfiles",{files:[c.hash].concat(s)})},120))}},x=e(g?"<textarea/>":'<input type="text"/>').on("keyup text",function(){g?(this.style.height="1px",this.style.height=this.scrollHeight+"px"):r&&(this.style.width=r+"px",this.scrollWidth>r&&(this.style.width=this.scrollWidth+10+"px"))}).on("keydown",function(t){t.stopImmediatePropagation(),t.keyCode==e.ui.keyCode.ESCAPE?y.reject():t.keyCode==e.ui.keyCode.ENTER&&(t.preventDefault(),x.trigger("blur"))}).on("mousedown click dblclick",function(e){e.stopPropagation(),"dblclick"===e.type&&e.preventDefault()}).on("blur",w).on("dragenter dragleave dragover drop",function(e){e.stopPropagation()}),k=function(){var e=n.splitFileExtention(x.val())[0];I||!n.UA.Mobile||n.UA.iOS||(T.on("click close",A).elfinderoverlay("show"),z.css("z-index",T.css("z-index")+1)),!n.enabled()&&n.enable(),I&&(I=!1,x.on("blur",w)),x.trigger("focus").trigger("select"),x[0].setSelectionRange&&x[0].setSelectionRange(0,e.length)},C=f?m.contents().filter(function(){return 3==this.nodeType&&e(this).parent().attr("id")===n.navHash2Id(c.hash)}):m.find(d),z=C.parent(),T=n.getUI("overlay"),A=function(e){T.is(":hidden")||z.css("z-index",""),I||(y.reject(),e&&(e.stopPropagation(),e.preventDefault()))},S=function(){m.trigger("scrolltoview",{blink:!1})},I=!1;return z.addClass("ui-front").css("position","relative").on("unselect."+n.namespace,v),n.bind("resize",S),f?C.replaceWith(x.val(c.name)):(g?C.css("max-height","none"):f||(r=z.width(),z.width(r-15).parent("td").css("overflow","visible")),C.empty().append(x.val(c.name))),l>1&&n.api<=2.103?y.reject():c&&C.length?c.locked&&!n.isRoot(c)?y.reject(["errLocked",c.name]):(n.one("select",function(){x.parent().length&&c&&e.inArray(c.hash,n.selected())===-1&&x.trigger("blur")}),x.trigger("keyup"),k(),y):y.reject("errCmdParams",this.title)},n.bind("select contextmenucreate closecontextmenu",function(e){var i,a=(e.data?e.data.selected||e.data.targets:null)||n.selected();a&&1===a.length&&(i=n.file(a[0]))&&n.isRoot(i)?t.title=n.i18n("kindAlias")+" ("+n.i18n("preference")+")":t.title=n.i18n("cmdrename"),"closecontextmenu"!==e.type?t.update(void 0,t.title):requestAnimationFrame(function(){t.update(void 0,t.title)})}).remove(function(t){var i;t.data&&t.data.removed&&(i=n.storage("rootNames"))&&(e.each(t.data.removed,function(e,t){i[t]&&delete i[t]}),n.storage("rootNames",i))})},i.prototype.commands.resize=function(){"use strict";var t=0,n=function(t,n,i){var a=[{x:t/2,y:n/2},{x:-t/2,y:n/2},{x:-t/2,y:-n/2},{x:t/2,y:-n/2}],o=[],r={x:Number.MAX_VALUE,y:Number.MAX_VALUE},s={x:Number.MIN_VALUE,y:Number.MIN_VALUE};return e.each(a,function(e,t){o.push({x:t.x*Math.cos(i)-t.y*Math.sin(i),y:t.x*Math.sin(i)+t.y*Math.cos(i)})}),e.each(o,function(e,t){r.x=Math.min(r.x,t.x),r.y=Math.min(r.y,t.y),s.x=Math.max(s.x,t.x),s.y=Math.max(s.y,t.y)}),{width:s.x-r.x,height:s.y-r.y}};this.updateOnSelect=!1,this.getstate=function(){var e=this.fm.selectedFiles();return 1==e.length&&e[0].read&&e[0].write&&e[0].mime.indexOf("image/")!==-1?0:-1},this.resizeRequest=function(t,n,i){var a=this.fm,o=n||a.file(t.target),r=(o?o.tmb:null,a.isCommandEnabled("resize",t.target));if(r&&(!o||o&&o.read&&o.write&&o.mime.indexOf("image/")!==-1))return a.request({data:Object.assign(t,{cmd:"resize"}),notify:{type:"resize",cnt:1}}).fail(function(e){i&&i.reject(e)}).done(function(){t.quality&&a.storage("jpgQuality",t.quality===a.option("jpgQuality")?null:t.quality),i&&i.resolve()});var s;return s=o?o.mime.indexOf("image/")===-1?["errResize",o.name,"errUsupportType"]:["errResize",o.name,"errPerm"]:["errResize",t.target,"errPerm"],i?i.reject(s):a.error(s),e.Deferred().reject(s)},this.exec=function(i){var a,o,r=this,s=this.fm,l=this.files(i),c=e.Deferred(),d=s.api>1,p=this.options,u=650,h=s.getUI(),f=e().controlgroup?"controlgroup":"buttonset",m="undefined"==typeof p.grid8px||"disable"!==p.grid8px,g=Array.isArray(p.presetSize)?p.presetSize:[],v="elfinder-dialog-active",b=s.res("class","editing"),y=function(i,a){var o,l,y,w,x,k="image/jpeg"===i.mime,C=e('<div class="elfinder-resize-container"/>'),z='<input type="number" class="ui-corner-all"/>',T='<div class="elfinder-resize-row"/>',A='<div class="elfinder-resize-label"/>',S=null,I=!1,O=function(){I=!0},j=function(){I&&(I=!1,M.trigger("change"))},M=e('<div class="elfinder-resize-control"/>').on("focus","input[type=text],input[type=number]",function(){e(this).trigger("select")}).on("change",function(){S&&cancelAnimationFrame(S),S=requestAnimationFrame(function(){var e,t,i,a,o,r,l,c,d,p,u,h;nt&&!I&&(i=nt.data("canvas"))&&(e=M.children("div.elfinder-resize-control-panel:visible"),t=e.find("input.elfinder-resize-quality"),t.is(":visible")&&(a=nt.data("ctx"),o=nt.get(0),e.hasClass("elfinder-resize-uiresize")?(c=i.width=$.val(),d=i.height=K.val(),a.drawImage(o,0,0,c,d)):e.hasClass("elfinder-resize-uicrop")?(r=V.val(),l=X.val(),c=G.val(),d=J.val(),i.width=c,i.height=d,a.drawImage(o,r,l,c,d,0,0,c,d)):(p=Q.val(),u=Q.val()*Math.PI/180,h=n(pe,ue,u),c=i.width=h.width,d=i.height=h.height,a.save(),p%90!==0&&(a.fillStyle=se.val()||"#FFF",a.fillRect(0,0,c,d)),a.translate(c/2,d/2),a.rotate(u),a.drawImage(o,-o.width/2,-o.height/2,pe,ue),a.restore()),i.toBlob(function(e){e&&t.next("span").text(" ("+s.formatSize(e.size)+")")},"image/jpeg",Math.max(Math.min(t.val(),100),1)/100)))})}).on("mouseup","input",function(t){e(t.target).trigger("change")}),D=e('<div class="elfinder-resize-preview"/>').on("touchmove",function(t){e(t.target).hasClass("touch-punch")&&(t.stopPropagation(),t.preventDefault())}),F=e('<div class="elfinder-resize-loading">'+s.i18n("ntfloadimg")+"</div>"),E=e('<div class="elfinder-resize-handle touch-punch"/>'),U=e('<div class="elfinder-resize-handle touch-punch"/>'),P=e('<div class="elfinder-resize-uiresize elfinder-resize-control-panel"/>'),R=e('<div class="elfinder-resize-uicrop elfinder-resize-control-panel"/>'),q=e('<div class="elfinder-resize-rotate elfinder-resize-control-panel"/>'),H=e("<button/>").attr("title",s.i18n("rotate-cw")).append(e('<span class="elfinder-button-icon elfinder-button-icon-rotate-l"/>')),_=e("<button/>").attr("title",s.i18n("rotate-ccw")).append(e('<span class="elfinder-button-icon elfinder-button-icon-rotate-r"/>')),N=e("<span />"),L=e('<button class="elfinder-resize-reset">').text(s.i18n("reset")).on("click",function(){_e()}).button({icons:{primary:"ui-icon-arrowrefresh-1-n"},text:!1}),W=e('<div class="elfinder-resize-type"/>').append('<input type="radio" name="type" id="'+a+'-resize" value="resize" checked="checked" /><label for="'+a+'-resize">'+s.i18n("resize")+"</label>",'<input class="api2" type="radio" name="type" id="'+a+'-crop" value="crop" /><label class="api2" for="'+a+'-crop">'+s.i18n("crop")+"</label>",'<input class="api2" type="radio" name="type" id="'+a+'-rotate" value="rotate" /><label class="api2" for="'+a+'-rotate">'+s.i18n("rotate")+"</label>"),B="resize",$=(W[f]()[f]("disable").find("input").on("change",function(){B=e(this).val(),_e(),Be(!0),$e(!0),Ke(!0),"resize"==B?(P.show(),q.hide(),R.hide(),Be(),k&&Ce.insertAfter(P.find(".elfinder-resize-grid8"))):"crop"==B?(q.hide(),P.hide(),R.show(),$e(),k&&Ce.insertAfter(R.find(".elfinder-resize-grid8"))):"rotate"==B&&(P.hide(),R.hide(),q.show(),Ke())}),e(z).on("change",function(){var e=He(parseInt($.val())),t=He(he?e/ce:parseInt(K.val()));e>0&&t>0&&(Ne.updateView(e,t),$.val(e),K.val(t))}).addClass("elfinder-focus")),K=e(z).on("change",function(){var e=He(parseInt(K.val())),t=He(he?e*ce:parseInt($.val()));t>0&&e>0&&(Ne.updateView(t,e),$.val(t),K.val(e))}),V=e(z).on("change",function(){Le.updateView()}),X=e(z).on("change",function(){Le.updateView()}),G=e(z).on("change",function(){Le.updateView("w")}),J=e(z).on("change",function(){Le.updateView("h")}),Y=k&&d?e(z).val(s.storage("jpgQuality")>0?s.storage("jpgQuality"):s.option("jpgQuality")).addClass("elfinder-resize-quality").attr("min","1").attr("max","100").attr("title","1 - 100").on("blur",function(){var e=Math.min(100,Math.max(1,parseInt(this.value)));M.find("input.elfinder-resize-quality").val(e)}):null,Q=e('<input type="number" class="ui-corner-all" maxlength="3" value="0" />').on("change",function(){We.update()}),Z=e('<div class="elfinder-resize-rotate-slider touch-punch"/>').slider({min:0,max:360,value:Q.val(),animate:!0,start:O,stop:j,change:function(e,t){t.value!=Z.slider("value")&&We.update(t.value)},slide:function(e,t){We.update(t.value,!1)}}).find(".ui-slider-handle").addClass("elfinder-tabstop").off("keydown").on("keydown",function(t){t.keyCode!=e.ui.keyCode.LEFT&&t.keyCode!=e.ui.keyCode.RIGHT||(t.stopPropagation(),t.preventDefault(),We.update(Number(Q.val())+(t.keyCode==e.ui.keyCode.RIGHT?1:-1),!1))}).end(),ee={},te=function(e){var t,n,i,a,o,r,s;try{t=ee[Math.round(e.offsetX)][Math.round(e.offsetY)]}catch(e){}t&&(n=t[0],i=t[1],a=t[2],o=t[3],r=t[4],s=t[5],ie(n,i,a,"click"===e.type))},ne=function(t){ie(e(this).css("backgroundColor"),"","","click"===t.type)},ie=function(t,n,i,a){var o,r,s;"string"==typeof t&&(n="",t&&(o=e("<span>").css("backgroundColor",t).css("backgroundColor"))&&(r=o.match(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i))&&(t=Number(r[1]),n=Number(r[2]),i=Number(r[3]))),s=""===n?t:"#"+ae(t,n,i),se.val(s).css({backgroundColor:s,backgroundImage:"none",color:t+n+i<384?"#fff":"#000"}),D.css("backgroundColor",s),a&&(qe.off(".picker").removeClass("elfinder-resize-picking"),le.off(".picker").removeClass("elfinder-resize-picking"))},ae=function(t,n,i){return e.map([t,n,i],function(e){return("0"+parseInt(e).toString(16)).slice(-2)}).join("")},oe=e("<button>").text(s.i18n("colorPicker")).on("click",function(){qe.on("mousemove.picker click.picker",te).addClass("elfinder-resize-picking"),le.on("mousemove.picker click.picker","span",ne).addClass("elfinder-resize-picking")}).button({icons:{primary:"ui-icon-pin-s"},text:!1}),re=e("<button>").text(s.i18n("reset")).on("click",function(){ie("","","",!0)}).button({icons:{primary:"ui-icon-arrowrefresh-1-n"},text:!1}),se=e('<input class="ui-corner-all elfinder-resize-bg" type="text">').on("focus",function(){e(this).attr("style","")}).on("blur",function(){ie(e(this).val())}),le=e('<div class="elfinder-resize-pallet">').on("click","span",function(){ie(e(this).css("backgroundColor"))}),ce=1,de=1,pe=0,ue=0,he=!0,fe=!1,me=0,ge=0,ve=0,be=0,ye=0,we=!!k&&m,xe=e("<button>").html(s.i18n("aspectRatio")).on("click",function(){he=!he,xe.button("option",{icons:{primary:he?"ui-icon-locked":"ui-icon-unlocked"}}),Ne.fixHeight(),E.resizable("option","aspectRatio",he).data("uiResizable")._aspectRatio=he}).button({icons:{primary:he?"ui-icon-locked":"ui-icon-unlocked"},text:!1}),ke=e("<button>").html(s.i18n("aspectRatio")).on("click",function(){fe=!fe,ke.button("option",{icons:{primary:fe?"ui-icon-locked":"ui-icon-unlocked"}}),U.resizable("option","aspectRatio",fe).data("uiResizable")._aspectRatio=fe}).button({icons:{primary:fe?"ui-icon-locked":"ui-icon-unlocked"},text:!1}),Ce=e("<button>").html(s.i18n(we?"enabled":"disabled")).toggleClass("ui-state-active",we).on("click",function(){we=!we,Ce.html(s.i18n(we?"enabled":"disabled")).toggleClass("ui-state-active",we),ze()}).button(),ze=function(){var t=we?8:1;e.each([$,K,G,J,V,X],function(){this.attr("step",t)}),we&&($.val(He($.val())),K.val(He(K.val())),G.val(He(G.val())),J.val(He(J.val())),V.val(He(V.val())),X.val(He(X.val())),P.is(":visible")?Ne.updateView($.val(),K.val()):R.is(":visible")&&Le.updateView())},Te=function(){var t,n=function(){se.parent().hide(),le.hide()};t=Math.min(me,ge)/Math.sqrt(Math.pow(pe,2)+Math.pow(ue,2)),ve=Math.ceil(pe*t),be=Math.ceil(ue*t),qe.width(ve).height(be).css("margin-top",(ge-be)/2+"px").css("margin-left",(me-ve)/2+"px"),qe.is(":visible")&&se.is(":visible")&&("image/png"!==i.mime?(D.css("backgroundColor",se.val()),o=e("<img>"),s.isCORS&&o.attr("crossorigin","use-credentials"),o.on("load",function(){l&&l.width!==ve&&Se()}).on("error",n).attr("src",tt)):n())},Ae=function(){Ne.updateView(pe,ue),Te(),Ue.width(Ee.width()).height(Ee.height()),Pe.width(Ee.width()).height(Ee.height()),Le.updateView(),it()},Se=function(){if(y){var t,n,i,a,r,s,c,d,p,u,h,f,m,g,v,b,w,x,k,C={},z=[],T=function(e,t,n){var i,a,o,r=Math.max(Math.max(e,t),n),s=Math.min(Math.min(e,t),n);return r===s?i=0:e===r?i=((t-n)/(r-s)*60+360)%360:t===r?i=(n-e)/(r-s)*60+120:n===r&&(i=(e-t)/(r-s)*60+240),a=(r-s)/r,o=(.3*e+.59*t+.11*n)/255,[i,a,o,"hsl"]},A=function(e){return 8*Math.round(e/8)};e:try{n=l.width=qe.width(),i=l.height=qe.height(),m=n/pe,y.scale(m,m),y.drawImage(o.get(0),0,0),f=y.getImageData(0,0,n,i).data,g=.1*n,v=.9*n,b=.1*i,w=.9*i;for(var S=0;S<i-1;S++)for(var I=0;I<n-1;I++){if(t=4*I+S*n*4,a=f[t],r=f[t+1],s=f[t+2],c=f[t+3],255!==c){se.parent().hide(),le.hide();break e}u=T(a,r,s),h=Math.round(u[0]),d=Math.round(100*u[1]),p=Math.round(100*u[2]),ee[I]||(ee[I]={}),ee[I][S]=[a,r,s,h,d,p],(I<g||I>v)&&(S<b||S>w)&&(x=A(a)+","+A(r)+","+A(s),C[x]?++C[x]:C[x]=1)}le.children(":first").length||(k=1,e.each(C,function(e,t){z.push({c:e,v:t})}),e.each(z.sort(function(e,t){return e.v>t.v?-1:1}),function(){return!(this.v<2||k>10)&&(le.append(e('<span style="width:20px;height:20px;display:inline-block;background-color:rgb('+this.c+');">')),void++k)}))}catch(O){oe.hide(),le.hide()}}},Ie=function(){try{l=document.createElement("canvas"),y=l.getContext("2d")}catch(e){oe.hide(),le.hide()}},Oe=function(){ot.on("click","span.elfinder-resize-preset",function(){var t=e(this),n=t.data("s")[0],i=t.data("s")[1],a=pe/ue;t.data("s",[i,n]).text(i+"x"+n),pe>n||ue>i?pe<=n?n=He(i*a):ue<=i?i=He(n/a):pe-n>ue-i?i=He(n/a):n=He(i*a):(n=pe,i=ue),$.val(n),K.val(i),Ne.updateView(n,i),it()}),rt.on("click","span.elfinder-resize-preset",function(){var t=e(this),n=t.data("s")[0],i=t.data("s")[1],a=V.val(),o=X.val();t.data("s",[i,n]).text(i+"x"+n),pe>=n&&ue>=i&&(pe-n-a<0&&(a=pe-n),ue-i-o<0&&(o=ue-i),V.val(a),X.val(o),G.val(n),J.val(i),Le.updateView(),it())}),rt.children("span.elfinder-resize-preset").each(function(){var t=e(this),n=t.data("s")[0],i=t.data("s")[1];t[pe>=n&&ue>=i?"show":"hide"]()})},je=null,Me=!1,De=function(e){var t=s.file(i.hash);t.width=e[0],t.height=e[1]},Fe=function(){var n,a,o;Me||(Me=!0,je&&je.state&&"pending"===je.state()&&je.reject(),s.api>=2.103?0===t&&s.request({data:{cmd:"resize",target:i.hash,degree:0,mode:"rotate"},preventDefault:!0}).done(function(e){t=e.losslessRotate?1:-1,1===t&&Q.val()%90===0&&q.children("div.elfinder-resize-quality").hide()}).fail(function(){t=-1}):t=-1,n=Ee.get(0),a=i.width&&i.height?{w:i.width,h:i.height}:n.naturalWidth?null:{w:Ee.width(),h:Ee.height()},a&&Ee.removeAttr("width").removeAttr("height"),pe=i.width||n.naturalWidth||n.width||Ee.width(),ue=i.height||n.naturalHeight||n.height||Ee.height(),i.width&&i.height||De([pe,ue]),a&&Ee.width(a.w).height(a.h),w.show(),o=ue/pe,o<1&&D.height()>D.width()*o&&D.height(D.width()*o),D.height()>Ee.height()+20&&D.height(Ee.height()+20),ge=D.height()-(E.outerHeight()-E.height()),F.remove(),ce=pe/ue,E.append(Ee.show()).show(),$.val(pe),K.val(ue),Ie(),Oe(),Ae(),W[f]("enable"),M.find("input,select").prop("disabled",!1).filter(":text").on("keydown",function(t){var n;if(t.keyCode==e.ui.keyCode.ENTER)return t.stopPropagation(),t.preventDefault(),n={title:e("input:checked",W).val(),text:"confirmReq",accept:{label:"btnApply",callback:function(){Xe()}},cancel:{label:"btnCancel",callback:function(){e(this).trigger("focus")}}},st&&(n.buttons=[{label:"btnSaveAs",callback:function(){requestAnimationFrame(Ge)}}]),void s.confirm(n)}).on("keyup",function(){var t=e(this);t.hasClass("elfinder-resize-bg")||requestAnimationFrame(function(){t.val(t.val().replace(/[^0-9]/g,""))})}).filter(":first"),ze(),!s.UA.Mobile&&$.trigger("focus"),Be())},Ee=e("<img/>").on("load",Fe).on("error",function(){F.text("Unable to load image").css("background","transparent")}),Ue=e("<div/>"),Pe=e("<img/>"),Re=e("<div/>"),qe=e('<img class="elfinder-resize-imgrotate" />'),He=function(e,t){return e=we?8*Math.round(e/8):Math.round(e),e=Math.max(0,e),t&&e>t&&(e=we?8*Math.floor(t/8):t),e},_e=function(){$.val(pe),K.val(ue),Ne.updateView(pe,ue),V.val(0),X.val(0),G.val(pe),J.val(ue),Le.updateView(),it()},Ne={update:function(){$.val(He(Ee.width()/de)),K.val(He(Ee.height()/de)),it()},updateView:function(e,t){e>me||t>ge?e/me>t/ge?(de=me/e,Ee.width(me).height(He(t*de))):(de=ge/t,Ee.height(ge).width(He(e*de))):Ee.width(He(e)).height(He(t)),de=Ee.width()/e,N.text("1 : "+(1/de).toFixed(2)),Ne.updateHandle()},updateHandle:function(){E.width(Ee.width()).height(Ee.height())},fixHeight:function(){var e,t;he&&(e=$.val(),t=He(e/ce),Ne.updateView(e,t),K.val(t))}},Le={update:function(e){V.val(He((U.data("x")||U.position().left)/de,pe)),X.val(He((U.data("y")||U.position().top)/de,ue)),"xy"!==e&&(G.val(He((U.data("w")||U.width())/de,pe-V.val())),J.val(He((U.data("h")||U.height())/de,ue-X.val()))),it()},updateView:function(e){var t,n,i,a,o;V.val(He(V.val(),pe-(we?8:1))),X.val(He(X.val(),ue-(we?8:1))),G.val(He(G.val(),pe-V.val())),J.val(He(J.val(),ue-X.val())),fe&&(t=Re.width()/Re.height(),"w"===e?J.val(He(parseInt(G.val())/t)):"h"===e&&G.val(He(parseInt(J.val())*t))),n=Math.round(parseInt(V.val())*de),i=Math.round(parseInt(X.val())*de),"xy"!==e?(a=Math.round(parseInt(G.val())*de),o=Math.round(parseInt(J.val())*de)):(a=U.data("w"),o=U.data("h")),U.data({x:n,y:i,w:a,h:o}).width(a).height(o).css({left:n,top:i}),Re.width(a).height(o)},resize_update:function(e,t){U.data({x:t.position.left,y:t.position.top,w:t.size.width,h:t.size.height}),Le.update(),Le.updateView()},drag_update:function(e,t){U.data({x:t.position.left,y:t.position.top}),Le.update("xy")}},We={mouseStartAngle:0,imageStartAngle:0,imageBeingRotated:!1,setQuality:function(){q.children("div.elfinder-resize-quality")[t>0&&Q.val()%90===0?"hide":"show"]()},update:function(e,t){"undefined"==typeof e&&(ye=e=parseInt(Q.val())),"undefined"==typeof t&&(t=!0),!t||s.UA.Opera||s.UA.ltIE8?qe.rotate(e):qe.animate({rotate:e+"deg"}),e%=360,e<0&&(e+=360),Q.val(parseInt(e)),Z.slider("value",Q.val()),We.setQuality()},execute:function(e){if(We.imageBeingRotated){var t=We.getCenter(qe),n=e.originalEvent.touches?e.originalEvent.touches[0]:e,i=n.pageX-t[0],a=n.pageY-t[1],o=Math.atan2(a,i),r=o-We.mouseStartAngle+We.imageStartAngle;return r=Math.round(180*parseFloat(r)/Math.PI),e.shiftKey&&(r=15*Math.round((r+6)/15)),qe.rotate(r),r%=360,r<0&&(r+=360),Q.val(r),Z.slider("value",Q.val()),We.setQuality(),!1}},start:function(t){if(!qe.hasClass("elfinder-resize-picking")){O(),We.imageBeingRotated=!0;var n=We.getCenter(qe),i=t.originalEvent.touches?t.originalEvent.touches[0]:t,a=i.pageX-n[0],o=i.pageY-n[1];
+return We.mouseStartAngle=Math.atan2(o,a),We.imageStartAngle=parseFloat(qe.rotate())*Math.PI/180,e(document).on("mousemove",We.execute),qe.on("touchmove",We.execute),!1}},stop:function(t){if(We.imageBeingRotated)return e(document).off("mousemove",We.execute),qe.off("touchmove",We.execute),requestAnimationFrame(function(){We.imageBeingRotated=!1}),j(),!1},getCenter:function(e){var t=qe.rotate();qe.rotate(0);var n=qe.offset(),i=n.left+qe.width()/2,a=n.top+qe.height()/2;return qe.rotate(t),Array(i,a)}},Be=function(e){e?(E.filter(":ui-resizable").resizable("destroy"),E.hide()):(E.show(),E.resizable({alsoResize:Ee,aspectRatio:he,resize:Ne.update,start:O,stop:function(e){Ne.fixHeight,Ne.updateView($.val(),K.val()),j()}}),at())},$e=function(e){e?(U.filter(":ui-resizable").resizable("destroy").filter(":ui-draggable").draggable("destroy"),Ue.hide()):(Ue.show(),U.resizable({containment:Ue,aspectRatio:fe,resize:Le.resize_update,start:O,stop:j,handles:"all"}).draggable({handle:Re,containment:Pe,drag:Le.drag_update,start:O,stop:function(){Le.updateView("xy"),j()}}),at(),Le.update())},Ke=function(e){e?qe.hide():(qe.show(),at())},Ve=function(){var e,t,n,i,a,o,r="";if("resize"==B)e=parseInt($.val())||0,t=parseInt(K.val())||0;else if("crop"==B)e=parseInt(G.val())||0,t=parseInt(J.val())||0,n=parseInt(V.val())||0,i=parseInt(X.val())||0;else if("rotate"==B){if(e=pe,t=ue,a=parseInt(Q.val())||0,a<0||a>360)return s.error("Invalid rotate degree"),!1;if(0==a||360==a)return s.error("errResizeNoChange"),!1;r=se.val()}if(o=Y?parseInt(Y.val()):0,"rotate"!=B){if(e<=0||t<=0)return s.error("Invalid image size"),!1;if(e==pe&&t==ue)return s.error("errResizeNoChange"),!1}return{w:e,h:t,x:n,y:i,d:a,q:o,b:r}},Xe=function(){var e;(e=Ve())&&(C.elfinderdialog("close"),r.resizeRequest({target:i.hash,width:e.w,height:e.h,x:e.x,y:e.y,degree:e.d,quality:e.q,bg:e.b,mode:B},i,c))},Ge=function(){var t,n=function(){t.addClass(b).fadeIn(function(){x.addClass(v)}),s.disable()},a=function(){r.mime=i.mime,r.prefix=i.name.replace(/ \d+(\.[^.]+)?$/,"$1"),r.requestCmd="mkfile",r.nextAction={},r.data={target:i.phash},e.proxy(s.res("mixin","make"),r)().done(function(a){var o,r;a.added&&a.added.length?(o=a.added[0].hash,r=s.api<2.1032?s.url(i.hash,{async:!0,temporary:!0}):null,e.when(r).done(function(e){s.request({options:{type:"post"},data:{cmd:"put",target:o,encoding:r?"scheme":"hash",content:r?s.convAbsUrl(e):i.hash},notify:{type:"copy",cnt:1},syncOnFail:!0}).fail(n).done(function(e){e=s.normalize(e),s.updateCache(e),i=s.file(o),e.changed&&e.changed.length&&s.change(e),x.show().find(".elfinder-dialog-title").html(s.escape(i.name)),Xe(),t.fadeIn()})}).fail(n)):n()}).fail(n).always(function(){delete r.mime,delete r.prefix,delete r.nextAction,delete r.data}),s.trigger("unselectfiles",{files:[i.hash]})},o=null;Ve()&&(t=h.children("."+r.dialogClass+":visible").removeClass(b).fadeOut(),x.removeClass(v),s.enable(),s.searchStatus.state<2&&i.phash!==s.cwd().hash&&(o=s.exec("open",[i.phash],{thash:i.phash})),e.when([o]).done(function(){o?s.one("cwdrender",a):a()}).fail(n))},Je={},Ye="elfinder-resize-handle-hline",Qe="elfinder-resize-handle-vline",Ze="elfinder-resize-handle-point",et=s.openUrl(i.hash),tt=s.openUrl(i.hash,!s.isSameOrigin(et)),nt=Y?e("<img>").attr("crossorigin",s.isCORS?"use-credentials":"").attr("src",tt).on("load",function(){try{var e=document.createElement("canvas");nt.data("canvas",e).data("ctx",e.getContext("2d")),it()}catch(t){nt.removeData("canvas").removeData("ctx")}}):null,it=function(){M.find("input.elfinder-resize-quality:visible").trigger("change")},at=function(t){if(!x.hasClass("elfinder-dialog-minimized")&&!x.is(":hidden")){ot.hide(),rt.hide();var n,i,a,o=s.options.dialogContained?h:e(window),r=o.height(),l=o.width(),c="auto",d=!0;x.width(Math.min(u,l-30)),D.attr("style",""),pe&&ue&&(me=D.width()-(E.outerWidth()-E.width()),ge=D.height()-(E.outerHeight()-E.height()),Ne.updateView(pe,ue)),i=C.find("div.elfinder-resize-control").width(),a=D.width(),n=C.width()-20,a>n?(D.width(n),d=!1):n-a<i&&(l>r?D.width(n-i-20):(D.css({"float":"none",marginLeft:"auto",marginRight:"auto"}),d=!1)),d&&(c=i),me=D.width()-(E.outerWidth()-E.width()),h.hasClass("elfinder-fullscreen")?x.height()>r&&(r-=2,D.height(r-x.height()+D.height()),x.css("top",0-h.offset().top)):(r-=30,D.height()>r&&D.height(r)),ge=D.height()-(E.outerHeight()-E.height()),pe&&ue&&Ae(),Ee.height()&&D.height()>Ee.height()+20&&(D.height(Ee.height()+20),ge=D.height()-(E.outerHeight()-E.height()),Te()),ot.css("width",c).show(),rt.css("width",c).show(),rt.children("span.elfinder-resize-preset:visible").length||rt.hide()}},ot=function(){var t,n=e('<fieldset class="elfinder-resize-preset-container">').append(e("<legend>").html(s.i18n("presets"))).hide();return e.each(g,function(i,a){2===a.length&&(t=!0,n.append(e('<span class="elfinder-resize-preset"/>').data("s",a).text(a[0]+"x"+a[1]).button()))}),t?n:e()}(),rt=ot.clone(!0),st=s.uploadMimeCheck(i.mime,i.phash);P.append(e(T).append(e(A).text(s.i18n("width")),$),e(T).append(e(A).text(s.i18n("height")),K,e('<div class="elfinder-resize-whctrls">').append(xe,L)),Y?e(T).append(e(A).text(s.i18n("quality")),Y,e("<span/>")):e(),k?e(T).append(e(A).text(s.i18n("8pxgrid")).addClass("elfinder-resize-grid8"),Ce):e(),e(T).append(e(A).text(s.i18n("scale")),N),e(T).append(ot)),d&&(R.append(e(T).append(e(A).text("X"),V),e(T).append(e(A).text("Y")).append(X),e(T).append(e(A).text(s.i18n("width")),G),e(T).append(e(A).text(s.i18n("height")),J,e('<div class="elfinder-resize-whctrls">').append(ke,L.clone(!0))),Y?e(T).append(e(A).text(s.i18n("quality")),Y.clone(!0),e("<span/>")):e(),k?e(T).append(e(A).text(s.i18n("8pxgrid")).addClass("elfinder-resize-grid8")):e(),e(T).append(rt)),q.append(e(T).addClass("elfinder-resize-degree").append(e(A).text(s.i18n("rotate")),Q,e("<span/>").text(s.i18n("degree")),e("<div/>").append(H,_)[f]()),e(T).css("height","20px").append(Z),Y?e(T)[t<1?"show":"hide"]().addClass("elfinder-resize-quality").append(e(A).text(s.i18n("quality")),Y.clone(!0),e("<span/>")):e(),e(T).append(e(A).text(s.i18n("bgcolor")),se,oe,re),e(T).css("height","20px").append(le)),H.on("click",function(){ye-=90,We.update(ye)}),_.on("click",function(){ye+=90,We.update(ye)})),C.append(W).on("resize",function(e){e.stopPropagation()}),d?M.append(P,R.hide(),q.hide()):M.append(P),E.append('<div class="'+Ye+" "+Ye+'-top"/>','<div class="'+Ye+" "+Ye+'-bottom"/>','<div class="'+Qe+" "+Qe+'-left"/>','<div class="'+Qe+" "+Qe+'-right"/>','<div class="'+Ze+" "+Ze+'-e"/>','<div class="'+Ze+" "+Ze+'-se"/>','<div class="'+Ze+" "+Ze+'-s"/>'),D.append(F).append(E.hide()).append(Ee.hide()),d&&(U.css("position","absolute").append('<div class="'+Ye+" "+Ye+'-top"/>','<div class="'+Ye+" "+Ye+'-bottom"/>','<div class="'+Qe+" "+Qe+'-left"/>','<div class="'+Qe+" "+Qe+'-right"/>','<div class="'+Ze+" "+Ze+'-n"/>','<div class="'+Ze+" "+Ze+'-e"/>','<div class="'+Ze+" "+Ze+'-s"/>','<div class="'+Ze+" "+Ze+'-w"/>','<div class="'+Ze+" "+Ze+'-ne"/>','<div class="'+Ze+" "+Ze+'-se"/>','<div class="'+Ze+" "+Ze+'-sw"/>','<div class="'+Ze+" "+Ze+'-nw"/>'),D.append(Ue.css("position","absolute").hide().append(Pe,U.append(Re))),D.append(qe.hide())),D.css("overflow","hidden"),C.append(D,M),Je[s.i18n("btnApply")]=Xe,st&&(Je[s.i18n("btnSaveAs")]=function(){requestAnimationFrame(Ge)}),Je[s.i18n("btnCancel")]=function(){C.elfinderdialog("close")},C.find("input,button").addClass("elfinder-tabstop"),x=r.fmDialog(C,{title:s.escape(i.name),width:u,resizable:!1,buttons:Je,open:function(){var e=!!(s.option("substituteImg",i.hash)&&i.size>p.dimSubImgSize),t=!(!i.width||!i.height);if(C.parent().css("overflow","hidden"),w=x.find(".ui-dialog-titlebar .elfinder-titlebar-minimize").hide(),s.bind("resize",at),Ee.attr("src",et),Pe.attr("src",et),qe.attr("src",et),d&&(qe.on("mousedown touchstart",We.start).on("touchend",We.stop),x.on("mouseup",We.stop)),t&&!e)return Fe();if(i.size>(p.getDimThreshold||0))je=s.request({data:{cmd:"dim",target:i.hash,substitute:e?400:""},preventDefault:!0}).done(function(e){if(e.dim){var t=e.dim.split("x");return i.width=t[0],i.height=t[1],De(t),e.url&&(Ee.attr("src",e.url),Pe.attr("src",e.url),qe.attr("src",e.url)),Fe()}});else if(t)return Fe()},close:function(){d&&(qe.off("mousedown touchstart",We.start).off("touchend",We.stop),e(document).off("mouseup",We.stop)),s.unbind("resize",at),e(this).elfinderdialog("destroy")},resize:function(e,t){t&&"off"===t.minimize&&at()}}).attr("id",a).closest(".ui-dialog").addClass(b),s.UA.ltIE8&&e(".elfinder-dialog").css("filter",""),Re.css({opacity:.2,"background-color":"#fff",position:"absolute"}),U.css("cursor","move"),U.find(".elfinder-resize-handle-point").css({"background-color":"#fff",opacity:.5,"border-color":"#000"}),d||W.find(".api2").remove(),M.find("input,select").prop("disabled",!0),M.find("input.elfinder-resize-quality").next("span").addClass("elfinder-resize-jpgsize").attr("title",s.i18n("roughFileSize"))};return l.length&&l[0].mime.indexOf("image/")!==-1?(a="resize-"+s.namespace+"-"+l[0].hash,o=h.find("#"+a),o.length?(o.elfinderdialog("toTop"),c.resolve()):(y(l[0],a),c)):c.reject()}},function(e){var t=function(e,t){var n=0;for(n in t)if("undefined"!=typeof e[t[n]])return t[n];return e[t[n]]="",t[n]};if(e.cssHooks.rotate={get:function(t,n,i){return e(t).rotate()},set:function(t,n){return e(t).rotate(n),n}},e.cssHooks.transform={get:function(e,n,i){var a=t(e.style,["WebkitTransform","MozTransform","OTransform","msTransform","transform"]);return e.style[a]},set:function(e,n){var i=t(e.style,["WebkitTransform","MozTransform","OTransform","msTransform","transform"]);return e.style[i]=n,n}},e.fn.rotate=function(e){var t;return"undefined"==typeof e?window.opera?(t=this.css("transform").match(/rotate\((.*?)\)/),t&&t[1]?Math.round(180*parseFloat(t[1])/Math.PI):0):(t=this.css("transform").match(/rotate\((.*?)\)/),t&&t[1]?parseInt(t[1]):0):(this.css("transform",this.css("transform").replace(/none|rotate\(.*?\)/,"")+"rotate("+parseInt(e)+"deg)"),this)},e.fx.step.rotate=function(t){0==t.state&&(t.start=e(t.elem).rotate(),t.now=t.start),e(t.elem).rotate(t.now)},"undefined"==typeof window.addEventListener&&"undefined"==typeof document.getElementsByClassName){var n=function(e){for(var t=e,n=t.offsetLeft,i=t.offsetTop;t.offsetParent&&(t=t.offsetParent,t==document.body||"static"==t.currentStyle.position);)t!=document.body&&t!=document.documentElement&&(n-=t.scrollLeft,i-=t.scrollTop),n+=t.offsetLeft,i+=t.offsetTop;return{x:n,y:i}},i=function(e){if("static"==e.currentStyle.position){var t=n(e);e.style.position="absolute",e.style.left=t.x+"px",e.style.top=t.y+"px"}},a=function(e,t){var n,a=1,o=1,r=1,s=1;if("undefined"!=typeof e.style.msTransform)return!0;i(e),n=t.match(/rotate\((.*?)\)/);var l=n&&n[1]?parseInt(n[1]):0;l%=360,l<0&&(l=360+l);var c=l*Math.PI/180,d=Math.cos(c),p=Math.sin(c);a*=d,o*=-p,r*=p,s*=d,e.style.filter=(e.style.filter||"").replace(/progid:DXImageTransform\.Microsoft\.Matrix\([^)]*\)/,"")+("progid:DXImageTransform.Microsoft.Matrix(M11="+a+",M12="+o+",M21="+r+",M22="+s+",FilterType='bilinear',sizingMethod='auto expand')");var u=parseInt(e.style.width||e.width||0),h=parseInt(e.style.height||e.height||0);c=l*Math.PI/180;var f=Math.abs(Math.cos(c)),m=Math.abs(Math.sin(c)),g=(u-(u*f+h*m))/2,v=(h-(u*m+h*f))/2;return e.style.marginLeft=Math.floor(g)+"px",e.style.marginTop=Math.floor(v)+"px",!0},o=e.cssHooks.transform.set;e.cssHooks.transform.set=function(e,t){return o.apply(this,[e,t]),a(e,t),t}}}(jQuery),(i.prototype.commands.restore=function(){"use strict";var t=this,n=this.fm,i=0,a=function(t){var o,r=e.Deferred(),s=[],l=[],c=[],d=[];return r._xhrReject=function(){e.each(c,function(){this&&this.reject&&this.reject()}),o&&o._xhrReject()},e.each(t,function(e,t){"directory"===t.mime?s.push(t):l.push(t)}),s.length?(e.each(s,function(e,t){c.push(n.request({data:{cmd:"open",target:t.hash},preventDefault:!0,asNotOpen:!0})),d[e]=t.hash}),e.when.apply(e,c).fail(function(){r.reject()}).done(function(){var t=[];e.each(arguments,function(e,n){n.files&&(n.files.length?t=t.concat(n.files):t.push({hash:"fakefile_"+i++,phash:d[e],mime:"fakefile",name:"fakefile",ts:0}))}),n.cache(t),o=a(t).done(function(e){l=l.concat(e),r.resolve(l)})})):r.resolve(l),r},o=function(t,o,r,s){var l,c,d={},p=[],u=!1,h=[],f=s||{},m=+new Date;n.lockfiles({files:r}),h=e.map(o,function(e){return"directory"===e.mime?e.hash:null}),t.done(function(){h&&n.exec("rm",h,{forceRm:!0,quiet:!0})}).always(function(){n.unlockfiles({files:r})}),l=setTimeout(function(){n.notify({type:"search",id:m,cnt:1,hideCnt:!0,cancel:function(){c&&c._xhrReject(),t.reject()}})},n.notifyDelay),i=0,c=a(o).always(function(){l&&clearTimeout(l),n.notify({type:"search",id:m,cnt:-1,hideCnt:!0})}).fail(function(){t.reject("errRestore","errFileNotFound")}).done(function(i){var a=["errRestore","errFolderNotFound"],o="";i.length?(e.each(i,function(t,i){for(var a,r,s,l=i.phash;l;){if(r=n.trashes[l]){if(!d[r]){if(u)return p.push(i.hash),null;d[r]={},u=!0}s=n.path(i.hash).substr(n.path(l).length).replace(/\\/g,"/"),s=s.replace(/\/[^\/]+?$/,""),""===s&&(s="/"),d[r][s]||(d[r][s]=[]),"fakefile"===i.mime?n.updateCache({removed:[i.hash]}):d[r][s].push(i.hash),(!o||o.length>s.length)&&(o=s);break}a=n.file(l),a?l=a.phash:(l=!1,e.each(n.trashes,function(e){var t=n.file(e),a=n.path(e);if((!t.volumeid||0===i.hash.indexOf(t.volumeid))&&0===n.path(i.hash).indexOf(a))return l=e,!1}))}}),u?e.each(d,function(i,s){var l=Object.keys(s),c=l.length;n.request({data:{cmd:"mkdir",target:i,dirs:l},notify:{type:"chkdir",cnt:c},preventFail:!0}).fail(function(e){t.reject(e),n.unlockfiles({files:r})}).done(function(i){var r,l;(l=i.hashes)?(r=n.getCommand("paste"),r?n.one("mkdirdone",function(){var i=!1;e.each(s,function(e,r){l[e]&&(r.length?n.file(l[e])?(n.clipboard(r,!0),n.exec("paste",[l[e]],{_cmd:"restore",noToast:f.noToast||e!==o}).done(function(e){e&&(e.error||e.warning)&&(i=!0)}).fail(function(){i=!0}).always(function(){--c<1&&(t[i?"reject":"resolve"](),p.length&&n.exec("restore",p))})):t.reject(a):--c<1&&(t.resolve(),p.length&&n.exec("restore",p)))})}):t.reject(["errRestore","errCmdNoSupport","(paste)"])):t.reject(a)})}):t.reject(a)):(t.reject("errFileNotFound"),h&&n.exec("rm",h,{forceRm:!0,quiet:!0}))})};this.restore=o,this.linkedCmds=["copy","paste","mkdir","rm"],this.updateOnSelect=!1,this.init=function(){t=this,n=this.fm},this.getstate=function(t,i){return t=t||n.selected(),t.length&&e.grep(t,function(e){var t=n.file(e);return!(!t||t.locked||n.isRoot(t))}).length==t.length?0:-1},this.exec=function(i,a){var o=e.Deferred().fail(function(e){e&&n.error(e)}),r=t.files(i);return r.length?(e.each(r,function(e,t){return n.isRoot(t)?!o.reject(["errRestore",t.name]):t.locked?!o.reject(["errLocked",t.name]):void 0}),"pending"===o.state()&&this.restore(o,r,i,a),o):o.reject()}}).prototype={forceLoad:!0},i.prototype.commands.rm=function(){"use strict";var t=this,n=this.fm,i='<div class="ui-helper-clearfix elfinder-rm-title"><span class="elfinder-cwd-icon {class} ui-corner-all"/>{title}<div class="elfinder-rm-desc">{desc}</div></div>',a=function(a,o,s,c,d){var p,u,h,f,m,g,v=o.length,b=n.cwd().hash,y=[],w=n.i18n("calc")+'<span class="elfinder-spinner"/>';v>1?(f=0,e.each(s,function(e,t){if(!t.size||"unknown"==t.size||"directory"===t.mime)return f="unknown",!1;var n=parseInt(t.size);n>=0&&f>=0&&(f+=n)}),l="unknown"===f,y.push(n.i18n("size")+": "+(l?w:n.formatSize(f))),u=[e(i.replace("{class}","elfinder-cwd-icon-group").replace("{title}","<strong>"+n.i18n("items")+": "+v+"</strong>").replace("{desc}",y.join("<br>")))]):(m=s[0],h=n.tmb(m),l="directory"===m.mime,y.push(n.i18n("size")+": "+(l?w:n.formatSize(m.size))),y.push(n.i18n("modify")+": "+n.formatDate(m)),g=n.escape(m.i18||m.name).replace(/([_.])/g,"​$1"),u=[e(i.replace("{class}",n.mime2class(m.mime)).replace("{title}","<strong>"+g+"</strong>").replace("{desc}",y.join("<br>")))]),d&&(u=u.concat(d)),u.push(c?"confirmTrash":"confirmRm"),p=n.confirm({title:t.title,text:u,accept:{label:"btnRm",callback:function(){c?t.toTrash(a,o,c):r(a,o)}},cancel:{label:"btnCancel",callback:function(){n.unlockfiles({files:o}),1===o.length&&n.file(o[0]).phash!==b?n.select({selected:o}):n.selectfiles({files:o}),a.reject()}}}),h&&e("<img/>").on("load",function(){p.find(".elfinder-cwd-icon").addClass(h.className).css("background-image","url('"+h.url+"')")}).attr("src",h.url),l&&(l=n.getSize(e.map(s,function(e){return"directory"===e.mime?e.hash:null})).done(function(e){p.find("span.elfinder-spinner").parent().html(n.i18n("size")+": "+e.formated)}).fail(function(){p.find("span.elfinder-spinner").parent().html(n.i18n("size")+": "+n.i18n("unknown"))}).always(function(){l=!1}))},o=function(i,a,o){var r,s,l,c={},d=a.length,p=t.options.toTrashMaxItems,u=[],h=e.Deferred();return d>p?void t.confirm(i,a,t.files(a),null,[n.i18n("tooManyToTrash")]):(e.each(a,function(e,t){var i=n.file(t),a=n.path(t).replace(/\\/g,"/"),o=a.match(/^[^\/]+?(\/(?:[^\/]+?\/)*)[^\/]+?$/);i&&(o&&(o[1]=o[1].replace(/(^\/.*?)\/?$/,"$1"),c[o[1]]||(c[o[1]]=[]),c[o[1]].push(t)),"directory"===i.mime&&u.push(t))}),u.length?(r=n.request({data:{cmd:"size",targets:u},notify:{type:"readdir",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){var t=0;e.fileCnt&&(t+=parseInt(e.fileCnt)),e.dirCnt&&(t+=parseInt(e.dirCnt)),h[t>p?"reject":"resolve"]()}).fail(function(){h.reject()}),setTimeout(function(){var e=r&&r.xhr?r.xhr:null;e&&"pending"==e.state()&&(r.syncOnFail(!1),r.reject(),h.reject())},1e3*t.options.infoCheckWait)):h.resolve(),void h.done(function(){s=Object.keys(c),l=s.length,l?n.request({data:{cmd:"mkdir",target:o,dirs:s},notify:{type:"chkdir",cnt:l},preventFail:!0}).fail(function(e){i.reject(e),n.unlockfiles({files:a})}).done(function(t){var o,r,s,d,p=function(t,i,o){var r,s,l,c;e.each(t,function(e,t){Array.isArray(t)&&(h[e]?h[e]=h[e].concat(t):h[e]=t)}),t.sync&&(h.sync=1),t.added&&t.added.length&&(r=function(){var i=[],a=e.map(t.added,function(e){return"directory"===e.mime?e.hash:null});return e.each(t.added,function(t,n){e.inArray(n.phash,a)===-1&&i.push(n.hash)}),n.exec("restore",i,{noToast:!0})},l=function(){return n.request({data:o,notify:{type:"redo",cnt:a.length}})},h.undo?(s=h.undo,h.undo=function(){r(),s()}):h.undo=r,h.redo?(c=h.redo,h.redo=function(){l(),c()}):h.redo=l)},u=["errTrash"],h={},f=function(){return n.ui.notify.children(".elfinder-notify-trash").length};(o=t.hashes)?(s=1/l*100,d=1===l?100:5,r=setTimeout(function(){n.notify({type:"trash",cnt:1,hideCnt:!0,progress:d})},n.notifyDelay),e.each(c,function(t,c){var m,g=n.file(c[0]).phash;o[t]&&(m={cmd:"paste",dst:o[t],targets:c,cut:1},n.request({data:m,preventDefault:!0}).fail(function(e){e&&(u=u.concat(e))}).done(function(e){e=n.normalize(e),n.updateCache(e),p(e,g,m),e.warning&&(u=u.concat(e.warning),delete e.warning),e.removed&&e.removed.length&&n.remove(e),e.added&&e.added.length&&n.add(e),e.changed&&e.changed.length&&n.change(e),n.trigger("paste",e),n.trigger("pastedone"),e.sync&&n.sync()}).always(function(){var t=[],o=2;f()?n.notify({type:"trash",cnt:0,hideCnt:!0,progress:s}):d+=s,--l<1&&(r&&clearTimeout(r),f()&&n.notify({type:"trash",cnt:-1}),n.unlockfiles({files:a}),Object.keys(h).length?(u.length>1&&((h.removed||h.removed.length)&&(t=e.grep(a,function(t){return e.inArray(t,h.removed)===-1})),t.length?(u.length>o&&(o=(n.messages[u[o-1]]||"").indexOf("$")===-1?o:o+1),i.reject(),n.exec("rm",t,{addTexts:u.slice(0,o),forceRm:!0})):n.error(u)),h._noSound=!0,h.undo&&h.redo&&(h.undo={cmd:"trash",callback:h.undo},h.redo={cmd:"trash",callback:h.redo}),i.resolve(h)):i.reject(u))}))})):(i.reject("errFolderNotFound"),n.unlockfiles({files:a}))}):(i.reject(["error","The folder hierarchy to be deleting can not be determined."]),n.unlockfiles({files:a}))}).fail(function(){t.confirm(i,a,t.files(a),null,[n.i18n("tooManyToTrash")])}))},r=function(e,t,i){var a=i?{}:{type:"rm",cnt:t.length};n.request({data:{cmd:"rm",targets:t},notify:a,preventFail:!0}).fail(function(t){e.reject(t)}).done(function(t){(t.error||t.warning)&&(t.sync=!0),e.resolve(t)}).always(function(){n.unlockfiles({files:t})})},s=function(t){var i,a=null;return t&&t.length&&(t.length>1&&2===n.searchStatus.state?(i=n.file(n.root(t[0])).volumeid,e.grep(t,function(e){return 0!==e.indexOf(i)}).length||(a=n.option("trashHash",t[0]))):a=n.option("trashHash",t[0])),a},l=!1;this.confirm=a,this.toTrash=o,this.remove=r,this.syncTitleOnChange=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"delete ctrl+backspace shift+delete"}],this.value="rm",this.init=function(){t=this,n=this.fm,t.change(function(){var i;delete t.extra,t.title=n.i18n("cmd"+t.value),t.className=t.value,t.button&&t.button.children("span.elfinder-button-icon")["trash"===t.value?"addClass":"removeClass"]("elfinder-button-icon-trash"),"trash"===t.value&&(t.extra={icon:"rm",node:e("<span/>").attr({title:n.i18n("cmdrm")}).on("ready",function(e,t){i=t.targets}).on("click touchstart",function(e){"touchstart"===e.type&&e.originalEvent.touches.length>1||(e.stopPropagation(),e.preventDefault(),n.getUI().trigger("click"),n.exec("rm",i,{_userAction:!0,forceRm:!0}))})})})},this.getstate=function(t){var i=this.hashes(t);return i.length&&e.grep(i,function(e){var t=n.file(e);return!(!t||t.locked||n.isRoot(t))}).length==i.length?0:-1},this.exec=function(i,a){var o,c=a||{},d=e.Deferred().always(function(){l&&l.state&&"pending"===l.state()&&l.reject()}).fail(function(e){e&&n.error(e)}).done(function(e){!c.quiet&&!e._noSound&&e.removed&&e.removed.length&&n.trigger("playsound",{soundFile:"rm.wav"})}),p=t.files(i),u=p.length,h=null,f=c.addTexts?c.addTexts:null,m=c.forceRm,g=c.quiet;return u?(e.each(p,function(e,t){return n.isRoot(t)?!d.reject(["errRm",t.name,"errPerm"]):t.locked?!d.reject(["errLocked",t.name]):void 0}),"pending"===d.state()&&(o=t.hashes(i),u=p.length,(m||t.event&&t.event.originalEvent&&t.event.originalEvent.shiftKey)&&(h="",t.title=n.i18n("cmdrm")),null===h&&(h=s(o)),n.lockfiles({files:o}),h&&t.options.quickTrash?t.toTrash(d,o,h):g?r(d,o,g):t.confirm(d,o,p,h,f)),d):d.reject()},n.bind("select contextmenucreate closecontextmenu",function(e){var i=(e.data?e.data.selected||e.data.targets:null)||n.selected();i&&i.length&&t.update(void 0,(i?s(i):n.option("trashHash"))?"trash":"rm")})},i.prototype.commands.search=function(){"use strict";this.title="Find files",this.options={ui:"searchbutton"},this.alwaysEnabled=!0,this.updateOnSelect=!1,this.getstate=function(){return 0},this.exec=function(t,n,i,a){var o,r=this.fm,s=[],l=a||"",c=r.options.onlyMimes,d=[],p=function(e){return l&&"SearchName"!==l&&"SearchMime"!==l&&(e.type=l),e};return"string"==typeof t&&t?("object"==typeof n&&(i=n.mime||"",n=n.target||""),n=n?n:"",i?(i=e.trim(i).replace(","," ").split(" "),c.length&&(i=e.map(i,function(t){return t=e.trim(t),t&&(e.inArray(t,c)!==-1||e.grep(c,function(e){return 0===t.indexOf(e)}).length)?t:null}))):i=[].concat(c),r.trigger("searchstart",p({query:t,target:n,mimes:i})),!c.length||i.length?""===n&&r.api>=2.1?e.each(r.roots,function(e,n){s.push(r.request({data:p({cmd:"search",q:t,target:n,mimes:i}),notify:{type:"search",cnt:1,hideCnt:!s.length},cancel:!0,preventDone:!0}))}):(s.push(r.request({data:p({cmd:"search",q:t,target:n,mimes:i}),notify:{type:"search",cnt:1,hideCnt:!0},cancel:!0,preventDone:!0})),""!==n&&r.api>=2.1&&Object.keys(r.leafRoots).length&&e.each(r.leafRoots,function(a,l){for(o=a;o;)n===o&&e.each(l,function(){var e=r.file(this);e&&e.volumeid&&d.push(e.volumeid),s.push(r.request({data:p({cmd:"search",q:t,target:this,mimes:i}),notify:{type:"search",cnt:1,hideCnt:!1},cancel:!0,preventDone:!0}))}),o=(r.file(o)||{}).phash})):s=[e.Deferred().resolve({files:[]})],r.searchStatus.mixed=s.length>1&&d,e.when.apply(e,s).done(function(e){var t,n=arguments.length;if(e.warning&&r.error(e.warning),n>1)for(e.files=e.files||[],t=1;t<n;t++)arguments[t].warning&&r.error(arguments[t].warning),arguments[t].files&&e.files.push.apply(e.files,arguments[t].files);e.files&&e.files.length&&r.cache(e.files),r.lazy(function(){r.trigger("search",e)}).then(function(){return r.lazy(function(){r.trigger("searchdone")})}).then(function(){e.sync&&r.sync()})})):(r.getUI("toolbar").find("."+r.res("class","searchbtn")+" :text").trigger("focus"),e.Deferred().reject())}},i.prototype.commands.selectall=function(){"use strict";var t=0;this.fm.bind("select",function(e){t=e.data&&e.data.selectall?-1:0}),this.state=0,this.updateOnSelect=!1,this.getstate=function(){return t},this.exec=function(){return e(document).trigger(e.Event("keydown",{keyCode:65,ctrlKey:!0,shiftKey:!1,altKey:!1,metaKey:!1})),e.Deferred().resolve()}},i.prototype.commands.selectinvert=function(){"use strict";this.updateOnSelect=!1,this.getstate=function(){return 0},this.exec=function(){return e(document).trigger(e.Event("keydown",{keyCode:73,ctrlKey:!0,shiftKey:!0,altKey:!1,metaKey:!1})),e.Deferred().resolve()}},i.prototype.commands.selectnone=function(){"use strict";var t=this.fm,n=-1;t.bind("select",function(e){n=e.data&&e.data.unselectall?-1:0}),this.state=-1,this.updateOnSelect=!1,this.getstate=function(){return n},this.exec=function(){return t.getUI("cwd").trigger("unselectall"),e.Deferred().resolve()}},i.prototype.commands.sort=function(){"use strict";var t=this,n=t.fm,i=function(){t.variants=[],e.each(n.sortRules,function(e,i){if(n.sorters[e]){var a=e===n.sortType?"asc"===n.sortOrder?"n":"s":"";t.variants.push([e,(a?'<span class="ui-icon ui-icon-arrowthick-1-'+a+'"></span>':"")+" "+n.i18n("sort"+e)])}}),t.variants.push("|"),t.variants.push(["stick",(n.sortStickFolders?'<span class="ui-icon ui-icon-check"/>':"")+" "+n.i18n("sortFoldersFirst")]),n.ui.tree&&null!==n.options.sortAlsoTreeview&&(t.variants.push("|"),t.variants.push(["tree",(n.sortAlsoTreeview?'<span class="ui-icon ui-icon-check"/>':"")+" "+n.i18n("sortAlsoTreeview")])),a()},a=function(){var t,i,a=n.getUI("contextmenu");a.is(":visible")&&(t=a.find("span.elfinder-button-icon-sort"),i=t.siblings("div.elfinder-contextmenu-sub"),i.find("span.ui-icon").remove(),i.children("div.elfinder-contextsubmenu-item").each(function(){var t,i=e(this).children("span"),a=i.text().trim();a===(o.stick||(o.stick=n.i18n("sortFoldersFirst")))?n.sortStickFolders&&i.prepend('<span class="ui-icon ui-icon-check"/>'):a===(o.tree||(o.tree=n.i18n("sortAlsoTreeview")))?n.sortAlsoTreeview&&i.prepend('<span class="ui-icon ui-icon-check"/>'):a===(o[n.sortType]||(o[n.sortType]=n.i18n("sort"+n.sortType)))&&(t="asc"===n.sortOrder?"n":"s",i.prepend('<span class="ui-icon ui-icon-arrowthick-1-'+t+'"></span>'))}))},o={};this.options={ui:"sortbutton"},this.keepContextmenu=!0,n.bind("sortchange",i).bind("sorterupdate",function(){i(),n.getUI("toolbar").find(".elfiner-button-sort .elfinder-button-menu .elfinder-button-menu-item").each(function(){var t=e(this),i=t.attr("rel");t.toggle(!i||n.sorters[i])})}).bind("cwdrender",function(){var t=e(n.cwd).find("div.elfinder-cwd-wrapper-list table");t.length&&e.each(n.sortRules,function(i,a){var o=t.find("thead tr td.elfinder-cwd-view-th-"+i);if(o.length){var r,s=i==n.sortType,l={type:i,order:s?"asc"==n.sortOrder?"desc":"asc":n.sortOrder};s&&(o.addClass("ui-state-active"),r="asc"==n.sortOrder?"n":"s",e('<span class="ui-icon ui-icon-triangle-1-'+r+'"/>').appendTo(o)),e(o).on("click",function(t){e(this).data("dragging")||(t.stopPropagation(),n.getUI("cwd").data("longtap")||n.exec("sort",[],l))}).on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"===t.type)})}})}),this.getstate=function(){return 0},this.exec=function(t,n){var i=this.fm,a=e.isPlainObject(n)?n:function(){n+="";var e={};return"stick"===n?e.stick=!i.sortStickFolders:"tree"===n?e.tree=!i.sortAlsoTreeview:i.sorters[n]&&(i.sortType===n?e.order="asc"===i.sortOrder?"desc":"asc":e.type=n),e}(),o=Object.assign({type:i.sortType,order:i.sortOrder,stick:i.sortStickFolders,tree:i.sortAlsoTreeview},a);return i.lazy(function(){i.setSort(o.type,o.order,o.stick,o.tree),this.resolve()})}},i.prototype.commands.undo=function(){"use strict";var t=this,n=this.fm,i=function(e){e?(t.title=n.i18n("cmdundo")+" "+n.i18n("cmd"+e.cmd),t.state=0):(t.title=n.i18n("cmdundo"),t.state=-1),t.change()},a=[];this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+z"}],this.syncTitleOnChange=!0,this.getstate=function(){return a.length?0:-1},this.setUndo=function(t,o){var r={};t&&e.isPlainObject(t)&&t.cmd&&t.callback&&(Object.assign(r,t),o?(delete o.undo,r.redo=o):n.getCommand("redo").setRedo(null),a.push(r),i(r))},this.exec=function(){var t,o,r=n.getCommand("redo"),s=e.Deferred(),l={};return a.length?(t=a.pop(),t.redo?(Object.assign(l,t.redo),delete t.redo):l=null,s.done(function(){l&&r.setRedo(l,t)}),i(a.length?a[a.length-1]:void 0),o=t.callback(),o&&o.done?o.done(function(){s.resolve()}).fail(function(){s.reject()}):s.resolve(),a.length?this.update(0,a[a.length-1].name):this.update(-1,"")):s.reject(),s},n.bind("exec",function(e){var n=e.data||{};n.opts&&n.opts._userAction&&n.dfrd&&n.dfrd.done&&n.dfrd.done(function(e){e&&e.undo&&e.redo&&(e.undo.redo=e.redo,t.setUndo(e.undo))})})},i.prototype.commands.redo=function(){"use strict";var t=this,n=this.fm,i=function(e){e&&e.callback?(t.title=n.i18n("cmdredo")+" "+n.i18n("cmd"+e.cmd),t.state=0):(t.title=n.i18n("cmdredo"),t.state=-1),t.change()},a=[];this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"shift+ctrl+z ctrl+y"}],this.syncTitleOnChange=!0,this.getstate=function(){return a.length?0:-1},this.setRedo=function(e,t){null===e?(a=[],i()):e&&e.cmd&&e.callback&&(t&&(e.undo=t),a.push(e),i(e))},this.exec=function(){var t,o,r=n.getCommand("undo"),s=e.Deferred(),l={},c={};return a.length?(t=a.pop(),t.undo&&(Object.assign(l,t.undo),Object.assign(c,t),delete c.undo,s.done(function(){r.setUndo(l,c)})),i(a.length?a[a.length-1]:void 0),o=t.callback(),o&&o.done?o.done(function(){s.resolve()}).fail(function(){s.reject()}):s.resolve(),s):s.reject()}},(i.prototype.commands.up=function(){"use strict";this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+up"}],this.getstate=function(){return this.fm.cwd().phash?0:-1},this.exec=function(){var t=this.fm,n=t.cwd().hash;return this.fm.cwd().phash?this.fm.exec("open",this.fm.cwd().phash).done(function(){t.one("opendone",function(){t.selectfiles({files:[n]})})}):e.Deferred().reject()}}).prototype={forceLoad:!0},i.prototype.commands.upload=function(){"use strict";var t=this.fm.res("class","hover");this.disableOnSearch=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+u"}],this.getstate=function(e){var t,n=this.fm,i=e||[n.cwd().hash];return this._disabled||1!=i.length||(t=n.file(i[0])),t&&"directory"==t.mime&&t.write?0:-1},this.exec=function(n){var i,a,o,r,s,l,c,d=this.fm,p=d.cwd().hash,u=function(){var e,t=n&&n instanceof Array?n:null;return(!n||n instanceof Array)&&(t||1!==(e=d.selected()).length||"directory"!==d.file(e[0]).mime?t&&1===t.length&&"directory"===d.file(t[0]).mime||(t=[p]):t=e),t},h=u(),f=h?h[0]:n&&n.target?n.target:null,m=f?d.file(f):d.cwd(),g=function(t){d.upload(t).fail(function(e){w.reject(e)}).done(function(t){var n;d.getUI("cwd");if(w.resolve(t),t&&t.added&&t.added[0]&&!d.ui.notify.children(".elfinder-notify-upload").length){var i=d.findCwdNodes(t.added);i.length?i.trigger("scrolltoview"):(m.hash!==p?n=e("<div/>").append(e('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"><span class="ui-button-text">'+d.i18n("cmdopendir")+"</span></button>").on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"==t.type)}).on("click",function(){d.exec("open",f).done(function(){d.one("opendone",function(){d.trigger("selectfiles",{files:e.map(t.added,function(e){return e.hash})})})})})):d.trigger("selectfiles",{files:e.map(t.added,function(e){return e.hash})}),d.toast({msg:d.i18n(["complete",d.i18n("cmdupload")]),extNode:n}))}}).progress(function(){w.notifyWith(this,Array.from(arguments))})},v=function(e){i.elfinderdialog("close"),h&&(e.target=h[0]),g(e)},b=function(){var t=m.hash,n=e.map(d.files(t),function(e){
+return"directory"===e.mime&&e.write?e:null});return n.length?e('<div class="elfinder-upload-dirselect elfinder-tabstop" title="'+d.i18n("folders")+'"/>').on("click",function(t){t.stopPropagation(),t.preventDefault(),n=d.sortFiles(n);var a=e(this),o=(d.cwd(),i.closest("div.ui-dialog")),r=function(e,t){return{label:d.escape(e.i18||e.name),icon:t,remain:!1,callback:function(){var t=o.children(".ui-dialog-titlebar:first").find("span.elfinder-upload-target");h=[e.hash],t.html(" - "+d.escape(e.i18||e.name)),a.trigger("focus")},options:{className:h&&h.length&&e.hash===h[0]?"ui-state-active":"",iconClass:e.csscls||"",iconImg:e.icon||""}}},s=[r(m,"opendir"),"|"];e.each(n,function(e,t){s.push(r(t,"dir"))}),a.trigger("blur"),d.trigger("contextmenu",{raw:s,x:t.pageX||e(this).offset().left,y:t.pageY||e(this).offset().top,prevNode:o,fitHeight:!0})}).append('<span class="elfinder-button-icon elfinder-button-icon-dir" />'):e()},y=function(n,i){var a=e('<input type="file" '+n+"/>").on("click",function(){d.UA.IE&&setTimeout(function(){o.css("display","none").css("position","relative"),requestAnimationFrame(function(){o.css("display","").css("position","")})},100)}).on("change",function(){v({input:a.get(0),type:"files"})}).on("dragover",function(e){e.originalEvent.dataTransfer.dropEffect="copy"}),o=e("<form/>").append(a).on("click",function(e){e.stopPropagation()});return e('<div class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only elfinder-tabstop elfinder-focus"><span class="ui-button-text">'+d.i18n(i)+"</span></div>").append(o).on("click",function(e){e.stopPropagation(),e.preventDefault(),a.trigger("click")}).on("mouseenter mouseleave",function(n){e(this).toggleClass(t,"mouseenter"===n.type)})},w=e.Deferred();return r=function(t){t.stopPropagation(),t.preventDefault();var n,i=!1,a="",o=null,r="",s=null,l=t._target||null,c=t.dataTransfer||null,p=c.items&&c.items.length&&c.items[0].kind?c.items[0].kind:"";if(c){try{if(o=c.getData("elfinderfrom"),o&&(r=window.location.href+d.cwd().hash,!l&&o===r||l===r))return void w.reject()}catch(t){}if("file"===p&&(c.items[0].getAsEntry||c.items[0].webkitGetAsEntry))i=c,a="data";else if("string"!==p&&c.files&&c.files.length&&e.inArray("Text",c.types)===-1)i=c.files,a="files";else{try{(s=c.getData("text/html"))&&s.match(/<(?:img|a)/i)&&(i=[s],a="html")}catch(t){}i||((s=c.getData("text"))?(i=[s],a="text"):c&&c.files&&(p="file"))}}i?g({files:i,type:a,target:l,dropEvt:t}):(n=["errUploadNoFiles"],"file"===p&&n.push("errFolderUpload"),d.error(n),w.reject())},!h&&n?(n.input||n.files?(n.type="files",g(n)):n.dropEvt&&r(n.dropEvt),w):(s=function(t){var n,i=t.originalEvent||t,a=[],o=[];if(i.clipboardData){if(i.clipboardData.items&&i.clipboardData.items.length){o=i.clipboardData.items;for(var r=0;r<o.length;r++)"file"==i.clipboardData.items[r].kind&&(n=i.clipboardData.items[r].getAsFile(),a.push(n))}else i.clipboardData.files&&i.clipboardData.files.length&&(a=i.clipboardData.files);if(a.length)return void v({files:a,type:"files",clipdata:!0})}var s=i.target||i.srcElement;requestAnimationFrame(function(){var t,n="text";s.innerHTML&&(e(s).find("img").each(function(t,n){n.src.match(/^webkit-fake-url:\/\//)&&e(n).remove()}),e(s).find("a,img").length&&(n="html"),t=s.innerHTML,s.innerHTML="",v({files:[t],type:n}))})},i=e('<div class="elfinder-upload-dialog-wrapper"/>').append(y("multiple","selectForUpload")),!d.UA.Mobile&&function(e){return"undefined"!=typeof e.webkitdirectory||"undefined"!=typeof e.directory}(document.createElement("input"))&&i.append(y("multiple webkitdirectory directory","selectFolder")),m.dirs&&(m.hash===p||d.navHash2Elm(m.hash).hasClass("elfinder-subtree-loaded")?b().appendTo(i):(l=e('<div class="elfinder-upload-dirselect" title="'+d.i18n("nowLoading")+'"/>').append('<span class="elfinder-button-icon elfinder-button-icon-spinner" />').appendTo(i),d.request({cmd:"tree",target:m.hash}).done(function(){d.one("treedone",function(){l.replaceWith(b()),c.elfinderdialog("tabstopsInit")})}).fail(function(){l.remove()}))),d.dragUpload?a=e('<div class="ui-corner-all elfinder-upload-dropbox elfinder-tabstop" contenteditable="true" data-ph="'+d.i18n("dropPasteFiles")+'"></div>').on("paste",function(e){s(e)}).on("mousedown click",function(){e(this).trigger("focus")}).on("focus",function(){this.innerHTML=""}).on("mouseover",function(){e(this).addClass(t)}).on("mouseout",function(){e(this).removeClass(t)}).on("dragenter",function(n){n.stopPropagation(),n.preventDefault(),e(this).addClass(t)}).on("dragleave",function(n){n.stopPropagation(),n.preventDefault(),e(this).removeClass(t)}).on("dragover",function(n){n.stopPropagation(),n.preventDefault(),n.originalEvent.dataTransfer.dropEffect="copy",e(this).addClass(t)}).on("drop",function(e){i.elfinderdialog("close"),h&&(e.originalEvent._target=h[0]),r(e.originalEvent)}).prependTo(i).after('<div class="elfinder-upload-dialog-or">'+d.i18n("or")+"</div>")[0]:o=e('<div class="ui-corner-all elfinder-upload-dropbox" contenteditable="true">'+d.i18n("dropFilesBrowser")+"</div>").on("paste drop",function(e){s(e)}).on("mousedown click",function(){e(this).trigger("focus")}).on("focus",function(){this.innerHTML=""}).on("dragenter mouseover",function(){e(this).addClass(t)}).on("dragleave mouseout",function(){e(this).removeClass(t)}).prependTo(i).after('<div class="elfinder-upload-dialog-or">'+d.i18n("or")+"</div>")[0],c=this.fmDialog(i,{title:this.title+'<span class="elfinder-upload-target">'+(m?" - "+d.escape(m.i18||m.name):"")+"</span>",modal:!0,resizable:!1,destroyOnClose:!0,propagationEvents:["mousemove","mouseup","click"],close:function(){var e=d.getUI("contextmenu");e.is(":visible")&&e.click()}}),w)}},i.prototype.commands.view=function(){"use strict";var t,n=this,i=this.fm;this.value=i.viewType,this.alwaysEnabled=!0,this.updateOnSelect=!1,this.options={ui:"viewbutton"},this.getstate=function(){return 0},this.extra={icon:"menu",node:e("<span/>").attr({title:i.i18n("viewtype")}).on("click touchstart",function(t){if(!("touchstart"===t.type&&t.originalEvent.touches.length>1)){var n=e(this);t.stopPropagation(),t.preventDefault(),i.trigger("contextmenu",{raw:getSubMenuRaw(),x:n.offset().left,y:n.offset().top})}})},this.exec=function(){var e=this,t=i.storage("view","list"==this.value?"icons":"list");return i.lazy(function(){i.viewchange(),e.update(void 0,t),this.resolve()})},i.bind("init",function(){t=function(){var e,t=i.getUI("cwd"),a=[],o=i.options.uiOptions.cwd.iconsView.sizeNames,r=i.options.uiOptions.cwd.iconsView.sizeMax;for(e=0;e<=r;e++)a.push({label:i.i18n(o[e]||"Size-"+e+" icons"),icon:"view",callback:function(e){return function(){t.trigger("iconpref",{size:e}),i.storage("iconsize",e),"list"===n.value&&n.exec()}}(e)});return a.push("|"),a.push({label:i.i18n("viewlist"),icon:"view-list",callback:function(){"list"!==n.value&&n.exec()}}),a}()}).bind("contextmenucreate",function(){n.extra={icon:"menu",node:e("<span/>").attr({title:i.i18n("cmdview")}).on("click touchstart",function(a){if(!("touchstart"===a.type&&a.originalEvent.touches.length>1)){var o,r,s=e(this);t.concat();for(o="list"===n.value?t.length-1:parseInt(i.storage("iconsize")||0),r=0;r<t.length;r++)"|"!==t[r]&&(t[r].options=r===o?{className:"ui-state-active"}:void 0);a.stopPropagation(),a.preventDefault(),i.trigger("contextmenu",{raw:t,x:s.offset().left,y:s.offset().top})}})}})},i});
\ No newline at end of file
--- /dev/null
+(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,
+ hasFlash = (function() {
+ var hasFlash;
+ try {
+ hasFlash = !!(new ActiveXObject('ShockwaveFlash.ShockwaveFlash'));
+ } catch (e) {
+ hasFlash = !!(typeof window.orientation === 'undefined' || (navigator && navigator.mimeTypes["application/x-shockwave-flash"]));
+ }
+ return hasFlash;
+ })(),
+ 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'
+ },
+ mime2ext,
+ getExtention = function(mime, fm) {
+ if (!mime2ext) {
+ mime2ext = fm.arrayFlip(ext2mime);
+ }
+ var ext = mime2ext[mime] || fm.mimeTypes[mime];
+ if (ext === 'jpeg') {
+ ext = 'jpg';
+ }
+ return ext;
+ },
+ changeImageType = function(src, toMime) {
+ var dfd = $.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;
+ $(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 = $(this).children('img:first').data('ext', getExtention(file.mime, fm)),
+ spnr = $('<div class="elfinder-edit-spinner elfinder-edit-image"/>')
+ .html('<span class="elfinder-spinner-text">' + fm.i18n('ntfloadimg') + '</span><span class="elfinder-spinner"/>')
+ .hide()
+ .appendTo(this),
+ url;
+
+ if (!content.match(/^data:/)) {
+ url = fm.openUrl(file.hash);
+ node.attr('_src', content);
+ }
+ 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;
+ });
+ },
+ 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;
+ },
+ pixlrCallBack = function() {
+ if (!hasFlash || window.parent === window) {
+ return;
+ }
+ var pixlr = window.location.search.match(/[?&]pixlr=([^&]+)/),
+ image = window.location.search.match(/[?&]image=([^&]+)/),
+ p, ifm, url, node, ext;
+ if (pixlr) {
+ // case of redirected from pixlr.com
+ p = window.parent;
+ ifm = p.$('#'+pixlr[1]+'iframe').hide();
+ node = p.$('#'+pixlr[1]).data('resizeoff')();
+ if (image[1].substr(0, 4) === 'http') {
+ url = image[1];
+ ext = url.replace(/.+\.([^.]+)$/, '$1');
+ if (node.data('ext') !== ext) {
+ node.closest('.ui-dialog').trigger('changeType', {
+ extention: ext,
+ mime : ext2mime[ext]
+ });
+ }
+ if (window.location.protocol === 'https:') {
+ url = url.replace(/^http:/, 'https:');
+ }
+ node.on('load error', function() {
+ node.data('loading')(true);
+ })
+ .attr('src', url)
+ .data('loading')();
+ } else {
+ node.data('loading')(true);
+ }
+ ifm.trigger('destroy').remove();
+ }
+ },
+ pixlrSetup = function(opts, fm) {
+ if (!hasFlash || fm.UA.ltIE8) {
+ this.disabled = true;
+ }
+ },
+ pixlrLoad = function(mode, base) {
+ var self = this,
+ fm = this.fm,
+ clPreventBack = fm.res('class', 'preventback'),
+ node = $(base).children('img:first')
+ .data('loading')()
+ .data('resizeoff', function() {
+ $(window).off('resize.'+node.attr('id'));
+ dialog.addClass(clPreventBack);
+ return node;
+ })
+ .on('click', function() {
+ launch();
+ }),
+ dialog = $(base).closest('.ui-dialog'),
+ elfNode = fm.getUI(),
+ uiToast = fm.getUI('toast'),
+ container = $('<iframe class="ui-front" allowtransparency="true">'),
+ file = this.file,
+ timeout = 15,
+ error = function(error) {
+ if (error) {
+ container.trigger('destroy').remove();
+ node.data('loading')(true);
+ fm.error(error);
+ } else {
+ uiToast.appendTo(dialog.closest('.ui-dialog'));
+ fm.toast({
+ mode: 'info',
+ msg: 'Can not launch Pixlr yet. Waiting ' + timeout + ' seconds.',
+ button: {
+ text: 'Abort',
+ click: function() {
+ container.trigger('destroy').remove();
+ node.data('loading')(true);
+ }
+ },
+ onHidden: function() {
+ uiToast.children().length === 1 && uiToast.appendTo(fm.getUI());
+ }
+ });
+ errtm = setTimeout(error, timeout * 1000);
+ }
+ },
+ launch = function() {
+ var src = 'https://pixlr.com/'+mode+'/?s=c',
+ myurl = window.location.href.toString().replace(/#.*$/, ''),
+ opts = {};
+
+ errtm = setTimeout(error, timeout * 1000);
+ myurl += (myurl.indexOf('?') === -1? '?' : '&') + 'pixlr='+node.attr('id');
+ src += '&referrer=elFinder&locktitle=true';
+ src += '&exit='+encodeURIComponent(myurl+'&image=0');
+ src += '&target='+encodeURIComponent(myurl);
+ src += '&title='+encodeURIComponent(file.name);
+ src += '&image='+encodeURIComponent(node.attr('_src'));
+
+ opts.src = src;
+ opts.css = {
+ width: '100%',
+ height: $(window).height()+'px',
+ position: 'fixed',
+ display: 'block',
+ backgroundColor: 'transparent',
+ border: 'none',
+ top: 0,
+ right: 0
+ };
+
+ // trigger event 'editEditorPrepare'
+ self.trigger('Prepare', {
+ node: base,
+ editorObj: void(0),
+ instance: container,
+ opts: opts
+ });
+
+ container
+ .attr('id', node.attr('id')+'iframe')
+ .attr('src', opts.src)
+ .css(opts.css)
+ .one('load', function() {
+ errtm && clearTimeout(errtm);
+ setTimeout(function() {
+ if (container.is(':hidden')) {
+ error('Please disable your ad blocker.');
+ }
+ }, 1000);
+ dialog.addClass(clPreventBack);
+ fm.toggleMaximize(container, true);
+ fm.toFront(container);
+ })
+ .on('destroy', function() {
+ fm.toggleMaximize(container, false);
+ })
+ .on('error', error)
+ .appendTo(elfNode.hasClass('elfinder-fullscreen')? elfNode : 'body');
+ },
+ errtm;
+ $(base).on('saveAsFail', launch);
+ launch();
+ },
+ iframeClose = function(ifm) {
+ var $ifm = $(ifm),
+ dfd = $.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 callback from pixlr
+ pixlrCallBack();
+
+ // 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();
+ };
+ } else if (getfile === 'tinymce') {
+ elFinder.prototype._options.getFileCallback = function(file, fm) {
+ // pass selected file data to TinyMCE
+ parent.tinymce.activeEditor.windowManager.getParams().oninsert(file, fm);
+ // close popup window
+ parent.tinymce.activeEditor.windowManager.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 : '<div class="elfinder-edit-imageeditor"><canvas></canvas></div>',
+ // 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({}, 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 = $.Deferred(),
+ cdns = fm.options.cdns,
+ ver = 'v3.4.0',
+ init = function(editor) {
+ var $base = $(base),
+ bParent = $base.parent(),
+ opts = self.confObj.opts,
+ iconsPath = opts.iconsPath,
+ tmpContainer = $('<div class="tui-image-editor-container">').appendTo(bParent),
+ tmpDiv = [
+ $('<div class="tui-image-editor-submenu"/>').appendTo(tmpContainer),
+ $('<div class="tui-image-editor-controls"/>').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 = $(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 = $('<span class="ui-icon ui-icon-plusthick"/>').data('val', 10),
+ zdown = $('<span class="ui-icon ui-icon-minusthick"/>').data('val', -10),
+ per = $('<button/>').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 = $('<input type="number" class="ui-corner-all elfinder-resize-quality elfinder-tabstop"/>')
+ .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'));
+ $('<div class="ui-dialog-buttonset elfinder-edit-extras elfinder-edit-extras-quality"/>')
+ .append(
+ $('<span>').html(fm.i18n('quality') + ' : '), quty, $('<span/>')
+ )
+ .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
+ $('<div class="ui-dialog-buttonset elfinder-edit-extras"/>')
+ .append(
+ zdown, per, zup
+ )
+ .attr('title', fm.i18n('scale'))
+ .on('click', 'span,button', function() {
+ zoom($(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($(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);
+ },
+ loader;
+
+ if (!self.confObj.editor) {
+ loader = $.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.fabric16 + '/fabric.require.min',
+ 'tui-code-snippet' : cdns.tui + '/tui.code-snippet/latest/tui-code-snippet.min',
+ 'tui-color-picker' : cdns.tui + '/tui.code-snippet/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.fabric16 + '/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 = $(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),
+ quality: quality
+ });
+ }
+ },
+ save : function(base) {
+ var $base = $(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);
+ }
+ }
+ },
+ {
+ // Pixlr Editor
+ info : {
+ id : 'pixlreditor',
+ name : 'Pixlr Editor',
+ iconImg : 'img/editor-icons.png 0 -128',
+ urlAsContent: true,
+ schemeContent: true,
+ single: true,
+ canMakeEmpty: true,
+ integrate: {
+ title: 'PIXLR EDITOR',
+ link: 'https://pixlr.com/editor/'
+ }
+ },
+ // MIME types to accept
+ mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/x-ms-bmp', 'image/x-pixlr-data'],
+ // HTML of this editor
+ html : '<div class="elfinder-edit-imageeditor"><img/></div>',
+ // called on initialization of elFinder cmd edit (this: this editor's config object)
+ setup : function(opts, fm) {
+ pixlrSetup.call(this, opts, fm);
+ },
+ // Initialization of editing node (this: this editors HTML node)
+ init : function(id, file, url, fm) {
+ initImgTag.call(this, id, file, file.size > 0? fm.convAbsUrl(url) : '', fm);
+ },
+ // Get data uri scheme (this: this editors HTML node)
+ getContent : function() {
+ return $(this).children('img:first').attr('src');
+ },
+ load : function(base) {
+ pixlrLoad.call(this, 'editor', base);
+ },
+ save : function(base) {},
+ close : function(base) {}
+ },
+ {
+ // Pixlr Express
+ info : {
+ id: 'pixlrexpress',
+ name : 'Pixlr Express',
+ iconImg : 'img/editor-icons.png 0 -112',
+ urlAsContent: true,
+ schemeContent: true,
+ single: true,
+ canMakeEmpty: false,
+ integrate: {
+ title: 'PIXLR EXPRESS',
+ link: 'https://pixlr.com/express/'
+ }
+ },
+ // MIME types to accept
+ mimes : ['image/jpeg', 'image/png', 'image/gif'],
+ // HTML of this editor
+ html : '<div class="elfinder-edit-imageeditor"><img/></div>',
+ // called on initialization of elFinder cmd edit (this: this editor's config object)
+ setup : function(opts, fm) {
+ pixlrSetup.call(this, opts, fm);
+ },
+ // Initialization of editing node (this: this editors HTML node)
+ init : function(id, file, url, fm) {
+ initImgTag.call(this, id, file, file.size > 0? fm.convAbsUrl(url) : '', fm);
+ },
+ // Get data uri scheme (this: this editors HTML node)
+ getContent : function() {
+ return $(this).children('img:first').attr('src');
+ },
+ load : function(base) {
+ pixlrLoad.call(this, 'express', base);
+ },
+ save : function(base) {},
+ close : function(base) {}
+ },
+ {
+ // Photopea advanced image editor
+ info : {
+ id : 'photopea',
+ name : 'Photopea',
+ iconImg : 'img/editor-icons.png 0 -160',
+ single: true,
+ noContent: true,
+ arrayBufferContent: true,
+ openMaximized: true,
+ canMakeEmpty: true,
+ 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'],
+ html : '<iframe style="width:100%;height:100%;border:none;"></iframe>',
+ // 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 = $(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 = $('<div class="elfinder-edit-spinner elfinder-edit-photopea"/>')
+ .html('<span class="elfinder-spinner-text">' + fm.i18n('nowLoading') + '</span><span class="elfinder-spinner"/>')
+ .appendTo(ifm.parent()),
+ getType = function(mime) {
+ var ext = getExtention(mime, fm),
+ extmime = ext2mime[ext];
+
+ if (!confObj.mimesFlip[extmime]) {
+ ext = '';
+ } else if (ext === 'jpeg') {
+ ext = 'jpg';
+ }
+ if (!ext || ext === 'xcf' || ext === 'dng' || ext === 'sketch') {
+ 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 url = fm.openUrl(file.hash);
+ if (!fm.isSameOrigin(url)) {
+ url = fm.openUrl(file.hash, true);
+ }
+ var wnd = ifm.get(0).contentWindow,
+ phase = 0,
+ data = null,
+ dfdIni = $.Deferred().done(function() {
+ spnr.remove();
+ phase = 1;
+ wnd.postMessage(data, '*');
+ }),
+ dfdGet;
+
+ this.load = function() {
+ return fm.request({
+ data : {cmd : 'get'},
+ options : {
+ url: url,
+ type: 'get',
+ cache : true,
+ dataType : 'binary',
+ responseType :'arraybuffer',
+ processData: false
+ }
+ })
+ .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 (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 = $.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);
+ $(window).on('message.' + fm.namespace, liveMsg.receive);
+ liveMsg.load().done(function() {
+ var d = JSON.stringify({
+ files : [],
+ environment : {
+ lang: fm.lang.replace(/_/g, '-')
+ }
+ });
+ 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 = $('<input type="number" class="ui-corner-all elfinder-resize-quality elfinder-tabstop"/>')
+ .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'));
+ $('<div class="ui-dialog-buttonset elfinder-edit-extras elfinder-edit-extras-quality"/>')
+ .append(
+ $('<span>').html(fm.i18n('quality') + ' : '), quty, $('<span/>')
+ )
+ .prependTo(ifm.parent().next());
+ }
+ },
+ load : function(base) {
+ var dfd = $.Deferred(),
+ self = this,
+ fm = this.fm,
+ $base = $(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 = $(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) {
+ $(base).attr('src', '');
+ liveMsg && $(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 : '<div class="elfinder-edit-imageeditor"><img/></div>',
+ // 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 $(this).children('img:first').attr('src');
+ },
+ // Launch Pixo editor when dialog open
+ load : function(base) {
+ var self = this,
+ fm = this.fm,
+ $base = $(base),
+ node = $base.children('img:first'),
+ dialog = $base.closest('.ui-dialog'),
+ elfNode = fm.getUI(),
+ dfrd = $.Deferred(),
+ container = $('#elfinder-pixo-container'),
+ init = function(onload) {
+ var opts;
+
+ if (!container.length) {
+ container = $('<div id="elfinder-pixo-container" class="ui-front"/>').css({
+ position: 'fixed',
+ top: 0,
+ right: 0,
+ width: '100%',
+ height: $(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),
+ 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 = $('<input type="number" class="ui-corner-all elfinder-resize-quality elfinder-tabstop"/>')
+ .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 = $('<div class="ui-dialog-buttonset elfinder-edit-extras elfinder-edit-extras-quality"/>')
+ .hide()
+ .append(
+ $('<span>').html(fm.i18n('quality') + ' : '), quty, $('<span/>')
+ )
+ .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 = $(base),
+ node = $base.children('img:first'),
+ q;
+ if (base._canvas) {
+ q = $base.data('quty')? Math.max(Math.min($base.data('quty').val(), 100), 1) / 100 : void(0);
+ node.attr('src', base._canvas.toDataURL(self.file.mime, q));
+ } else if (node.attr('src').substr(0, 5) !== 'data:') {
+ node.attr('src', imgBase64(node, this.file.mime));
+ }
+ },
+ close : function(base, editor) {
+ editor && editor.destroy();
+ }
+ },
+ {
+ // Adobe Creative SDK Creative Tools Image Editor UI
+ // MIME types to accept
+ info : {
+ id : 'creativecloud',
+ name : 'Creative Cloud',
+ iconImg : 'img/editor-icons.png 0 -192',
+ dataScheme: true,
+ schemeContent: true,
+ single: true,
+ canMakeEmpty: false,
+ integrate: {
+ title: 'Adobe Creative Cloud',
+ link: 'https://www.adobe.io/apis/creativecloud.html'
+ }
+ },
+ mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'],
+ // HTML of this editor
+ html : '<div class="elfinder-edit-imageeditor"><img/></div>',
+ // 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.creativeCloudApiKey) {
+ this.disabled = true;
+ } else {
+ this.apiKey = opts.extraOptions.creativeCloudApiKey;
+ }
+ },
+ // 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 $(this).children('img:first').attr('src');
+ },
+ // Launch Aviary Feather editor when dialog open
+ load : function(base) {
+ var self = this,
+ fm = this.fm,
+ node = $(base).children('img:first'),
+ dialog = $(base).closest('.ui-dialog'),
+ elfNode = fm.getUI(),
+ dfrd = $.Deferred(),
+ container = $('#elfinder-aviary-container'),
+ init = function(onload) {
+ var getLang = function() {
+ var langMap = {
+ 'zh_TW' : 'zh_HANT',
+ 'zh_CN' : 'zh_HANS'
+ };
+ return langMap[fm.lang]? langMap[fm.lang] : fm.lang;
+ }, opts;
+
+ if (!container.length) {
+ container = $('<div id="elfinder-aviary-container" class="ui-front"/>').css({
+ position: 'fixed',
+ top: 0,
+ right: 0,
+ width: '100%',
+ height: $(window).height(),
+ overflow: 'auto'
+ }).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() {
+ container.remove();
+ });
+ } else {
+ // always moves to last
+ container.appendTo(container.parent());
+ }
+ node.on('click', launch).data('loading')();
+ opts = {
+ apiKey: self.confObj.apiKey,
+ onSave: function(imageID, newURL) {
+ var ext;
+ featherEditor.showWaitIndicator();
+ ext = newURL.replace(/.+\.([^.]+)$/, '$1');
+ if (node.data('ext') !== ext) {
+ node.closest('.ui-dialog').trigger('changeType', {
+ extention: ext,
+ mime : ext2mime[ext]
+ });
+ }
+ node.on('load error', function() {
+ node.data('loading')(true);
+ })
+ .attr('crossorigin', 'anonymous')
+ .attr('src', newURL)
+ .data('loading')();
+ featherEditor.close();
+ },
+ onLoad: onload || function(){},
+ onClose: function() {
+ dialog.removeClass(fm.res('class', 'preventback'));
+ fm.toggleMaximize(container, false);
+ $(container).hide();
+ },
+ appendTo: container.get(0),
+ maxSize: 2048,
+ language: getLang()
+ };
+ // trigger event 'editEditorPrepare'
+ self.trigger('Prepare', {
+ node: base,
+ editorObj: Aviary,
+ instance: void(0),
+ opts: opts
+ });
+ featherEditor = new Aviary.Feather(opts);
+ // return editor instance
+ dfrd.resolve(featherEditor);
+ $(base).on('saveAsFail', launch);
+ },
+ launch = function() {
+ dialog.addClass(fm.res('class', 'preventback'));
+ fm.toggleMaximize(container, true);
+ fm.toFront(container);
+ $(container).show();
+ featherEditor.launch({
+ image: node.attr('id'),
+ url: node.attr('src')
+ });
+ node.data('loading')(true);
+ },
+ featherEditor, extraOpts;
+
+ // load script then init
+ if (typeof Aviary === 'undefined') {
+ fm.loadScript(['https://dme0ih8comzn4.cloudfront.net/imaging/v3/editor.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 node = $(base).children('img:first');
+ if (node.attr('src').substr(0, 5) !== 'data:') {
+ node.attr('src', imgBase64(node, this.file.mime));
+ }
+ }
+ },
+ {
+ // 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 = $.Deferred(),
+ cdn = fm.options.cdns.ace,
+ start = function() {
+ var editor, editorBase, mode,
+ ta = $(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 = $('<div id="'+id+'" style="width:100%; height:100%;"/>').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
+ $('<div class="ui-dialog-buttonset"/>').css('float', 'left')
+ .append(
+ $('<button/>').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');
+ $(this).text('AceEditor');
+ } else {
+ ta.data('ace', true);
+ editorBase.show();
+ editor.setValue(ta.hide().val(), -1);
+ editor.focus();
+ $(this).html(self.fm.i18n('TextArea'));
+ }
+ })
+ )
+ .append(
+ $('<button>Ace editor setting</button>')
+ .button({
+ icons: {
+ primary: 'ui-icon-gear',
+ secondary: 'ui-icon-triangle-1-e'
+ },
+ text: false
+ })
+ .on('click', function(){
+ editor.showSettingsMenu();
+ $('#ace_settingsmenu')
+ .css('font-size', '80%')
+ .find('div[contains="setOptions"]').hide().end()
+ .parent().parent().appendTo($('#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 = $.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 && $(textarea).data('ace') && (textarea.value = instance.session.getValue());
+ },
+ focus : function(textarea, instance) {
+ instance && $(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.options.cdns.codemirror,
+ dfrd = $.Deferred(),
+ self = this,
+ start = function(CodeMirror) {
+ var ta = $(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 + ')');
+ }
+
+ // editor base node
+ editorBase = $(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
+ $('<div class="ui-dialog-buttonset"/>').css('float', 'left')
+ .append(
+ $('<button/>').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');
+ $(this).text('CodeMirror');
+ } else {
+ ta.data('cm', true);
+ editorBase.show();
+ editor.setValue(ta.hide().val());
+ editor.refresh();
+ editor.focus();
+ $(this).html(self.fm.i18n('TextArea'));
+ }
+ })
+ )
+ .prependTo(base.next());
+ };
+ // load script then start
+ if (!self.confObj.loader) {
+ self.confObj.loader = $.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 && $(textarea).data('cm') && (textarea.value = instance.getValue());
+ },
+ focus : function(textarea, instance) {
+ instance && $(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 = $(textarea).parent(),
+ dfrd = $.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 += $(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 = $(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 = $.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) {
+ if (!fm.options.cdns.ckeditor) {
+ this.disabled = true;
+ } else {
+ if (opts.extraOptions && opts.extraOptions.managerUrl) {
+ this.managerUrl = opts.extraOptions.managerUrl;
+ }
+ }
+ },
+ load : function(textarea) {
+ var self = this,
+ fm = this.fm,
+ dfrd = $.Deferred(),
+ init = function() {
+ var base = $(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, opts);
+ CKEDITOR.on('dialogDefinition', function(e) {
+ var dlg = e.data.definition.dialog;
+ dlg.on('show', function(e) {
+ fm.getUI().append($('.cke_dialog_background_cover')).append(this.getElement().$);
+ });
+ dlg.on('hide', function(e) {
+ $('body:first').append($('.cke_dialog_background_cover')).append(this.getElement().$);
+ });
+ });
+ };
+
+ if (!self.confObj.loader) {
+ self.confObj.loader = $.Deferred();
+ window.CKEDITOR_BASEPATH = fm.options.cdns.ckeditor + '/';
+ $.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%', $(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 : '<div class="edit-editor-ckeditor5"></div>',
+ setup : function(opts, fm) {
+ var confObj = this;
+ // check cdn and ES6 support
+ if (!fm.options.cdns.ckeditor5 || typeof window.Symbol !== 'function' || typeof Symbol() !== 'symbol') {
+ this.disabled = true;
+ } else {
+ if (opts.extraOptions && opts.extraOptions.ckeditor5Mode) {
+ this.ckeditor5Mode = opts.extraOptions.ckeditor5Mode;
+ }
+ }
+ fm.bind('destroy', function() {
+ confObj.editor = null;
+ });
+ },
+ // Prepare on before show dialog
+ prepare : function(base, dialogOpts, file) {
+ $(base).height(base.editor.fm.getUI().height() - 100);
+ },
+ init : function(id, file, data, fm) {
+ var m = data.match(/^([\s\S]*<body[^>]*>)([\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
+ });
+ },
+ load : function(editnode) {
+ var self = this,
+ fm = this.fm,
+ dfrd = $.Deferred(),
+ mode = self.confObj.ckeditor5Mode || 'balloon',
+ 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 = $(editnode).parent(),
+ opts;
+
+ // set base height
+ base.height(fm.getUI().height() - 100);
+
+ // CKEditor5 configure options
+ opts = {
+ toolbar: ['heading', '|', 'bold', 'italic', 'link', 'imageUpload', 'bulletedList', 'numberedList', 'blockQuote', 'undo', 'redo' ],
+ language: lang
+ };
+
+ // trigger event 'editEditorPrepare'
+ self.trigger('Prepare', {
+ node: editnode,
+ editorObj: cEditor,
+ instance: void(0),
+ opts: opts
+ });
+
+ cEditor
+ .create(editnode, opts)
+ .then(function(editor) {
+ var fileRepo = editor.plugins.get('FileRepository');
+ fileRepo.createUploadAdapter = function(loader) {
+ return new uploder(loader);
+ };
+ editor.setData($(editnode).data('data').body);
+ // move .ck-body to elFinder node for fullscreen mode
+ fm.getUI().append($('body > div.ck-body'));
+ $('div.ck-balloon-panel').css({
+ 'z-index': fm.getMaximizeCss().zIndex + 1
+ });
+ dfrd.resolve(editor);
+ /*fm.log({
+ plugins: cEditor.build.plugins.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) {
+ this.upload = function() {
+ return new Promise(function(resolve, reject) {
+ fm.exec('upload', {files: [loader.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.abort = function() {
+ fm.getUI().trigger('uploadabort');
+ };
+ }, loader;
+
+ if (!self.confObj.editor) {
+ loader = $.Deferred();
+ self.fm.loadScript([
+ fm.options.cdns.ckeditor5 + '/' + mode + '/ckeditor.js'
+ ], function(editor) {
+ if (!editor) {
+ editor = window.BalloonEditor || window.InlineEditor || window.ClassicEditor;
+ }
+ 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 = $(this).data('data');
+ return data.header + data.body + data.footer;
+ },
+ close : function(editnode, instance) {
+ instance && instance.destroy();
+ },
+ save : function(editnode, instance) {
+ var elm = $(editnode),
+ data = elm.data('data');
+ if (instance) {
+ data.body = instance.getData();
+ elm.data('data', data);
+ }
+ },
+ focus : function(editnode, instance) {
+ $(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) {
+ if (!fm.options.cdns.tinymce) {
+ this.disabled = true;
+ } else {
+ if (opts.extraOptions && opts.extraOptions.managerUrl) {
+ this.managerUrl = opts.extraOptions.managerUrl;
+ }
+ }
+ },
+ load : function(textarea) {
+ var self = this,
+ fm = this.fm,
+ dfrd = $.Deferred(),
+ init = function() {
+ var base = $(textarea).show().parent(),
+ dlg = base.closest('.elfinder-dialog'),
+ h = base.height(),
+ delta = base.outerHeight(true) - h,
+ opts;
+
+ // set base height
+ base.height(h);
+ // fit height function
+ textarea._setHeight = function(height) {
+ var base = $(this).parent(),
+ h = height || base.innerHeight(),
+ ctrH = 0,
+ areaH;
+ base.find('.mce-container-body:first').children('.mce-top-part,.mce-statusbar').each(function() {
+ ctrH += $(this).outerHeight(true);
+ });
+ areaH = h - ctrH - delta;
+ base.find('.mce-edit-area iframe:first').height(areaH);
+ return areaH;
+ };
+
+ // TinyMCE configure options
+ opts = {
+ selector: '#' + textarea.id,
+ resize: false,
+ plugins: [
+ 'fullpage', // require for getting full HTML
+ 'image', 'link', 'media',
+ 'code', 'fullscreen'
+ ],
+ 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 reg = /([&?]getfile=)[^&]+/,
+ loc = self.confObj.managerUrl || window.location.href.replace(/#.*$/, ''),
+ name = 'tinymce';
+
+ // make manager location
+ if (reg.test(loc)) {
+ loc = loc.replace(reg, '$1' + name);
+ } else {
+ loc += '?getfile=' + name;
+ }
+ // launch TinyMCE
+ tinymce.activeEditor.windowManager.open({
+ file: loc,
+ title: 'elFinder',
+ width: 900,
+ height: 450,
+ resizable: 'yes'
+ }, {
+ oninsert: function (file, elf) {
+ var url, reg, info;
+
+ // URL normalization
+ url = elf.convAbsUrl(file.url);
+
+ // Make file info
+ info = file.name + ' (' + elf.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);
+ }
+ }
+ });
+ return false;
+ }
+ };
+
+ // trigger event 'editEditorPrepare'
+ self.trigger('Prepare', {
+ node: textarea,
+ editorObj: tinymce,
+ instance: void(0),
+ opts: opts
+ });
+
+ // TinyMCE configure
+ tinymce.init(opts);
+ };
+
+ if (!self.confObj.loader) {
+ self.confObj.loader = $.Deferred();
+ $.getScript(fm.options.cdns.tinymce + '/tinymce.min.js', function() {
+ setTimeout(function() {
+ self.confObj.loader.resolve();
+ }, 0);
+ });
+ }
+ 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 : '<iframe style="width:100%;max-height:100%;border:none;"></iframe>',
+ // 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();
+ $(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 = $(this).hide(),
+ uiToast = fm.getUI('toast'),
+ spnr = $('<div class="elfinder-edit-spinner elfinder-edit-zohoeditor"/>')
+ .html('<span class="elfinder-spinner-text">' + fm.i18n('nowLoading') + '</span><span class="elfinder-spinner"/>')
+ .appendTo(ifm.parent()),
+ cdata = function() {
+ var data = '';
+ $.each(fm.customData, function(key, val) {
+ data += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val);
+ });
+ return data;
+ };
+
+ $(ta).data('xhr', fm.request({
+ data: {
+ cmd: 'editor',
+ name: 'ZohoOffice',
+ 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 = $(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 = $.Deferred();
+ fm.request({
+ data:{
+ cmd: 'netmount',
+ protocol: 'ziparchive',
+ host: file.hash,
+ path: file.phash
+ },
+ 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);
+ $(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 : '<iframe style="width:100%;max-height:100%;border:none;"></iframe>',
+ // 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 : '<div class="elfinder-edit-onlineconvert-link"><a href="https://www.online-convert.com" target="_blank"><span class="elfinder-button-icon"></span>ONLINE-CONVERT.COM</a></div>',
+ useTabs : ($.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();
+ $(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),
+ 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 = $.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 = $.getJSON('https://api2.online-convert.com/conversions' + type);
+ } else {
+ dfd = $.Deferred().resolve(confObj.conversions[cat]);
+ }
+ dfd.done(function(d) {
+ confObj.conversions[cat] = d;
+ $.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 = $('<div/>').on('click', 'button', function() {
+ var b = $(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
+ });
+ } else {
+ open(cat, con);
+ }
+ }).on('change', function(e) {
+ var t = $(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 = $('<ul/>'),
+ oform = function(n, o) {
+ var f = $('<p/>').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($('<span/>').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($('<input type="checkbox" value="true"'+checked+disabled+'/>'));
+ } else if (o['enum']){
+ elm = $('<select/>').append($('<option value=""/>').text('Select...'));
+ $.each(o['enum'], function(i, v) {
+ elm.append($('<option value="'+v+'"/>').text(v));
+ });
+ f.append(elm);
+ } else {
+ f.append($('<input type="text" value=""/>'));
+ }
+ return f;
+ },
+ makeOption = function(o) {
+ var elm = this,
+ b = $('<span class="elfinder-button-icon elfinder-button-icon-preference"/>').on('click', function() {
+ f.toggle();
+ }),
+ f = $('<div class="elfinder-edit-onlinconvert-options"/>').hide();
+ if (o.options) {
+ $.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 = fm.arrayFlip(fm.mimeTypes);
+ }
+ $.each(set.conv, function(t, c) {
+ var cname = t.toLowerCase(),
+ id = 'elfinder-edit-onlineconvert-' + cname + ts,
+ type = $('<div id="' + id + '" class="onlineconvert-category onlineconvert-category-'+cname+'"/>').data('cname', t),
+ cext;
+ $.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($('<div class="elfinder-edit-onlineconvert-button onlineconvert-'+nl+'"/>').on('makeoption', function(e, data) {
+ var elm = $(this);
+ if (!elm.children('.elfinder-button-icon-preference').length) {
+ makeOption.call(elm, data);
+ }
+ }).append($('<button/>').text(n).data('conv', n)));
+ }
+ });
+ if (type.children().length) {
+ ul.append($('<li/>').append($('<a/>').attr('href', '#' + 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 {
+ $.each(set.conv, function(t) {
+ var tl = t.toLowerCase();
+ btns.append($('<fieldset class="onlineconvert-fieldset-' + tl + '"/>').append($('<legend/>').text(t)).append(btns.children('.onlineconvert-category-' + tl)));
+ });
+ }
+ return btns;
+ })(),
+ ifm = $(this).hide(),
+ select = $('<div/>')
+ .append(
+ btns,
+ $('<div class="elfinder-edit-onlineconvert-bottom-btn"/>').append(
+ $('<button/>')
+ .addClass(fm.UA.iOS? 'elfinder-button-ios-multiline' : '')
+ .html(fm.i18n('convertOn', 'Online-Convert.com'))
+ .on('click', function() {
+ open();
+ })
+ ),
+ (set.showLink? $(set.link) : null)
+ )
+ .appendTo(ifm.parent().css({overflow: 'auto'})),
+ spnr = $('<div class="elfinder-edit-spinner elfinder-edit-onlineconvert"/>')
+ .hide()
+ .html('<span class="elfinder-spinner-text">' + fm.i18n('nowLoading') + '</span><span class="elfinder-spinner"/>')
+ .appendTo(ifm.parent()),
+ _url = null,
+ url = function() {
+ var onetime;
+ if (_url) {
+ return $.Deferred().resolve(_url);
+ } else {
+ spnr.show();
+ return fm.forExternalUrl(file.hash).done(function(url) {
+ _url = url;
+ }).fail(function(error) {
+ error && fm.error(error);
+ ta.elfinderdialog('destroy');
+ }).always(function() {
+ spnr.hide();
+ });
+ }
+ },
+ api = function(opts) {
+ $(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) {
+ $.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: 'warning',
+ timeOut: 3000,
+ onHidden: function() {
+ uiToast.children().length === 1 && uiToast.appendTo(fm.getUI());
+ open(cat, con);
+ }
+ });
+ }
+ },
+ 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');
+ $.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
+ }
+ });
+ }
+ },
+ open = function(cat, con) {
+ var link;
+ if (cat && con) {
+ if (set.conv[cat] && set.conv[cat][con] && set.conv[cat][con].link) {
+ link = set.conv[cat][con].link.replace('%s', con);
+ } else {
+ link = cat === 'hash'? ('/' + con + '-generator') : ('/convert-to-' + con);
+ }
+ link = set.url.replace('%s', cat).replace('%s', link);
+ } else {
+ link = set.url.replace('%s', mode + '-conversion').replace('%s', '');
+ }
+ spnr.hide();
+ select.hide();
+ ifm.parent().css({overflow: fm.UA.iOS? 'auto' : 'hidden'});
+ $(ta).data('dfrd', url().done(function(url) {
+ var opts;
+ if (url) {
+ opts = {
+ css: {
+ height: '100%'
+ }
+ };
+ // trigger event 'editEditorPrepare'
+ ta.editor.trigger('Prepare', {
+ node: ta,
+ editorObj: void(0),
+ instance: ifm,
+ opts: opts
+ });
+ url = link + encodeURIComponent(fm.convAbsUrl(url));
+ ifm.attr('src', url).show().css(opts.css)
+ .one('load', function() {
+ uiToast.appendTo(ta.closest('.ui-dialog'));
+ fm.toast({
+ msg: fm.i18n('editorConvNeedUpload'),
+ mode: 'info',
+ timeOut: 15000,
+ onHidden: function() {
+ uiToast.children().length === 1 && uiToast.appendTo(fm.getUI());
+ },
+ button: {
+ text: 'btnYes'
+ }
+ });
+ });
+ } else {
+ data.error && fm.error(data.error);
+ ta.elfinderdialog('destroy');
+ }
+ }));
+ },
+ mode = 'document',
+ cl, m;
+ ifm.parent().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;
+ $.each(set.conv, function(t) {
+ if (t.toLowerCase() === mode) {
+ setOptions(t, function() {
+ $.each(set.conv, function(t0) {
+ t0.toLowerCase() !== mode && setOptions(t0);
+ });
+ });
+ return false;
+ }
+ cl--;
+ });
+ if (!cl) {
+ $.each(set.conv, function(t) {
+ setOptions(t);
+ });
+ }
+ ifm.parent().scrollTop(btns.children('.onlineconvert-fieldset-' + mode).offset().top);
+ }
+ },
+ load : function() {},
+ getContent : function() {},
+ save : function() {},
+ // Before dialog close
+ beforeclose : iframeClose,
+ // On dialog closed
+ close : function(ta) {
+ var fm = this.fm,
+ dfrd = $(ta).data('dfrd');
+ if (dfrd && dfrd.state() === 'pending') {
+ dfrd.reject();
+ }
+ }
+ }
+ ];
+}, window.elFinder));
--- /dev/null
+!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=function(){var e;try{e=!!new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(t){e=!!("undefined"==typeof window.orientation||navigator&&navigator.mimeTypes["application/x-shockwave-flash"])}return e}(),a={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"},r=function(e,i){t||(t=i.arrayFlip(a));var n=t[e]||i.mimeTypes[e];return"jpeg"===n&&(n="jpg"),n},s=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()}},c=function(e,t,i,n){var o,a=$(this).children("img:first").data("ext",r(t.mime,n)),s=$('<div class="elfinder-edit-spinner elfinder-edit-image"/>').html('<span class="elfinder-spinner-text">'+n.i18n("ntfloadimg")+'</span><span class="elfinder-spinner"/>').hide().appendTo(this);i.match(/^data:/)||(o=n.openUrl(t.hash),a.attr("_src",i)),a.attr("id",e+"-img").attr("src",o||i).css({height:"","max-width":"100%","max-height":"100%",cursor:"pointer"}).data("loading",function(e){var t=a.closest(".elfinder-dialog").find("button,.elfinder-titlebar-button");return t.prop("disabled",!e)[e?"removeClass":"addClass"]("ui-state-disabled"),a.css("opacity",e?"":"0.3"),s[e?"hide":"show"](),a})},d=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},l=function(){if(o&&window.parent!==window){var e,t,i,n,r,s=window.location.search.match(/[?&]pixlr=([^&]+)/),c=window.location.search.match(/[?&]image=([^&]+)/);s&&(e=window.parent,t=e.$("#"+s[1]+"iframe").hide(),n=e.$("#"+s[1]).data("resizeoff")(),"http"===c[1].substr(0,4)?(i=c[1],r=i.replace(/.+\.([^.]+)$/,"$1"),n.data("ext")!==r&&n.closest(".ui-dialog").trigger("changeType",{extention:r,mime:a[r]}),"https:"===window.location.protocol&&(i=i.replace(/^http:/,"https:")),n.on("load error",function(){n.data("loading")(!0)}).attr("src",i).data("loading")()):n.data("loading")(!0),t.trigger("destroy").remove())}},p=function(e,t){o&&!t.UA.ltIE8||(this.disabled=!0)},m=function(e,t){var i,n=this,o=this.fm,a=o.res("class","preventback"),r=$(t).children("img:first").data("loading")().data("resizeoff",function(){return $(window).off("resize."+r.attr("id")),s.addClass(a),r}).on("click",function(){f()}),s=$(t).closest(".ui-dialog"),c=o.getUI(),d=o.getUI("toast"),l=$('<iframe class="ui-front" allowtransparency="true">'),p=this.file,m=15,u=function(e){e?(l.trigger("destroy").remove(),r.data("loading")(!0),o.error(e)):(d.appendTo(s.closest(".ui-dialog")),o.toast({mode:"info",msg:"Can not launch Pixlr yet. Waiting "+m+" seconds.",button:{text:"Abort",click:function(){l.trigger("destroy").remove(),r.data("loading")(!0)}},onHidden:function(){1===d.children().length&&d.appendTo(o.getUI())}}),i=setTimeout(e,1e3*m))},f=function(){var d="https://pixlr.com/"+e+"/?s=c",f=window.location.href.toString().replace(/#.*$/,""),g={};i=setTimeout(u,1e3*m),f+=(f.indexOf("?")===-1?"?":"&")+"pixlr="+r.attr("id"),d+="&referrer=elFinder&locktitle=true",d+="&exit="+encodeURIComponent(f+"&image=0"),d+="&target="+encodeURIComponent(f),d+="&title="+encodeURIComponent(p.name),d+="&image="+encodeURIComponent(r.attr("_src")),g.src=d,g.css={width:"100%",height:$(window).height()+"px",position:"fixed",display:"block",backgroundColor:"transparent",border:"none",top:0,right:0},n.trigger("Prepare",{node:t,editorObj:void 0,instance:l,opts:g}),l.attr("id",r.attr("id")+"iframe").attr("src",g.src).css(g.css).one("load",function(){i&&clearTimeout(i),setTimeout(function(){l.is(":hidden")&&u("Please disable your ad blocker.")},1e3),s.addClass(a),o.toggleMaximize(l,!0),o.toFront(l)}).on("destroy",function(){o.toggleMaximize(l,!1)}).on("error",u).appendTo(c.hasClass("elfinder-fullscreen")?c:"body")};$(t).on("saveAsFail",f),f()},u=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 l(),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()}:"tinymce"===i&&(e.prototype._options.getFileCallback=function(e,t){parent.tinymce.activeEditor.windowManager.getParams().oninsert(e,t),parent.tinymce.activeEditor.windowManager.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:'<div class="elfinder-edit-imageeditor"><canvas></canvas></div>',setup:function(e,t){t.UA.ltIE8||t.UA.Mobile?this.disabled=!0:(this.opts=Object.assign({},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="v3.4.0",s=function(t){var a,r,s,c,d=$(e),l=d.parent(),p=i.confObj.opts,m=p.iconsPath,u=$('<div class="tui-image-editor-container">').appendTo(l),f=[$('<div class="tui-image-editor-submenu"/>').appendTo(u),$('<div class="tui-image-editor-controls"/>').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)}},x=$('<span class="ui-icon ui-icon-plusthick"/>').data("val",10),b=$('<span class="ui-icon ui-icon-minusthick"/>').data("val",-10),y=$("<button/>").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=$('<input type="number" class="ui-corner-all elfinder-resize-quality elfinder-tabstop"/>').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")),$('<div class="ui-dialog-buttonset elfinder-edit-extras elfinder-edit-extras-quality"/>').append($("<span>").html(n.i18n("quality")+" : "),a,$("<span/>")).prependTo(d.parent().next())):"image/svg+xml"===i.file.mime&&d.closest(".ui-dialog").trigger("changeType",{extention:"png",mime:"image/png",keepEditor:!0}),$('<div class="ui-dialog-buttonset elfinder-edit-extras"/>').append(b,y,x).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)};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.fabric16+"/fabric.require.min","tui-code-snippet":a.tui+"/tui.code-snippet/latest/tui-code-snippet.min","tui-color-picker":a.tui+"/tui.code-snippet/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.fabric16+"/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:r(n.data("mime"),i),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:"pixlreditor",name:"Pixlr Editor",iconImg:"img/editor-icons.png 0 -128",urlAsContent:!0,schemeContent:!0,single:!0,canMakeEmpty:!0,integrate:{title:"PIXLR EDITOR",link:"https://pixlr.com/editor/"}},mimes:["image/jpeg","image/png","image/gif","image/x-ms-bmp","image/x-pixlr-data"],html:'<div class="elfinder-edit-imageeditor"><img/></div>',setup:function(e,t){p.call(this,e,t)},init:function(e,t,i,n){c.call(this,e,t,t.size>0?n.convAbsUrl(i):"",n)},getContent:function(){return $(this).children("img:first").attr("src")},load:function(e){m.call(this,"editor",e)},save:function(e){},close:function(e){}},{info:{id:"pixlrexpress",name:"Pixlr Express",iconImg:"img/editor-icons.png 0 -112",urlAsContent:!0,schemeContent:!0,single:!0,canMakeEmpty:!1,integrate:{title:"PIXLR EXPRESS",link:"https://pixlr.com/express/"}},mimes:["image/jpeg","image/png","image/gif"],html:'<div class="elfinder-edit-imageeditor"><img/></div>',setup:function(e,t){p.call(this,e,t)},init:function(e,t,i,n){c.call(this,e,t,t.size>0?n.convAbsUrl(i):"",n)},getContent:function(){return $(this).children("img:first").attr("src")},load:function(e){m.call(this,"express",e)},save:function(e){},close:function(e){}},{info:{id:"photopea",name:"Photopea",iconImg:"img/editor-icons.png 0 -160",single:!0,noContent:!0,arrayBufferContent:!0,openMaximized:!0,canMakeEmpty:!0,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"],html:'<iframe style="width:100%;height:100%;border:none;"></iframe>',setup:function(e,t){(t.UA.IE||t.UA.Mobile)&&(this.disabled=!0)},init:function(e,t,i,n){var o,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=$('<div class="elfinder-edit-spinner elfinder-edit-photopea"/>').html('<span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/>').appendTo(l.parent()),f=function(e){var t=r(e,n),i=a[t];return m.mimesFlip[i]?"jpeg"===t&&(t="jpg"):t="",t&&"xcf"!==t&&"dng"!==t&&"sketch"!==t||(t="psd",i=a[t],l.closest(".ui-dialog").trigger("changeType",{extention:t,mime:i,keepEditor:!0})),t},g=t.mime;m.mimesFlip||(m.mimesFlip=n.arrayFlip(m.mimes,!0)),m.liveMsg||(m.liveMsg=function(e,t,i){var o=n.openUrl(i.hash);n.isSameOrigin(o)||(o=n.openUrl(i.hash,!0));var a,r=e.get(0).contentWindow,s=0,c=null,l=$.Deferred().done(function(){t.remove(),s=1,r.postMessage(c,"*")});this.load=function(){return n.request({data:{cmd:"get"},options:{url:o,type:"get",cache:!0,dataType:"binary",responseType:"arraybuffer",processData:!1}}).done(function(e){c=e})},this.receive=function(t){var i=t.originalEvent;i.origin===d&&i.source===r&&("done"===i.data?0===s?l.resolve():1===s?(s=2,e.trigger("contentsloaded")):a&&"pending"===a.state()&&a.reject("errDataEmpty"):a&&"pending"===a.state()&&("object"==typeof i.data?a.resolve("data:"+g+";base64,"+n.arrayBufferToBase64(i.data)):a.reject("errDataEmpty")))},this.getContent=function(){var t,i;if(s>1)return a&&"pending"===a.state()&&a.reject(),a=null,a=$.Deferred(),2===s?(s=3,a.resolve("data:"+g+";base64,"+n.arrayBufferToBase64(c)),c=null,a):(e.data("mime")&&(g=e.data("mime"),t=f(g)),(i=e.data("quality"))&&(t+=":"+i/100),r.postMessage('app.activeDocument.saveToOE("'+t+'")',d),a)}}),l.parent().css("padding",0),s=f(t.mime),o=p.liveMsg=new m.liveMsg(l,u,t),$(window).on("message."+n.namespace,o.receive),o.load().done(function(){var e=JSON.stringify({files:[],environment:{lang:n.lang.replace(/_/g,"-")}});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=$('<input type="number" class="ui-corner-all elfinder-resize-quality elfinder-tabstop"/>').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")),$('<div class="ui-dialog-buttonset elfinder-edit-extras elfinder-edit-extras-quality"/>').append($("<span>").html(n.i18n("quality")+" : "),c,$("<span/>")).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:'<div class="elfinder-edit-imageeditor"><img/></div>',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){c.call(this,e,t,i,n)},getContent:function(){return $(this).children("img:first").attr("src")},load:function(e){var t,i,n,o,a,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=$('<div id="elfinder-pixo-container" class="ui-front"/>').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(){a&&a.cancelEditing(),g.remove()})),p.on("click",v),h=Object.assign({type:"child",parent:g.get(0),onSave:function(n){var a=n.toBlob().type,l=r(a,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?s(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:a}),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}),a=new Pixo.Bridge(h),f.resolve(a),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),a.edit(p.get(0)),p.data("loading")(!0)};return p.data("loading")(),"image/jpeg"===c.file.mime&&(i=$('<input type="number" class="ui-corner-all elfinder-resize-quality elfinder-tabstop"/>').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=$('<div class="ui-dialog-buttonset elfinder-edit-extras elfinder-edit-extras-quality"/>').hide().append($("<span>").html(d.i18n("quality")+" : "),i,$("<span/>")).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?(t=n.data("quty")?Math.max(Math.min(n.data("quty").val(),100),1)/100:void 0,o.attr("src",e._canvas.toDataURL(i.file.mime,t))):"data:"!==o.attr("src").substr(0,5)&&o.attr("src",d(o,this.file.mime))},close:function(e,t){t&&t.destroy()}},{info:{id:"creativecloud",name:"Creative Cloud",iconImg:"img/editor-icons.png 0 -192",dataScheme:!0,schemeContent:!0,single:!0,canMakeEmpty:!1,integrate:{title:"Adobe Creative Cloud",link:"https://www.adobe.io/apis/creativecloud.html"}},mimes:["image/jpeg","image/png","image/gif","image/svg+xml","image/x-ms-bmp"],html:'<div class="elfinder-edit-imageeditor"><img/></div>',setup:function(e,t){!t.UA.ltIE8&&e.extraOptions&&e.extraOptions.creativeCloudApiKey?this.apiKey=e.extraOptions.creativeCloudApiKey:this.disabled=!0},init:function(e,t,i,n){c.call(this,e,t,i,n)},getContent:function(){return $(this).children("img:first").attr("src")},load:function(e){var t,i=this,n=this.fm,o=$(e).children("img:first"),r=$(e).closest(".ui-dialog"),s=n.getUI(),c=$.Deferred(),d=$("#elfinder-aviary-container"),l=function(l){var m,u=function(){var e={zh_TW:"zh_HANT",zh_CN:"zh_HANS"};return e[n.lang]?e[n.lang]:n.lang};d.length?d.appendTo(d.parent()):(d=$('<div id="elfinder-aviary-container" class="ui-front"/>').css({position:"fixed",top:0,right:0,width:"100%",height:$(window).height(),overflow:"auto"}).hide().appendTo(s.hasClass("elfinder-fullscreen")?s:"body"),s.on("resize."+n.namespace,function(e,t){e.preventDefault(),e.stopPropagation(),t&&t.fullscreen&&d.appendTo("on"===t.fullscreen?s:"body")}),n.bind("destroy",function(){d.remove()})),o.on("click",p).data("loading")(),m={apiKey:i.confObj.apiKey,onSave:function(e,i){var n;t.showWaitIndicator(),n=i.replace(/.+\.([^.]+)$/,"$1"),o.data("ext")!==n&&o.closest(".ui-dialog").trigger("changeType",{extention:n,mime:a[n]}),o.on("load error",function(){o.data("loading")(!0)}).attr("crossorigin","anonymous").attr("src",i).data("loading")(),t.close()},onLoad:l||function(){},onClose:function(){r.removeClass(n.res("class","preventback")),n.toggleMaximize(d,!1),$(d).hide()},appendTo:d.get(0),maxSize:2048,language:u()},i.trigger("Prepare",{node:e,editorObj:Aviary,instance:void 0,opts:m}),t=new Aviary.Feather(m),c.resolve(t),$(e).on("saveAsFail",p)},p=function(){r.addClass(n.res("class","preventback")),n.toggleMaximize(d,!0),n.toFront(d),$(d).show(),t.launch({image:o.attr("id"),url:o.attr("src")}),o.data("loading")(!0)};return"undefined"==typeof Aviary?n.loadScript(["https://dme0ih8comzn4.cloudfront.net/imaging/v3/editor.js"],function(){l(p)},{loadType:"tag"}):(l(),p()),c},save:function(e){var t=$(e).children("img:first");"data:"!==t.attr("src").substr(0,5)&&t.attr("src",d(t,this.file.mime))}},{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=$('<div id="'+l+'" style="width:100%; height:100%;"/>').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(),$('<div class="ui-dialog-buttonset"/>').css("float","left").append($("<button/>").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>Ace editor setting</button>").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().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.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+" : "+u+")")),s=$(r.getWrapperElement()).css({padding:0,border:"none"}),d.data("cm",!0),s.height("100%"),$('<div class="ui-dialog-buttonset"/>').css("float","left").append($("<button/>").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){t.options.cdns.ckeditor?e.extraOptions&&e.extraOptions.managerUrl&&(this.managerUrl=e.extraOptions.managerUrl):this.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,o),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:'<div class="edit-editor-ckeditor5"></div>',setup:function(e,t){var i=this;t.options.cdns.ckeditor5&&"function"==typeof window.Symbol&&"symbol"==typeof Symbol()?e.extraOptions&&e.extraOptions.ckeditor5Mode&&(this.ckeditor5Mode=e.extraOptions.ckeditor5Mode):this.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]*<body[^>]*>)([\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})},load:function(e){var t,i=this,n=this.fm,o=$.Deferred(),a=i.confObj.ckeditor5Mode||"balloon",r=function(){var e=n.lang.toLowerCase().replace("_","-");return"zh"===e.substr(0,2)&&"zh-cn"!==e&&(e="zh"),e}(),s=function(t){var a,s=$(e).parent();s.height(n.getUI().height()-100),a={toolbar:["heading","|","bold","italic","link","imageUpload","bulletedList","numberedList","blockQuote","undo","redo"],language:r},i.trigger("Prepare",{node:e,editorObj:t,instance:void 0,opts:a}),t.create(e,a).then(function(t){var i=t.plugins.get("FileRepository");i.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){this.upload=function(){return new Promise(function(t,i){n.exec("upload",{files:[e.file]},void 0,n.cwd().hash).done(function(e){e.added&&e.added.length?n.url(e.added[0].hash,{async:!0}).done(function(e){t({"default":n.convAbsUrl(e)})}).fail(function(){i("errFileNotFound")}):i(n.i18n(e.error?e.error:"errUpload"))}).fail(function(e){var t=n.parseError(e);i(n.i18n(t?"userabort"===t?"errAbort":t:"errUploadNoFiles"))}).progress(function(t){e.uploadTotal=t.total,e.uploaded=t.progress})})},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),"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){t.options.cdns.tinymce?e.extraOptions&&e.extraOptions.managerUrl&&(this.managerUrl=e.extraOptions.managerUrl):this.disabled=!0},load:function(e){var t=this,i=this.fm,n=$.Deferred(),o=function(){var o,a=$(e).show().parent(),r=a.closest(".elfinder-dialog"),s=a.height(),c=a.outerHeight(!0)-s;a.height(s),e._setHeight=function(e){var t,i=$(this).parent(),n=e||i.innerHeight(),o=0;return i.find(".mce-container-body:first").children(".mce-top-part,.mce-statusbar").each(function(){o+=$(this).outerHeight(!0)}),t=n-o-c,i.find(".mce-edit-area iframe:first").height(t),t},o={selector:"#"+e.id,resize:!1,plugins:["fullpage","image","link","media","code","fullscreen"],init_instance_callback:function(o){e._setHeight(s),r.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,i,n){var o=/([&?]getfile=)[^&]+/,a=t.confObj.managerUrl||window.location.href.replace(/#.*$/,""),r="tinymce";return o.test(a)?a=a.replace(o,"$1"+r):a+="?getfile="+r,tinymce.activeEditor.windowManager.open({file:a,title:"elFinder",width:900,height:450,resizable:"yes"},{oninsert:function(t,i){var o,a;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)}}),!1}},t.trigger("Prepare",{node:e,editorObj:tinymce,instance:void 0,opts:o}),tinymce.init(o)};return t.confObj.loader||(t.confObj.loader=$.Deferred(),$.getScript(i.options.cdns.tinymce+"/tinymce.min.js",function(){setTimeout(function(){t.confObj.loader.resolve()},0)})),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:'<iframe style="width:100%;max-height:100%;border:none;"></iframe>',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=$('<div class="elfinder-edit-spinner elfinder-edit-zohoeditor"/>').html('<span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/>').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:"ZohoOffice",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:u,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},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:'<iframe style="width:100%;max-height:100%;border:none;"></iframe>',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:'<div class="elfinder-edit-onlineconvert-link"><a href="https://www.online-convert.com" target="_blank"><span class="elfinder-button-icon"></span>ONLINE-CONVERT.COM</a></div>',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 o,a,r=this,s=r.editor.confObj,c=s.set,d=n.getUI("toast"),l={},p=n.uploadMimeCheck("application/zip",t.phash),m=function(e,t){var i;return c.catExts[e]?c.catExts[e]:c.conv[e]&&(i=c.conv[e][t])?(i.ext||t).toLowerCase():t.toLowerCase()},u=function(e,t){var i,o,a;o="undefined"==typeof s.api?n.request({data:{cmd:"editor",name:"OnlineConvert",method:"init"},preventDefault:!0}):$.Deferred().resolve({api:s.api}),e=e.toLowerCase(),o.done(function(n){s.api=n.api,s.api&&(e?i="?category="+e:(i="",e="all"),s.conversions||(s.conversions={}),a=s.conversions[e]?$.Deferred().resolve(s.conversions[e]):$.getJSON("https://api2.online-convert.com/conversions"+i),a.done(function(i){s.conversions[e]=i,$.each(i,function(e,t){f[c.useTabs?"children":"find"](".onlineconvert-category-"+t.category).children(".onlineconvert-"+t.target).trigger("makeoption",t)}),t&&t()}))})},f=function(){var e=$("<div/>").on("click","button",function(){var e=$(this),t=e.data("opts")||null,i=e.closest(".onlineconvert-category").data("cname"),n=e.data("conv");s.api===!0?y({category:i,convert:n,options:t}):j(i,n)}).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=$("<ul/>"),o=function(e,t){var i,o,a,r=$("<p/>").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($("<span/>").text(n.i18n(e)+" : ")),"boolean"===t.type?((t["default"]||(d="allow_multiple_outputs"===e&&!p))&&(s=" checked",d&&(c=" disabled"),o=this.children("button:first"),i=o.data("opts")||{},i[e]=!0,o.data("opts",i)),r.append($('<input type="checkbox" value="true"'+s+c+"/>"))):t["enum"]?(a=$("<select/>").append($('<option value=""/>').text("Select...")),$.each(t["enum"],function(e,t){a.append($('<option value="'+t+'"/>').text(t))}),r.append(a)):r.append($('<input type="text" value=""/>')),r},a=function(e){var t=this,i=$('<span class="elfinder-button-icon elfinder-button-icon-preference"/>').on("click",function(){n.toggle()}),n=$('<div class="elfinder-edit-onlinconvert-options"/>').hide();e.options&&$.each(e.options,function(e,i){"download_password"!==e&&n.append(o.call(t,e,i))}),t.append(i,n)},r=+new Date,d=0;return s.ext2mime||(s.ext2mime=n.arrayFlip(n.mimeTypes)),$.each(c.conv,function(o,c){var p=o.toLowerCase(),u="elfinder-edit-onlineconvert-"+p+r,f=$('<div id="'+u+'" class="onlineconvert-category onlineconvert-category-'+p+'"/>').data("cname",o);$.each(c,function(e,i){var r=e.toLowerCase(),c=m(o,e);s.ext2mime[c]||("audio"===p||"image"===p||"video"===p?s.ext2mime[c]=p+"/x-"+r:s.ext2mime[c]="application/octet-stream"),n.uploadMimeCheck(s.ext2mime[c],t.phash)&&f.append($('<div class="elfinder-edit-onlineconvert-button onlineconvert-'+r+'"/>').on("makeoption",function(e,t){var i=$(this);i.children(".elfinder-button-icon-preference").length||a.call(i,t)}).append($("<button/>").text(e).data("conv",e)))}),f.children().length&&(i.append($("<li/>").append($("<a/>").attr("href","#"+u).text(o))),e.append(f),l[p]=d++)}),c.useTabs?e.prepend(i).tabs({beforeActivate:function(e,t){u(t.newPanel.data("cname"))}}):$.each(c.conv,function(t){var i=t.toLowerCase();e.append($('<fieldset class="onlineconvert-fieldset-'+i+'"/>').append($("<legend/>").text(t)).append(e.children(".onlineconvert-category-"+i)))}),e}(),g=$(this).hide(),h=$("<div/>").append(f,$('<div class="elfinder-edit-onlineconvert-bottom-btn"/>').append($("<button/>").addClass(n.UA.iOS?"elfinder-button-ios-multiline":"").html(n.i18n("convertOn","Online-Convert.com")).on("click",function(){j()})),c.showLink?$(c.link):null).appendTo(g.parent().css({overflow:"auto"})),v=$('<div class="elfinder-edit-spinner elfinder-edit-onlineconvert"/>').hide().html('<span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/>').appendTo(g.parent()),x=null,b=function(){return x?$.Deferred().resolve(x):(v.show(),n.forExternalUrl(t.hash).done(function(e){x=e}).fail(function(e){e&&n.error(e),r.elfinderdialog("destroy")}).always(function(){v.hide()}))},y=function(e){$(r).data("dfrd",b().done(function(i){h.fadeOut(),C({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]+"."+m(e.category,e.convert),"args[mime]":t.mime},preventDefault:!0}).done(function(t){w(t.apires,e.category,e.convert)}).fail(function(e){e&&n.error(e),r.elfinderdialog("destroy")})}))},w=function(e,t,i){var o,a=[];e&&e.id?(o=e.status,"failed"===o.code?(v.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),h.fadeIn()):"completed"===o.code?k(e):(C(o),setTimeout(function(){O(e.id)},1e3))):(d.appendTo(r.closest(".ui-dialog")),e.message&&n.toast({msg:n.i18n(e.message),mode:"error",timeOut:5e3,onHidden:function(){1===d.children().length&&d.appendTo(n.getUI())}}),n.toast({msg:n.i18n("editorConvNoApi"),mode:"warning",timeOut:3e3,onHidden:function(){1===d.children().length&&d.appendTo(n.getUI()),j(t,i)}}))},C=function(e){v.show().children(".elfinder-spinner-text").text(e.info)},O=function(e){n.request({data:{cmd:"editor",name:"OnlineConvert",method:"api","args[jobid]":e},preventDefault:!0}).done(function(e){w(e.apires)}).fail(function(e){e&&n.error(e),r.elfinderdialog("destroy")})},k=function(e){var i=e.output,o=(e.id,"");v.hide(),i&&i.length&&(r.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}}))},j=function(e,t){var i;e&&t?(i=c.conv[e]&&c.conv[e][t]&&c.conv[e][t].link?c.conv[e][t].link.replace("%s",t):"hash"===e?"/"+t+"-generator":"/convert-to-"+t,i=c.url.replace("%s",e).replace("%s",i)):i=c.url.replace("%s",T+"-conversion").replace("%s",""),v.hide(),h.hide(),g.parent().css({overflow:n.UA.iOS?"auto":"hidden"}),$(r).data("dfrd",b().done(function(e){var t;e?(t={css:{height:"100%"}},r.editor.trigger("Prepare",{node:r,editorObj:void 0,instance:g,opts:t}),e=i+encodeURIComponent(n.convAbsUrl(e)),g.attr("src",e).show().css(t.css).one("load",function(){d.appendTo(r.closest(".ui-dialog")),n.toast({msg:n.i18n("editorConvNeedUpload"),mode:"info",timeOut:15e3,onHidden:function(){1===d.children().length&&d.appendTo(n.getUI())},button:{text:"btnYes"}})})):(data.error&&n.error(data.error),r.elfinderdialog("destroy"))}))},T="document";g.parent().addClass("overflow-scrolling-touch"),(a=t.mime.match(/^(audio|image|video)/))&&(T=a[1]),c.useTabs?l[T]&&f.tabs("option","active",l[T]):(o=Object.keys(c.conv).length,$.each(c.conv,function(e){return e.toLowerCase()===T?(u(e,function(){$.each(c.conv,function(e){e.toLowerCase()!==T&&u(e)})}),!1):void o--}),o||$.each(c.conv,function(e){u(e)}),g.parent().scrollTop(f.children(".onlineconvert-fieldset-"+T).offset().top))},load:function(){},getContent:function(){},save:function(){},beforeclose:u,close:function(e){var t=(this.fm,$(e).data("dfrd"));t&&"pending"===t.state()&&t.reject()}}]},window.elFinder);
\ No newline at end of file
--- /dev/null
+(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();
+ $('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+fm.i18n('getLink')+'</button></div>').appendTo(ql.info.find('.elfinder-quicklook-info'))
+ .on('click', function() {
+ $(this).html('<span class="elfinder-spinner">');
+ fm.request({
+ data : {cmd : 'url', target : file.hash},
+ preventDefault : true
+ })
+ .always(function() {
+ preview.show();
+ $(this).html('');
+ })
+ .done(function(data) {
+ var rfile = fm.file(file.hash);
+ ql.value.url = rfile.url = data.url || '';
+ if (ql.value.url) {
+ preview.trigger($.Event('update', {file : ql.value}));
+ }
+ });
+ });
+ }
+ if (file.url !== '' && file.url != '1') {
+ e.stopImmediatePropagation();
+
+ loading = $('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"/></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
+
+ node = $('<iframe class="elfinder-quicklook-preview-iframe"/>')
+ .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) {}
+}));
--- /dev/null
+!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,t,a=(e.window,i.file);0===a.mime.indexOf("application/vnd.google-apps.")&&("1"==a.url&&(o.hide(),$('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+n.i18n("getLink")+"</button></div>").appendTo(e.info.find(".elfinder-quicklook-info")).on("click",function(){$(this).html('<span class="elfinder-spinner">'),n.request({data:{cmd:"url",target:a.hash},preventDefault:!0}).always(function(){o.show(),$(this).html("")}).done(function(i){var r=n.file(a.hash);e.value.url=r.url=i.url||"",e.value.url&&o.trigger($.Event("update",{file:e.value}))})})),""!==a.url&&"1"!=a.url&&(i.stopImmediatePropagation(),t=$('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+n.i18n("nowLoading")+'</span><span class="elfinder-spinner"/></div>').appendTo(e.info.find(".elfinder-quicklook-info")),r=$('<iframe class="elfinder-quicklook-preview-iframe"/>').css("background-color","transparent").on("load",function(){e.hideinfo(),t.remove(),r.css("background-color","#fff")}).on("error",function(){t.remove(),r.remove()}).appendTo(o).attr("src",n.url(a.hash)),o.one("change",function(){t.remove(),r.off("load").remove()})))})})}catch(n){}});
\ No newline at end of file
--- /dev/null
+/**
+ * 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 <translator@email.tld>
+ * @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
+
+ /******************************* 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?<br/>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<br/>Convert to UTF-8?<br/>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.<br/>Please select character encoding of this file.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'It has been modified.<br/>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
+ '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
+ '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?<br/>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
+
+ /********************************** 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * العربية translation
+ * @author Tawfek Daghistani <tawfekov@gmail.com>
+ * @author Atef Ben Ali <atef.bettaib@gmail.com>
+ * @version 2017-08-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.ar = {
+ translator : 'Tawfek Daghistani <tawfekov@gmail.com>, Atef Ben Ali <atef.bettaib@gmail.com>',
+ language : 'العربية',
+ direction : 'rtl',
+ dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM
+ nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'خطأ',
+ 'errUnknown' : 'خطأ غير معروف .',
+ 'errUnknownCmd' : 'أمر غير معروف .',
+ 'errJqui' : 'إعدادات jQuery UI غير كاملة الرجاء التأكد من وجود كل من selectable, draggable and droppable',
+ 'errNode' : '. موجود DOM إلى عنصر elFinder تحتاج ',
+ 'errURL' : 'إعدادات خاطئة , عليك وضع الرابط ضمن الإعدادات',
+ 'errAccess' : 'وصول مرفوض .',
+ 'errConnect' : 'غير قادر على الاتصال بالخادم الخلفي (backend)',
+ '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' : 'For security reason denied to unpack archives contains symlinks.', // edited 24.06.2012
+ 'errArcMaxSize' : 'الملفات المضغوطة تجاوزت السعة المسموح بها.',
+ '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' : 'نوع ملف غير مدعوم.',
+ '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
+
+ /******************************* 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' : 'Restore', //from v2.1.24 added 3.5.2017
+ 'cmdsearch' : 'بحث عن ملفات',
+ 'cmdup' : 'تغيير المسار إلى مستوى أعلى',
+ 'cmdupload' : 'رفع ملفات',
+ 'cmdview' : 'عرض',
+ 'cmdresize' : 'Resize & Rotate',
+ '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' : 'Change mode', // from v2.1 added 20.6.2015
+ 'cmdopendir' : 'فتح ملف', // from v2.1 added 13.1.2016
+ 'cmdcolwidth' : 'Reset column width', // 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' : '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
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'إغلاق',
+ 'btnSave' : 'حفظ',
+ 'btnRm' : 'إزالة',
+ 'btnApply' : 'تطبيق',
+ 'btnCancel' : 'إلغاء',
+ 'btnNo' : 'لا',
+ 'btnYes' : 'نعم',
+ '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' : 'إعادة تسمية', // from v2.1.24 added 6.4.2017
+ 'btnRenameAll' : 'إعادة تسمية (الجميع)', // 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' : 'حفظ إلى', // 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' : 'Resizing images',
+ 'ntfsmth' : 'يفعل شيئا',
+ 'ntfloadimg' : 'تحميل الصورة',
+ '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' : 'قراءة معلومات الملف', // 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 tha 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
+
+ /*********************************** volumes *********************************/
+ 'volume_Trash' : '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' : 'January',
+ 'February' : 'February',
+ 'March' : 'March',
+ 'April' : 'April',
+ 'May' : 'May',
+ 'June' : 'June',
+ 'July' : 'July',
+ 'August' : 'August',
+ 'September' : 'September',
+ 'October' : 'October',
+ 'November' : 'November',
+ 'December' : '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' : 'by mode', // 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' : 'Also 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'يرجى التأكيد',
+ 'confirmRm' : 'هل أنت متأكد من أنك تريد الحذف؟ لا يمكن التراجع عن هذه العملية ',
+ 'confirmRepl' : 'استبدال الملف القديم بملف جديد؟',
+ 'confirmRest' : 'استبدال العنصر بالعنصر من سلة المهملات؟', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : 'Not in UTF-8<br/>Convert to UTF-8?<br/>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.<br/>Please select character encoding of this file.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'It has been modified.<br/>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
+ 'apllyAll' : 'تطبيق على الكل',
+ 'name' : 'الاسم',
+ 'size' : 'الحجم',
+ 'perms' : 'الصلاحيات',
+ 'modify' : 'آخر تعديل',
+ 'kind' : 'نوع الملف',
+ 'read' : 'قراءة',
+ 'write' : 'كتابة',
+ 'noaccess' : 'وصول ممنوع',
+ 'and' : 'و',
+ 'unknown' : 'غير معروف',
+ 'selectall' : 'تحديد كل الملفات',
+ 'selectfiles' : 'تحديد ملفات',
+ 'selectffile' : 'تحديد الملف الأول',
+ 'selectlfile' : 'تحديد الملف الأخير',
+ 'viewlist' : 'عرض قائمة',
+ 'viewicons' : 'عرض أيْقونات',
+ 'places' : 'المواقع',
+ 'calc' : 'حساب',
+ 'path' : 'مسار',
+ 'aliasfor' : 'Alias for',
+ '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' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'الاختصارات غير مفعلة',
+ 'dropFiles' : 'لصق الملفات هنا',
+ 'or' : 'أو',
+ 'selectForUpload' : 'اختر الملفات التي تريد رفعها',
+ 'moveFiles' : 'قص الملفات',
+ 'copyFiles' : 'نسخ الملفات',
+ 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017
+ 'rmFromPlaces' : 'Remove from places',
+ 'aspectRatio' : 'Aspect ratio',
+ 'scale' : 'Scale',
+ 'width' : 'عرض',
+ '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' : 'مستخدم', // added 18.04.2012
+ 'pass' : 'كلمة العبور', // 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 setting', // 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 setting', // from v2.1.27 added 2.8.2017
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'غير معروف',
+ 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016
+ 'kindFolder' : 'مجلد',
+ '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' : 'Text ملف',
+ 'kindTextPlain' : 'مستند نصي',
+ 'kindPHP' : 'PHP ملف نصي برمجي لـ',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML ملف',
+ 'kindJS' : 'Javascript ملف نصي برمجي لـ',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C ملف نصي برمجي لـ',
+ 'kindCHeader' : 'C header ملف نصي برمجي لـ',
+ 'kindCPP' : 'C++ ملف نصي برمجي لـ',
+ 'kindCPPHeader' : 'C++ header ملف نصي برمجي لـ',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python ملف نصي برمجي لـ',
+ 'kindJava' : 'Java ملف نصي برمجي لـ',
+ 'kindRuby' : 'Ruby ملف نصي برمجي لـ',
+ 'kindPerl' : 'Perl script',
+ '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 ملف فيديو'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Bulgarian translation
+ * @author Stamo Petkov <stamo.petkov@gmail.com>
+ * @author Nikolay Petkov <office@cmstory.com>
+ * @version 2018-07-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.bg = {
+ translator : 'Stamo Petkov <stamo.petkov@gmail.com>, Nikolay Petkov <office@cmstory.com>',
+ language : 'Bulgarian',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y 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 : {
+
+ /********************************** 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
+
+ /******************************* 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
+
+ /*********************************** 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' : 'NewFolder', // added 10.11.2015
+ 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Изисква се подтвърждение',
+ 'confirmRm' : 'Сигурни ли сте, че желаете да премахнете файловете?<br/>Това действие е необратимо!',
+ 'confirmRepl' : 'Да заменя ли стария файл с новия?',
+ 'confirmRest' : 'Да се замени ли съществуващата позиция с тази в кошчето?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : 'Не е в UTF-8 формат<br/>Конвертиране до UTF-8?<br/>Съдържанието става в UTF-8 формат при запазване след конверсията.', // from v2.1 added 08.04.2014
+ 'confirmNonUTF8' : 'Кодирането на този файл не може да бъде открито. Необходимо е временно да се преобразува в UTF-8 за редактиране. <br/> Моля, изберете кодиране на този файл.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Има направени промени.<br/>Те ще бъдат загубени, ако не запишете промените.', // 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 градуса 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
+ '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? <br/> Това не може да бъде отменено!', // 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' : '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' : 'Информация за селекцията', // from v2.1.33 added 7.3.2018
+ 'hashChecker' : 'Алгоритми за показване на файловия хеш', // from v2.1.33 added 10.3.2018
+ 'infoItems' : 'Info Items (Selection Info Panel)', // 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
+
+ /********************************** 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 филм'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Catalan translation
+ * @author Sergio Jovani <lesergi@gmail.com>
+ * @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.ca = {
+ translator : 'Sergio Jovani <lesergi@gmail.com>',
+ language : 'Català',
+ direction : 'ltr',
+ dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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.',
+ '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".',
+ 'errUpload' : 'S\'ha produït un error en la càrrega.',
+ 'errUploadFile' : 'No s\'ha pogut carregar "$1".',
+ 'errUploadNoFiles' : 'No s\'han trobat fitxers per carregar.',
+ 'errUploadTotalSize' : 'Les dades excedeixen la mida màxima permesa.',
+ 'errUploadFileSize' : 'El fitxer excedeix la mida màxima permesa.',
+ 'errUploadMime' : 'El tipus de fitxer no està permès.',
+ 'errUploadTransfer' : 'S\'ha produït un error en transferir "$1".',
+ 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.',
+ 'errReplace' : 'Unable to replace "$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".',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ '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.',
+ 'errArcMaxSize' : 'Els fitxers de l\'arxiu excedeixen la mida màxima permesa.',
+ 'errResize' : 'No s\'ha pogut redimensionar "$1".',
+ 'errResizeDegree' : 'Invalid rotate degree.',
+ 'errResizeRotate' : 'Unable to rotate image.',
+ 'errResizeSize' : 'Invalid image size.',
+ 'errResizeNoChange' : 'Image size not changed.',
+ 'errUsupportType' : 'El tipus de fitxer no està suportat.',
+ 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.',
+ 'errNetMount' : 'Unable to mount "$1".',
+ 'errNetMountNoDriver' : 'Unsupported protocol.',
+ 'errNetMountFailed' : 'Mount failed.',
+ 'errNetMountHostReq' : 'Host required.',
+ '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' : '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',
+ 'cmdmkfile' : 'Nou fitxer',
+ 'cmdopen' : 'Obre',
+ 'cmdpaste' : 'Enganxa',
+ 'cmdquicklook' : 'Previsualitza',
+ 'cmdreload' : 'Torna a carregar',
+ 'cmdrename' : 'Canvia el nom',
+ 'cmdrm' : 'Suprimeix',
+ 'cmdsearch' : 'Cerca fitxers',
+ 'cmdup' : 'Vés al directori superior',
+ 'cmdupload' : 'Carrega fitxers',
+ 'cmdview' : 'Visualitza',
+ 'cmdresize' : 'Redimensiona la imatge',
+ 'cmdsort' : 'Ordena',
+ 'cmdnetmount' : 'Mount network volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Tanca',
+ 'btnSave' : 'Desa',
+ 'btnRm' : 'Suprimeix',
+ 'btnApply' : 'Aplica',
+ 'btnCancel' : 'Cancel·la',
+ 'btnNo' : 'No',
+ 'btnYes' : 'Sí',
+ 'btnMount' : 'Mount',
+
+ /******************************** 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' : 'Resizing images',
+ 'ntfsmth' : 'S\'estan realitzant operacions',
+ 'ntfloadimg' : 'S\'està carregant la imatge',
+ 'ntfnetmount' : 'Mounting network volume',
+ 'ntfdim' : 'Acquiring image dimension',
+
+ /************************************ 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' : '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' : 'per nom',
+ 'sortkind' : 'per tipus',
+ 'sortsize' : 'per mida',
+ 'sortdate' : 'per data',
+ 'sortFoldersFirst' : 'Folders first',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Es necessita confirmació',
+ 'confirmRm' : 'Voleu suprimir els fitxers?<br />L\'acció es podrà desfer!',
+ 'confirmRepl' : 'Voleu reemplaçar el fitxer antic amb el nou?',
+ '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',
+ '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',
+ 'rmFromPlaces' : 'Suprimeix dels llocs',
+ 'aspectRatio' : 'Relació d\'aspecte',
+ 'scale' : 'Escala',
+ 'width' : 'Amplada',
+ 'height' : 'Alçada',
+ 'resize' : 'Redimensiona',
+ 'crop' : 'Retalla',
+ 'rotate' : 'Rotate',
+ 'rotate-cw' : 'Rotate 90 degrees CW',
+ 'rotate-ccw' : 'Rotate 90 degrees CCW',
+ 'degree' : '°',
+ 'netMountDialogTitle' : 'Mount network volume',
+ 'protocol' : 'Protocol',
+ 'host' : 'Host',
+ 'port' : 'Port',
+ 'user' : 'User',
+ 'pass' : 'Password',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Desconegut',
+ 'kindFolder' : 'Carpeta',
+ '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',
+ // 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Czech translation
+ * @author RobiNN <kelcakrobo@gmail.com>
+ * @author Jay Gridley <gridley.jay@hotmail.com>
+ * @version 2019-01-12
+ */
+(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: 12. 01. 2019 18:21
+ fancyDateFormat : '$1 H:i', // will show like: Dnes 18:21
+ nonameDateFormat : 'ymd-His', // noname upload will show like: 190112-182129
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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?<br/>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?<br/>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.<br/>Prosím, vyberte kódování znaků souboru.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Byl změněn.<br/>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
+ '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' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // 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
+ '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<br/>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' : 'Dialog', // 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
+
+ /********************************** 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' : 'Alias',
+ '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 font',
+ 'kindOTF' : 'Open Type font',
+ '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' : 'Rich Text Format',
+ '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' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 playlist',
+ '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Danish translation
+ * @author Mark Topper (webman.io)
+ * @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.da = {
+ translator : 'Mark Topper (webman.io)',
+ language : 'Language of translation in Danish',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Fejl',
+ 'errUnknown' : 'Ukendt fejl.',
+ 'errUnknownCmd' : 'Ukendt kommando.',
+ 'errJqui' : 'Ugyldig jQuery UI konfiguration. Valgbare, som kan trækkes rundt og droppable 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' : 'Connection timeout.',
+ 'errNotFound' : 'Backend ikke fundet.',
+ 'errResponse' : 'Ugyldigt backend svar.',
+ 'errConf' : 'Ugyldig backend konfiguration.',
+ 'errJSON' : 'PHP JSON module ikke installeret.',
+ 'errNoVolumes' : 'Læsbare volumener ikke tilgængelig.',
+ 'errCmdParams' : 'Ugyldige parametre for kommando "$1".',
+ 'errDataNotJSON' : 'Data er ikke JSON.',
+ 'errDataEmpty' : 'Data er tomt.',
+ 'errCmdReq' : 'Backend request kræver kommando navn.',
+ '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 fil navn.',
+ 'errFolderNotFound' : 'Mappe ikke fundet.',
+ 'errFileNotFound' : 'Fil ikke fundet.',
+ 'errTrgFolderNotFound' : 'Mappen "$1" blev ikke fundet.',
+ 'errPopup' : 'Browseren forhindrede åbne popup-vindue. For at åbne filen aktivere popup-vinduer 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 volumen "$1" er ikke tilladt.',
+ 'errCopyTo' : 'Kopiering af filer til volumen "$1" er ikke tilladt.',
+ 'errUpload' : 'Upload fejl.',
+ 'errUploadFile' : 'Kunne ikke uploade "$1".',
+ 'errUploadNoFiles' : 'Ingen filer fundet til upload.',
+ 'errUploadTotalSize' : 'Dataen overskrider den maksimalt tilladte størrelse.',
+ 'errUploadFileSize' : 'Fil overskrider den maksimalt tilladte størrelse.',
+ 'errUploadMime' : 'Fil type ikke godkendt.',
+ 'errUploadTransfer' : '"$1" overførsels fejl.',
+ 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.',
+ 'errReplace' : 'Unable to replace "$1".',
+ 'errSave' : 'Kunne ikke gemme "$1".',
+ 'errCopy' : 'Kunne ikke kopier "$1".',
+ 'errMove' : 'Kunne ikke flytte "$1".',
+ 'errCopyInItself' : 'Kunne ikke kopier "$1" ind i sig selv.',
+ 'errRm' : 'Kunne ikke slette "$1".',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ 'errExtract' : 'Kunne ikke udpakke filer fra "$1".',
+ 'errArchive' : 'Kunne ikke oprette arkiv.',
+ 'errArcType' : 'Arkiv typen er ikke understøttet.',
+ 'errNoArchive' : 'Filen er ikke et arkiv eller har ikke-understøttet arkiv type.',
+ 'errCmdNoSupport' : 'Backend understøtter ikke denne kommando.',
+ 'errReplByChild' : 'Mappen "$1" kan ikke erstattes af en vare, den indeholder.',
+ 'errArcSymlinks' : 'Af sikkerhedsmæssige årsager nægtede 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' : 'Invalid rotate degree.',
+ 'errResizeRotate' : 'Unable to rotate image.',
+ 'errResizeSize' : 'Invalid image size.',
+ 'errResizeNoChange' : 'Image size not changed.',
+ 'errUsupportType' : 'Ikke-understøttet fil type.',
+ '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 protocol.', // added 17.04.2012
+ 'errNetMountFailed' : 'Mount mislykkedes.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Host krævet.', // 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"',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Lav arkiv',
+ 'cmdback' : 'Tilbage',
+ 'cmdcopy' : 'Kopier',
+ 'cmdcut' : 'Klip',
+ 'cmddownload' : 'Download',
+ 'cmdduplicate' : 'Dupliker',
+ 'cmdedit' : 'Rediger Fil',
+ 'cmdextract' : 'Udpak filer fra arkiv',
+ 'cmdforward' : 'Frem',
+ 'cmdgetfile' : 'Vælg filer',
+ 'cmdhelp' : 'Om dette produkt',
+ 'cmdhome' : 'Hjem',
+ 'cmdinfo' : 'Information',
+ 'cmdmkdir' : 'Ny mappe',
+ 'cmdmkfile' : 'Ny fil',
+ 'cmdopen' : 'Åben',
+ 'cmdpaste' : 'Indsæt',
+ 'cmdquicklook' : 'Vis',
+ 'cmdreload' : 'Reload',
+ 'cmdrename' : 'Omdøb',
+ 'cmdrm' : 'Slet',
+ 'cmdsearch' : 'Find filer',
+ 'cmdup' : 'Gå til forældre mappe',
+ 'cmdupload' : 'Upload filer',
+ 'cmdview' : 'Vis',
+ 'cmdresize' : 'Ændre størrelse',
+ 'cmdsort' : 'Sorter',
+ 'cmdnetmount' : 'Mount network volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Luk',
+ 'btnSave' : 'Gem',
+ 'btnRm' : 'Slet',
+ 'btnApply' : 'Anvend',
+ 'btnCancel' : 'Annuler',
+ 'btnNo' : 'Nej',
+ 'btnYes' : 'Ja',
+ 'btnMount' : 'Mount',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Åben mappe',
+ 'ntffile' : 'Åben fil',
+ 'ntfreload' : 'Reload mappe indhold',
+ 'ntfmkdir' : 'Opretter mappe',
+ 'ntfmkfile' : 'Opretter filer',
+ 'ntfrm' : 'Sletter filer',
+ 'ntfcopy' : 'Kopier filer',
+ 'ntfmove' : 'Flytter filer',
+ 'ntfprepare' : 'Forbereder kopering af filer',
+ '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' : 'Resizing images',
+ 'ntfsmth' : 'Gør noget >_<',
+ 'ntfloadimg' : 'Loader billede',
+ 'ntfnetmount' : 'Montere netværks volume', // added 18.04.2012
+ 'ntfdim' : 'Acquiring image dimension',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Ukendt',
+ 'Today' : 'I dag',
+ 'Yesterday' : 'I gå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' : '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', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bekræftelse påkrævet',
+ 'confirmRm' : 'Er du sikker på du vil slette valgte filer?<br/>Dette kan ikke blive fortrudt!',
+ 'confirmRepl' : 'Erstat gammel fil med ny fil?',
+ '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' : 'Liste visning',
+ 'viewicons' : 'Ikon visning',
+ 'places' : 'Plaseringer',
+ 'calc' : 'Udregn',
+ 'path' : 'Sti',
+ 'aliasfor' : 'Alias for',
+ 'locked' : 'Låst',
+ 'dim' : 'Størrelser',
+ 'files' : 'Filer',
+ 'folders' : 'Mapper',
+ 'items' : 'Varer',
+ 'yes' : 'ja',
+ 'no' : 'nej',
+ 'link' : 'Link',
+ 'searcresult' : 'Søge resultater',
+ 'selected' : 'valgte varer',
+ 'about' : 'Om',
+ 'shortcuts' : 'Genveje',
+ 'help' : 'Hjælp',
+ 'webfm' : 'Internet fil manager',
+ 'ver' : 'Version',
+ 'protocolver' : 'protocol version',
+ 'homepage' : 'Projeckt side',
+ 'docs' : 'Dokumentation',
+ 'github' : 'Fork os på Github',
+ 'twitter' : 'Følg os på twitter',
+ 'facebook' : 'Følg os på facebook',
+ 'team' : 'Hold',
+ 'chiefdev' : 'hovede udvikler',
+ 'developer' : 'udvikler',
+ 'contributor' : 'bidragyder',
+ 'maintainer' : 'vedligeholder',
+ 'translator' : 'oversætter',
+ 'icons' : 'Ikoner',
+ 'dontforget' : 'og glemt ikke at tag dit håndklæde',
+ 'shortcutsof' : 'Gemveje deaktiveret',
+ 'dropFiles' : 'Drop filer hertil',
+ 'or' : 'eller',
+ 'selectForUpload' : 'Vælg filer at uploade',
+ 'moveFiles' : 'Flyt filer',
+ 'copyFiles' : 'Kopier filer',
+ 'rmFromPlaces' : 'Slet fra placering',
+ 'aspectRatio' : 'Skærmformat',
+ 'scale' : 'Skala',
+ 'width' : 'Bredte',
+ 'height' : 'Højde',
+ 'resize' : 'Ændre størrelse',
+ 'crop' : 'Beskær',
+ 'rotate' : 'Roter',
+ 'rotate-cw' : 'Roter 90 grader med uret',
+ 'rotate-ccw' : 'Roter 90 grader imod uret',
+ 'degree' : 'Grader',
+ 'netMountDialogTitle' : 'Monter netwærks volume', // added 18.04.2012
+ 'protocol' : 'Protokol', // added 18.04.2012
+ 'host' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'Bruger', // added 18.04.2012
+ 'pass' : 'Kodeord', // added 18.04.2012
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Ukendt',
+ 'kindFolder' : 'Mappe',
+ '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' : 'Tekst dokument',
+ 'kindTextPlain' : 'Ren tekst',
+ 'kindPHP' : 'PHP kode',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML document',
+ 'kindJS' : 'Javascript kode',
+ 'kindRTF' : 'Rich Tekst Format',
+ 'kindC' : 'C kode',
+ 'kindCHeader' : 'C header kode',
+ 'kindCPP' : 'C++ kode',
+ 'kindCPPHeader' : 'C++ header kode',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python kode',
+ 'kindJava' : 'Java kode',
+ 'kindRuby' : 'Ruby kode',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL kode',
+ 'kindXML' : 'XML dokument',
+ 'kindAWK' : 'AWK kode',
+ 'kindCSV' : 'Komma seperaret værdier',
+ 'kindDOCBOOK' : 'Docbook XML dokument',
+ // 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' : 'Lyd medie',
+ 'kindAudioMPEG' : 'MPEG lyd',
+ 'kindAudioMPEG4' : 'MPEG-4 lyd',
+ 'kindAudioMIDI' : 'MIDI lyd',
+ 'kindAudioOGG' : 'Ogg Vorbis lyd',
+ 'kindAudioWAV' : 'WAV lyd',
+ 'AudioPlaylist' : 'MP3 spilleliste',
+ 'kindVideo' : 'Video medie',
+ 'kindVideoDV' : 'DV video',
+ 'kindVideoMPEG' : 'MPEG video',
+ 'kindVideoMPEG4' : 'MPEG-4 video',
+ 'kindVideoAVI' : 'AVI video',
+ 'kindVideoMOV' : 'Hurtig tids video',
+ 'kindVideoWM' : 'Windows Medie video',
+ 'kindVideoFlash' : 'Flash video',
+ 'kindVideoMKV' : 'Matroska video',
+ 'kindVideoOGG' : 'Ogg video'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Deutsch translation
+ * @author JPG & Mace <dev@flying-datacenter.de>
+ * @author tora60 from pragmaMx.org
+ * @author Timo-Linde <info@timo-linde.de>
+ * @author osworx.net
+ * @author Maximilian Schwarz <info@deefuse.de>
+ * @author SF Webdesign <webdesign@stephan-frank.de>
+ * @version 2018-05-15
+ */
+(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.net, Maximilian Schwarz <info@deefuse.de>, SF Webdesign <webdesign@stephan-frank.de>',
+ language : 'Deutsch',
+ direction : 'ltr',
+ dateFormat : 'd. M Y 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 : {
+
+ /********************************** 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 Volumes 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 Browser Einstellungen 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' : 'Daten überschreiten die Maximalgröße.', // old name - errMaxSize
+ 'errUploadFileSize' : 'Die Datei überschreitet die Maximalgröße.', // old name - errFileMaxSize
+ 'errUploadMime' : 'Dateityp nicht zulässig.',
+ 'errUploadTransfer' : '"$1" Transfer-Fehler.',
+ '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 der Archivtyp 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ützter Dateityp.',
+ 'errNotUTF8Content' : 'Die Datei "$1" ist nicht im UTF-8-Format und kann nicht editiert 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 auf FTP nicht möglich: "$1"',
+ 'errArchiveExec' : 'Fehler beim Archivieren der Dateien: "$1"',
+ 'errExtractExec' : 'Fehler beim Extrahieren der Dateien: "$1"',
+ 'errNetUnMount' : 'Kann nicht ausgeworfen werden.', // from v2.1 added 30.04.2012
+ 'errConvUTF8' : 'Kann nicht zu UTF-8 konvertiert werden.', // from v2.1 added 08.04.2014
+ 'errFolderUpload' : 'Versuchen Sie es mit Google Chrome, wenn Sie einen Ordner hochladen möchten.', // 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' : 'Konnte nicht von Mülleimer wiederherstellen. Konnte Ziel für wiederherstellung nicht finden.', // 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
+
+ /******************************* 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': 'Auswerfen', // from v2.1 added 30.04.2012
+ 'cmdplaces' : 'Orte', // 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' : 'Zü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
+
+ /*********************************** 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' : 'Bild laden',
+ '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 Ordner Informationen', // 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' : 'Stelle von Mülleimer wieder her', // 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
+
+ /*********************************** volumes *********************************/
+ 'volume_Trash' : 'Mülleimer', //from v2.1.24 added 29.4.2017
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'unbekannt',
+ 'Today' : 'Heute',
+ 'Yesterday' : 'Gestern',
+ 'msJan' : 'Jan',
+ 'msFeb' : 'Feb',
+ 'msMar' : 'Mär',
+ 'msApr' : 'Apr',
+ 'msMay' : 'Mai',
+ 'msJun' : 'Jun',
+ 'msJul' : 'Jul',
+ '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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bestätigung benötigt',
+ 'confirmRm' : 'Sollen die Dateien gelöscht werden?<br/>Dies kann nicht rückgängig gemacht werden!',
+ 'confirmRepl' : 'Datei ersetzen?',
+ 'confirmRest' : 'Vorhandenes Element durch das Element im Papierkorb ersetzen?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : 'Nicht in UTF-8<br/>Zu UTF-8 konvertieren?<br/>Inhalte werden zu UTF-8 konvertiert, wenn Sie speichern.', // 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. <br/> Bitte wähle eine Zeichenkodierung dieser Datei aus.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Die Datei wurde geändert.<br/>Sie werden die Änderungen verlieren, wenn Sie nicht speichern.', // from v2.1 added 15.7.2015
+ 'confirmTrash' : 'Sind Sie sicher, dass sie die Elemente in den Mülleimer bewegen wollen?', //from v2.1.24 added 29.4.2017
+ 'apllyAll' : 'Alles bestätigen',
+ 'name' : 'Name',
+ 'size' : 'Größe',
+ 'perms' : 'Berechtigungen',
+ 'modify' : 'Änderungsdatum',
+ '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',
+ 'places' : 'Orte',
+ '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' : 'Version',
+ 'protocolver' : 'Protokoll-Version',
+ 'homepage' : 'Projekt-Webseite',
+ 'docs' : 'Dokumentation',
+ 'github' : 'Forke uns auf Github',
+ 'twitter' : 'Folge uns auf twitter',
+ 'facebook' : 'Begleite uns auf facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'Chefentwickler',
+ 'developer' : 'Entwickler',
+ 'contributor' : 'Unterstützer',
+ 'maintainer' : 'Maintainer',
+ 'translator' : 'Übersetzer',
+ 'icons' : 'Icons',
+ 'dontforget' : 'und vergiss dein Handtuch nicht',
+ '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 Orten',
+ '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' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'Benutzer', // added 18.04.2012
+ 'pass' : 'Passwort', // added 18.04.2012
+ 'confirmUnmount' : 'Möchten Sie "$1" auswerfen?', // from v2.1 added 30.04.2012
+ 'dropFilesBrowser': 'Sie können Dateien in den Browser ziehen', // from v2.1 added 30.05.2012
+ 'dropPasteFiles' : 'Lassen Sie die Dateien hier los', // from v2.1 added 07.04.2014
+ 'encoding' : 'Codierung', // 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 Fügen Sie Elemente durch Ziehen hinzu', // from v2.1.6 added 30.12.2015
+ 'emptyFolderLTap' : 'Der Ordner ist leer\\A Fügen Sie Elemente durch langes Tippen hinzu', // 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': 'Sie versuchen, die $1 Dateien zu öffnen. Sind Sie sicher, dass sie im Browser öffnen wollen ?', // from v2.1.12 added 5.14.2016
+ 'emptySearch' : 'Suchergebnisse sind leer', // from v2.1.12 added 5.16.2016
+ 'editingFile' : 'Datei wird bearbeitet.', // from v2.1.13 added 6.3.2016
+ 'hasSelected' : 'Sie haben $1 Objekte ausgewählt.', // from v2.1.13 added 6.3.2016
+ 'hasClipboard' : 'Sie haben $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' : 'Es sind zu viele Elemente, also kann es nicht in den Papierkorb.', // from v2.1.25 added 9.6.2017
+ 'TextArea' : 'Textbereich', // from v2.1.25 added 14.6.2017
+ 'folderToEmpty' : 'Leere den 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' : 'Toolbar einstellung', // from v2.1.27 added 2.8.2017
+ 'charsLeft' : '... $1 Zeichen übrig.', // from v2.1.29 added 30.8.2017
+ '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' : 'Sind Sie sicher, dass Sie $1 ausgewählte Elemente in $2 umbenennen möchten?<br/>Das kann nicht rückgängig gemacht werden!', // 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' : 'Präfix hinzufügen', // from v2.1.31 added 8.12.2017
+ 'asSuffix' : 'Suffix 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 Sie dieses Volume entfernen.', // 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. Sind Sie sicher, dass Sie alle aushängen wollen?', // 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' : 'Symbolgröße (Symbol Ansicht)', // form v2.1.39 added 7.5.2018
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Unbekannt',
+ 'kindRoot' : 'Wurzelverzeichnis', // 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' : 'Microsoft Office-Dokument',
+ 'kindMsWord' : 'Microsoft Word-Dokument',
+ 'kindMsExcel' : 'Microsoft Excel-Dokument',
+ 'kindMsPP' : 'Microsoft Powerpoint-Präsentation',
+ 'kindOO' : 'Open Office-Dokument',
+ 'kindAppFlash' : 'Flash-Programm',
+ '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' : 'Cascading Stylesheet',
+ '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' : 'Komma-separierte 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Greek translation
+ * @author yawd <info@yawd.eu>, Romanos
+ * @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.el = {
+ translator : 'yawd <ingo@yawd.eu>',
+ language : 'Ελληνικά',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** 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' : 'Μη έγκυρο όνομα αρχείου.',
+ 'errFolderNotFound' : 'Ο φάκελος δε βρέθηκε.',
+ 'errFileNotFound' : 'Το αρχείο δε βρέθηκε.',
+ 'errTrgFolderNotFound' : 'Ο φάκελος "$1" δε βρέθηκε.',
+ 'errPopup' : 'Το πρόγραμμα πλήγησης εμπόδισε το άνοιγμα αναδυόμενου παραθύρου. Για ανοίξετε το αρχείο ενεργοποιήστε το στις επιλογές του περιηγητή.',
+ 'errMkdir' : 'Η δυμιουργία του φακέλου "$1" δεν ήταν δυνατή.',
+ 'errMkfile' : 'Η δημιουργία του αρχείου "$1" δεν ήταν δυνατή.',
+ 'errRename' : 'Η μετονομασία του αρχείου "$1" δεν ήταν δυνατή.',
+ 'errCopyFrom' : 'Δεν επιτρέπεται η αντιγραφή αρχείων από το volume "$1".',
+ 'errCopyTo' : 'Δεν επιτρέπεται η αντιγραφή αρχείων στο volume "$1".',
+ 'errUpload' : 'Πρόβλημα κατά το upload.',
+ 'errUploadFile' : 'Το αρχείο "$1" δεν μπόρεσε να γίνει upload.',
+ 'errUploadNoFiles' : 'Δεν βρέθηκαν αρχεία για upload.',
+ 'errUploadTotalSize' : 'Τα δεδομένα υπερβαίνουν το επιτρεπόμενο μέγιστο μέγεθος δεδομένων.',
+ 'errUploadFileSize' : 'Το αρχείο υπερβαίνει το επιτρεπόμενο μέγιστο μέγεθος.',
+ 'errUploadMime' : 'Ο τύπος αρχείου δεν επιτρέπεται.',
+ 'errUploadTransfer' : 'Πρόβλημα μεταφοράς για το "$1".',
+ 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.',
+ 'errReplace' : 'Unable to replace "$1".',
+ 'errSave' : 'Το "$1" δεν ήταν δυνατόν να αποθηκευτεί.',
+ 'errCopy' : 'Δεν ήταν δυνατή η αντιγραφή του "$1".',
+ 'errMove' : 'Δεν ήταν δυνατή η μετακίνηση του "$1".',
+ 'errCopyInItself' : 'Δεν είναι δυνατή η αντιγραφή του "$1" στον εαυτό του.',
+ 'errRm' : 'Δεν ήταν δυνατή η αφαίρεση του "$1".',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ 'errExtract' : 'Δεν ήταν δυνατή η ανάγνωση των αρχείων από "$1".',
+ 'errArchive' : 'Δεν ήταν δυνατή η δημιουργία του αρχείου.',
+ 'errArcType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.',
+ 'errNoArchive' : 'Το αρχείο δεν είναι έγκυρο ή δεν υποστηρίζεται ο τύπος του.',
+ 'errCmdNoSupport' : 'Το backend δεν υποστηρίζει αυτή την εντολή.',
+ 'errReplByChild' : 'Ο φάκελος “$1” δεν μπορεί να αντικατασταθεί από οποιοδήποτε αρχείο περιέχεται σε αυτόν.',
+ 'errArcSymlinks' : 'Για λόγους ασφαλείας δεν είναι δυνατόν να διαβαστούν αρχεία που περιέχουν symlinks orη αρχεία με μη επιτρεπτά ονόματα.', // edited 24.06.2012
+ 'errArcMaxSize' : 'Το μέγεθος του αρχείου υπερβαίνει το μέγιστο επιτρεπτό όριο.',
+ 'errResize' : 'Δεν ήταν δυνατή η αλλαγή μεγέθους του "$1".',
+ 'errResizeDegree' : 'Invalid rotate degree.',
+ 'errResizeRotate' : 'Unable to rotate image.',
+ 'errResizeSize' : 'Invalid image size.',
+ 'errResizeNoChange' : 'Image size not changed.',
+ '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' : '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' : 'Δημιουργία archive αρχείου',
+ 'cmdback' : 'Πίσω',
+ 'cmdcopy' : 'Αντιγραφή',
+ 'cmdcut' : 'Αφαίρεση',
+ 'cmddownload' : 'Μεταφόρτωση',
+ 'cmdduplicate' : 'Αντίγραφο',
+ 'cmdedit' : 'Επεξεργασία αρχείου',
+ 'cmdextract' : 'Εξαγωγή αρχείων από archive',
+ 'cmdforward' : 'Προώθηση',
+ 'cmdgetfile' : 'Επιλέξτε αρχεία',
+ 'cmdhelp' : 'Σχετικά με αυτό το λογισμικό',
+ 'cmdhome' : 'Home',
+ 'cmdinfo' : 'Πληροφορίες',
+ 'cmdmkdir' : 'Νέος φάκελος',
+ 'cmdmkfile' : 'Νέος αρχείο',
+ 'cmdopen' : 'Άνοιγμα',
+ 'cmdpaste' : 'Επικόλληση',
+ 'cmdquicklook' : 'Προεπισκόπηση',
+ 'cmdreload' : 'Ανανέωση',
+ 'cmdrename' : 'Μετονομασία',
+ 'cmdrm' : 'Διαγραφή',
+ 'cmdsearch' : 'Έυρεση αρχείων',
+ 'cmdup' : 'Μετάβαση στο γονικό φάκελο',
+ 'cmdupload' : 'Ανέβασμα αρχείων',
+ 'cmdview' : 'Προβολή',
+ 'cmdresize' : 'Αλλαγή μεγέθους εικόνας',
+ 'cmdsort' : 'Ταξινόμηση',
+ 'cmdnetmount' : 'Mount network volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Κλείσιμο',
+ 'btnSave' : 'Αποθήκευση',
+ 'btnRm' : 'Αφαίρεση',
+ 'btnApply' : 'Εφαρμογή',
+ 'btnCancel' : 'Ακύρωση',
+ 'btnNo' : 'Όχι',
+ 'btnYes' : 'Ναι',
+ 'btnMount' : 'Mount',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Άνοιγμα φακέλου',
+ 'ntffile' : 'Άνοιγμα αρχείου',
+ 'ntfreload' : 'Ανανέωση περιεχομένων φακέλου',
+ 'ntfmkdir' : 'Δημιουργία φακέλου',
+ 'ntfmkfile' : 'Δημιουργία αρχείων',
+ 'ntfrm' : 'Διαγραφή αρχείων',
+ 'ntfcopy' : 'Αντιγραφή αρχείων',
+ 'ntfmove' : 'Μετακίνηση αρχείων',
+ 'ntfprepare' : 'Προετοιμασία αντιγραφής αρχείων',
+ 'ntfrename' : 'Μετονομασία αρχείων',
+ 'ntfupload' : 'Ανέβασμα αρχείων',
+ 'ntfdownload' : 'Μεταφόρτωση αρχείων',
+ 'ntfsave' : 'Αποθήκευση αρχείων',
+ 'ntfarchive' : 'Δημιουργία αρχείου',
+ 'ntfextract' : 'Εξαγωγή αρχείων από το archive',
+ 'ntfsearch' : 'Αναζήτηση αρχείων',
+ 'ntfresize' : 'Resizing images',
+ 'ntfsmth' : 'Σύστημα απασχολημένο>_<',
+ 'ntfloadimg' : 'Φόρτωση εικόνας',
+ 'ntfnetmount' : 'Φόρτωση δικτυακού δίσκου', // added 18.04.2012
+ 'ntfdim' : 'Acquiring image dimension',
+
+ /************************************ 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' : 'Πρώτα οι φάκελοι', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Απαιτείται επιβεβαίωση',
+ 'confirmRm' : 'Είστε σίγουροι πως θέλετε να διαγράψετε τα αρχεία?<br/>Οι αλλαγές θα είναι μόνιμες!',
+ 'confirmRepl' : 'Αντικατάσταση του παλιού αρχείου με το νέο?',
+ 'apllyAll' : 'Εφαρμογή σε όλα',
+ 'name' : 'Όνομα',
+ 'size' : 'Μέγεθος',
+ 'perms' : 'Δικαιώματα',
+ 'modify' : 'Τροποποιήθηκε',
+ 'kind' : 'Είδος',
+ 'read' : 'ανάγνωση',
+ 'write' : 'εγγραφή',
+ 'noaccess' : 'δεν υπάρχει πρόσβαση',
+ 'and' : 'και',
+ 'unknown' : 'άγνωστο',
+ 'selectall' : 'Επιλογή όλων',
+ 'selectfiles' : 'Επιλογή αρχείων',
+ 'selectffile' : 'Επιλογή πρώτου αρχείου',
+ 'selectlfile' : 'Επιλογή τελευταίου αρχείου',
+ 'viewlist' : 'Προβολή λίστας',
+ 'viewicons' : 'Προβολή εικονιδίων',
+ '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' : 'Αντιγραφή αρχείων',
+ 'rmFromPlaces' : 'Αντιγραφή από τοποθεσίες',
+ 'aspectRatio' : 'Αναλογία διαστάσεων',
+ 'scale' : 'Κλίμακα',
+ 'width' : 'Πλάτος',
+ 'height' : 'Ύψος',
+ 'resize' : 'Αλλαγή μεγέθους',
+ 'crop' : 'Crop',
+ 'rotate' : 'Περιστροφή',
+ 'rotate-cw' : 'Περιστροφή κατά 90 βαθμούς CW',
+ 'rotate-ccw' : 'Περιστροφή κατά 90 βαθμούς CCW',
+ 'degree' : 'Βαθμός',
+ 'netMountDialogTitle' : 'Φορτώστε δικτυακό δίσκο', // added 18.04.2012
+ 'protocol' : 'Πρωτόκολλο', // added 18.04.2012
+ 'host' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'Χρήστης', // added 18.04.2012
+ 'pass' : 'Κωδικός', // added 18.04.2012
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Άγνωστο',
+ 'kindFolder' : 'Φάκελος',
+ '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' : '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' : 'Έγγραφο κειμένου',
+ 'kindTextPlain' : 'Απλό κείμενο',
+ 'kindPHP' : 'Κώδικας PHP',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'Έγγραφο HTML',
+ 'kindJS' : 'Κώδικας Javascript',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'Κώδικας C',
+ 'kindCHeader' : 'Κώδικας κεφαλίδας C',
+ 'kindCPP' : 'Κώδικας C++',
+ 'kindCPPHeader' : 'Κώδικας κεφαλίδας C++',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Κώδικας Python',
+ 'kindJava' : 'Κώδικας Java',
+ 'kindRuby' : 'Κώδικας Ruby',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'Κώδικας SQL',
+ 'kindXML' : 'Έγγραφο XML',
+ 'kindAWK' : 'Κώδικας AWK',
+ 'kindCSV' : 'Τιμές χωρισμένες με κόμμα',
+ 'kindDOCBOOK' : 'Έγγραφο Docbook XML',
+ // 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 playlist',
+ 'kindVideo' : 'Αρχεία media',
+ 'kindVideoDV' : 'Ταινία DV',
+ 'kindVideoMPEG' : 'Ταινία MPEG',
+ 'kindVideoMPEG4' : 'Ταινία MPEG-4',
+ 'kindVideoAVI' : 'Ταινία AVI',
+ 'kindVideoMOV' : 'Ταινία Quick Time',
+ 'kindVideoWM' : 'Ταινία Windows Media',
+ 'kindVideoFlash' : 'Ταινία flash',
+ 'kindVideoMKV' : 'Ταινία matroska',
+ 'kindVideoOGG' : 'Ταινία ogg'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Español internacional translation
+ * @author Julián Torres <julian.torres@pabernosmatao.com>
+ * @author Luis Faura <luis@luisfaura.es>
+ * @author Adrià Vilanova <me@avm99963.tk>
+ * @author Wilman Marín Duran <fuclo05@hotmail.com>
+ * @version 2018-04-10
+ */
+(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', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM
+ nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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
+
+ /*********************************** 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
+
+ /*********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Se necesita confirmación',
+ 'confirmRm' : '¿Está seguro de querer eliminar archivos?<br/>¡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<br/>Convertir a UTF-8?<br/>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. <br/> Por favor, seleccione la codificación de caracteres de este archivo.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Ha sido modificado.<br/>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
+ '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',
+ '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
+ '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?<br/>¡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
+
+ /********************************** 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'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Persian-Farsi Translation
+ * @author Keyhan Mohammadpour <keyhan_universityworks@yahoo.com>
+ * @author Farhad Zare <farhad@persianoc.com>
+ * @version 2018-07-29
+ */
+(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',
+ fancyDateFormat : '$1 H:i',
+ nonameDateFormat : 'ymd-His',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'خطا',
+ 'errUnknown' : 'خطای ناشناخته.',
+ 'errUnknownCmd' : 'دستور ناشناخته.',
+ 'errJqui' : 'تنظیمات کتابخانه JQuery UI شما به درستی انجام نشده است. این کتابخانه بایستی شامل Resizable ،Draggable و Droppable باشد.',
+ 'errNode' : 'elfinder به درستی ایجاد نشده است.',
+ 'errURL' : 'تنظیمات elfinder شما به درستی انجام نشده است. تنظیم Url را اصلاح نمایید.',
+ 'errAccess' : 'محدودیت سطح دسترسی',
+ 'errConnect' : 'امکان اتصال به Backend وجود ندارد.',
+ 'errAbort' : 'ارتباط قطع شده است.',
+ 'errTimeout' : 'مهلت زمانی Connection شما به اتمام رسیده است.',
+ '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' : 'نام پوشه غیرمعتبر می باشد.',
+ 'errFolderNotFound' : 'پوشه مورد نظر یافت نشد.',
+ 'errFileNotFound' : 'فایل مورد نظر یافت نشد.',
+ 'errTrgFolderNotFound' : 'پوشه مقصد با نام "$1" یافت نشد.',
+ 'errPopup' : 'مرورگر شما ار باز شدن پنجره popup جلوگیری می کند، لطفا تنظیمات مربوطه را در مرورگر خود فعال نمایید.',
+ 'errMkdir' : 'امکان ایجاد پوشه ای با نام "$1" وجود ندارد.',
+ 'errMkfile' : 'امکان ایجاد فایلی با نام "$1" وجود ندارد.',
+ 'errRename' : 'امکان تغییر نام فایل "$1" وجود ندارد.',
+ 'errCopyFrom' : 'کپی نمودن از درایو با نام "$1" ممکن نمی باشد.',
+ 'errCopyTo' : 'کپی نمودن به درایو با نام "$1" ممکن نمی باشد.',
+ 'errMkOutLink' : 'امکان ایجاد لینک به خارج از مسیر ریشه وجود ندارد.',
+ 'errUpload' : 'خطای آپلود',
+ 'errUploadFile' : 'امکان آپلود "$1" وجود ندارد.',
+ 'errUploadNoFiles' : 'فایلی برای آپلود یافت نشد.',
+ 'errUploadTotalSize' : 'حجم داده بیش از حد مجاز می باشد.',
+ 'errUploadFileSize' : 'حجم فایل بیش از حد مجاز می باشد.',
+ 'errUploadMime' : 'نوع فایل انتخابی مجاز نمی باشد.',
+ 'errUploadTransfer' : 'در انتقال "$1" خطایی رخ داده است.',
+ 'errUploadTemp' : 'امکان ایجاد فایل موقت جهت آپلود وجود ندارد.',
+ 'errNotReplace' : 'آیتم "$1" از قبل وجود دارد و امکان جایگزینی آن با آیتمی از نوع دیگر وجود ندارد.',
+ 'errReplace' : 'امکان جایگزینی "$1" وجود ندارد.',
+ 'errSave' : 'امکان ذخیره کردن "$1" وجود ندارد.',
+ 'errCopy' : 'امکان کپی کردن "$1" وجود ندارد.',
+ 'errMove' : 'امکان جابجایی "$1" وجود ندارد.',
+ 'errCopyInItself' : 'امکان کپی کردن "$1" در درون خودش وجود ندارد.',
+ 'errRm' : 'امکان حذف کردن "$1" وجود ندارد.',
+ 'errTrash' : 'امکان حذف وجود ندارد.',
+ 'errRmSrc' : 'امکان حذف فایل(ها) از مبدا وجود ندارد.',
+ 'errExtract' : 'امکان استخراج فایل فشرده "$1" وجود ندارد.',
+ 'errArchive' : 'امکان ایجاد فایل فشرده وجود ندارد.',
+ 'errArcType' : 'نوع ناشناخته برای فایل فشرده.',
+ 'errNoArchive' : 'این فایل فشرده نیست یا اینکه این نوع فایل فشرده پشتیبانی نمی شود.',
+ 'errCmdNoSupport' : 'Backend از این دستور پشتیبانی نمی کند.',
+ 'errReplByChild' : 'امکان جایگزینی پوشه "$1" با یک آیتم از درون خودش وجود ندارد.',
+ 'errArcSymlinks' : 'به دلایل مسائل امنیتی امکان باز کردن فایل فشرده دارای symlinks وجود ندارد.',
+ 'errArcMaxSize' : 'فایل های فشرده به حداکثر اندازه تعیین شده رسیده اند.',
+ 'errResize' : 'امکان تغییر اندازه "$1" وجود ندارد.',
+ 'errResizeDegree' : 'درجه چرخش نامعتبر است.',
+ 'errResizeRotate' : 'امکان چرخش تصویر وجود ندارد.',
+ 'errResizeSize' : 'اندازه تصویر نامعتبر است.',
+ 'errResizeNoChange' : 'تغییری در اندازه تصویر ایجاد نشده است.',
+ 'errUsupportType' : 'این نوع فایل پشتیبانی نمی شود.',
+ 'errNotUTF8Content' : 'فایل "$1" به صورت UTF-8 ذخیره نشده و امکان ویرایش آن وجود ندارد.',
+ 'errNetMount' : 'امکان اتصال "$1" وجود ندارد.',
+ 'errNetMountNoDriver' : 'این پروتکل پشتیبانی نمی شود.',
+ 'errNetMountFailed' : 'اتصال ناموفق بود.',
+ 'errNetMountHostReq' : 'میزبان موردنیاز است.',
+ 'errSessionExpires' : 'اعتبار جلسه کاری شما بدلیل عدم فعالیت برای مدت زمان طولانی به اتمام رسیده است.',
+ 'errCreatingTempDir' : 'امکان ایجاد دایرکتوری موقت وجود ندارد: "$1"',
+ 'errFtpDownloadFile' : 'امکان دریافت فایل از FTP وجود ندارد: "$1"',
+ 'errFtpUploadFile' : 'امکان آپلود فایل به FTP وجود ندارد: "$1"',
+ 'errFtpMkdir' : 'امکان ایجاد دایرکتوری برروی FTP وجود ندارد: "$1"',
+ 'errArchiveExec' : 'خطا در زمان فشرده سازی این فایلها: "$1"',
+ 'errExtractExec' : 'خطا در زمان بازگشایی این فایلها: "$1"',
+ 'errNetUnMount' : 'امکان قطع اتصال وجود ندارد.',
+ 'errConvUTF8' : 'امکان تبدیل به UTF-8 وجود ندارد',
+ 'errFolderUpload' : 'جهت آپلود کردن پوشه، از یک مرورگر مدرن استفاده نمایید.',
+ 'errSearchTimeout' : 'در هنگان جستجو برای "$1" خطایی رخ داده است. نتیجه جستجو به صورت ناتمام می باشد.',
+ 'errReauthRequire' : 'اعتبارسنجی مجدد موردنیاز است.',
+ 'errMaxTargets' : 'حداکثر تعداد انتخاب قابل قبول $1 میباشد.',
+ 'errRestore' : 'امکان بازیابی وجود ندارد. مقصد بازیابی نامشخص است.',
+ 'errEditorNotFound' : 'ویرایشگری برای این نوع فایل یافت نشد.',
+ 'errServerError' : 'خطایی در سمت سرور به وجود آمده است.',
+ 'errEmpty' : 'امکان خالی کردن پوشه "$1" وجود ندارد.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'ایجاد فایل فشرده',
+ 'cmdback' : 'بازگشت به عقب',
+ 'cmdcopy' : 'کپی',
+ 'cmdcut' : 'بریدن',
+ 'cmddownload' : 'دانلود',
+ 'cmdduplicate' : 'تکثیر فایل',
+ 'cmdedit' : 'ویرایش محتوای فایل',
+ 'cmdextract' : 'بازگشایی فایل فشرده',
+ 'cmdforward' : 'حرکت به جلو',
+ 'cmdgetfile' : 'انتخاب فایلها',
+ 'cmdhelp' : 'درباره این نرمافزار',
+ 'cmdhome' : 'ریشه',
+ 'cmdinfo' : 'مشاهده مشخصات',
+ 'cmdmkdir' : 'پوشه جدید',
+ 'cmdmkdirin' : 'انتقال به پوشه جدید',
+ 'cmdmkfile' : 'فایل جدید',
+ 'cmdopen' : 'باز کردن',
+ 'cmdpaste' : 'چسباندن',
+ 'cmdquicklook' : 'پیش نمایش',
+ 'cmdreload' : 'بارگذاری مجدد',
+ 'cmdrename' : 'تغییر نام',
+ 'cmdrm' : 'حذف',
+ 'cmdtrash' : 'انتقال به سطل بازیافت',
+ 'cmdrestore' : 'بازیابی',
+ 'cmdsearch' : 'جستجوی فایل',
+ 'cmdup' : 'رفتن به سطح بالاتر',
+ 'cmdupload' : 'آپلود فایل',
+ 'cmdview' : 'مشاهده',
+ 'cmdresize' : 'تغییر اندازه و چرخش',
+ 'cmdsort' : 'مرتب سازی',
+ 'cmdnetmount' : 'اتصال درایو شبکه',
+ 'cmdnetunmount': 'قطع اتصال',
+ 'cmdplaces' : 'به مسیرهای',
+ 'cmdchmod' : 'تغییر حالت',
+ 'cmdopendir' : 'بازکردن یک پوشه',
+ 'cmdcolwidth' : 'بازنشانی عرض ستون',
+ 'cmdfullscreen': 'حالت نمایش تمام صفحه',
+ 'cmdmove' : 'انتقال',
+ 'cmdempty' : 'خالی کردن پوشه',
+ 'cmdundo' : 'خنثیسازی',
+ 'cmdredo' : 'انجام مجدد',
+ 'cmdpreference': 'تنظیمات',
+ 'cmdselectall' : 'انتخاب همه موارد',
+ 'cmdselectnone': 'لغو انتخاب',
+ 'cmdselectinvert': 'انتخاب معکوس',
+ 'cmdopennew' : 'باز کردن در پنجره جدید',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'بستن',
+ 'btnSave' : 'ذخیره',
+ 'btnRm' : 'حذف',
+ 'btnApply' : 'اعمال',
+ 'btnCancel' : 'انصراف',
+ 'btnNo' : 'خیر',
+ 'btnYes' : 'بلی',
+ 'btnMount' : 'اتصال',
+ 'btnApprove': 'رفتن به $1 و تایید',
+ 'btnUnmount': 'قطع اتصال',
+ 'btnConv' : 'تبدیل',
+ 'btnCwd' : 'اینجا',
+ 'btnVolume' : 'درایو',
+ 'btnAll' : 'همه',
+ 'btnMime' : 'نوع فایل',
+ 'btnFileName':'نام فایل',
+ 'btnSaveClose': 'ذخیره و بستن',
+ 'btnBackup' : 'پشتیبانگیری',
+ 'btnRename' : 'تغییر نام',
+ 'btnRenameAll' : 'تغییر نام(همه)',
+ 'btnPrevious' : 'قبلی ($1/$2)',
+ 'btnNext' : 'بعدی ($1/$2)',
+ 'btnSaveAs' : 'ذخیره با نام جدید',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'در حال باز کردن پوشه',
+ 'ntffile' : 'در حال باز کردن فایل',
+ 'ntfreload' : 'بارگذاری مجدد محتویات پوشه',
+ 'ntfmkdir' : 'در حال ایجاد پوشه',
+ 'ntfmkfile' : 'در حال ایجاد فایل',
+ 'ntfrm' : 'در حال حذف موارد موردنظر',
+ 'ntfcopy' : 'در حال کپی موارد موردنظر',
+ 'ntfmove' : 'در حال انتقال موارد موردنظر',
+ 'ntfprepare' : 'بررسی موارد موجود',
+ 'ntfrename' : 'در حال تغییر نام فایل',
+ 'ntfupload' : 'در حال آپلود فایل',
+ 'ntfdownload' : 'در حال دانلود فایل',
+ 'ntfsave' : 'در حال ذخیره فایل',
+ 'ntfarchive' : 'در حال ایجاد فایل فشرده',
+ 'ntfextract' : 'در حال استخراج فایل ها از حالت فشرده',
+ 'ntfsearch' : 'در حال جستجوی فایل',
+ 'ntfresize' : 'در حال تغییر اندازه تصاویر',
+ 'ntfsmth' : 'درحال انجام عملیات ....',
+ 'ntfloadimg' : 'در حال بارگذاری تصویر',
+ 'ntfnetmount' : 'در حال اتصال درایو شبکه',
+ 'ntfnetunmount': 'قطع اتصال درایو شبکه',
+ 'ntfdim' : 'در حال محاسبه ابعاد تصویر',
+ 'ntfreaddir' : 'در حال دریافت مشخصات پوشه',
+ 'ntfurl' : 'در حال دریافت URL',
+ 'ntfchmod' : 'در حال تغییر نوع فایل',
+ 'ntfpreupload': 'در حال تایید نام فایل جهت آپلود',
+ 'ntfzipdl' : 'در حال ایجاد فایل جهت دانلود',
+ 'ntfparents' : 'در حال دریافت اطلاعات مسیر',
+ 'ntfchunkmerge': 'در حال پردازش فایل آپلود شده',
+ 'ntftrash' : 'در حال انتقال به سطل بازیافت',
+ 'ntfrestore' : 'در حال بازیابی از سطل بازیافت',
+ 'ntfchkdir' : 'بررسی پوشه مقصد',
+ 'ntfundo' : 'در حال خنثیسازی آخرین عملیات',
+ 'ntfredo' : 'در حال انجام مجدد آخرین عملیات',
+
+ /*********************************** volumes *********************************/
+ 'volume_Trash' : 'سطل بازیافت',
+
+ /************************************ 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' : 'براساس سطح دسترسی',
+ 'sortmode' : 'براساس مد دسترسی',
+ 'sortowner' : 'براساس مالک',
+ 'sortgroup' : 'براساس گروه',
+ 'sortAlsoTreeview' : 'همچنین نمای درختی',
+
+ /********************************** new items **********************************/
+ 'untitled file.txt' : 'NewFile.txt',
+ 'untitled folder' : 'NewFolder',
+ 'Archive' : 'NewArchive',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'تایید نهایی عملیات ضروری است.',
+ 'confirmRm' : 'آیا مطمئنید که موارد انتخابی حذف شوند؟ موارد حدف شده قابل بازیابی نخواهند بود!',
+ 'confirmRepl' : 'مالیلد جایگزینی فایل قدیمی با فایل جدید انجام شود؟ (برای جایگزینی پوشه محتوای قدیمی با محتوای پوشه جدید ادغام خواهد شد. برای تهیه پشتیبانی و سپس جایگزینی گزینه پشتیبانگیری را انتخاب نمایید)',
+ 'confirmRest' : 'آیا مایلید موارد موجود با موارد بازیابی شده از سطل بازیافت جایگزین شود؟',
+ 'confirmConvUTF8' : 'UTF-8 نیست<br/>تبدیل به UTF-8 انجام شود؟<br/>پس از ذخیره سازی محتوا به صورت UTF-8 خواهد بود.',
+ 'confirmNonUTF8' : 'encoding این فایل قابل تشخیص نیست. جهت ویرایش نیاز است که به صورت موقت به UTF-8 تبدیل شود.<br/>لطفا encoding فایل را انتخاب نمایید.',
+ 'confirmNotSave' : 'تغییراتی اعمال شده است.<br/>در صورت عدم ذخیره تغییرات از بین خواهد رفت.',
+ 'confirmTrash' : 'آیا مطمئنید که این موارد به سطل بازیافت منتقل شوند؟',
+ 'apllyAll' : 'اعمال تغییرات به همه موارد',
+ 'name' : 'نام',
+ 'size' : 'اندازه',
+ 'perms' : 'سطح دسترسی',
+ 'modify' : 'آخرین تغییرات',
+ 'kind' : 'نوع',
+ 'read' : 'خواندن',
+ 'write' : 'نوشتن',
+ 'noaccess' : 'دسترسی وجود ندارد',
+ 'and' : 'و',
+ 'unknown' : 'نامعلوم',
+ 'selectall' : 'انتخاب همه موارد',
+ 'selectfiles' : 'انتخاب یک یا چند مورد',
+ 'selectffile' : 'انتخاب اولین مورد',
+ 'selectlfile' : 'انتخاب آخرین مورد',
+ 'viewlist' : 'حالت نمایش لیست',
+ 'viewicons' : 'نمایش با آیکون',
+ 'viewSmall' : 'آیکونهای کوچک',
+ 'viewMedium' : 'آیکونهای متوسط',
+ 'viewLarge' : 'آیکونهای بزرگ',
+ 'viewExtraLarge' : 'آیکونهای خیلی بزرگ',
+ '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' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'میانبرها غیرفعال شدهاند.',
+ 'dropFiles' : 'فایل ها در این بخش رها کنید.',
+ 'or' : 'یا',
+ 'selectForUpload' : 'انتخاب فایل جهت آپلود',
+ 'moveFiles' : 'انتقال موارد',
+ 'copyFiles' : 'کپی موارد',
+ 'restoreFiles' : 'بازیابی موارد',
+ 'rmFromPlaces' : 'حذف',
+ 'aspectRatio' : 'نسبت تصویر',
+ 'scale' : 'مقیاس',
+ 'width' : 'طول',
+ 'height' : 'ارتفاع',
+ 'resize' : 'تغییر اندازه',
+ 'crop' : 'بریدن',
+ 'rotate' : 'چرخاندن',
+ 'rotate-cw' : 'چرخاندن 90 درجه در جهت عقربههای ساعت',
+ 'rotate-ccw' : 'چرخاندن 90 درجه در جهت خلاف عقربههای ساعت',
+ 'degree' : '°',
+ 'netMountDialogTitle' : 'اتصال درایو شبکه',
+ 'protocol' : 'پروتکل',
+ 'host' : 'میزبان',
+ 'port' : 'پورت',
+ 'user' : 'نام کاربری',
+ 'pass' : 'کلمه عبور',
+ 'confirmUnmount' : 'مطمئن به قطع اتصال $1 می باشد؟',
+ 'dropFilesBrowser': 'فایلها را به داخل این کادر بیندازید یا از حافظه paste کنید',
+ 'dropPasteFiles' : 'فایلها را به داخل این کادر بیندازید یا از داخل حافظه آدرس URL/تصاویر را paste کنید',
+ 'encoding' : 'نوع Encoding',
+ 'locale' : 'نوع Locale',
+ 'searchTarget' : 'مقصد: $1',
+ 'searchMime' : 'جستجو براساس MIME Type وارد شده',
+ 'owner' : 'مالک',
+ 'group' : 'گروه',
+ 'other' : 'سایر',
+ 'execute' : 'قابل اجرا',
+ 'perm' : 'سطح دسترسی',
+ 'mode' : 'مد دسترسی',
+ 'emptyFolder' : 'پوشه خالی است',
+ 'emptyFolderDrop' : 'پوشه خالی است، فایلها را جهت افزودن کشیده و رها کنید',
+ 'emptyFolderLTap' : 'پوشه خالی است، یک اشاره طولانی برای افزودن فایل کافی است',
+ 'quality' : 'کیفیت',
+ 'autoSync' : 'همگامسازی خودکار',
+ 'moveUp' : 'حرکت به بالا',
+ 'getLink' : 'دریافت URL لینک',
+ 'selectedItems' : 'موارد انتخاب شده ($1)',
+ 'folderId' : 'شناسه پوشه',
+ 'offlineAccess' : 'اجازه دسترسی به صورت آفلاین',
+ 'reAuth' : 'جهت اعتبارسنجی مجدد',
+ 'nowLoading' : 'در حال بازگذاری...',
+ 'openMulti' : 'بازکردن چندین فایل',
+ 'openMultiConfirm': 'شما قصد باز کردن $1 فایل را دارید. آیا مایلید همه موارد در مرورگر باز شود؟',
+ 'emptySearch' : 'موردی یافت نشد.',
+ 'editingFile' : 'در حال ویرایش یک فایل.',
+ 'hasSelected' : 'شما $1 مورد را انتخاب کردهاید.',
+ 'hasClipboard' : 'در حافظه $1 مورد وجود دارد.',
+ 'incSearchOnly' : 'جستجوی افزایش فقط از نمای فعلی.',
+ 'reinstate' : 'بازگرداندن',
+ 'complete' : 'عملیات $1 انجام شد',
+ 'contextmenu' : 'منو راست',
+ 'pageTurning' : 'چرخش صفحه',
+ 'volumeRoots' : 'ریشههای درایو',
+ 'reset' : 'بازنشانی',
+ 'bgcolor' : 'رنگ پس زمینه',
+ 'colorPicker' : 'انتخابگر رنگ',
+ '8pxgrid' : 'گرید 8px',
+ 'enabled' : 'فعال شده',
+ 'disabled' : 'غیرفعال شده',
+ 'emptyIncSearch' : 'در نمای فعلی موردی یافت نشد.\\Aبا فشردن کلید Enter مسیر جستجو را تغییر دهید.',
+ 'emptyLetSearch' : 'برای جستجوی تک حرفی در نمایش فعلی موردی یافت نشد.',
+ 'textLabel' : 'عنوان متنی',
+ 'minsLeft' : '$1 دقیقه باقیمانده',
+ 'openAsEncoding' : 'باز کردن مجدد با encoding انتخاب شده',
+ 'saveAsEncoding' : 'ذخیره با encoding انتخاب شده',
+ 'selectFolder' : 'انتخاب پوشه',
+ 'firstLetterSearch': 'جستجوی تک حرفی',
+ 'presets' : 'از پیش تعیین شده',
+ 'tooManyToTrash' : 'موارد زیاد است و امکان انتقال به سطل بازیافت وجود ندارد.',
+ 'TextArea' : 'ویرایش محتوا',
+ 'folderToEmpty' : 'خالی کردن پوشه "$1".',
+ 'filderIsEmpty' : 'پوشه "$1" ذاتا خالی است.',
+ 'preference' : 'تنظیمات',
+ 'language' : 'زبان',
+ 'clearBrowserData': 'بازبینی تنظیمات ذخیره شده در این مرورگر',
+ 'toolbarPref' : 'تنظیمات نوار ابزار',
+ 'charsLeft' : '... $1 کاراکتر باقیمانده.',
+ 'sum' : 'مجموع',
+ 'roughFileSize' : 'اندازه فایل نامتعارف',
+ 'autoFocusDialog' : 'انتخاب عناصر داخل دیالوگ با mouseover',
+ 'select' : 'انتخاب',
+ 'selectAction' : 'عملیات به هنگام انتخاب فایل',
+ 'useStoredEditor' : 'باز کردن با ویرایشگر مورداستفاده در آخرین دفعه',
+ 'selectinvert' : 'انتخاب معکوس',
+ 'renameMultiple' : 'آیا مایل به تغییر نام $1 مورد انتخاب شده همانند $2 هستید؟<br/>امکان بازگرداندن این تغییر پس از اعمالو جود ندارد!',
+ 'batchRename' : 'تغییرنام گروهی',
+ 'plusNumber' : '+ عدد',
+ 'asPrefix' : 'افزودن پیشوند',
+ 'asSuffix' : 'افزودن پسوند',
+ 'changeExtention' : 'تغییر پسوند فایل',
+ 'columnPref' : 'تنظیمات ستونها (حالت نمایش لیست)',
+ 'reflectOnImmediate' : 'تمامی تغییرات به صورت آنی برروی فایل فشرده اعمال خواهد شد.',
+ 'reflectOnUnmount' : 'تمامی تغییرات تا زمانی که اتصال این درایو قطع نشده است اعمال نخواهند شد.',
+ 'unmountChildren' : 'اتصال به درایوهای زیر قطع خواهد شد. آیا مطمئن به ادامه عملیات هستید؟',
+ 'selectionInfo' : 'مشخصات',
+ 'hashChecker' : 'الگوریتم های نمایش hash فایل',
+ 'infoItems' : 'موارد اطلاعات',
+ 'pressAgainToExit': 'جهت خروج مجدد فشار دهید.',
+ 'toolbar' : 'نوار ابزار',
+ 'workspace' : 'فضای کاری',
+ 'dialog' : 'پنجره دیالوگ',
+ 'all' : 'همه',
+ 'iconSize' : 'اندازه آیکونها (نمایش به صورت آیکون)',
+ 'editorMaximized' : 'باز کردن پنجره ویرایشگر به صورت تمام صفحه',
+ 'editorConvNoApi' : 'بدلیل در دسترسی نبودن تبدیل از طریق API، لطفا برروی وب سایت تبدیل را انجام دهید.',
+ 'editorConvNeedUpload' : 'پس از تبدیل, شما بایستی از طریق آدرس URL یا فایل دریافت شده آپلود را انجاد دهید تا فایل تبدیل شده ذخیره گردد.',
+ 'convertOn' : 'تبدیل برروی سایت از $1',
+ 'integrations' : 'هماهنگ سازیها',
+ 'integrationWith' : 'elFinder با سرویس های زیر هماهنگ شده است. لطفا ابتدا شرایط استفاده، مقررات حریم خصوصی و سایر موارد را مطالعه بفرمایید.',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'نامعلوم',
+ 'kindRoot' : 'ریشه درایو',
+ 'kindFolder' : 'پوشه',
+ 'kindSelects' : 'انتخاب شدهها',
+ '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',
+ // 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'
+ }
+ };
+}));
--- /dev/null
+(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;
+}));
--- /dev/null
+/**
+ * Faroese translation
+ * @author Marius Hammer <marius@vrg.fo>
+ * @version 2015-12-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.fo = {
+ translator : 'Marius Hammer <marius@vrg.fo>',
+ language : 'Faroese',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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.',
+ '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".',
+ '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
+
+ /******************************* 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',
+ 'cmdmkfile' : 'Nýggja fílu',
+ 'cmdopen' : 'Opna',
+ 'cmdpaste' : 'Set inn',
+ 'cmdquicklook' : 'Forsýning',
+ 'cmdreload' : 'Les inn umaftur',
+ 'cmdrename' : 'Umdoyp',
+ 'cmdrm' : 'Strika',
+ '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' : 'Mount network volume', // added 18.04.2012
+ 'cmdnetunmount': 'Unmount', // 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
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Lat aftur',
+ 'btnSave' : 'Goym',
+ 'btnRm' : 'Strika',
+ 'btnApply' : 'Brúka',
+ 'btnCancel' : 'Angra',
+ 'btnNo' : 'Nei',
+ 'btnYes' : 'Ja',
+ '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' : 'Konverter', // from v2.1 added 08.04.2014
+ 'btnCwd' : 'Her', // from v2.1 added 22.5.2015
+ 'btnVolume' : 'Volume', // 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' : 'Backup', // fromv2.1 added 28.11.2015
+
+ /******************************** 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
+
+ /************************************ 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',
+
+ /********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Váttan kravd',
+ 'confirmRm' : 'Ert tú vísur í at tú ynskir at strika fílarnar?<br/>Hetta kann ikki angrast!',
+ 'confirmRepl' : 'Erstatta gomlu fílu við nýggja?',
+ 'confirmConvUTF8' : 'Brúka á øll', // from v2.1 added 08.04.2014
+ 'confirmNotSave' : 'Er blivi rættað.<br/>Missir sínar broytingar um tú ikki goymir.', // from v2.1 added 15.7.2015
+ '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',
+ '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' : 'and don\'t forget to take your towel',
+ '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',
+ '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' : 'Mount network volume', // 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' : 'Are you unmount $1?', // 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' : 'Locale', // from v2.1 added 19.12.2014
+ 'searchTarget' : 'Target: $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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Ókent',
+ 'kindFolder' : 'Mappa',
+ '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' : 'Portable Document Format (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 font',
+ 'kindOTF' : 'Open Type font',
+ '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 shell script',
+ 'kindPython' : 'Python kelda',
+ 'kindJava' : 'Java kelda',
+ 'kindRuby' : 'Ruby kelda',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL kelda',
+ 'kindXML' : 'XML skjal',
+ 'kindAWK' : 'AWK kelda',
+ 'kindCSV' : 'Comma separated values (CSV)',
+ 'kindDOCBOOK' : 'Docbook XML skjal',
+ 'kindMarkdown' : 'Markdown text', // 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' : 'Audio media',
+ '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' : 'Video media',
+ '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * française translation
+ * @author Régis Guyomarch <regisg@gmail.com>
+ * @author Benoit Delachaux <benorde33@gmail.com>
+ * @author Jonathan Grunder <jonathan.grunder@gmail.com>
+ * @version 2018-06-06
+ */
+(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', // 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 : {
+
+ /********************************** 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
+
+ /******************************* 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 Places', // 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
+
+ /*********************************** 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' : '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
+
+ /*********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmation requise',
+ 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?<br/>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<br/>Convertir en UTF-8 ?<br/>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.<br/>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é.<br/>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
+ 'apllyAll' : 'Appliquer à tous',
+ 'name' : 'Nom',
+ 'size' : 'Taille',
+ 'perms' : 'Permissions',
+ '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' : 'Places',
+ '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' : '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 places',
+ '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
+ 'sum' : 'Somme', // from v2.1.29 added 28.9.2017
+ 'roughFileSize' : 'Taille de fichier brute', // 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' : '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 ?<br/>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' : 'Info Items (Selection Info Panel)', // 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' : 'Icon Size (Icons view)', // form v2.1.39 added 7.5.2018
+
+ /********************************** 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' : 'Portable Document Format (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' : 'Markdown text', // 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * עברית translation
+ * @author Yaron Shahrabani <sh.yaron@gmail.com>
+ * @version 2015-11-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.he = {
+ translator : 'Yaron Shahrabani <sh.yaron@gmail.com>',
+ language : 'עברית',
+ direction : 'rtl',
+ dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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' : 'שם הקובץ שגוי.',
+ 'errFolderNotFound' : 'התיקייה לא נמצאה.',
+ 'errFileNotFound' : 'הקובץ לא נמצא.',
+ 'errTrgFolderNotFound' : 'תיקיית היעד „$1“ לא נמצאה.',
+ 'errPopup' : 'הדפדפן מנע פתיחת חלון קובץ. כדי לפתוח קובץ יש לאפשר זאת בהגדרות הדפדפן.',
+ 'errMkdir' : 'לא ניתן ליצור את התיקייה „$1“.',
+ 'errMkfile' : 'לא ניתן ליצור את הקובץ „$1“.',
+ 'errRename' : 'לא ניתן לשנות את השם של „$1“.',
+ 'errCopyFrom' : 'העתקת קבצים מהכונן „$1“ אינה מאופשרת.',
+ 'errCopyTo' : 'העתקת קבצים אל הכונן „$1“ אינה מאופשרת.',
+ 'errUpload' : 'שגיאת העלאה.', // old name - errUploadCommon
+ 'errUploadFile' : 'לא ניתן להעלות את „$1“.', // old name - errUpload
+ 'errUploadNoFiles' : 'לא נמצאו קבצים להעלאה.',
+ 'errUploadTotalSize' : 'הנתונים חורגים מהגודל המרבי המותר.', // old name - errMaxSize
+ 'errUploadFileSize' : 'הקובץ חורג מהגודל המרבי המותר.', // old name - errFileMaxSize
+ 'errUploadMime' : 'סוג הקובץ אינו מורשה.',
+ 'errUploadTransfer' : 'שגיאת העברה „$1“.',
+ 'errNotReplace' : 'הפריט „$1“ כבר קיים במיקום זה ואי אפשר להחליפו בפריט מסוג אחר.', // new
+ 'errReplace' : 'לא ניתן להחליף את „$1“.',
+ 'errSave' : 'לא ניתן לשמור את „$1“.',
+ 'errCopy' : 'לא ניתן להעתיק את „$1“.',
+ 'errMove' : 'לא ניתן להעביר את „$1“.',
+ 'errCopyInItself' : 'לא ניתן להעתיק את „$1“ לתוך עצמו.',
+ 'errRm' : 'לא ניתן להסיר את „$1“.',
+ '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“',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'יצירת ארכיון',
+ 'cmdback' : 'חזרה',
+ 'cmdcopy' : 'העתקה',
+ 'cmdcut' : 'גזירה',
+ 'cmddownload' : 'הורדה',
+ 'cmdduplicate' : 'שכפול',
+ 'cmdedit' : 'עריכת קובץ',
+ 'cmdextract' : 'חילוץ קבצים מארכיון',
+ 'cmdforward' : 'העברה',
+ 'cmdgetfile' : 'בחירת קבצים',
+ 'cmdhelp' : 'פרטים על התכנית הזו',
+ 'cmdhome' : 'בית',
+ 'cmdinfo' : 'קבלת מידע',
+ 'cmdmkdir' : 'תיקייה חדשה',
+ 'cmdmkfile' : 'קובץ חדש',
+ 'cmdopen' : 'פתיחה',
+ 'cmdpaste' : 'הדבקה',
+ 'cmdquicklook' : 'תצוגה מקדימה',
+ 'cmdreload' : 'רענון',
+ 'cmdrename' : 'שינוי שם',
+ 'cmdrm' : 'מחיקה',
+ 'cmdsearch' : 'חיפוש קבצים',
+ 'cmdup' : 'מעבר לתיקיית ההורה',
+ 'cmdupload' : 'העלאת קבצים',
+ 'cmdview' : 'תצוגה',
+ 'cmdresize' : 'שינוי גודל והיפוך',
+ 'cmdsort' : 'מיון',
+ 'cmdnetmount' : 'עיגון כונן רשת', // added 18.04.2012
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'סגירה',
+ 'btnSave' : 'שמירה',
+ 'btnRm' : 'הסרה',
+ 'btnApply' : 'החלה',
+ 'btnCancel' : 'ביטול',
+ 'btnNo' : 'לא',
+ 'btnYes' : 'כן',
+ 'btnMount' : 'עיגון', // added 18.04.2012
+
+ /******************************** 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
+ 'ntfdim' : 'ממדי תמונה מתקבלים', // added 20.05.2013
+
+ /************************************ 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' : 'תיקיות תחילה',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'נדרש אישור',
+ 'confirmRm' : 'להסיר את הקבצים?<br/>פעולה זו בלתי הפיכה!',
+ 'confirmRepl' : 'להחליף קובץ ישן בקובץ חדש?',
+ 'apllyAll' : 'להחיל על הכול',
+ 'name' : 'שם',
+ 'size' : 'גודל',
+ 'perms' : 'הרשאות',
+ 'modify' : 'שינוי',
+ 'kind' : 'סוג',
+ 'read' : 'קריאה',
+ 'write' : 'כתיבה',
+ 'noaccess' : 'אין גישה',
+ 'and' : 'וגם',
+ 'unknown' : 'לא ידוע',
+ 'selectall' : 'בחירת כל הקבצים',
+ 'selectfiles' : 'בחירת קובץ אחד ומעלה',
+ 'selectffile' : 'בחירת הקובץ הראשון',
+ 'selectlfile' : 'בחירת הקובץ האחרון',
+ 'viewlist' : 'תצוגת רשימה',
+ 'viewicons' : 'תצוגת סמלים',
+ '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' : 'העתקת קבצים',
+ '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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'בלתי ידוע',
+ 'kindFolder' : 'תיקייה',
+ 'kindAlias' : 'כינוי',
+ 'kindAliasBroken' : 'כינוי שבור',
+ // applications
+ 'kindApp' : 'יישום',
+ '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' : 'קובץ 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',
+ // 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * hr translation
+ * @version 2016-04-18
+ */
+(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', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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' : 'Backend request requires command name.',
+ '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',
+ 'errFolderNotFound' : 'Mapa nije pronađena',
+ 'errFileNotFound' : 'Dokument nije pronađen',
+ 'errTrgFolderNotFound' : 'Mapa "$1" nije pronađena',
+ 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.',
+ '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' : 'Unable to create a link to outside the volume root.', // 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' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // 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".',
+ 'errRmSrc' : 'Ne mogu ukloniti izvorni kod.',
+ '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 Google Chrome, 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 3.24.2016
+
+ /******************************* 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',
+ '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' : 'To Places', // added 28.12.2014
+ 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015
+ 'cmdopendir' : 'Otvori mapu', // from v2.1 added 13.1.2016
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Zatvori',
+ 'btnSave' : 'Spremi',
+ 'btnRm' : 'Ukloni',
+ 'btnApply' : 'Primjeni',
+ 'btnCancel' : 'Odustani',
+ 'btnNo' : 'Ne',
+ 'btnYes' : 'Da',
+ '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': 'Spremi i zatvori', // from v2.1 added 12.6.2015
+ 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015
+
+ /******************************** 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' : 'Extracting files from archive',
+ 'ntfsearch' : 'Tražim dokumente',
+ 'ntfresize' : 'Resizing images',
+ 'ntfsmth' : 'Doing something',
+ 'ntfloadimg' : 'Učitavam sliku',
+ '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
+
+ /************************************ 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',
+
+ /********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Potvrda',
+ 'confirmRm' : 'Jeste li sigurni?',
+ 'confirmRepl' : 'Zamijeni stare dokumente novima?',
+ 'confirmConvUTF8' : 'Not in UTF-8<br/>Convert to UTF-8?<br/>Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014
+ 'confirmNotSave' : 'It has been modified.<br/>Losing work if you do not save changes.', // from v2.1 added 15.7.2015
+ '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',
+ 'places' : 'Mjesta',
+ 'calc' : 'Računaj',
+ 'path' : 'Put',
+ 'aliasfor' : 'Drugo ime za',
+ 'locked' : 'Zaključano',
+ 'dim' : 'Dimenzije',
+ 'files' : 'Dokumenti',
+ 'folders' : 'Mape',
+ 'items' : 'Items',
+ 'yes' : 'da',
+ 'no' : 'ne',
+ 'link' : 'poveznica',
+ 'searcresult' : 'Rezultati pretrage',
+ 'selected' : 'selected items',
+ 'about' : 'Info',
+ 'shortcuts' : 'Prečaci',
+ 'help' : 'Pomoć',
+ 'webfm' : 'Web file manager',
+ 'ver' : 'Verzija',
+ 'protocolver' : 'protocol version',
+ 'homepage' : 'Project home',
+ 'docs' : 'Dokumentacija',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us on twitter',
+ 'facebook' : 'Join us on facebook',
+ 'team' : 'Tim',
+ 'chiefdev' : 'glavni developer',
+ 'developer' : 'developer',
+ 'contributor' : 'contributor',
+ 'maintainer' : 'maintainer',
+ 'translator' : 'translator',
+ 'icons' : 'Ikone',
+ 'dontforget' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'Prečaci isključeni',
+ 'dropFiles' : 'Ovdje ispusti dokumente',
+ 'or' : 'ili',
+ 'selectForUpload' : 'Odaberi dokumente koje prebacuješ na server',
+ 'moveFiles' : 'Premjesti dokumente',
+ 'copyFiles' : 'Kopiraj dokumente',
+ 'rmFromPlaces' : 'Remove from places',
+ 'aspectRatio' : 'Aspect ratio',
+ 'scale' : 'Skaliraj',
+ 'width' : 'Širina',
+ 'height' : 'Visina',
+ '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 or Paste files and URLs 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' : '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' : 'Auto sync', // from v2.1.6 added 10.1.2016
+ 'moveUp' : 'Gore', // 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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Unknown',
+ 'kindFolder' : 'Mapa',
+ 'kindAlias' : 'Drugo ime',
+ 'kindAliasBroken' : 'Broken alias',
+ // applications
+ 'kindApp' : 'Aplikacija',
+ 'kindPostscript' : 'Postscript document',
+ '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 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' : 'Open Type font',
+ 'kindRPM' : 'RPM paket',
+ // texts
+ 'kindText' : 'Tekst arhiva',
+ 'kindTextPlain' : 'Obični tekst',
+ '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 skripta',
+ 'kindSQL' : 'SQL source',
+ 'kindXML' : 'XML dokument',
+ 'kindAWK' : 'AWK source',
+ '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',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * magyar translation
+ * @author Gáspár Lajos <info@glsys.eu>
+ * @version 2016-06-29
+ */
+(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>',
+ language : 'magyar',
+ direction : 'ltr',
+ dateFormat : 'Y.F.d H:i:s', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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.',
+ '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.',
+ 'errRmSrc' : 'Forrásfájl(ok) eltávolítása sikertelen.',
+ 'errExtract' : 'Unable to extract files from "$1".',
+ 'errArchive' : 'Unable to create archive.',
+ 'errArcType' : 'Nem támogatott archívum típus.',
+ '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 Google Chrome, 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 3.24.2016
+
+ /******************************* 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' : 'Into new folder', // 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',
+ 'cmdsearch' : 'Keresés',
+ 'cmdup' : 'Ugrás a szülőmappába',
+ 'cmdupload' : 'Feltöltés',
+ '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
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Bezár',
+ 'btnSave' : 'Ment',
+ 'btnRm' : 'Töröl',
+ 'btnApply' : 'Apply',
+ 'btnCancel' : 'Mégsem',
+ 'btnNo' : 'Nem',
+ 'btnYes' : 'Igen',
+ '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
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Mappa megnyitás',
+ 'ntffile' : 'Fájl megnyitás',
+ 'ntfreload' : 'Reload folder content',
+ 'ntfmkdir' : 'Mappa létrehozása',
+ 'ntfmkfile' : 'Creating files',
+ 'ntfrm' : 'Fájlok törélse',
+ 'ntfcopy' : 'Fájlok másolása',
+ 'ntfmove' : 'Fájlok áthelyezése',
+ 'ntfprepare' : 'Prepare to copy files',
+ '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' : '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
+
+ /************************************ 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' : '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
+
+ /********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmation required',
+ 'confirmRm' : 'Valóban törölni akarja a kijelölt adatokat?<br/>Ez később nem fordítható vissza!',
+ 'confirmRepl' : 'Replace old file with new one?',
+ 'confirmConvUTF8' : 'Not in UTF-8<br/>Convert to UTF-8?<br/>Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014
+ 'confirmNotSave' : 'It has been modified.<br/>Losing work if you do not save changes.', // from v2.1 added 15.7.2015
+ 'apllyAll' : 'Apply to all',
+ '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',
+ 'places' : 'Helyek',
+ 'calc' : 'Calculate',
+ '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' : 'Web file manager',
+ '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' : 'Shortcuts disabled',
+ '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',
+ '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 or Paste files and URLs 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', // from v2.1.12 added 5.16.2016
+ 'editingFile' : 'You are 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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Ismeretlen',
+ 'kindFolder' : 'Mappa',
+ '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' : 'Portable Document Format (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 font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM csomag',
+ // texts
+ 'kindText' : 'Szöveges dokumentum',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP forráskód',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML dokumentum',
+ 'kindJS' : 'Javascript forráskód',
+ 'kindRTF' : 'Rich Text Format',
+ '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 script',
+ 'kindPython' : 'Python forráskód',
+ 'kindJava' : 'Java forráskód',
+ 'kindRuby' : 'Ruby forráskód',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL forráskód',
+ 'kindXML' : 'XML dokumentum',
+ 'kindAWK' : 'AWK forráskód',
+ 'kindCSV' : 'Comma separated values',
+ 'kindDOCBOOK' : 'Docbook XML dokumentum',
+ 'kindMarkdown' : 'Markdown text', // 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 bitmap image',
+ 'kindPXM' : 'Pixelmator image',
+ // 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 playlist',
+ '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Bahasa Indonesia translation
+ * @author Suyadi <1441177004009@student.unsika.ac.id>
+ * @author Ammar Faizi <ammarfaizi2@gmail.com>
+ * @version 2017-05-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.id = {
+ translator : 'Suyadi <1441177004009@student.unsika.ac.id>, Ammar Faizi <ammarfaizi2@gmail.com>',
+ language : 'Bahasa Indonesia',
+ direction : 'ltr',
+ dateFormat : 'j F, Y H:i', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ nonameDateFormat : 'd m Y - H : i : s', // to apply if upload file is noname: 120513172700
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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': 'Unmount', // 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' : 'Reset column width', // 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
+
+ /*********************************** 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': 'Unmount', // 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' : 'MIME Type', // 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' : 'Backup', // 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': 'Unmounting network volume', // 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
+
+ /*********************************** volumes *********************************/
+ 'volume_Trash' : 'Sampah', //from v2.1.24 added 29.4.2017
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'tak diketahui',
+ 'Today' : 'Hari ini',
+ 'Yesterday' : 'Kemarin',
+ 'msJan' : 'Jan',
+ 'msFeb' : 'Feb',
+ 'msMar' : 'Mar',
+ 'msApr' : 'Apr',
+ 'msMay' : 'Mei',
+ 'msJun' : 'Jun',
+ 'msJul' : 'Jul',
+ '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' : 'Also 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Diperlukan konfirmasi',
+ 'confirmRm' : 'Anda yakin akan menghapus berkas?<br/>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<br/>Konversi ke UTF-8?<br/>Konten akan berubah menjadi UTF-8 ketika disimpan dengan konversi.', // 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.<br/>Please select character encoding of this file.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Telah terjadi perubahan.<br/>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
+ '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',
+ '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' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // 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' : 'Encoding', // 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' : 'To re-authenticate', // 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' : 'Reinstate', // from v2.1.15 added 3.8.2016
+ 'complete' : '$1 selesai', // 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' : 'Warna background', // from v2.1.16 added 1.10.2016
+ 'colorPicker' : 'Mengambil warna', // from v2.1.16 added 1.10.2016
+ '8pxgrid' : '8px Grid', // 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' : '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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Tak diketahui',
+ 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016
+ 'kindFolder' : 'Folder',
+ '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' : 'Cascading style sheet',
+ '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' : 'Markdown text', // 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Italiano translation
+ * @author Alberto Tocci (alberto.tocci@gmail.com)
+ * @author Claudio Nicora (coolsoft.ita@gmail.com)
+ * @author Stefano Galeazzi <stefano.galeazzi@probanet.it>
+ * @author Thomas Camaran <camaran@gmail.com>
+ * @version 2018-06-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.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', // 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 : {
+
+ /********************************** 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
+
+ /******************************* 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' : 'Alle cartelle', // 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
+
+ /*********************************** 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
+
+ /*********************************** volumes *********************************/
+ 'volume_Trash' : 'Cestino', //from v2.1.24 added 29.4.2017
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Sconosciuto',
+ 'Today' : 'Oggi',
+ 'Yesterday' : 'Ieri',
+ 'msJan' : 'Gen',
+ 'msFeb' : 'Feb',
+ 'msMar' : 'Mar',
+ 'msApr' : 'Apr',
+ '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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Conferma richiesta',
+ 'confirmRm' : 'Sei sicuro di voler eliminare i file?<br />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<br/>Convertire in UTF-8?<br/>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.<br/>Per cortesia, selezionare la codifica caratteri per il file.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Il contenuto è stato modificato.<br/>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
+ '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' : 'Cartelle',
+ '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 places',
+ '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' : 'Host', // added 18.04.2012
+ 'port' : 'Porta', // added 18.04.2012
+ 'user' : 'Utente', // added 18.04.2012
+ 'pass' : 'Password', // 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
+ '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?<br/>Questo non può essere annullato!', // from v2.1.31 added 4.12.2017
+ 'batchRename' : 'Batch rename', // 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' : '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' : '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' : 'Toolbar', // from v2.1.38 added 4.4.2018
+ 'workspace' : 'Spazio di lavoro', // from v2.1.38 added 4.4.2018
+ 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018
+ 'all' : 'Tutti', // from v2.1.38 added 4.4.2018
+ 'iconSize' : 'Dimensione icona (Visualizzazione icone)', // form v2.1.39 added 7.5.2018
+
+ /********************************** 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' : 'File CSS (Cascading Style Sheet)',
+ '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Japanese translation
+ * @author Tomoaki Yoshida <info@yoshida-studio.jp>
+ * @author Naoki Sawada <hypweb+elfinder@gmail.com>
+ * @version 2018-12-09
+ */
+(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: 2018/08/24 04:37 PM
+ fancyDateFormat : '$1 h:i A', // will show like: 今日 04:37 PM
+ nonameDateFormat : 'ymd-His', // noname upload will show like: 180824-163717
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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' : 'アイテムを完全に削除してもよろしいですか?<br/>この操作は取り消しできません!',
+ 'confirmRepl' : '古いファイルを新しいファイルで上書きしますか? (フォルダが含まれている場合は統合されます。置き換える場合は「バックアップ」選択してください。)',
+ 'confirmRest' : '既存のアイテムをごみ箱のアイテムで上書きしますか?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : 'UTF-8 以外の文字が含まれています。<br/>UTF-8 に変換しますか?<br/>変換後の保存でコンテンツは UTF-8 になります。', // from v2.1 added 08.04.2014
+ 'confirmNonUTF8' : 'このファイルの文字エンコーディングを判別できませんでした。編集するには一時的に UTF-8 に変換する必要があります。<br/>文字エンコーディングを指定してください。', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : '変更されています。<br/>保存せずに閉じると編集内容が失われます。', // 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
+ '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 のようにリネームしますか?<br/>この操作は取り消しできません!', // 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' : '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
+
+ /********************************** 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 ムービー'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Korea-한국어 translation
+ * @author Hwang Ahreum; <luckmagic@naver.com>
+ * @author Park Sungyong; <sungyong@gmail.com>
+ * @author Yeonjeong Woo <eat_sweetly@naver.com>
+ * @version 2018-06-16
+ */
+(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>',
+ language : 'Korea-한국어',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y 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 : {
+
+ /********************************** 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' : '읽기 가능한 볼륨이 없습니다',
+ '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' : '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
+
+ /******************************* 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
+
+ /*********************************** 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
+
+ /*********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : '확인',
+ 'confirmRm' : '이 파일을 정말 삭제 하겠습니까?<br/>실행 후 되돌릴 수 없습니다!',
+ 'confirmRepl' : '파일을 덮어쓰겠습니까?',
+ 'confirmRest' : '이미 있는 항목을 휴지통에 있는 이 것으로 교체하시겠습니까?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : 'UTF-8이 아닙니다<br/>UTF-8로 변환할까요?<br/>변환후 저장하면 UTF-8로 됩니다.', // from v2.1 added 08.04.2014
+ 'confirmNonUTF8' : '이 파일의 인코딩 타입을 알아내지 못했습니다. 편집하려면 임시로 UTF-8로 변환해야 합니다.<br/>어떤 인코딩을 할지 선택하십시오.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : '변경한 부분이 있습니다.<br/>저장하지 않는다면 현재 작업중인 내용을 잃을 수 있습니다.', // 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' : '트위터따라가기',
+ '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' : 'Incremental 검색은 현재 뷰에서는 할 수 있습니다.', // 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
+ '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와 같이 바꾸겠습니까?<br/>이 작업은 원복할 수 없습니다!', // 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' : '아이콘 크기 (아이콘 보기)', // form v2.1.39 added 7.5.2018
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : '알수없음',
+ 'kindRoot' : 'Root 볼륨', // from v2.1.16 added 16.10.2016
+ 'kindFolder' : '폴더',
+ 'kindSelects' : '선택', // from v2.1.29 added 29.8.2017
+ 'kindAlias' : '별칭',
+ 'kindAliasBroken' : '손상된 Alias',
+ // applications
+ 'kindApp' : '응용프로그램',
+ 'kindPostscript' : 'Postscript 문서',
+ 'kindMsOffice' : 'Microsoft Office 문서',
+ 'kindMsWord' : 'Microsoft Word 문서',
+ 'kindMsExcel' : 'Microsoft Excel 문서',
+ 'kindMsPP' : 'Microsoft Powerpoint',
+ 'kindOO' : 'Office 문서 열기',
+ 'kindAppFlash' : '플래쉬',
+ 'kindPDF' : 'PDF(PDF)',
+ 'kindTorrent' : 'Bittorrent 파일',
+ 'kind7z' : '7z 압축파일',
+ 'kindTAR' : 'TAR 압축파일',
+ 'kindGZIP' : 'GZIP 압축파일',
+ 'kindBZIP' : 'BZIP 압축파일',
+ 'kindXZ' : 'XZ 압축파일',
+ 'kindZIP' : 'ZIP 압축파일',
+ 'kindRAR' : 'RAR 압축파일',
+ 'kindJAR' : 'Java JAR 파일',
+ 'kindTTF' : '트루타입 글꼴',
+ 'kindOTF' : '오픈타입 글꼴',
+ 'kindRPM' : 'RPM 패키지',
+ // texts
+ 'kindText' : 'Text 문서',
+ 'kindTextPlain' : '보통 텍스트',
+ 'kindPHP' : 'PHP 소스',
+ 'kindCSS' : 'CSS 문서',
+ 'kindHTML' : 'HTML 문서',
+ 'kindJS' : '자바스크립트 소스',
+ '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' : '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' : '퀵타임 동영상',
+ 'kindVideoWM' : '윈도우 미디어 플레이어 동영상',
+ 'kindVideoFlash' : '플래쉬 동영상',
+ 'kindVideoMKV' : 'Matroska 동영상',
+ 'kindVideoOGG' : 'Ogg 동영상'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Dutch translation
+ * @author Barry vd. Heuvel <barry@fruitcakestudio.nl>
+ * @version 2015-12-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.nl = {
+ translator : 'Barry vd. Heuvel <barry@fruitcakestudio.nl>',
+ language : 'Nederlands',
+ direction : 'ltr',
+ dateFormat : 'd-m-Y H:i', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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.',
+ '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.',
+ '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' : 'Kan niet converteren naar UTF-8', // from v2.1 added 08.04.2014
+ 'errFolderUpload' : 'Probeer Google Chrome, als je de map wil uploaden.', // from v2.1 added 26.6.2015
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Maak archief',
+ 'cmdback' : 'Vorige',
+ 'cmdcopy' : 'Kopieer',
+ 'cmdcut' : 'Knip',
+ 'cmddownload' : 'Download',
+ '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',
+ 'cmdmkfile' : 'Nieuw bestand',
+ 'cmdopen' : 'Open',
+ 'cmdpaste' : 'Plak',
+ 'cmdquicklook' : 'Voorbeeld',
+ 'cmdreload' : 'Vernieuwen',
+ 'cmdrename' : 'Naam wijzigen',
+ 'cmdrm' : 'Verwijder',
+ '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': 'Unmount', // from v2.1 added 30.04.2012
+ 'cmdplaces' : 'Naar Plaatsen', // added 28.12.2014
+ 'cmdchmod' : 'Wijzig modus', // from v2.1 added 20.6.2015
+
+ /*********************************** 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': 'Unmount', // 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
+
+ /******************************** 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
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'onbekend',
+ 'Today' : 'Vandaag',
+ 'Yesterday' : 'Gisteren',
+ 'msJan' : 'Jan',
+ 'msFeb' : 'Feb',
+ 'msMar' : 'Mar',
+ 'msApr' : 'Apr',
+ 'msMay' : 'Mei',
+ 'msJun' : 'Jun',
+ 'msJul' : 'Jul',
+ 'msAug' : 'Aug',
+ 'msSep' : 'Sep',
+ 'msOct' : 'Okt',
+ 'msNov' : 'Nov',
+ 'msDec' : 'Dec',
+ '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',
+
+ /********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bevestiging nodig',
+ 'confirmRm' : 'Weet u zeker dat u deze bestanden wil verwijderen?<br/>Deze actie kan niet ongedaan gemaakt worden!',
+ 'confirmRepl' : 'Oud bestand vervangen door het nieuwe bestand?',
+ 'confirmConvUTF8' : 'Niet in UTF-8<br/>Converteren naar UTF-8?<br/>De inhoud wordt UTF-8 door op te slaan na de conversie.', // from v2.1 added 08.04.2014
+ 'confirmNotSave' : 'Het is aangepast.<br/>Wijzigingen gaan verloren als je niet opslaat.', // from v2.1 added 15.7.2015
+ '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',
+ 'places' : 'Plaatsen',
+ 'calc' : 'Bereken',
+ 'path' : 'Pad',
+ 'aliasfor' : 'Alias voor',
+ 'locked' : 'Vergrendeld',
+ 'dim' : 'Dimensies',
+ 'files' : 'Bestanden',
+ 'folders' : 'Mappen',
+ 'items' : 'Items',
+ 'yes' : 'ja',
+ 'no' : 'nee',
+ 'link' : 'Link',
+ 'searcresult' : 'Zoek resultaten',
+ 'selected' : 'geselecteerde items',
+ 'about' : 'Over',
+ 'shortcuts' : 'Snelkoppelingen',
+ 'help' : 'Help',
+ 'webfm' : 'Web bestandsmanager',
+ 'ver' : 'Versie',
+ 'protocolver' : 'protocol versie',
+ 'homepage' : 'Project home',
+ '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',
+ 'rmFromPlaces' : 'Verwijder uit Plaatsen',
+ 'aspectRatio' : 'Aspect ratio',
+ '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' : 'Host', // 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' : 'Locale', // 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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Onbekend',
+ 'kindFolder' : 'Map',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Kapot alias',
+ // applications
+ 'kindApp' : 'Applicatie',
+ '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 applicatie',
+ 'kindPDF' : 'Portable Document Format (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 font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM package',
+ // texts
+ 'kindText' : 'Tekst bestand',
+ 'kindTextPlain' : 'Tekst',
+ 'kindPHP' : 'PHP bronbestand',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML document',
+ 'kindJS' : 'Javascript bronbestand',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C bronbestand',
+ 'kindCHeader' : 'C header bronbestand',
+ 'kindCPP' : 'C++ bronbestand',
+ 'kindCPPHeader' : 'C++ header bronbestand',
+ 'kindShell' : 'Unix shell script',
+ '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' : '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 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Norwegian translation
+ * @author Stian Jacobsen <stian@promonorge.no>
+ * @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.no = {
+ translator : 'Stian Jacobsen <stian@promonorge.no>',
+ language : 'Norwegian Bokmål',
+ dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM
+ direction : 'ltr',
+ messages : {
+
+ /********************************** 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.',
+ '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.',
+ 'errUpload' : 'Feil under opplasting.',
+ 'errUploadFile' : 'Kunne ikke laste opp "$1".',
+ 'errUploadNoFiles' : 'Ingen filer funnet til opplasting.',
+ 'errUploadTotalSize' : 'Innholdet overgår maksimum tillatt størrelse.',
+ 'errUploadFileSize' : 'Filen vergår maksimum tillatt størrelse.',
+ 'errUploadMime' : 'Filtypen ikke tillatt.',
+ 'errUploadTransfer' : '"$1" overførings feil.',
+ 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.',
+ 'errReplace' : 'Unable to replace "$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".',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ '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' : '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"',
+
+ /******************************* 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',
+ 'cmdmkfile' : 'Ny fil',
+ 'cmdopen' : 'Åpne',
+ 'cmdpaste' : 'Lim inn',
+ 'cmdquicklook' : 'Forhåndsvis',
+ 'cmdreload' : 'Last inn på nytt',
+ 'cmdrename' : 'Gi nytt navn',
+ 'cmdrm' : 'Slett',
+ 'cmdsearch' : 'Find filer',
+ 'cmdup' : 'Opp et nivå',
+ 'cmdupload' : 'Last opp filer',
+ 'cmdview' : 'Vis',
+ 'cmdresize' : 'Resize & Rotate',
+ 'cmdsort' : 'Sort',
+ 'cmdnetmount' : 'Mount network volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Lukk',
+ 'btnSave' : 'Lagre',
+ 'btnRm' : 'Slett',
+ 'btnApply' : 'Apply',
+ 'btnCancel' : 'Avbryt',
+ 'btnNo' : 'Nei',
+ 'btnYes' : 'Ja',
+ 'btnMount' : 'Mount',
+
+ /******************************** 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' : 'Resizing images',
+ 'ntfsmth' : 'Gjør noe... >_<',
+ 'ntfloadimg' : 'Loading image',
+ 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012
+ 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Ukjent',
+ 'Today' : 'I dag',
+ 'Yesterday' : 'I gå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' : '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',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bekreftelse nødvendig',
+ 'confirmRm' : 'Er du sikker på at du ønsker å slette filene?',
+ 'confirmRepl' : 'Erstatt fil?',
+ 'apllyAll' : 'Apply to all',
+ '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',
+ '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' : 'Project home',
+ 'docs' : 'dokumentasjon',
+ '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' : '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',
+ '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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Ukjent',
+ 'kindFolder' : 'Mappe',
+ '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 presentation',
+ 'kindOO' : 'Open Office dokument',
+ 'kindAppFlash' : 'Flash',
+ 'kindPDF' : 'Portabelt dokument (PDF)',
+ 'kindTorrent' : 'Bittorrent file',
+ 'kind7z' : '7z arkiv',
+ 'kindTAR' : 'TAR arkiv',
+ 'kindGZIP' : 'GZIP arkiv',
+ 'kindBZIP' : 'BZIP arkiv',
+ 'kindXZ' : 'XZ arkiv',
+ 'kindZIP' : 'ZIP arkiv',
+ 'kindRAR' : 'RAR ar',
+ 'kindJAR' : 'Java JAR file',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM package',
+ // texts
+ 'kindText' : 'Tekst dokument',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP kilde',
+ 'kindCSS' : 'Cascading style sheet',
+ '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 shell script',
+ 'kindPython' : 'Python kilde',
+ 'kindJava' : 'Java kilde',
+ 'kindRuby' : 'Ruby kilde',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL skilde',
+ 'kindXML' : 'XML dokument',
+ 'kindAWK' : 'AWK kilde',
+ 'kindCSV' : 'Comma separated values',
+ 'kindDOCBOOK' : 'Docbook XML dokument',
+ // 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' : 'Audio media',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 spilleliste',
+ 'kindVideo' : 'Video media',
+ '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'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Polski translation
+ * @author Marcin Mikołajczyk <marcin@pjwstk.edu.pl>
+ * @author Bogusław Zięba <bobi@poczta.fm>
+ * @version 2018-12-29
+ */
+(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>',
+ language : 'Polski',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i', // will show like: 29.12.2018 19:25
+ fancyDateFormat : '$1 H:i', // will show like: Dzisiaj 19:25
+ nonameDateFormat : 'ymd-His', // noname upload will show like: 181229-192530
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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?<br/>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<br/>Konwertować na UTF-8?<br/>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. <br/> Proszę wybrać kodowanie znaków tego pliku.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Został zmodyfikowany.<br/>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
+ '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
+ '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?<br/>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
+
+ /********************************** 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'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Português translation
+ * @author Leandro Carvalho <contato@leandrowebdev.net>
+ * @author Wesley Osorio<wesleyfosorio@hotmail.com>
+ * @author Fernando H. Bandeira <fernando.bandeira94@gmail.com>
+ * @version 2016-04-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.pt_BR = {
+ translator : 'Leandro Carvalho <contato@leandrowebdev.net>, Wesley Osorio<wesleyfosorio@hotmail.com>, Fernando H. Bandeira <fernando.bandeira94@gmail.com>',
+ language : 'Português',
+ direction : 'ltr',
+ dateFormat : 'd M Y H:i', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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.',
+ '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".',
+ '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 3.24.2016
+
+ /******************************* 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',
+ '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
+
+ /*********************************** 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' : 'MIME Type', // 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' : 'Backup', // fromv2.1 added 28.11.2015
+
+ /******************************** 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
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Desconhecido',
+ 'Today' : 'Hoje',
+ 'Yesterday' : 'Ontem',
+ 'msJan' : 'Jan',
+ 'msFeb' : 'Fev',
+ 'msMar' : 'Mar',
+ 'msApr' : 'Abr',
+ 'msMay' : 'Mai',
+ 'msJun' : 'Jun',
+ 'msJul' : 'Jul',
+ 'msAug' : 'Ago',
+ 'msSep' : 'Set',
+ 'msOct' : 'Out',
+ 'msNov' : 'Nov',
+ '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',
+
+ /********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmação requerida',
+ 'confirmRm' : 'Você tem certeza que deseja remover os arquivos?<br />Isto não pode ser desfeito!',
+ 'confirmRepl' : 'Substituir arquivo velho com este novo?',
+ 'confirmConvUTF8' : 'Não está em UTF-8<br/>Converter para UTF-8?<br/>Conteúdo se torna UTF-8 após salvar as conversões.', // from v2.1 added 08.04.2014
+ 'confirmNotSave' : 'Isto foi modificado.<br/>Você vai perder seu trabalho caso não salve as mudanças.', // from v2.1 added 15.7.2015
+ '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',
+ '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',
+ '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' : 'Now loading...', // from v2.1.12 added 4.26.2016
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Desconhecio',
+ 'kindFolder' : 'Pasta',
+ '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' : 'Portable Document Format (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' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'Pacote RPM',
+ // texts
+ 'kindText' : 'Arquivo de texto',
+ 'kindTextPlain' : 'Texto simples',
+ 'kindPHP' : 'PHP',
+ 'kindCSS' : 'CSS',
+ 'kindHTML' : 'Documento HTML',
+ 'kindJS' : 'Javascript',
+ 'kindRTF' : 'Formato Rich Text',
+ 'kindC' : 'C',
+ 'kindCHeader' : 'C cabeçalho',
+ 'kindCPP' : 'C++',
+ 'kindCPPHeader' : 'C++ cabeçalho',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python',
+ 'kindJava' : 'Java',
+ 'kindRuby' : 'Ruby',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL',
+ 'kindXML' : 'Documento XML',
+ 'kindAWK' : 'AWK',
+ 'kindCSV' : 'Valores separados por vírgula',
+ 'kindDOCBOOK' : 'Documento Docbook XML',
+ 'kindMarkdown' : 'Markdown text', // 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' : 'MP3 playlist',
+ 'kindVideo' : 'Arquivo de video',
+ 'kindVideoDV' : 'DV filme',
+ 'kindVideoMPEG' : 'Video MPEG',
+ 'kindVideoMPEG4' : 'Video MPEG-4',
+ 'kindVideoAVI' : 'Video AVI',
+ 'kindVideoMOV' : 'Quick Time movie',
+ 'kindVideoWM' : 'Video Windows Media',
+ 'kindVideoFlash' : 'Video Flash',
+ 'kindVideoMKV' : 'MKV',
+ 'kindVideoOGG' : 'Video Ogg'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Română translation
+ * @author Cristian Tabacitu <hello@tabacitu.ro>
+ * @version 2015-11-13
+ */
+(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', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** 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.',
+ '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".',
+ '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
+
+ /******************************* 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',
+ 'cmdmkfile' : 'Fișier nou',
+ 'cmdopen' : 'Deschide',
+ 'cmdpaste' : 'Lipește',
+ 'cmdquicklook' : 'Previzualizează',
+ 'cmdreload' : 'Reîncarcă',
+ 'cmdrename' : 'Redenumește',
+ 'cmdrm' : 'Șterge',
+ '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
+
+ /*********************************** 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
+
+ /******************************** 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
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'necunoscută',
+ 'Today' : 'Astăzi',
+ 'Yesterday' : 'Ieri',
+ 'msJan' : 'Ian',
+ 'msFeb' : 'Feb',
+ 'msMar' : 'Mar',
+ 'msApr' : 'Apr',
+ 'msMay' : 'Mai',
+ 'msJun' : 'Iun',
+ 'msJul' : 'Iul',
+ 'msAug' : 'Aug',
+ 'msSep' : 'Sep',
+ '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',
+
+ /********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Este necesară confirmare',
+ 'confirmRm' : 'Ești sigur că vrei să ștergi fișierele?<br/>Acțiunea este ireversibilă!',
+ 'confirmRepl' : 'Înlocuiește fișierul vechi cu cel nou?',
+ 'confirmConvUTF8' : 'Nu este în UTF-8<br/>Convertim la UTF-8?<br/>Conținutul devine UTF-8 după salvarea conversiei.', // from v2.1 added 08.04.2014
+ 'confirmNotSave' : 'Au avut loc modificări.<br/>Dacă nu salvezi se vor pierde modificările.', // from v2.1 added 15.7.2015
+ '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',
+ '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' : 'Link',
+ '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' : 'chief developer',
+ 'developer' : 'developer',
+ 'contributor' : 'contributor',
+ 'maintainer' : 'maintainer',
+ 'translator' : 'translator',
+ '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',
+ 'rmFromPlaces' : 'Șterge din locuri',
+ 'aspectRatio' : 'Aspect ratio',
+ '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' : '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' : 'Mod', // from v2.1 added 20.6.2015
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Necunoscut',
+ 'kindFolder' : 'Dosar',
+ '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Русский язык translation
+ * @author Dmitry "dio" Levashov <dio@std42.ru>
+ * @author Andrew Berezovsky <andrew.berezovsky@gmail.com>
+ * @author Alex Yashkin <alex@yashkin.by>
+ * @version 2018-12-07
+ */
+(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: 07 Дек 2018 16:41
+ fancyDateFormat : '$1 H:i', // will show like: Сегодня 16:41
+ nonameDateFormat : 'ymd-His', // noname upload will show like: 181207-164137
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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' : 'Вы уверены, что хотите удалить файлы?<br>Действие необратимо!',
+ 'confirmRepl' : 'Заменить старый файл новым?',
+ 'confirmRest' : 'Заменить существующий файл файлом из корзины?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : 'Не UTF-8<br/>Сконвертировать в UTF-8?<br/>Данные станут UTF-8 при сохранении после конвертации.', // from v2.1 added 08.04.2014
+ 'confirmNonUTF8' : 'Невозможно определить кодировку файла. Необходима предварительная конвертация файла в UTF-8 для дальнейшего редактирования.<br/>Выберите кодировку файла.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Произошли изменения.<br/>Если не сохраните изменения, то потеряете их.', // 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' : 'Файловый менеджер для 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
+ '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?<br/>Действие нельзя отменить!', // 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' : '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
+
+ /********************************** 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' : 'Rich Text Format',
+ '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Sinhala translation
+ * @author CodeLyokoXtEAM <XcodeLyokoTEAM@gmail.com>
+ * @version 2018-03-26
+ */
+(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', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM
+ nonameDateFormat : 'Ymd-His', // to apply if upload file is noname: 120513172700
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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
+
+ /*********************************** 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' : 'Getting URL of link', // 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
+
+ /*********************************** 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' : 'NewArchive', // from v2.1 added 10.11.2015
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'තහවුරු කිරීම අවශ්යයි',
+ 'confirmRm' : 'අයිතමයන් සදහටම ඉවත් කිරීමට අවශ්ය බව ඔබට විශ්වාසද?<br/>මෙය අාපසු හැරවිය නොහැකිය!',
+ 'confirmRepl' : 'පැරණි අයිතමය නව එකක මගින් ප්රතිස්ථාපනය කරන්නද?',
+ 'confirmRest' : 'දැනට පවතින අයිතමය කුණු කූඩය තුළ පවතින අයිතමය මගින් ප්රතිස්ථාපනය කරන්නද?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : 'UTF-8 හි නොවේ<br/> UTF-8 වෙත පරිවර්තනය කරන්න ද?<br/>සුරැකීමෙන් පසු අන්තර්ගතය UTF-8 බවට පරිවර්තනය වේ.', // from v2.1 added 08.04.2014
+ 'confirmNonUTF8' : 'මෙම ගොනුවෙහි කේතන කේත(Character encoding) හඳුනාගත නොහැකි විය. සංස්කරණ කිරීමට එය තාවකාලිකව UTF-8 වෙත පරිවර්තනය කිරීම අවශ්ය වේ.<br/>කරුණාකර මෙම ගොනුවෙහි අක්ෂර කේතන කේත(character encoding) තෝරන්න.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'මෙය වෙනස් කර ඇත.<br/>ඔබට වෙනස්කම් සුරැකීමට නොහැකි නම් සිදු කරනු ලැබූ වෙනස්කම් අහිමි වේ.', // 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' : 'අයිකන අාකාරය',
+ 'places' : 'Places',
+ 'calc' : 'ගණනය කරන්න',
+ 'path' : 'මාර්ගය',
+ 'aliasfor' : 'Alias for',
+ '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' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'කෙටිමං අක්රීය කර ඇත',
+ 'dropFiles' : 'ගොනු මෙතැනට ඇද දමන්න',
+ 'or' : 'හෝ',
+ 'selectForUpload' : 'ගොනු තෝරන්න',
+ 'moveFiles' : 'අායිත්තම සම්පූර්ණයෙන් විස්ථාපනය',
+ 'copyFiles' : 'අයිතමයන් පිටපත් කරන්න',
+ 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017
+ 'rmFromPlaces' : 'Remove from places',
+ 'aspectRatio' : 'දර්ශන අනුපාතය(Aspect ratio)',
+ 'scale' : 'පරිමාණය',
+ 'width' : 'පළල',
+ 'height' : 'උස',
+ 'resize' : 'ප්රතිප්රමානණය',
+ 'crop' : 'Crop',
+ 'rotate' : 'කැරකැවීම',
+ 'rotate-cw' : 'අංශක 90කින් කරකවන්න CW',
+ 'rotate-ccw' : 'අංශක 90කින් කරකවන්න 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' : 'පරිශීලක', // added 18.04.2012
+ 'pass' : 'මුරපදය', // 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' : 'ඉලක්කය: $1', // from v2.1 added 22.5.2015
+ 'searchMime' : 'Search by input 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' : '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' : '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' : 'තෝරාගත් අයිතම ($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' : 'බහු ගොනු විවෘත කරන්න', // 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' : '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' : 'යථා තත්ත්වයට පත් කරන්න', // from v2.1.15 added 3.8.2016
+ 'complete' : '$1 සම්පූර්ණයි', // 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' : 'පසුබිම් වර්ණය', // from v2.1.16 added 1.10.2016
+ 'colorPicker' : 'Color picker', // 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' : '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' : 'ෆෝල්ඩරය තෝරන්න', // 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' : '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 setting', // 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 setting', // from v2.1.27 added 2.8.2017
+ 'charsLeft' : '... $1 ක් අකුරු ඉතිරිව පවතී', // from v2.1.29 added 30.8.2017
+ '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' : 'තෝරන්න', // from v2.1.30 added 23.11.2017
+ 'selectAction' : 'ගොනුවක් තේරූ විට සිදුකල යුතු දේ', // 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' : 'ප්රතිවිරුද්ධ අාකාරයට තෝරන්න', // from v2.1.30 added 25.11.2017
+ 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?<br/>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' : 'තෝරාගැනීම්වල තොරතුරු', // from v2.1.33 added 7.3.2018
+ 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'නොදන්නා',
+ 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016
+ 'kindFolder' : 'ෆෝල්ඩරය',
+ 'kindSelects' : 'තේරීම්', // from v2.1.29 added 29.8.2017
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Broken alias',
+ // applications
+ 'kindApp' : 'Application',
+ 'kindPostscript' : 'Postscript ලේඛනය',
+ 'kindMsOffice' : 'Microsoft Office ලේඛනය',
+ 'kindMsWord' : 'Microsoft Word ලේඛනය',
+ 'kindMsExcel' : 'Microsoft Excel ලේඛනය',
+ 'kindMsPP' : 'Microsoft Powerpoint presentation',
+ 'kindOO' : 'Open Office ලේඛනය',
+ '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 ලේඛනය',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP මූලාශ්රය',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML ලේඛනය',
+ 'kindJS' : 'Javascript මූලාශ්රය',
+ 'kindRTF' : 'Rich Text Format',
+ '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' : '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 playlist',
+ 'kindVideo' : 'Video මාධ්ය',
+ 'kindVideoDV' : 'DV චිත්රපටය',
+ 'kindVideoMPEG' : 'MPEG චිත්රපටය',
+ 'kindVideoMPEG4' : 'MPEG-4 චිත්රපටය',
+ 'kindVideoAVI' : 'AVI චිත්රපටය',
+ 'kindVideoMOV' : 'Quick Time චිත්රපටය',
+ 'kindVideoWM' : 'Windows Media චිත්රපටය',
+ 'kindVideoFlash' : 'Flash චිත්රපටය',
+ 'kindVideoMKV' : 'Matroska චිත්රපටය',
+ 'kindVideoOGG' : 'Ogg චිත්රපටය'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Slovak translation
+ * @author RobiNN <kelcakrobo@gmail.com>
+ * @author Jakub Ďuraš <jkblmr@gmail.com>
+ * @version 2019-01-12
+ */
+(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: 12.01.2019 18:18
+ fancyDateFormat : '$1 H:i', // will show like: Dnes 18:18
+ nonameDateFormat : 'ymd-His', // noname upload will show like: 190112-181846
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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' : 'Sep',
+ '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' : 'August',
+ 'September' : 'September',
+ 'October' : 'Október',
+ 'November' : 'November',
+ '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?<br/>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<br/>Previesť na UTF-8?<br/>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 .<br/>Prosím, vyberte kódovanie znakov tohto súboru.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Bol upravený.<br/>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
+ '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
+ '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<br/>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
+
+ /********************************** 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 font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM balík',
+ // texts
+ 'kindText' : 'Textový document',
+ 'kindTextPlain' : 'Obyčajný text',
+ 'kindPHP' : 'PHP zdrojový kód',
+ 'kindCSS' : 'Cascading style sheet (CSS)',
+ 'kindHTML' : 'HTML dokument',
+ 'kindJS' : 'Javascript zdrojový kód',
+ 'kindRTF' : 'Rich Text Format',
+ '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' : 'Markdown text', // 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Slovenian translation
+ * @author Damjan Rems <d_rems at yahoo.com>
+ * @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.sl = {
+ translator : 'Damjan Rems <d_rems at yahoo.com>',
+ language : 'Slovenščina',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** 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' : 'Readable volumes not available.',
+ '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.',
+ '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.',
+ 'errUpload' : 'Napaka pri prenosu.',
+ 'errUploadFile' : '"$1" ni možno naložiti (upload).',
+ 'errUploadNoFiles' : 'Ni datotek za nalaganje (upload).',
+ 'errUploadTotalSize' : 'Podatki presegajo največjo dovoljeno velikost.',
+ 'errUploadFileSize' : 'Datoteka presega največjo dovoljeno velikost.',
+ 'errUploadMime' : 'Datoteke s to končnico niso dovoljene.',
+ 'errUploadTransfer' : '"$1" napaka pri prenosu.',
+ 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.',
+ 'errReplace' : 'Unable to replace "$1".',
+ '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.',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ '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.',
+ 'errArcMaxSize' : 'Datoteke v arhivu presegajo največjo dovoljeno velikost.',
+ 'errResize' : '"$1" ni možno razširiti.',
+ 'errResizeDegree' : 'Invalid rotate degree.',
+ 'errResizeRotate' : 'Unable to rotate image.',
+ 'errResizeSize' : 'Invalid image size.',
+ 'errResizeNoChange' : 'Image size not changed.',
+ 'errUsupportType' : 'Nepodprta vrsta datoteke.',
+ '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"',
+
+ /******************************* 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',
+ 'cmdmkfile' : 'Nova datoteka',
+ 'cmdopen' : 'Odpri',
+ 'cmdpaste' : 'Prilepi',
+ 'cmdquicklook' : 'Hitri ogled',
+ 'cmdreload' : 'Osveži',
+ 'cmdrename' : 'Preimenuj',
+ 'cmdrm' : 'Izbriši',
+ 'cmdsearch' : 'Poišči datoteke',
+ 'cmdup' : 'Mapa nazaj',
+ 'cmdupload' : 'Naloži (upload)',
+ 'cmdview' : 'Ogled',
+ 'cmdresize' : 'Povečaj (pomanjšaj) sliko',
+ 'cmdsort' : 'Razvrsti',
+ 'cmdnetmount' : 'Mount network volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Zapri',
+ 'btnSave' : 'Shrani',
+ 'btnRm' : 'Izbriši',
+ 'btnApply' : 'Uporabi',
+ 'btnCancel' : 'Prekliči',
+ 'btnNo' : 'Ne',
+ 'btnYes' : 'Da',
+ 'btnMount' : 'Mount',
+
+ /******************************** 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' : 'Resizing images',
+ 'ntfsmth' : 'Počakaj delam >_<',
+ 'ntfloadimg' : 'Nalagam sliko',
+ 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012
+ 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'neznan',
+ 'Today' : 'Danes',
+ 'Yesterday' : 'Včeraj',
+ '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' : 'Marec',
+ 'April' : 'April',
+ 'May' : 'Maj',
+ 'June' : 'Junij',
+ 'July' : 'Julij',
+ 'August' : 'Avgust',
+ 'September' : 'September',
+ 'October' : 'Oktober',
+ 'November' : 'November',
+ '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' : 'Folders first',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Zahtevana je potrditev',
+ 'confirmRm' : 'Ste prepričani, da želite izbrisati datoteko?<br/>POZOR! Tega ukaza ni možno preklicati!',
+ 'confirmRepl' : 'Zamenjam staro datoteko z novo?',
+ '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',
+ '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' : 'contributor',
+ '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',
+ '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' : '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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Neznan',
+ 'kindFolder' : 'Mapa',
+ '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' : 'Portable Document Format (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' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ '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',
+ // 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'
+ }
+ };
+}));
--- /dev/null
+ /**
+ * Serbian translation
+ * @author Momčilo m0k1 Mićanović <moki.forum@gmail.com>
+ * @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 : {
+
+ /********************************** 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',
+
+ /*********************************** 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',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Potrebna potvrda',
+ 'confirmRm' : 'Da li ste sigurni da želite da obrišete datoteke?<br/>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'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Swedish translation
+ * @author Gabriel Satzger <gabriel.satzger@sbg.se>
+ * @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.sv = {
+ translator : 'Gabriel Satzger <gabriel.satzger@sbg.se>',
+ language : 'Svenska',
+ direction : 'ltr',
+ dateFormat : 'Y-m-d H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Error',
+ '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.',
+ '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.',
+ 'errUpload' : 'Error vid uppladdningen.',
+ 'errUploadFile' : 'Kan inte ladda upp "$1".',
+ 'errUploadNoFiles' : 'Inga filer hittades för uppladdning.',
+ 'errUploadTotalSize' : 'Data överskrider den högsta tillåtna storleken.',
+ 'errUploadFileSize' : 'Filen överskrider den högsta tillåtna storleken.',
+ 'errUploadMime' : 'Otillåten filtyp.',
+ 'errUploadTransfer' : '"$1" överföringsfel.',
+ 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.',
+ 'errReplace' : 'Unable to replace "$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".',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ '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' : 'Invalid rotate degree.',
+ 'errResizeRotate' : 'Unable to rotate image.',
+ 'errResizeSize' : 'Invalid image size.',
+ 'errResizeNoChange' : 'Image size not changed.',
+ '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' : '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' : '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',
+ 'cmdmkfile' : 'Ny fil',
+ 'cmdopen' : 'Öppna',
+ 'cmdpaste' : 'Klistra in',
+ 'cmdquicklook' : 'Förhandsgranska',
+ 'cmdreload' : 'Ladda om',
+ 'cmdrename' : 'Döp om',
+ 'cmdrm' : 'Radera',
+ 'cmdsearch' : 'Hitta filer',
+ 'cmdup' : 'Gå till överordnade katalog',
+ 'cmdupload' : 'Ladda upp filer',
+ 'cmdview' : 'Visa',
+ 'cmdresize' : 'Ändra bildstorlek',
+ 'cmdsort' : 'Sortera',
+ 'cmdnetmount' : 'Mount network volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Stäng',
+ 'btnSave' : 'Spara',
+ 'btnRm' : 'Ta bort',
+ 'btnApply' : 'Verkställ',
+ 'btnCancel' : 'Ångra',
+ 'btnNo' : 'Nej',
+ 'btnYes' : 'Ja',
+ 'btnMount' : 'Mount',
+
+ /******************************** 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' : 'Resizing images',
+ 'ntfsmth' : 'Gör någonting >_<',
+ 'ntfloadimg' : 'Laddar bild',
+ 'ntfnetmount' : 'kopplar nätverksvolym', // added 18.04.2012
+ 'ntfdim' : 'Acquiring image dimension',
+
+ /************************************ 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', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bekräftelse krävs',
+ 'confirmRm' : 'Är du säker på att du vill ta bort filer? <br/> Detta kan inte ångras!',
+ 'confirmRepl' : 'Ersätt den gamla filen med en ny?',
+ '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',
+ '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',
+ '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' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'användare', // added 18.04.2012
+ 'pass' : 'Lösenord', // added 18.04.2012
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Okänd',
+ 'kindFolder' : 'Mapp',
+ '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' : 'Plain',
+ 'kindPHP' : 'PHP',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML',
+ 'kindJS' : 'Javascript',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C',
+ 'kindCHeader' : 'C header',
+ 'kindCPP' : 'C++',
+ 'kindCPPHeader' : 'C++ header',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python',
+ 'kindJava' : 'Java',
+ 'kindRuby' : 'Ruby',
+ 'kindPerl' : 'Perl',
+ 'kindSQL' : 'SQL',
+ 'kindXML' : 'XML',
+ 'kindAWK' : 'AWK',
+ 'kindCSV' : 'CSV',
+ 'kindDOCBOOK' : 'Docbook XML',
+ // 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' : '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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Türkçe translation
+ * @author I.Taskinoglu & A.Kaya <alikaya@armsyazilim.com>
+ * @author Abdullah ELEN <abdullahelen@msn.com>
+ * @author Osman KAYAN <osmnkayan@gmail.com>
+ * @author alikayan95@gmail.com
+ * @version 2018-11-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.tr = {
+ translator : 'I.Taskinoglu & A.Kaya <alikaya@armsyazilim.com>, Abdullah ELEN <abdullahelen@msn.com>, Osman KAYAN <osmnkayan@gmail.com>, alikayan95@gmail.com',
+ language : 'Türkçe',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i', // will show like: 02.11.2018 11:51
+ fancyDateFormat : '$1 H:i', // will show like: Bugün 11:51
+ nonameDateFormat : 'ymd-His', // noname upload will show like: 181102-115159
+ messages : {
+
+ /********************************** 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
+
+ /******************************* 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' : 'Checking contents', // 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' : 'Mar',
+ 'msApr' : 'Nis',
+ 'msMay' : 'May',
+ '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?<br/>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<br/>UTF-8\'e dönüştürülsün mü?<br/>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.<br/>Lütfen bu dosyanın karakter kodlamasını seçin.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : 'Düzenlenmiş içerik.<br/>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
+ '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
+ '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?</br>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' : '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' : 'Entegrasyonlar', // 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' : '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' : 'File types to enable with "New file"', // 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
+
+ /********************************** 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'
+ }
+ };
+}));
+
--- /dev/null
+/**
+ * Uyghur translation
+ * @author Alim.Boyaq <boyaq@otkur.biz>
+ * @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.ug_CN = {
+ translator : 'تەرجىمە قىلغۇچى: ئۆتكۈر بىز شىركىتى info@otkur.biz',
+ language : 'ئۇيغۇرچە',
+ direction : 'rtl',
+ dateFormat : 'Y-m-d H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** 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' : 'توغرا بولمىغان ھۈججەت قىسقۇچ ئىسمى.',
+ 'errFolderNotFound' : 'ھۈججەت قىسقۇچنى تاپالمىدى.',
+ 'errFileNotFound' : 'ھۈججەتنى تاپالمىدى.',
+ 'errTrgFolderNotFound' : '"$1" ناملىق ھۈججەت قىسقۇچنى تاپالمىدى.',
+ 'errPopup' : 'سەكرەپ چىققان يېڭى بەتنى تور كۆرگۈچ كۆرسەتمىدى، ئۈستىدىكى ئەسكەرتىشتىن تور كۆرگۈچنى كۆرسىتىشكە تەڭشەڭ.',
+ 'errMkdir' : '"$1" ناملىق ھۈججەت قىسقۇچنى قۇرالمىدى.',
+ 'errMkfile' : '"$1" ناملىق ھۈججەتنى قۇرالمىدى.',
+ 'errRename' : '"$1" ناملىق ھۈججەتنىڭ ئىسمىنى يېڭىلاش مەغلۇپ بولدى.',
+ 'errCopyFrom' : ' "$1" ناملىق ئورۇندىن ھۈججەت كۆچۈرۈش چەكلەنگەن.',
+ 'errCopyTo' : '"$1" ناملىق ئورۇنغا ھۈججەت كۆچۈرۈش چەكلەنگەن.',
+ 'errUpload' : 'يۈكلەشتە خاتالىق كۆرۈلدى.',
+ 'errUploadFile' : '"$1" ناملىق ھۈججەتنى يۈكلەشتە خاتالىق كۆرۈلدى.',
+ 'errUploadNoFiles' : 'يۈكلىمەكچى بولغان ھۈججەت تېپىلمىدى.',
+ 'errUploadTotalSize' : 'سانلىق مەلۇمات چوڭلىقى چەكلىمىدىن ئېشىپ كەتكەن..',
+ 'errUploadFileSize' : 'ھۈججەت چوڭلىقى چەكلىمىدىن ئېشىپ كەتكەن..',
+ 'errUploadMime' : 'چەكلەنگەن ھۈججەت شەكلى.',
+ 'errUploadTransfer' : '"$1" ناملىق ھۈججەتنى يوللاشتا خاتالىق كۆرۈلدى.',
+ 'errNotReplace' : '"$1" ناملىق ھۈججەت باركەن، ئالماشتۇرۇشقا بولمايدۇ.', // new
+ 'errReplace' : '"$1" ناملىق ھۈججەتنى ئالماشتۇرۇش مەغلۇپ بولدى.',
+ 'errSave' : '"$1" ناملىق ھۈججەتنى ساقلاش مەغلۇپ بولدى.',
+ 'errCopy' : '"$1" ناملىق ھۈججەتنى كۆچۈرۈش مەغلۇپ بولدى.',
+ 'errMove' : '"$1" ناملىق ھۈججەتنى يۆتكەش مەغلۇپ بولدى.',
+ 'errCopyInItself' : '"$1" ناملىق ھۈججەتنى ئەسلى ئورنىغا يۆتكەش مەغلۇپ بولدى.',
+ 'errRm' : '"$1" ناملىق ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.',
+ 'errRmSrc' : 'ئەسلى ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.',
+ 'errExtract' : ' "$1" ناملىق مەلۇماتتىن ھۈججەت ئايرىش مەغلۇپ بولدى..',
+ 'errArchive' : 'پىرىسلانغان ھۈججەت ھاسىللاش مەغلۇپ بولدى.',
+ 'errArcType' : 'بۇ خىل پىرىسلانغان ھۈججەت شەكلىنى سىستېما بىر تەرەپ قىلالمىدى.',
+ 'errNoArchive' : 'ھۈججەت پىرىسلانغان ھۈججەت ئەمەس، ياكى توغرا پىرىسلانمىغان.',
+ 'errCmdNoSupport' : 'بۇ خىل بۇيرۇقنى بىر تەرەپ قىلالمىدى.',
+ 'errReplByChild' : '“$1” ناملىق ھۈججەت قىسقۇچنى ئالماشۇتۇرۇشقا بولمايدۇ.',
+ 'errArcSymlinks' : 'بىخەتەرلىك ئۈچۈن بۇ مەشغۇلات ئەمەلدىن قالدۇرۇلدى..',
+ 'errArcMaxSize' : 'پىرىسلانغان ھۈججەتنىڭ چوڭلىقى چەكلىمىدىن ئېشىپ كەنكەن.',
+ 'errResize' : ' "$1" چوڭلۇقنى تەڭشەشكە بولمىدى.',
+ 'errResizeDegree' : 'توغرا بولمىغان پىقىرىتىش گىرادۇسى',
+ 'errResizeRotate' : 'رەسىمنى پىقىرىتىشقا بولمىدى.',
+ 'errResizeSize' : 'توغرا بولمىغان رەسىم چوڭلىقى.',
+ 'errResizeNoChange' : 'رەسىم چوڭلىقى ئۆزگەرمىگەن.',
+ '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' : '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' : 'پىرىسلاش',
+ 'cmdback' : 'قايتىش',
+ 'cmdcopy' : 'كۆچۈرۈش',
+ 'cmdcut' : 'كېسىش',
+ 'cmddownload' : 'چۈشۈرۈش',
+ 'cmdduplicate' : 'نۇسخىلاش',
+ 'cmdedit' : 'تەھرىرلەش',
+ 'cmdextract' : 'پىرىستىن ھۈججەت چىقىرىش',
+ 'cmdforward' : 'ئالدىغا مېڭىش',
+ 'cmdgetfile' : 'تاللاش',
+ 'cmdhelp' : 'ئەپ ھەققىدە',
+ 'cmdhome' : 'باش بەت',
+ 'cmdinfo' : 'ئۇچۇرلىرى',
+ 'cmdmkdir' : 'يېڭى ھۈججەت قىسقۇچ',
+ 'cmdmkfile' : 'يېڭى ھۈججەت',
+ 'cmdopen' : 'ئېچىش',
+ 'cmdpaste' : 'چاپلاش',
+ 'cmdquicklook' : 'كۆرۈش',
+ 'cmdreload' : 'يېڭىلاش',
+ 'cmdrename' : 'نام يېڭىلاش',
+ 'cmdrm' : 'ئۆچۈرۈش',
+ 'cmdsearch' : 'ھۈججەت ئىزدەش',
+ 'cmdup' : 'ئالدىنقى مۇندەرىجىگە بېرىش',
+ 'cmdupload' : 'يۈكلەش',
+ 'cmdview' : 'كۆرۈش',
+ 'cmdresize' : 'چوڭلىقىنى تەڭشەش',
+ 'cmdsort' : 'تەرتىپ',
+ 'cmdnetmount' : 'توردىن قوشۇش', // added 18.04.2012
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'تاقاش',
+ 'btnSave' : 'ساقلاش',
+ 'btnRm' : 'ئۆچۈرۈش',
+ 'btnApply' : 'ئىشلىتىش',
+ 'btnCancel' : 'بېكارلاش',
+ 'btnNo' : 'ياق',
+ 'btnYes' : 'ھەئە',
+ 'btnMount' : 'يۈكلەش', // added 18.04.2012
+
+ /******************************** 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
+ 'ntfdim' : 'Acquiring image dimension',
+
+ /************************************ 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' : 'قىسقۇچلار باشتا',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'مۇقىملاشتۇرۇڭ',
+ 'confirmRm' : 'راستىنلا ئۆچۈرەمسىز?<br/>كەينىگە قايتۇرغىلى بولمايدۇ!',
+ 'confirmRepl' : 'ھازىرقى ھۈججەت بىلەن كونىسىنى ئالماشتۇرامسىز?',
+ 'apllyAll' : 'ھەممىسىگە ئىشلىتىش',
+ 'name' : 'نامى',
+ 'size' : 'چوڭلىقى',
+ 'perms' : 'ھوقۇق',
+ 'modify' : 'ئۆزگەرگەن ۋاقتى',
+ 'kind' : 'تۈرى',
+ 'read' : 'ئوقۇش',
+ 'write' : 'يېزىش',
+ 'noaccess' : 'ھوقۇق يوق',
+ 'and' : 'ھەم',
+ 'unknown' : 'ئېنىق ئەمەس',
+ 'selectall' : 'ھەممىنى تاللاش',
+ 'selectfiles' : 'تاللاش',
+ 'selectffile' : 'بىرىنچىسىنى تاللاش',
+ 'selectlfile' : 'ئەڭ ئاخىرقىسىنى تاللاش',
+ 'viewlist' : 'جەدۋەللىك كۆرىنىشى',
+ 'viewicons' : 'رەسىملىك كۆرىنىشى',
+ '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' : 'كۆچۈرۈش',
+ 'rmFromPlaces' : 'ھۈججەتلەرنى ئۆچۈرۈش',
+ 'aspectRatio' : 'نىسبىتىنى ساقلاش',
+ 'scale' : 'نىسبىتى',
+ 'width' : 'ئۇزۇنلىقى',
+ 'height' : 'ئىگىزلىكى',
+ 'resize' : 'چوڭلىقىنى تەڭشەش',
+ 'crop' : 'كېسىش',
+ 'rotate' : 'پىقىرىتىش',
+ 'rotate-cw' : 'سائەت ئىستىرىلكىسى بويىچە 90 گىرادۇس پىقىرىتىش',
+ 'rotate-ccw' : 'سائەت ئىستىرىلكىسىنى تەتۈر يۆنىلىشى بويىچە 90گىرادۇس پىقىرىتىش',
+ 'degree' : 'گىرادۇس',
+ 'netMountDialogTitle' : 'Mount network volume', // 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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'ئېنىق ئەمەس',
+ 'kindFolder' : 'ھۈججەت قىسقۇچ',
+ 'kindAlias' : 'باشقا نامى',
+ 'kindAliasBroken' : 'باشقا نامى خاتا',
+ // applications
+ 'kindApp' : 'كود ھۈججىتى',
+ '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' : 'تېكىست',
+ '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 ھۈججىتى',
+ // 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 سىن'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Ukrainian translation
+ * @author Oleksandr Palianytsia
+ * @version 2015-04-16
+ */
+(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',
+ language : 'Українська мова',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Помилка',
+ 'errUnknown' : 'Невідома помилка.',
+ 'errUnknownCmd' : 'Невідома команда.',
+ 'errJqui' : 'Неправильне налаштування jQuery UI. Відсутні компоненти: selectable, draggable, droppable.',
+ 'errNode' : 'Відсутній елемент DOM для створення elFinder.',
+ 'errURL' : 'Неправильне налаштування! Не вказана опція 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' : 'Недійсна назва файла.',
+ 'errFolderNotFound' : 'Теку не знайдено.',
+ 'errFileNotFound' : 'Файл не знайдено.',
+ 'errTrgFolderNotFound' : 'Цільову теку "$1" не знайдено.',
+ 'errPopup' : 'Браузер забороняє відкривати popup-вікно. Дозвольте у налаштування браузера, щоб відкрити файл.',
+ 'errMkdir' : 'Неможливо створити теку "$1".',
+ 'errMkfile' : 'Неможливо створити файл "$1".',
+ 'errRename' : 'Неможливо перейменувати файл "$1".',
+ 'errCopyFrom' : 'Копіювання файлів з тому "$1" не дозволено.',
+ 'errCopyTo' : 'Копіювання файлів на том "$1" не дозволено.',
+ 'errUpload' : 'Помилка відвантаження.',
+ 'errUploadCommon' : 'Помилка відвантаження.',
+ 'errUploadFile' : 'Неможливо відвантажити файл "$1".',
+ 'errUploadNoFiles' : 'Не знайдено файлів для відвантаження.',
+ 'errMaxSize' : 'Розмір даних перевищує допустиме значення.',
+ 'errFileMaxSize' : 'Розмір файла перевищує допустиме значення.',
+ 'errUploadMime' : 'Файли цього типу заборонені.',
+ 'errUploadTransfer' : '"$1" : помилка передачі.',
+ 'errSave' : 'Неможливо записати "$1".',
+ 'errCopy' : 'Неможливо скопіювати "$1".',
+ 'errMove' : 'Неможливо перенести "$1".',
+ 'errCopyInItself' : 'Неможливо скопіювати "$1" сам у себе.',
+ 'errRm' : 'Неможливо вилучити "$1".',
+ 'errExtract' : 'Неможливо розпакувати файли з "$1".',
+ 'errArchive' : 'Неможливо створити архів.',
+ 'errArcType' : 'Тип архіву не підтримується.',
+ 'errNoArchive' : 'Файл не є архівом, або є архівом, тип якого не підтримується.',
+ 'errCmdNoSupport' : 'Серверна частина не підтримує цієї команди.',
+ 'errReplByChild' : 'Папка “$1” не може бути замінена елементом, який вона містить.',
+ 'errArcSymlinks' : 'З міркувань безпеки заборонено розпаковувати архіви з символічними посиланнями.',
+ 'errArcMaxSize' : 'Розмір файлів архіву перевищує допустиме значення.',
+ 'errResize' : 'Неможливо масштабувати "$1".',
+ '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 required.', // 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 3.24.2016
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Архівувати',
+ 'cmdback' : 'Назад',
+ 'cmdcopy' : 'Копівати',
+ 'cmdcut' : 'Вирізати',
+ 'cmddownload' : 'Завантажити',
+ 'cmdduplicate' : 'Дублювати',
+ 'cmdedit' : 'Редагувати файл',
+ 'cmdextract' : 'Розпакувати файли з архіву',
+ 'cmdforward' : 'Вперед',
+ 'cmdgetfile' : 'Вибрати файли',
+ 'cmdhelp' : 'Про програму',
+ 'cmdhome' : 'Додому',
+ 'cmdinfo' : 'Інформація',
+ 'cmdmkdir' : 'Створити теку',
+ 'cmdmkfile' : 'Створити файл',
+ 'cmdopen' : 'Відкрити',
+ 'cmdpaste' : 'Вставити',
+ 'cmdquicklook' : 'Попередній перегляд',
+ 'cmdreload' : 'Перечитати',
+ 'cmdrename' : 'Перейменувати',
+ 'cmdrm' : 'Вилучити',
+ 'cmdsearch' : 'Шукати файли',
+ 'cmdup' : 'На 1 рівень вгору',
+ 'cmdupload' : 'Відвантажити файли',
+ 'cmdview' : 'Перегляд',
+ 'cmdresize' : 'Масштабувати зображення',
+ 'cmdsort' : 'Сортування',
+ 'cmdnetmount' : 'Змонтувати мережевий диск', // added 18.04.2012
+ 'cmdnetunmount': 'Розмонтувати', // 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
+
+ /*********************************** 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
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Відкрити теку',
+ 'ntffile' : 'Відкрити файл',
+ 'ntfreload' : 'Перечитати вміст теки',
+ 'ntfmkdir' : 'Створення теки',
+ 'ntfmkfile' : 'Створення файлів',
+ 'ntfrm' : 'Вилучити файли',
+ 'ntfcopy' : 'Копіювати файли',
+ 'ntfmove' : 'Перенести файли',
+ 'ntfprepare' : 'Підготовка до копіювання файлів',
+ 'ntfrename' : 'Перейменувати файли',
+ 'ntfupload' : 'Відвантажити файли',
+ 'ntfdownload' : 'Завантажити файли',
+ 'ntfsave' : 'Записати файли',
+ 'ntfarchive' : 'Створення архіву',
+ 'ntfextract' : 'Розпаковування архіву',
+ 'ntfsearch' : 'Пошук файлів',
+ 'ntfsmth' : 'Виконується >_<',
+ 'ntfloadimg' : 'Завантаження зображення',
+ 'ntfnetmount' : 'Монтування мережевого диска', // added 18.04.2012
+ 'ntfnetunmount': 'Розмонтування мережевого диска', // from v2.1 added 30.04.2012
+ 'ntfdim' : 'Acquiring image 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': 'Перевірка імені завантажуваного файла', // from v2.1 added 31.11.2015
+ 'ntfzipdl' : 'Створення файлу для завантаження', // from v2.1.7 added 23.1.2016
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'невідомо',
+ 'Today' : 'сьогодні',
+ 'Yesterday' : 'вчора',
+ 'Jan' : 'Січ',
+ 'Feb' : 'Лют',
+ 'Mar' : 'Бер',
+ 'Apr' : 'Кві',
+ 'May' : 'Тра',
+ 'Jun' : 'Чер',
+ 'Jul' : 'Лип',
+ 'Aug' : 'Сер',
+ 'Sep' : 'Вер',
+ 'Oct' : 'Жов',
+ 'Nov' : 'Лис',
+ 'Dec' : 'Гру',
+ '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 ********************************/
+ 'sortnameDirsFirst' : 'за назвою (теки на початку)',
+ 'sortkindDirsFirst' : 'за типом (теки на початку)',
+ 'sortsizeDirsFirst' : 'за розміром (теки на початку)',
+ 'sortdateDirsFirst' : 'за датою (теки на початку)',
+ 'sortname' : 'за назвою',
+ 'sortkind' : 'за типом',
+ 'sortsize' : 'за розміром',
+ 'sortdate' : 'за датою',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Підтвердіть',
+ 'confirmRm' : 'Ви справді хочете вилучити файли?<br/>Операція незворотня!',
+ 'confirmRepl' : 'Замінити старий файл новим?',
+ 'apllyAll' : 'Застосувати до всіх',
+ 'name' : 'Назва',
+ 'size' : 'Розмір',
+ 'perms' : 'Доступи',
+ 'modify' : 'Змінено',
+ 'kind' : 'Тип',
+ 'read' : 'читання',
+ 'write' : 'запис',
+ 'noaccess' : 'недоступно',
+ 'and' : 'і',
+ 'unknown' : 'невідомо',
+ 'selectall' : 'Вибрати всі файли',
+ 'selectfiles' : 'Вибрати файл(и)',
+ 'selectffile' : 'Вибрати перший файл',
+ 'selectlfile' : 'Вибрати останній файл',
+ 'viewlist' : 'Списком',
+ 'viewicons' : 'Значками',
+ 'places' : 'Розташування',
+ 'calc' : 'Вирахувати',
+ 'path' : 'Шлях',
+ 'aliasfor' : 'Аліас для',
+ 'locked' : 'Заблоковано',
+ 'dim' : 'Розміри',
+ 'files' : 'Файли',
+ 'folders' : 'теки',
+ 'items' : 'Елементи',
+ 'yes' : 'так',
+ 'no' : 'ні',
+ 'link' : 'Посилання',
+ 'searcresult' : 'Результати пошуку',
+ 'selected' : 'Вибрані елементи',
+ 'about' : 'Про',
+ 'shortcuts' : 'Ярлики',
+ 'help' : 'Допомога',
+ 'webfm' : 'Web-менеджер файлів',
+ 'ver' : 'Версія',
+ 'protocol' : 'версія протоколу',
+ 'homepage' : 'Сторінка проекту',
+ 'docs' : 'Документація',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Слідкуйте у Твітері',
+ 'facebook' : 'Приєднуйтесь у фейсбуці',
+ 'team' : 'Автори',
+ 'chiefdev' : 'головний розробник',
+ 'developer' : 'розробник',
+ 'contributor' : 'учасник',
+ 'maintainer' : 'супроводжувач',
+ 'translator' : 'перекладач',
+ 'icons' : 'Значки',
+ 'dontforget' : 'і не забудьте рушничок',
+ 'shortcutsof' : 'Ярлики заборонені',
+ 'dropFiles' : 'Кидайте файли сюди',
+ 'or' : 'або',
+ 'selectForUpload' : 'Виберіть файли для відвантаження',
+ 'moveFiles' : 'Перемістити файли',
+ 'copyFiles' : 'Копіювати файли',
+ 'rmFromPlaces' : 'Вилучити з розташувань',
+ 'untitled folder' : 'неназвана папка',
+ 'untitled file.txt' : 'неназваний файл.txt',
+ 'aspectRatio' : 'Співвідношення',
+ 'scale' : 'Масштаб',
+ 'width' : 'Ширина',
+ 'height' : 'Висота',
+ 'mode' : 'Режим',
+ 'resize' : 'Змінити розмір',
+ 'crop' : 'Обрізати',
+ 'rotate' : 'Повернути',
+ 'rotate-cw' : 'Повернути на 90 градусів за год. стр.',
+ 'rotate-ccw' : 'Повернути на 90 градусів проти год. стр.',
+ 'degree' : 'Градус',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Невідомо',
+ 'kindFolder' : 'Папка',
+ '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 archive',
+ 'kindTAR' : 'Архів TAR archive',
+ 'kindGZIP' : 'Архів GZIP archive',
+ 'kindBZIP' : 'Архів BZIP archive',
+ 'kindZIP' : 'Архів ZIP archive',
+ 'kindRAR' : 'Архів RAR archive',
+ 'kindJAR' : 'Файл Java JAR',
+ 'kindTTF' : 'Шрифт True Type',
+ 'kindOTF' : 'Шрифт Open Type',
+ 'kindRPM' : 'Пакунок RPM',
+ // texts
+ 'kindText' : 'Текстовий документ',
+ 'kindTextPlain' : 'Простий текст',
+ 'kindPHP' : 'Код PHP',
+ 'kindCSS' : 'Каскадна таблиця стилів (CSS)',
+ 'kindHTML' : 'Документ HTML',
+ 'kindJS' : 'Код Javascript',
+ 'kindRTF' : 'Rich Text Format',
+ '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',
+ // 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 movie',
+ 'kindVideoMPEG' : 'Відео MPEG movie',
+ 'kindVideoMPEG4' : 'Відео MPEG-4 movie',
+ 'kindVideoAVI' : 'Відео AVI movie',
+ 'kindVideoMOV' : 'Відео Quick Time',
+ 'kindVideoWM' : 'Відео Windows Media',
+ 'kindVideoFlash' : 'Відео Flash',
+ 'kindVideoMKV' : 'Відео Matroska',
+ 'kindVideoOGG' : 'Відео Ogg'
+ }
+ }
+}));
+
--- /dev/null
+/**
+ * Vietnamese translation
+ * @author Chung Thủy f <chungthuyf@gmail.com>
+ * @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.vi = {
+ translator : 'Chung Thủy f <chungthuyf@gmail.com>,\ 1Son Nguyen <son.nguyen@catalyst.net.nz>',
+ language : 'Ngôn ngữ Việt Nam',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** 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ệ.',
+ '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.',
+ 'errUpload' : 'Tải lên báo lỗi.',
+ 'errUploadFile' : 'Không thể tải lên "$1".',
+ '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.',
+ 'errUploadFileSize' : 'Tập tin vượt quá kích thước tối đa cho phép.',
+ 'errUploadMime' : 'Kiểu tập tin không được phép.',
+ 'errUploadTransfer' : 'Lỗi khi truyền "$1".',
+ 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.',
+ 'errReplace' : 'Unable to replace "$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".',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ '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.',
+ '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' : 'Invalid rotate degree.',
+ 'errResizeRotate' : 'Unable to rotate image.',
+ 'errResizeSize' : 'Invalid image size.',
+ 'errResizeNoChange' : 'Image size not changed.',
+ 'errUsupportType' : 'Loại tập tin không được hỗ trợ.',
+ '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"',
+
+ /******************************* 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',
+ 'cmdmkfile' : 'Tạo tập tin Text',
+ 'cmdopen' : 'Mở',
+ 'cmdpaste' : 'Paste',
+ 'cmdquicklook' : 'Xem trước',
+ 'cmdreload' : 'Nạp lại',
+ 'cmdrename' : 'Đổi tên',
+ 'cmdrm' : 'Xóa',
+ 'cmdsearch' : 'Tìm tập tin',
+ 'cmdup' : 'Go to parent directory',
+ 'cmdupload' : 'Tải tập tin lên',
+ 'cmdview' : 'Xem',
+ 'cmdresize' : 'Resize image',
+ 'cmdsort' : 'Sắp xếp',
+ 'cmdnetmount' : 'Mount network volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Đóng',
+ 'btnSave' : 'Lưu',
+ 'btnRm' : 'Gỡ bỏ',
+ 'btnApply' : 'Áp dụng',
+ 'btnCancel' : 'Hủy bỏ',
+ 'btnNo' : 'Không',
+ 'btnYes' : 'Đồng ý',
+ 'btnMount' : 'Mount',
+
+ /******************************** 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' : 'Resizing images',
+ 'ntfsmth' : 'Doing something >_<',
+ 'ntfloadimg' : 'Đang tải hình ảnh',
+ 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012
+ 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Chưa biết',
+ 'Today' : 'Hôm nay',
+ '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',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmation required',
+ 'confirmRm' : 'Are you sure you want to remove files?<br/>This cannot be undone!',
+ 'confirmRepl' : 'Replace old file with new one?',
+ '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 files',
+ 'selectfiles' : 'Select file(s)',
+ 'selectffile' : 'Select first file',
+ 'selectlfile' : 'Select last file',
+ 'viewlist' : 'List view',
+ 'viewicons' : 'Icons view',
+ '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 to upload',
+ 'moveFiles' : 'Move files',
+ 'copyFiles' : 'Copy files',
+ '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' : '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
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Unknown',
+ 'kindFolder' : 'Folder',
+ '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',
+ // 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'
+ }
+ };
+}));
--- /dev/null
+/**
+ * 简体中文 translation
+ * @author 翻译者 deerchao <deerchao@gmail.com>
+ * @author Andy Hu <andyhu7@yahoo.com.hk>
+ * @author Max Wen<max.wen@qq.com>
+ * @author Kejun Chang <changkejun@hotmail.com>
+ * @author LDMING <china-live@live.cn>
+ * @version 2018-01-26
+ */
+(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>',
+ 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 : {
+
+ /********************************** 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
+
+ /******************************* 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
+
+ /*********************************** 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' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017
+ 'btnNext' : 'Next ($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
+
+ /*********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : '请确认',
+ 'confirmRm' : '确定要删除文件吗?<br/>该操作不可撤销!',
+ 'confirmRepl' : '用新的文件替换原有文件?',
+ 'confirmRest' : '从回收站替换当前项?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : '文件不是UTF-8格式.<br/>转换为UTF-8吗?<br/>通过在转换后保存,内容变为UTF-8.', // from v2.1 added 08.04.2014
+ 'confirmNonUTF8' : '无法检测到此文件的字符编码.需要暂时转换此文件为UTF-8编码以进行编辑.<br/>请选择此文件的字符编码.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : '文件已被编辑.<br/>如果不保存直接关闭,将丢失编辑内容.', // 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' : '图标视图',
+ '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 chars left.', // from v2.1.29 added 30.8.2017
+ '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 吗?<br/>该操作不能撤消!', // 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
+
+ /********************************** 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 视频'
+ }
+ };
+}));
--- /dev/null
+/**
+ * Traditional Chinese translation
+ * @author Yuwei Chuang <ywchuang.tw@gmail.com>
+ * @author Danny Lin <danny0838@gmail.com>
+ * @author TCC <john987john987@gmail.com>
+ * @version 2017-09-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.zh_TW = {
+ translator : 'Yuwei Chuang <ywchuang.tw@gmail.com>, Danny Lin <danny0838@gmail.com>, TCC <john987john987@gmail.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 : {
+
+ /********************************** 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
+
+ /******************************* 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
+
+ /*********************************** 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
+
+ /*********************************** 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
+
+ /********************************** messages **********************************/
+ 'confirmReq' : '請確認',
+ 'confirmRm' : '確定要删除檔案嗎?<br/>此操作無法回復!',
+ 'confirmRepl' : '用新檔案取代原檔案?',
+ 'confirmRest' : '用垃圾桶中的項目替換現有項目?', // fromv2.1.24 added 5.5.2017
+ 'confirmConvUTF8' : '不是 UTF-8 檔案<br/>轉換為 UTF-8 嗎?<br/>轉換後儲存會把內容變成 UTF-8.', // from v2.1 added 08.04.2014
+ 'confirmNonUTF8' : '無法偵測此檔案的字元編碼, 須暫時轉換為 UTF-8 以供編輯.<br/>請選擇此檔案的字元編碼.', // from v2.1.19 added 28.11.2016
+ 'confirmNotSave' : '此檔案已修改.<br/>若未儲存將遺失目前的工作.', // 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' : '圖示檢視',
+ '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
+
+ /********************************** 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 影片'
+ }
+ };
+}));
+
--- /dev/null
+<h2>Tipy na obsluhu</h2>
+<p>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. </p>
+<ul>
+ <li>Kliknutím pravým tlačítkem nebo dlouhým klepnutím zobrazíte kontextové menu.</li>
+ <li>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.</li>
+ <li>Výběr položky v pracovním prostoru můžete rozšířit pomocí kláves Shift nebo Alt (Možnost).</li>
+ <li>Přemístěte soubory a složky do cílové složky nebo do pracovního prostoru.</li>
+ <li>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ů.</li>
+ <li>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.</li>
+</ul>
--- /dev/null
+<h2>Operation Tips</h2>
+<p>Operation on the UI is similar to operating system's standard file manager. However, Drag and Drop is not possible with mobile browsers. </p>
+<ul>
+ <li>Right click or long tap to show the context menu.</li>
+ <li>Drag and drop into the folder tree or the current workspace to move/copy items.</li>
+ <li>Item selection in the workspace can be extended selection with Shift or Alt (Option) key.</li>
+ <li>Drag and Drop to the destination folder or workspace to upload files and folders.</li>
+ <li>The upload dialog can accept paste/drop clipboard data or URL lists and Drag and Drop from other browser or file managers etc.</li>
+ <li>Drag start with pressing Alt(Option) key to drag out to outside browser. It will became download operation with Google Chrome.</li>
+</ul>
--- /dev/null
+<h2>Consejos de operación</h2>
+<p>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.</p>
+<ul>
+ <li>Click derecho o un tap largo para mostrar el menú de contexto.</li>
+ <li>Arrastrar y soltar dentro del árbol de carpetas o el espacio de trabajo actual para mover/copiar elementos.</li>
+ <li>La selección de elementos en el espacio de trabajo puede ampliarse con la tecla Shift o Alt (Opción).</li>
+ <li>Arrastrar y soltar a la carpeta de destino o área de trabajo para cargar archivos y carpetas.</li>
+ <li>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.</li>
+ <li>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.</li>
+</ul>
--- /dev/null
+<h2>操作のヒント</h2>
+<p>UIの操作は、オペレーティングシステムの標準ファイルマネージャにほぼ準拠しています。ただし、モバイルブラウザではドラッグ&ドロップはできません。</p>
+<ul>
+ <li>右クリックまたはロングタップでコンテキストメニューを表示します。</li>
+ <li>アイテムを移動/コピーするには、フォルダツリーまたはワークスペースにドラッグ&ドロップします。</li>
+ <li>ワークスペース内のアイテムの選択は、ShiftキーまたはAltキー(Optionキー)で選択範囲を拡張できます。</li>
+ <li>コピー先のフォルダまたはワークスペースにドラッグアンドドロップして、ファイルとフォルダをアップロードします。</li>
+ <li>アップロードダイアログでは、クリップボードのデータやURLリストのペースト/ドロップ、他のブラウザやファイルマネージャからのドラッグ&ドロップなどを受け入れることができます。</li>
+ <li>Altキー(Optionキー)を押しながらドラッグすると、ブラウザの外にドラッグできます。Google Chromeでダウンロード操作になります。</li>
+</ul>
--- /dev/null
+<h2>사용 팁</h2>
+<p>UI 조작은 운영체제의 표준 파일 관리자를 사용하는 방법과 비슷합니다. 하지만 모바일 브라우저에서는 드래그앤드롭을 사용할 수 없습니다. </p>
+<ul>
+ <li>오른쪽 클릭하거나 길게 누르면 컨텍스트 메뉴가 나타납니다.</li>
+ <li>이동/복사하려면 폴더 트리 또는 원하는 폴더로 드래그앤드롭하십시오.</li>
+ <li>작업공간에서 항목을 선택하려면 Shift또는 Alt(Option) 키를 사용하여 선택 영역을 넓힐 수 있습니다.</li>
+ <li>업로드 대상 폴더 또는 작업 영역으로 파일및 폴더를 드래그앤드롭하여 업로드할 수 있습니다.</li>
+ <li>다른 브라우저 또는 파일관리자등에서 드래그앤드롭하거나, 클립보드를 통해 데이터또는 URL을 복사/붙여넣어 업로드할 수 있습니다.</li>
+ <li>크롬브라우저의 경우, Alt(Option) 키를 누른 상태에서 브라우저 밖으로 드래그앤드롭하면 다운로드가 가능합니다.</li>
+</ul>
--- /dev/null
+<h2>Wskazówki Obsługi</h2>
+<p>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. </p>
+<ul>
+ <li>Kliknij prawym przyciskiem myszy lub dłużej, aby wyświetlić menu kontekstowe.</li>
+ <li>Przeciągnij i upuść w drzewie folderów lub bieżącym obszarze roboczym, aby przenieść/kopiować elementy.</li>
+ <li>Wybór elementu w obszarze roboczym można rozszerzyć wybór z klawiszem Shift lub Alt(Opcja).</li>
+ <li>Przeciągnij i Upuść do folderu docelowego lub obszaru roboczego, aby przesłać pliki i foldery.</li>
+ <li>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.</li>
+ <li>Rozpocznij Przeciąganie naciskając Alt (Opcja), aby przeciągnąć na zewnątrz przeglądarki. Stanie się operacją pobierania z Google Chrome. </li>
+</ul>
--- /dev/null
+<h2>Советы по работе</h2>
+<p>Работа с пользовательским интерфейсом похожа на стандартный файловый менеджер операционной системы. Однако перетаскивание в мобильных браузерах невозможно.</p>
+<ul>
+ <li>Щелкните правой кнопкой мыши или используйте «длинный тап», чтобы отобразить контекстное меню.</li>
+ <li>Перетащите в дерево папок или текущую рабочую область для перемещения / копирования элементов.</li>
+ <li>Выбор элемента в рабочей области может быть расширен с помощью клавиши Shift или Alt (Option).</li>
+ <li>Перетащите в папку назначения или рабочую область для загрузки файлов и папок.</li>
+ <li>В диалоговом окне загрузки можно использовать вставку данных или списков URL-адресов из буфера обмена, а также перетаскивать из других браузеров или файловых менеджеров и т.д.</li>
+ <li>Начните перетаскивание, нажав Alt (Option), чтобы перетащить за пределы браузера. Это запустить процесс скачивания в Google Chrome.</li>
+</ul>
--- /dev/null
+<h2>Tipy na obsluhu</h2>
+<p>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. </p>
+<ul>
+ <li>Kliknutím pravým tlačidlom alebo dlhým klepnutím zobrazíte kontextové menu.</li>
+ <li>Presuňte myšou do stromu priečinkov alebo do aktuálneho pracovného priestoru a presuňte / kopírujte položky.</li>
+ <li>Výber položky v pracovnom priestore môžete rozšíriť pomocou klávesov Shift alebo Alt (Možnosť).</li>
+ <li>Premiestnite súbory a priečinky do cieľovej zložky alebo do pracovného priestoru.</li>
+ <li>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.</li>
+ <li>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.</li>
+</ul>
--- /dev/null
+/**
+ * elFinder transport to support old protocol.
+ *
+ * @example
+ * $('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 (!$.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 = $.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 = $.extend(true, {}, opts);
+
+ $.each(opts.data.targets, function(i, hash) {
+ $.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) {
+ $.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 = $.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 $.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 = [];
+ $.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) {
+ // $.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) {
+ $.each(this.normalizeTree(data.tree), function(i, file) {
+ files[file.hash] = file;
+ });
+ }
+
+ $.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) {
+ $.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 : $.map(files, function(f) { return f; }),
+ options : self.normalizeOptions(data),
+ init : !!data.params,
+ debug : data.debug
+ };
+ }
+
+ if (isCwd) {
+ diff = fm.diff($.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 : $.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;
+ };
+};
--- /dev/null
+$(document).on('click','.popup_selector',function (event) {
+ event.preventDefault();
+ var updateID = $(this).attr('data-inputid'); // Btn id clicked
+ var elfinderUrl = '/elfinder/popup/';
+
+ // trigger the reveal modal with elfinder inside
+ var triggerUrl = elfinderUrl + updateID;
+ $.colorbox({
+ href: triggerUrl,
+ fastIframe: true,
+ iframe: true,
+ width: '70%',
+ height: '50%'
+ });
+
+});
+// function to update the file selected by elfinder
+function processSelectedFile(filePath, requestingField) {
+ $('#' + requestingField).val(filePath).trigger('change');
+}
--- /dev/null
+function processSelectedFile(e,t){$("#"+t).val(e)}$(document).on("click",".popup_selector",function(e){e.preventDefault();var t=$(this).attr("data-inputid");var n="/elfinder/popup/";var r=n+t;$.colorbox({href:r,fastIframe:true,iframe:true,width:"70%",height:"50%"})})
--- /dev/null
+
+// Uncomment and change this document.domain value if you are loading the script cross subdomains
+// document.domain = 'moxiecode.com';
+
+var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}if(!b.editor.getParam("browser_preferred_colors",false)||!b.isWindow){b.dom.addClass(document.body,"forceColors")}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){b.dom.bind(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){var b=a.target||a.srcElement;if(b.onchange){b.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_eventProxy:function(a){return function(b){tinyMCEPopup.dom.events.callNativeHandler(a,b)}}};tinyMCEPopup.init();
--- /dev/null
+<?php
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines - Arabic
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ | Author: https://github.com/allam2002
+ |
+ */
+
+ return [
+ 'infoFiltered' => '(filtered from _MAX_ total entries)',
+ 'thousands' => ',',
+ 'admin' => 'المشرف',
+ 'browse_uploads' => 'تصفح التحميلات',
+ 'table_cant_add' => 'لا يمكن إضافة :entity جديد',
+ 'clear' => 'نظف',
+ 'save_action_changed_notification' => 'تم تغيير السلوك الافتراضي بعد الحفظ.',
+ 'edit_translations' => 'تعديل الترجمة',
+ 'internal_link_placeholder' => "Internal slug. Ex: 'admin/page' (no quotes) for ':url'",
+ 'table_max_reached' => 'أقصى عدد :max تم الوصول إليه',
+ 'zeroRecords' => 'لم يتم العثور على سجلات متطابقة',
+ 'infoEmpty' => 'Showing 0 to 0 of 0 entries',
+ 'info' => 'Showing _START_ to _END_ of _TOTAL_ entries',
+ 'details_row' => 'هذا هو صف التفاصيل. عدل كما تريد.',
+ 'reorder_text' => 'استخدام السحب والإفلات لإعادة الترتيب.',
+ 'reorder_success_message' => 'تم حفظ ترتيبك.',
+ 'reorder_error_message' => 'لم يتم حفظ ترتيبك.',
+ 'lengthMenu' => '_MENU_ records per page',
+ 'created_this' => 'أنشئت هذه',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'actions' => 'أفعال',
+ 'remove_filters' => 'إزالة الفلاتر',
+ 'add_a_new' => 'إضافة جديد',
+ 'reorder' => 'إعادة ترتيب',
+ 'cancel' => 'إلغاء',
+ 'choose_file' => 'اختر ملف',
+ 'restore_this_value' => 'استعادة هذه القيمة',
+ 'add' => 'اضافة',
+ 'unauthorized_access' => 'الدخول غير مصرح به - ليس لديك الأذونات اللازمة للاطلاع على هذه الصفحة.',
+ 'filters' => 'الفلاتر',
+ 'to' => 'الى',
+ 'reorder_success_title' => 'انتهى',
+ 'search' => 'بحث:',
+ 'toggle_filters' => 'تبديل الفلاتر',
+ 'undo' => 'تراجع',
+ 'edit' => 'تعديل',
+ 'update_success' => 'تم تعديل العنصر بنجاح.',
+ 'delete_confirmation_title' => 'تم حذف العنصر',
+ 'delete_confirmation_message' => 'تم حذف العنصر بنجاح.',
+ 'insert_success' => 'تمت إضافة العنصر بنجاح.',
+ 'revision_restored' => 'تمت استعادة المراجعة بنجاح',
+ 'loadingRecords' => 'جار التحميل...',
+ 'infoPostFix' => 'جميع السجلات',
+ 'details_row_loading_error' => 'حدث خطأ أثناء تحميل التفاصيل. الرجاء اعادة المحاولة.',
+ 'delete_confirmation_not_message' => 'حدث خطأ. ربما لم يتم حذف العنصر.',
+ 'guest_user' => 'حساب زائر',
+ 'save' => 'حفظ',
+ 'save_action_save_and_edit' => 'حفظ هذا العنصر وتعديله',
+ 'save_action_save_and_back' => 'حفظ و رجوع',
+ 'save_action_save_and_new' => 'حفظ وعنصر جديد',
+ 'reorder_error_title' => 'خطأ',
+ 'page_link' => 'رابط الصفحة',
+ 'external_link' => 'رابط خارجي',
+ 'internal_link' => 'رابط داخلي',
+ 'preview' => 'عرض',
+ 'back_to_all' => 'عودة',
+ 'changed_the' => 'غيرت',
+ 'in_the_database' => 'في قاعدة البيانات',
+ 'list' => 'قائمة',
+ 'all' => 'كل',
+ 'no' => 'لا',
+ 'emptyTable' => 'لا تتوفر بيانات في الجدول',
+ 'no_revisions' => 'لا توجد مراجعات',
+ 'language' => 'لغة',
+ 'delete_confirmation_not_title' => 'لم يتم الحذف',
+ 'delete_confirmation_not_deleted_title' => 'لم يتم الحذف',
+ 'delete_confirmation_not_deleted_message' => 'لم يحدث شيء. البند الخاص بك هو آمن.',
+ 'file_manager' => 'مدير الملفات',
+ 'revisions' => 'مراجعات',
+ 'delete' => 'مسح',
+ 'processing' => 'معالجة...',
+ 'from' => 'من',
+ 'yes' => 'نعم',
+ 'delete_confirm' => 'هل أنت متأكد أنك تريد حذف هذا العنصر؟',
+ 'please_fix' => 'يرجى تصحيح الأخطاء التالية:',
+ 'aria' => [
+ 'sortAscending' => ': تفعيل لفرز العمود تصاعدي',
+ 'sortDescending' => ': تفعيل لفرز العمود تنازلي',
+ ],
+ 'paginate' => [
+ 'first' => 'الأول',
+ 'last' => 'الاخير',
+ 'next' => 'التالى',
+ 'previous' => 'السابق',
+ ],
+ 'export' => [
+ 'copy' => 'نسخ',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'طباعة',
+ 'column_visibility' => 'رؤية العمود',
+ ],
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Запиши и добави нов',
+ 'save_action_save_and_edit' => 'Запиши и поправи текущия запис',
+ 'save_action_save_and_back' => 'Запиши и се върни назад',
+ 'save_action_changed_notification' => 'Действието след запис по подразбиране слез запис беше променено.',
+
+ // Create form
+ 'add' => 'Добави',
+ 'back_to_all' => 'Назад към записите ',
+ 'cancel' => 'Отказ',
+ 'add_a_new' => 'Добави нов запис ',
+
+ // Create form - advanced options
+ 'after_saving' => 'След запис',
+ 'go_to_the_table_view' => 'Върни се към записите',
+ 'let_me_add_another_item' => 'Нека добавя отново',
+ 'edit_the_new_item' => 'Поправи току що направеният запис',
+
+ // Edit form
+ 'edit' => 'Поправи',
+ 'save' => 'Запиши',
+
+ // Revisions
+ 'revisions' => 'Версии',
+ 'no_revisions' => 'Не бяха открити версии',
+ 'created_this' => 'създаде това',
+ 'changed_the' => 'смени',
+ 'restore_this_value' => 'Възстанови от ?',
+ 'from' => 'от',
+ 'to' => 'до',
+ 'undo' => 'отмени',
+ 'revision_restored' => 'Версията беше върната успешно.',
+
+ // CRUD table view
+ 'all' => 'Всички ',
+ 'in_the_database' => 'В базите данни',
+ 'list' => 'Лист',
+ 'actions' => 'Действия',
+ 'preview' => 'Преглед',
+ 'delete' => 'Изтрии',
+ 'admin' => 'Admin',
+ 'details_row' => 'Това е колонката с детайли. Променяи както желаеш.',
+ 'details_row_loading_error' => 'Възникна грешка при зареджането на детайлите. Моля опитайте отново.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Сигурни ли сте, че искате да изтриете този запис ?',
+ 'delete_confirmation_title' => 'Запис изтрит',
+ 'delete_confirmation_message' => 'Записът беше успешно изтрит.',
+ 'delete_confirmation_not_title' => 'НЕ Е ИЗТРИТ',
+ 'delete_confirmation_not_message' => 'Възникна грешка. Записът не бе изтрит.',
+ 'delete_confirmation_not_deleted_title' => 'Не е изтрит',
+ 'delete_confirmation_not_deleted_message' => 'Споко :). Записът е на сигурно място.',
+
+ // DataTables translation
+ 'emptyTable' => 'Няма намерени резултати',
+ 'info' => 'Показване на резултати от _START_ до _END_ от общо _TOTAL_',
+ 'infoEmpty' => 'Показване на резултати от 0 до 0 от общо 0',
+ 'infoFiltered' => '(филтрирани от общо _MAX_ резултата))',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ records per page',
+ 'loadingRecords' => 'Зареждам...',
+ 'processing' => 'Обработка на резултатите...',
+ 'search' => 'Търсене: ',
+ 'zeroRecords' => 'Няма намерени резултати',
+ 'paginate' => [
+ 'first' => 'Първа',
+ 'last' => 'Последна',
+ 'next' => 'Следваща',
+ 'previous' => 'Предишна',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': Възходящ ред',
+ 'sortDescending' => ': Низходящ ред',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Неразрешен достъп - нямате необходимите разрешения, за да видите тази страница.',
+ 'please_fix' => 'Моля, поправете следните грешки:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Елементът е добавен успешно.',
+ 'update_success' => 'Елементът е променен успешно.',
+
+ // CRUD reorder view
+ 'reorder' => 'Пренареждане',
+ 'reorder_text' => 'Използвайте влачене и пускане, за да пренаредите.',
+ 'reorder_success_title' => 'Готово',
+ 'reorder_success_message' => 'Вашето нареждане е запазено.',
+ 'reorder_error_title' => 'Грешка',
+ 'reorder_error_message' => 'Вашето нареждане не е запазено..',
+
+ // CRUD yes/no
+ 'yes' => 'Да',
+ 'no' => 'Не',
+
+ // Fields
+ 'browse_uploads' => 'Browse uploads',
+ 'clear' => 'Изчисти',
+ 'page_link' => 'Линк на страницата',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => 'Вътрешен линк',
+ 'internal_link_placeholder' => 'Вътрешен слъг. Пр: \'admin/page\' (без кавички) за \':url\'',
+ 'external_link' => 'Външен линк',
+ 'choose_file' => 'Избери файл',
+
+ //Table field
+ 'table_cant_add' => 'Не може да се добави нов :entity',
+ 'table_max_reached' => 'Максимален брой :max достигнат',
+
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | Author: Frederik Rabøl Madsen <frederik-rm@hotmail.com>
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Gem og nyt emne',
+ 'save_action_save_and_edit' => 'Gem og rediger dette emne',
+ 'save_action_save_and_back' => 'Gem og tilbage til listevisning',
+ 'save_action_changed_notification' => 'standard handling efter gem er blevet ændret.',
+
+ // Create form
+ 'add' => 'tilføj',
+ 'back_to_all' => 'tilbage til listevisning',
+ 'cancel' => 'annuller',
+ 'add_a_new' => 'tilføj ny ',
+
+ // Edit form
+ 'edit' => 'Rediger',
+ 'save' => 'Gem',
+
+ // Revisions
+ 'revisions' => 'Revisioner',
+ 'no_revisions' => 'ingen revisioner fundet',
+ 'created_this' => 'lavede denne',
+ 'changed_the' => 'ændrede denne',
+ 'restore_this_value' => 'gendan denne værdi',
+ 'from' => 'før',
+ 'to' => 'efter',
+ 'undo' => 'fortryd',
+ 'revision_restored' => 'Revision gendannet',
+ 'guest_user' => 'gæste bruger',
+
+ // Translatable models
+ 'edit_translations' => 'rediger oversættelser',
+ 'language' => 'Sprog',
+
+ // CRUD table view
+ 'all' => 'Alle ',
+ 'in_the_database' => 'i databasen',
+ 'list' => 'Liste',
+ 'actions' => 'Handlinger',
+ 'preview' => 'Forhåndsvisning',
+ 'delete' => 'Slet',
+ 'admin' => 'Administrator',
+ 'details_row' => 'dette er detajle rækken. Ændrer som du har lyst.',
+ 'details_row_loading_error' => 'Der opstod en fejl under indlæsningen af detajlerne. Prøv igen.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Er du sikker på at du vil slette dette emne? ',
+ 'delete_confirmation_title' => 'Emne slettet',
+ 'delete_confirmation_message' => 'Emnet er blevet slettet successfuldt.',
+ 'delete_confirmation_not_title' => 'IKKE slettet',
+ 'delete_confirmation_not_message' => 'Der opstod en fejl. Dit emne er måske ikke fjernet.',
+ 'delete_confirmation_not_deleted_title' => 'ikke fjernet',
+ 'delete_confirmation_not_deleted_message' => 'Der skete intet. Dit emne er i god behold',
+
+ // DataTables translation
+ 'emptyTable' => 'Ingen data tilgængelig',
+ 'info' => 'Viser fra _START_ til _END_ ud af _TOTAL_ emner',
+ 'infoEmpty' => 'viser fra 0 til 0 ud af 0 emner',
+ 'infoFiltered' => '(filtreret efter max _MAX_ emner)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ felter pr side',
+ 'loadingRecords' => 'Indlæser...',
+ 'processing' => 'Arbejder...',
+ 'search' => 'Søg: ',
+ 'zeroRecords' => 'Ingen emner blev fundet',
+ 'paginate' => [
+ 'first' => 'Første',
+ 'last' => 'Sidste',
+ 'next' => 'Næste',
+ 'previous' => 'Tidligere',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': aktiver for at sortere kolonen efter stigende rækkefølge',
+ 'sortDescending' => ': aktiver for at sortere kolonen efter faldende rækkefølge',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Ingen adgang - Du har ikke de nødvendige rettigheder for at se denne side.',
+ 'please_fix' => 'Ret venligst følgende fejl:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'emnet er tilføjet.',
+ 'update_success' => 'emner er ændret.',
+
+ // CRUD reorder view
+ 'reorder' => 'skift rækkefølge',
+ 'reorder_text' => 'træk og slip for at skifte rækkefølge.',
+ 'reorder_success_title' => 'færdig',
+ 'reorder_success_message' => 'rækkefølgen er ændret.',
+ 'reorder_error_title' => 'fejl',
+ 'reorder_error_message' => 'rækkefølgen blev ikke gemt.',
+
+ // CRUD yes/no
+ 'yes' => 'Ja',
+ 'no' => 'Nej',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtre',
+ 'toggle_filters' => 'vis/skjul filtre',
+ 'remove_filters' => 'fjern filtre',
+
+ // Fields
+ 'browse_uploads' => 'Se uploadede filer',
+ 'clear' => 'fjern',
+ 'page_link' => 'Side link',
+ 'page_link_placeholder' => 'http://eksempel.dk/din-oenskede-side',
+ 'internal_link' => 'Internt link',
+ 'internal_link_placeholder' => 'Interne slug. Ex: \'admin/side\' (no quotes) for \':url\'',
+ 'external_link' => 'Eksternt link',
+ 'choose_file' => 'Vælg fil',
+
+ //Table field
+ 'table_cant_add' => 'Kan ikke tilføje ny :entity',
+ 'table_max_reached' => 'Maximum antal :max er nået',
+
+ // File manager
+ 'file_manager' => 'Stifinder',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Speichern und neu',
+ 'save_action_save_and_edit' => 'Speichern und bearbeiten',
+ 'save_action_save_and_back' => 'Speichern und zurück',
+ 'save_action_changed_notification' => 'Standardverhalten nach dem Speichern wurde geändert.',
+
+ // Create form
+ 'add' => 'Anlegen: ',
+ 'back_to_all' => 'Zurück zur Übersicht ',
+ 'cancel' => 'Abbrechen',
+ 'add_a_new' => 'Neu anlegen: ',
+
+ // Edit form
+ 'edit' => 'Bearbeiten',
+ 'save' => 'Speichern',
+
+ // Revisions
+ 'revisions' => 'Revisionen',
+ 'no_revisions' => 'Keine Revisionen gefunden',
+ 'created_this' => 'hat das erstellt',
+ 'changed_the' => 'hat das geändert: ',
+ 'restore_this_value' => 'Wiederherstellen',
+ 'from' => 'von',
+ 'to' => 'nach',
+ 'undo' => 'Rückgängig',
+ 'revision_restored' => 'Revision erfolgreich wiederhergestellt',
+ 'guest_user' => 'Gast',
+
+ // Translatable models
+ 'edit_translations' => 'ÜBERSETZUNG BEARBEITEN',
+ 'language' => 'Sprache',
+
+ // CRUD table view
+ 'all' => 'Alle ',
+ 'in_the_database' => 'in der Datenbank',
+ 'list' => 'Liste',
+ 'actions' => 'Aktionen',
+ 'preview' => 'Vorschau',
+ 'delete' => 'Löschen',
+ 'admin' => 'Admin',
+ 'details_row' => 'Diese Zeile zeigt die Details und kann nach Belieben geändert werden.',
+ 'details_row_loading_error' => 'Beim Laden der Details ist ein Fehler aufgetreten. Bitte versuche es noch einmal.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Soll dieser Eintrag wirklich gelöscht werden?',
+ 'delete_confirmation_title' => 'Eintrag gelöscht',
+ 'delete_confirmation_message' => 'Der Eintrag wurde erfolgreich gelöscht.',
+ 'delete_confirmation_not_title' => 'NICHT gelöscht',
+ 'delete_confirmation_not_message' => 'Ein Fehler ist aufgetreten. Der Eintrag wurde möglicherweise nicht gelöscht.',
+ 'delete_confirmation_not_deleted_title' => 'Nicht gelöscht',
+ 'delete_confirmation_not_deleted_message' => 'Nichts passiert. Der Eintrag wurde nicht gelöscht.',
+
+ // DataTables translation
+ 'emptyTable' => 'Keine Einträge vorhanden',
+ 'info' => 'Zeigt _START_ bis _END_ von _TOTAL_ Einträgen',
+ 'infoEmpty' => 'Zeigt 0 von 0 aus insgesamt 0 Einträgen',
+ 'infoFiltered' => '(gefiltert von insgesamt _MAX_ Einträgen)',
+ 'infoPostFix' => '',
+ 'thousands' => '.',
+ 'lengthMenu' => '_MENU_ Einträge pro Seite',
+ 'loadingRecords' => 'Laden...',
+ 'processing' => 'Verarbeiten...',
+ 'search' => 'Suchen: ',
+ 'zeroRecords' => 'Keine passenden Einträge gefunden',
+ 'paginate' => [
+ 'first' => 'Erste',
+ 'last' => 'Letzte',
+ 'next' => 'Nächste',
+ 'previous' => 'Vorherige',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': aktivieren um aufsteigend zu Sortieren',
+ 'sortDescending' => ': aktivieren um absteigend zu Sortieren',
+ ],
+ 'export' => [
+ 'copy' => 'Kopieren',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Drucken',
+ 'column_visibility' => 'Sichtbarkeit der Spalte',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Unbefugter Zugriff - Sie haben nicht die notwendigen Rechte um diese Seite anzuzeigen.',
+ 'please_fix' => 'Bitte beheben Sie die folgenden Fehler:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Der Eintrag wurde erfolgreich angelegt.',
+ 'update_success' => 'Der Eintrag wurde erfolgreich geändert.',
+
+ // CRUD reorder view
+ 'reorder' => 'Sortiere',
+ 'reorder_text' => 'Zum Ändern der Reihenfolge Einträge verschieben. (Drag&Drop)',
+ 'reorder_success_title' => 'Fertig',
+ 'reorder_success_message' => 'Die Reihenfolge wurde gespeichert',
+ 'reorder_error_title' => 'Fehler',
+ 'reorder_error_message' => 'Die Reihenfolge konnte nicht gespeichert werden',
+
+ // CRUD yes/no
+ 'yes' => 'Ja',
+ 'no' => 'Nein',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filter',
+ 'toggle_filters' => 'Filter umschalten',
+ 'remove_filters' => 'Filter entfernen',
+
+ // Fields
+ 'browse_uploads' => 'Uploads durchsuchen',
+ 'clear' => 'Löschen',
+ 'page_link' => 'Link zur Seite',
+ 'page_link_placeholder' => 'http://example.com/ihre-gewuenschte-seite',
+ 'internal_link' => 'Interner Link',
+ 'internal_link_placeholder' => 'URL-sicherer Name ("Slug"). Bsp: \'admin/page\' (ohne Anführungszeichen) für \':url\'',
+ 'external_link' => 'Externer Link',
+ 'choose_file' => 'Datei auswählen',
+
+ //Table field
+ 'table_cant_add' => 'Kann :entity nicht hinzufügen',
+ 'table_max_reached' => 'Maximale Anzahl von :max erreicht',
+
+ // File manager
+ 'file_manager' => 'Datei-Manager',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Dick Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Αποθήκευση και εισαγωγή νέου',
+ 'save_action_save_and_edit' => 'Αποθήκευση και επεξεργασία',
+ 'save_action_save_and_back' => 'Αποθήκευση και επιστροφή',
+ 'save_action_changed_notification' => 'Η προκαθορισμένη συμπεριφορά μετά την αποθήκευση έχει αλλάξει.',
+
+ // Create form
+ 'add' => 'Προσθήκη',
+ 'back_to_all' => 'Επιστροφή στη λίστα ',
+ 'cancel' => 'Ακύρωση',
+ 'add_a_new' => 'Προσθήκη ',
+
+ // Create form - advanced options
+ 'after_saving' => 'Μετά την αποθήκευση',
+ 'go_to_the_table_view' => 'επιστροφή στον πίνακα',
+ 'let_me_add_another_item' => 'προσθήκη νέου αντικειμένου',
+ 'edit_the_new_item' => 'τροποποίηση νέου αντικειμένου',
+
+ // Edit form
+ 'edit' => 'Τροποποίηση',
+ 'save' => 'Αποθήκευση',
+
+ // Revisions
+ 'revisions' => 'Αναθεωρήσεις',
+ 'no_revisions' => 'Δεν βρέθηκαν αναθεωρήσεις',
+ 'created_this' => 'δημιούργησε',
+ 'changed_the' => 'άλλαξε',
+ 'restore_this_value' => 'επανέφερε αυτή την τιμή',
+ 'from' => 'από',
+ 'to' => 'σε',
+ 'undo' => 'Αναίρεση',
+ 'revision_restored' => 'Η αναθεώρηση ανακτήθηκε με επιτυχία',
+
+ // CRUD table view
+ 'all' => '',
+ 'in_the_database' => 'της βάσης δεδομένων',
+ 'list' => 'Λίστα',
+ 'actions' => 'Ενέργειες',
+ 'preview' => 'Προεπισκόπηση',
+ 'delete' => 'Διαγραφή',
+ 'admin' => 'Διαχειριστής',
+ 'details_row' => 'Αυτή είναι η γραμμή λεπτομερειών. Τροποποιήστε την όπως επιθυμείτε.',
+ 'details_row_loading_error' => 'Υπήρξε ένα σφάλμα κατά τη φόρτωση λεπτομερειών. Παρακαλώ δοκιμάστε ξανά.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Είστε σίγουρος/η πως θέλετε να διαγράψετε αυτό το αντικείμενο?',
+ 'delete_confirmation_title' => 'Το αντικείμενο διαγράφηκε',
+ 'delete_confirmation_message' => 'Το αντικείμενο διαγράφηκε επιτυχώς.',
+ 'delete_confirmation_not_title' => 'ΔΕΝ διαγράφηκε',
+ 'delete_confirmation_not_message' => 'Υπήρξε σφάλμα. Το αντικείμενο ενδέχεται να μην έχει διαγραφεί.',
+ 'delete_confirmation_not_deleted_title' => 'Δεν διαγράφηκε',
+ 'delete_confirmation_not_deleted_message' => 'Δεν έγινε τίποτα. Το αντικείμενό σας είναι ασφαλές.',
+
+ // DataTables translation
+ 'emptyTable' => 'Δεν υπάρχουν διαθέσιμα δεδομένα στον πίνακα',
+ 'info' => 'Εμφάνιση _START_ έως _END_ από _TOTAL_ εγγραφές',
+ 'infoEmpty' => 'Εμφάνιση 0 έως 0 από 0 εγγραφές',
+ 'infoFiltered' => '(Επιστράφηκαν από _MAX_ συνολικές εγγραφές)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ εγγραφές ανά σελίδα',
+ 'loadingRecords' => 'Loading...',
+ 'processing' => 'Processing...',
+ 'search' => 'Αναζήτηση: ',
+ 'zeroRecords' => 'Δεν βρέθηκε καμία σχετική εγγραφή',
+ 'paginate' => [
+ 'first' => 'Πρώτη',
+ 'last' => 'Τελευταία',
+ 'next' => 'Επόμενη',
+ 'previous' => 'Προηγούμενη',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': ενεργοποίηση για αύξουσα ταξινόμηση',
+ 'sortDescending' => ': ενεργοποίηση για φθίνουσα ταξινόμηση',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Μη εξουσιοδοτημένη πρόσβαση - δεν έχετε την απαιτούμενη εξουσιοδότηση για να δείτε τη σελίδα αυτή.',
+ 'please_fix' => 'Παρακαλώ διορθώστε τα παρακάτω σφάλματα:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Το αντικείμενο προστέθηκε με επιτυχία.',
+ 'update_success' => 'Το αντικείμενο τροποποιήθηκε με επιτυχία.',
+
+ // CRUD reorder view
+ 'reorder' => 'Αλλαγή σειράς εμφάνισης',
+ 'reorder_text' => 'Χρησιμοποιήστε drag&drop για αλλαγή σειράς εμφάνισης.',
+ 'reorder_success_title' => 'Πραγματοποιήθηκε',
+ 'reorder_success_message' => 'Η σειρά εμφάνισης έχει αποθηκευτεί.',
+ 'reorder_error_title' => 'Σφάλμα',
+ 'reorder_error_message' => 'Η σειρά εμφάνισης δεν έχει αποθηκευτεί.',
+
+ // CRUD yes/no
+ 'yes' => 'Ναι',
+ 'no' => 'Όχι',
+
+ // Fields
+ 'browse_uploads' => 'Αναζήτηση μεταφορτωμένων αρχείων',
+ 'clear' => 'Εκκαθάριση',
+ 'page_link' => 'Σύνδεσμος Σελίδας',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => 'Εσωτερικός σύνδεσμος',
+ 'internal_link_placeholder' => 'Εσωτερικό slug. πχ: \'admin/page\' (χωρίς εισαγωγικά) για \':url\'',
+ 'external_link' => 'Εξωτερικός σύνδεσμος',
+ 'choose_file' => 'Επιλογή αρχείου',
+
+ //Table field
+ 'table_cant_add' => 'Δεν μπορεί να προστεθεί νέο/α :entity',
+ 'table_max_reached' => 'Μέγιστο πλήθος από :max reached',
+
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Save and new item',
+ 'save_action_save_and_edit' => 'Save and edit this item',
+ 'save_action_save_and_back' => 'Save and back',
+ 'save_action_changed_notification' => 'Default behaviour after saving has been changed.',
+
+ // Create form
+ 'add' => 'Add',
+ 'back_to_all' => 'Back to all ',
+ 'cancel' => 'Cancel',
+ 'add_a_new' => 'Add a new ',
+
+ // Edit form
+ 'edit' => 'Edit',
+ 'save' => 'Save',
+
+ // Revisions
+ 'revisions' => 'Revisions',
+ 'no_revisions' => 'No revisions found',
+ 'created_this' => 'created this',
+ 'changed_the' => 'changed the',
+ 'restore_this_value' => 'Restore this value',
+ 'from' => 'from',
+ 'to' => 'to',
+ 'undo' => 'Undo',
+ 'revision_restored' => 'Revision successfully restored',
+ 'guest_user' => 'Guest User',
+
+ // Translatable models
+ 'edit_translations' => 'EDIT TRANSLATIONS',
+ 'language' => 'Language',
+
+ // CRUD table view
+ 'all' => 'All ',
+ 'in_the_database' => 'in the database',
+ 'list' => 'List',
+ 'actions' => 'Actions',
+ 'preview' => 'Preview',
+ 'delete' => 'Delete',
+ 'admin' => 'Admin',
+ 'details_row' => 'This is the details row. Modify as you please.',
+ 'details_row_loading_error' => 'There was an error loading the details. Please retry.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Are you sure you want to delete this item?',
+ 'delete_confirmation_title' => 'Item Deleted',
+ 'delete_confirmation_message' => 'The item has been deleted successfully.',
+ 'delete_confirmation_not_title' => 'NOT deleted',
+ 'delete_confirmation_not_message' => "There's been an error. Your item might not have been deleted.",
+ 'delete_confirmation_not_deleted_title' => 'Not deleted',
+ 'delete_confirmation_not_deleted_message' => 'Nothing happened. Your item is safe.',
+
+ // Bulk actions
+ 'bulk_no_entries_selected_title' => 'No entries selected',
+ 'bulk_no_entries_selected_message' => 'Please select one or more items to perform a bulk action on them.',
+
+ // Bulk confirmation
+ 'bulk_delete_are_you_sure' => 'Are you sure you want to delete these :number entries?',
+ 'bulk_delete_sucess_title' => 'Entries deleted',
+ 'bulk_delete_sucess_message' => ' items have been deleted',
+ 'bulk_delete_error_title' => 'Delete failed',
+ 'bulk_delete_error_message' => 'One or more items could not be deleted',
+
+ // Ajax errors
+ 'ajax_error_title' => 'Error',
+ 'ajax_error_text' => 'Error loading page. Please refresh the page.',
+
+ // DataTables translation
+ 'emptyTable' => 'No data available in table',
+ 'info' => 'Showing _START_ to _END_ of _TOTAL_ entries',
+ 'infoEmpty' => 'Showing 0 to 0 of 0 entries',
+ 'infoFiltered' => '(filtered from _MAX_ total entries)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ records per page',
+ 'loadingRecords' => 'Loading...',
+ 'processing' => 'Processing...',
+ 'search' => 'Search: ',
+ 'zeroRecords' => 'No matching records found',
+ 'paginate' => [
+ 'first' => 'First',
+ 'last' => 'Last',
+ 'next' => 'Next',
+ 'previous' => 'Previous',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': activate to sort column ascending',
+ 'sortDescending' => ': activate to sort column descending',
+ ],
+ 'export' => [
+ 'export' => 'Export',
+ 'copy' => 'Copy',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Print',
+ 'column_visibility' => 'Column visibility',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Unauthorized access - you do not have the necessary permissions to see this page.',
+ 'please_fix' => 'Please fix the following errors:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'The item has been added successfully.',
+ 'update_success' => 'The item has been modified successfully.',
+
+ // CRUD reorder view
+ 'reorder' => 'Reorder',
+ 'reorder_text' => 'Use drag&drop to reorder.',
+ 'reorder_success_title' => 'Done',
+ 'reorder_success_message' => 'Your order has been saved.',
+ 'reorder_error_title' => 'Error',
+ 'reorder_error_message' => 'Your order has not been saved.',
+
+ // CRUD yes/no
+ 'yes' => 'Yes',
+ 'no' => 'No',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filters',
+ 'toggle_filters' => 'Toggle filters',
+ 'remove_filters' => 'Remove filters',
+
+ // Fields
+ 'browse_uploads' => 'Browse uploads',
+ 'select_all' => 'Select All',
+ 'select_files' => 'Select files',
+ 'select_file' => 'Select file',
+ 'clear' => 'Clear',
+ 'page_link' => 'Page link',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => 'Internal link',
+ 'internal_link_placeholder' => 'Internal slug. Ex: \'admin/page\' (no quotes) for \':url\'',
+ 'external_link' => 'External link',
+ 'choose_file' => 'Choose file',
+
+ //Table field
+ 'table_cant_add' => 'Cannot add new :entity',
+ 'table_max_reached' => 'Maximum number of :max reached',
+
+ // File manager
+ 'file_manager' => 'File Manager',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Guardar y crear nuevo',
+ 'save_action_save_and_edit' => 'Guardar y continuar editando',
+ 'save_action_save_and_back' => 'Guardar y regresar',
+ 'save_action_changed_notification' => 'La acción por defecto del botón guardar ha sido modificada.',
+
+ // Create form
+ 'add' => 'Añadir',
+ 'back_to_all' => 'Volver al listado de',
+ 'cancel' => 'Cancelar',
+ 'add_a_new' => 'Añadir ',
+
+ // Edit form
+ 'edit' => 'Editar',
+ 'save' => 'Guardar',
+
+ // Revisions
+ 'revisions' => 'Las revisiones',
+ 'no_revisions' => 'No hay revisiones encontradas',
+ 'created_this' => 'creado este',
+ 'changed_the' => 'cambiado el',
+ 'restore_this_value' => 'restaurar este valor',
+ 'from' => 'de',
+ 'to' => 'a',
+ 'undo' => 'Deshacer',
+ 'revision_restored' => 'Revisión restaurada correctamente',
+
+ // Translatable models
+ 'edit_translations' => 'EDITAR TRADUCCIONES',
+ 'language' => 'Idioma',
+
+ // CRUD table view
+ 'all' => 'Todos los registros de ',
+ 'in_the_database' => 'en la base de datos',
+ 'list' => 'Listar',
+ 'actions' => 'Acciones',
+ 'preview' => 'Vista previa',
+ 'delete' => 'Eliminar',
+ 'admin' => 'Admin',
+ 'details_row' => 'Esta es la fila de detalles. Modificar a su gusto.',
+ 'details_row_loading_error' => 'Se ha producido un error al cargar los datos. Por favor, intente de nuevo.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => '¿Está seguro que desea eliminar este elemento?',
+ 'delete_confirmation_title' => 'Elemento eliminado',
+ 'delete_confirmation_message' => 'El elemento ha sido eliminado de manera correcta.',
+ 'delete_confirmation_not_title' => 'No se pudo eliminar',
+ 'delete_confirmation_not_message' => 'Ha ocurrido un error. Puede que el elemento no haya sido eliminado.',
+ 'delete_confirmation_not_deleted_title' => 'No se pudo eliminar',
+ 'delete_confirmation_not_deleted_message' => 'No ha ocurrido nada. Su elemento está seguro.',
+
+ // DataTables translation
+ 'emptyTable' => 'No hay datos disponibles en la tabla',
+ 'info' => 'Mostrando registros _START_ a _END_ de un total de _TOTAL_ registros',
+ 'infoEmpty' => 'Mostrando 0 registros',
+ 'infoFiltered' => '(filtrando de _MAX_ registros totales)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ elementos por página',
+ 'loadingRecords' => 'Cargando...',
+ 'processing' => 'Procesando...',
+ 'search' => 'Buscar: ',
+ 'zeroRecords' => 'No se encontraron elementos',
+ 'paginate' => [
+ 'first' => 'Primero',
+ 'last' => 'Último',
+ 'next' => 'Siguiente',
+ 'previous' => 'Anterior',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': activar para ordenar ascendentemente',
+ 'sortDescending' => ': activar para ordenar descendentemente',
+ ],
+
+ 'export' => [
+ 'copy' => 'Copiar',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Imprimir',
+ 'column_visibility' => 'Visibilidad de columnas',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Acceso denegado - usted no tiene los permisos necesarios para ver esta página.',
+ 'please_fix' => 'Por favor corrija los siguientes errores:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'El elemento ha sido añadido de manera correcta.',
+ 'update_success' => 'El elemento ha sido modificado de manera correcta.',
+
+ // CRUD reorder view
+ 'reorder' => 'Reordenar',
+ 'reorder_text' => 'Arrastrar y soltar para reordenar.',
+ 'reorder_success_title' => 'Hecho',
+ 'reorder_success_message' => 'El orden ha sido guardado.',
+ 'reorder_error_title' => 'Error',
+ 'reorder_error_message' => 'El orden no se ha guardado.',
+
+ // CRUD yes/no
+ 'yes' => 'Sí',
+ 'no' => 'No',
+
+ // Fields
+ 'browse_uploads' => 'Subir archivos',
+ 'clear' => 'Limpiar',
+ 'page_link' => 'Enlace',
+ 'page_link_placeholder' => 'http://example.com/su-pagina',
+ 'internal_link' => 'Enlace interno',
+ 'internal_link_placeholder' => 'Slug interno. Ejplo: \'admin/page\' (sin comillas) para \':url\'',
+ 'external_link' => 'Enlace externo',
+
+ // Filtering
+ 'filters' => 'Filtros',
+ 'remove_filters' => 'Remover filtros',
+ 'toggle_filters' => 'Alternar filtros',
+
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Enregistrer et créer un nouveau',
+ 'save_action_save_and_edit' => 'Enregistrer et éditer',
+ 'save_action_save_and_back' => 'Enregistrer et retour',
+ 'save_action_changed_notification' => 'Action par défaut changée',
+
+ // Create form
+ 'add' => 'Ajouter',
+ 'back_to_all' => 'Retour à la liste ',
+ 'cancel' => 'Annuler',
+ 'add_a_new' => 'Ajouter un nouvel élément ',
+
+ // Edit form
+ 'edit' => 'Modifier',
+ 'save' => 'Enregistrer',
+
+ // Revisions
+ 'revisions' => 'Historique',
+ 'no_revisions' => 'Pas d’historique',
+ 'created_this' => 'a créé',
+ 'changed_the' => 'a modifié',
+ 'restore_this_value' => 'Restaurer cette valeur',
+ 'from' => 'De',
+ 'to' => 'À',
+ 'undo' => 'Annuler',
+ 'revision_restored' => 'Valeur restaurée',
+ 'guest_user' => 'Utilisateur invité',
+
+ // Translatable models
+ 'edit_translations' => 'EDITER LES TRADUCTIONS',
+ 'language' => 'Langue',
+
+ // CRUD table view
+ 'all' => 'Tous les ',
+ 'in_the_database' => 'dans la base de données',
+ 'list' => 'Liste',
+ 'actions' => 'Actions',
+ 'preview' => 'Aperçu',
+ 'delete' => 'Supprimer',
+ 'admin' => 'Administration',
+ 'details_row' => 'Ligne de détail. Modifiez la à volonté.',
+ 'details_row_loading_error' => 'Une erreur est survenue en chargeant les détails. Veuillez réessayer.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Souhaitez-vous réellement supprimer cet élément?',
+ 'delete_confirmation_title' => 'Élément supprimé',
+ 'delete_confirmation_message' => 'L’élément a été supprimé avec succès.',
+ 'delete_confirmation_not_title' => 'NON supprimé',
+ 'delete_confirmation_not_message' => 'Une erreur est survenue. Votre élément n’a peut-être pas été effacé.',
+ 'delete_confirmation_not_deleted_title' => 'Non supprimé',
+ 'delete_confirmation_not_deleted_message' => 'Aucune modification. Votre élément a été conservé.',
+
+ // Bulk actions
+ 'bulk_no_entries_selected_title' => 'Aucun élément sélectionné',
+ 'bulk_no_entries_selected_message' => 'Veuillez sélectionner un ou plusieurs éléments pour faire une action groupée',
+
+ // Bulk confirmation
+ 'bulk_delete_are_you_sure' => 'Souhaitez-vous vraiment supprimer ces :number éléments?',
+ 'bulk_delete_sucess_title' => 'Éléments supprimés',
+ 'bulk_delete_sucess_message' => ' éléments ont été supprimés',
+ 'bulk_delete_error_title' => 'Échec de la suppression',
+ 'bulk_delete_error_message' => 'Un ou plusieurs éléments n’ont pu être supprimés',
+
+ // Ajax errors
+ 'ajax_error_title' => 'Erreur',
+ 'ajax_error_text' => 'Erreur lors du chargement. Merci de réactualiser la page.',
+
+ // DataTables translation
+ 'emptyTable' => 'Aucune donnée à afficher.',
+ 'info' => 'Affichage des éléments _START_ à _END_ sur _TOTAL_',
+ 'infoEmpty' => 'Affichage des éléments 0 à 0 sur 0',
+ 'infoFiltered' => '(filtré à partir de _MAX_ éléments au total)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ enregistrements par page',
+ 'loadingRecords' => 'Chargement...',
+ 'processing' => 'Traitement...',
+ 'search' => 'Recherche : ',
+ 'zeroRecords' => 'Aucun enregistrement correspondant trouvé',
+ 'paginate' => [
+ 'first' => 'Premier',
+ 'last' => 'Dernier',
+ 'next' => 'Suivant',
+ 'previous' => 'Précédent',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': activez pour trier la colonne par ordre croissant',
+ 'sortDescending' => ': activez pour trier la colonne par ordre décroissant',
+ ],
+ 'export' => [
+ 'copy' => 'Copier',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Imprimer',
+ 'column_visibility' => 'Affichage des colonnes',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Accès non autorisé - vous n’avez pas les droits nécessaires à la consultation de cette page.',
+ 'please_fix' => 'Veuillez corriger les erreurs suivantes :',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'L’élément a été ajouté avec succès.',
+ 'update_success' => 'L’élément a été modifié avec succès.',
+
+ // CRUD reorder view
+ 'reorder' => 'Réordonner',
+ 'reorder_text' => 'Utilisez le glisser-déposer pour réordonner.',
+ 'reorder_success_title' => 'Fait',
+ 'reorder_success_message' => 'L’ordre a été enregistré.',
+ 'reorder_error_title' => 'Erreur',
+ 'reorder_error_message' => 'L’ordre n’a pas pu être enregistré.',
+
+ // CRUD yes/no
+ 'yes' => 'Oui',
+ 'no' => 'Non',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtres',
+ 'toggle_filters' => 'Activer les filtres',
+ 'remove_filters' => 'Retirer les filtres',
+
+ // Fields
+ 'browse_uploads' => 'Parcourir les fichier chargés',
+ 'select_all' => 'Tout sélectionner',
+ 'select_files' => 'Choisir des fichiers',
+ 'select_file' => 'Choisir un fichier',
+ 'clear' => 'Effacer',
+ 'page_link' => 'Lien de la page',
+ 'page_link_placeholder' => 'http://example.com/votre-page',
+ 'internal_link' => 'Lien interne',
+ 'internal_link_placeholder' => 'Identifiant de lien interne. Ex: \'admin/page\' (sans guillemets) pour \':url\'',
+ 'external_link' => 'Lien externe',
+ 'choose_file' => 'Choisissez un fichier',
+
+ //Table field
+ 'table_cant_add' => 'Impossible d’ajouter un nouveau :entity',
+ 'table_max_reached' => 'Nombre maximum :max atteint',
+
+ // File manager
+ 'file_manager' => 'Gestionnaire de fichiers',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Enregistrer et créer un nouveau',
+ 'save_action_save_and_edit' => 'Enregistrer et éditer',
+ 'save_action_save_and_back' => 'Enregistrer et retour',
+ 'save_action_changed_notification' => 'Action par défaut changée',
+
+ // Create form
+ 'add' => 'Ajouter',
+ 'back_to_all' => 'Retour à la liste ',
+ 'cancel' => 'Annuler',
+ 'add_a_new' => 'Ajouter un nouvel élément ',
+
+ // Edit form
+ 'edit' => 'Modifier',
+ 'save' => 'Enregistrer',
+
+ // Revisions
+ 'revisions' => 'Historique',
+ 'no_revisions' => 'Pas d’historique',
+ 'created_this' => 'a créé',
+ 'changed_the' => 'a modifié',
+ 'restore_this_value' => 'Restaurer cette valeur',
+ 'from' => 'De',
+ 'to' => 'À',
+ 'undo' => 'Annuler',
+ 'revision_restored' => 'Valeur restaurée',
+ 'guest_user' => 'Utilisateur invité',
+
+ // Translatable models
+ 'edit_translations' => 'EDITER LES TRADUCTIONS',
+ 'language' => 'Langue',
+
+ // CRUD table view
+ 'all' => 'Tous les ',
+ 'in_the_database' => 'dans la base de données',
+ 'list' => 'Liste',
+ 'actions' => 'Actions',
+ 'preview' => 'Aperçu',
+ 'delete' => 'Supprimer',
+ 'admin' => 'Administration',
+ 'details_row' => 'Ligne de détail. Modifiez la à volonté.',
+ 'details_row_loading_error' => 'Une erreur est survenue en chargeant les détails. Veuillez réessayer.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Souhaitez-vous réellement supprimer cet élément?',
+ 'delete_confirmation_title' => 'Élément supprimé',
+ 'delete_confirmation_message' => 'L’élément a été supprimé avec succès.',
+ 'delete_confirmation_not_title' => 'NON supprimé',
+ 'delete_confirmation_not_message' => 'Une erreur est survenue. Votre élément n’a peut-être pas été effacé.',
+ 'delete_confirmation_not_deleted_title' => 'Non supprimé',
+ 'delete_confirmation_not_deleted_message' => 'Aucune modification. Votre élément a été conservé.',
+
+ 'ajax_error_title' => 'Erreur',
+ 'ajax_error_text' => 'Erreur lors du chargement. Merci de réactualiser la page.',
+
+ // DataTables translation
+ 'emptyTable' => 'Aucune donnée à afficher.',
+ 'info' => 'Affichage des éléments _START_ à _END_ sur _TOTAL_',
+ 'infoEmpty' => 'Affichage des éléments 0 à 0 sur 0',
+ 'infoFiltered' => '(filtré à partir de _MAX_ éléments au total)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ enregistrements par page',
+ 'loadingRecords' => 'Chargement...',
+ 'processing' => 'Traitement...',
+ 'search' => 'Recherche : ',
+ 'zeroRecords' => 'Aucun enregistrement correspondant trouvé',
+ 'paginate' => [
+ 'first' => 'Premier',
+ 'last' => 'Dernier',
+ 'next' => 'Suivant',
+ 'previous' => 'Précédent',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': activez pour trier la colonne par ordre croissant',
+ 'sortDescending' => ': activez pour trier la colonne par ordre décroissant',
+ ],
+ 'export' => [
+ 'copy' => 'Copier',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Imprimer',
+ 'column_visibility' => 'Affichage des colonnes',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Accès non autorisé - vous n’avez pas les droits nécessaires à la consultation de cette page.',
+ 'please_fix' => 'Veuillez corriger les erreurs suivantes :',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'L’élément a été ajouté avec succès.',
+ 'update_success' => 'L’élément a été modifié avec succès.',
+
+ // CRUD reorder view
+ 'reorder' => 'Réordonner',
+ 'reorder_text' => 'Utilisez le glisser-déposer pour réordonner.',
+ 'reorder_success_title' => 'Fait',
+ 'reorder_success_message' => 'L’ordre a été enregistré.',
+ 'reorder_error_title' => 'Erreur',
+ 'reorder_error_message' => 'L’ordre n’a pas pu être enregistré.',
+
+ // CRUD yes/no
+ 'yes' => 'Oui',
+ 'no' => 'Non',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtres',
+ 'toggle_filters' => 'Activer les filtres',
+ 'remove_filters' => 'Retirer les filtres',
+
+ // Fields
+ 'browse_uploads' => 'Parcourir les fichier chargés',
+ 'clear' => 'Effacer',
+ 'page_link' => 'Lien de la page',
+ 'page_link_placeholder' => 'http://example.com/votre-page',
+ 'internal_link' => 'Lien interne',
+ 'internal_link_placeholder' => 'Identifiant de lien interne. Ex: \'admin/page\' (sans guillemets) pour \':url\'',
+ 'external_link' => 'Lien externe',
+ 'choose_file' => 'Choisissez un fichier',
+
+ //Table field
+ 'table_cant_add' => 'Impossible d’ajouter un nouveau :entity',
+ 'table_max_reached' => 'Nombre maximum :max atteint',
+
+ // File manager
+ 'file_manager' => 'Gestionnaire de fichiers',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Salva ed aggiungi un nuovo elemento',
+ 'save_action_save_and_edit' => 'Salva e modifica questo elemento',
+ 'save_action_save_and_back' => 'Salva e torna indietro',
+ 'save_action_changed_notification' => 'Azione predefinita cambiata',
+
+ // Create form
+ 'add' => 'Aggiungi',
+ 'back_to_all' => 'Torna a tutti i ',
+ 'cancel' => 'Annulla',
+ 'add_a_new' => 'Aggiungi un nuovo ',
+
+ // Edit form
+ 'edit' => 'Modifica',
+ 'save' => 'Salva',
+
+ // Revisions
+ 'revisions' => 'Revisioni',
+ 'no_revisions' => 'Nessuna revisione trovata',
+ 'created_this' => 'ha creato questo',
+ 'changed_the' => 'ha cambiato il',
+ 'restore_this_value' => 'ripristinare questo valore',
+ 'from' => 'da',
+ 'to' => 'a',
+ 'undo' => 'Annulla',
+ 'revision_restored' => 'Revisione ripristinata con successo',
+ 'guest_user' => 'Un Ospite',
+
+ // Translatable models
+ 'edit_translations' => 'MODIFICA TRADUZIONI',
+ 'language' => 'Lingua',
+
+ // CRUD table view
+ 'all' => 'Tutti i ',
+ 'in_the_database' => 'nel database',
+ 'list' => 'Lista',
+ 'actions' => 'Azioni',
+ 'preview' => 'Anteprima',
+ 'delete' => 'Elimina',
+ 'admin' => 'Amministrazione',
+ 'details_row' => 'Questa è la riga dei dettagli. Modificala a tuo piacimento.',
+ 'details_row_loading_error' => "C'è stato un errore caricando i dettagli. Riprova.",
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Sei sicuro di eliminare questo elemento?',
+ 'delete_confirmation_title' => 'Elemento eliminato',
+ 'delete_confirmation_message' => "L'elemento è stato eliminato con successo.",
+ 'delete_confirmation_not_title' => 'NON eliminato',
+ 'delete_confirmation_not_message' => "C'è stato un errore. L'elemento potrebbe non essere stato eliminato.",
+ 'delete_confirmation_not_deleted_title' => 'Non eliminato',
+ 'delete_confirmation_not_deleted_message' => "Non è successo niente. L'elemento è al sicuro.",
+
+ 'ajax_error_title' => 'Errore',
+ 'ajax_error_text' => 'Errore durante il caricamento della pagina. Per favore ricarica la pagina.',
+
+ // DataTables translation
+ 'emptyTable' => 'Nessun record da visualizzare',
+ 'info' => 'Visualizzando da _START_ a _END_ record di _TOTAL_',
+ 'infoEmpty' => 'Visualizzando da 0 a 0 record di 0',
+ 'infoFiltered' => '(filtrati da _MAX_ record totali)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ record per pagina',
+ 'loadingRecords' => 'Caricamento...',
+ 'processing' => 'Elaborazione...',
+ 'search' => 'Cerca: ',
+ 'zeroRecords' => 'Nessun record corrispondente',
+ 'paginate' => [
+ 'first' => 'Primo',
+ 'last' => 'Ultimo',
+ 'next' => 'Prossimo',
+ 'previous' => 'Precedente',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': attiva per ordinare la colonna ascendentemente',
+ 'sortDescending' => ': attiva per ordinare la colonna discendentemente',
+ ],
+ 'export' => [
+ 'copy' => 'Copia',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Stampa',
+ 'column_visibility' => 'Visibilità colonne',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Accesso non autorizzato - non hai i permessi necessari per vedere questa pagina.',
+ 'please_fix' => 'Per favore correggi i seguenti errori:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => "L'elemento è stato aggiunto correttamente.",
+ 'update_success' => "L'elemento è stato aggiornato correttamente.",
+
+ // CRUD reorder view
+ 'reorder' => 'Riordina',
+ 'reorder_text' => 'Seleziona e trascina per riordinare.',
+ 'reorder_success_title' => 'Fatto',
+ 'reorder_success_message' => 'Il tuo ordinamento è stato salvato.',
+ 'reorder_error_title' => 'Errore',
+ 'reorder_error_message' => 'Il tuo ordinamento non è stato salvato.',
+
+ // CRUD yes/no
+ 'yes' => 'Sì',
+ 'no' => 'No',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtri',
+ 'toggle_filters' => 'Attiva/disattiva filtri',
+ 'remove_filters' => 'Rimuovi filtri',
+
+ // Fields
+ 'browse_uploads' => 'Sfoglia file caricati',
+ 'select_all' => 'Seleziona tutti',
+ 'select_files' => 'Seleziona i files',
+ 'select_file' => 'Seleziona un file',
+ 'clear' => 'Pulisci',
+ 'page_link' => 'Link Pagina',
+ 'page_link_placeholder' => 'http://esempio.com/pagina-desiderata',
+ 'internal_link' => 'Link Interno',
+ 'internal_link_placeholder' => 'Slug interno. Es: \'admin/page\' (no quotes) for \':url\'',
+ 'external_link' => 'Link Esterno',
+ 'choose_file' => 'Scegli file',
+
+ //Table field
+ 'table_cant_add' => 'Impossibile aggiungere una nuova :entity',
+ 'table_max_reached' => 'Numero massimo di :max raggiunto',
+
+ // File manager
+ 'file_manager' => 'File Manager',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Saglabāt un jauns ieraksts',
+ 'save_action_save_and_edit' => 'Saglabāt un rediģēt šo ierakstu',
+ 'save_action_save_and_back' => 'Saglabāt un atpakaļ',
+ 'save_action_changed_notification' => 'Uzvedība pēc noklusējuma pēc izmaiņu saglabāšanas.',
+
+ // Create form
+ 'add' => 'Jauns',
+ 'back_to_all' => 'Atpakaļ pie Visiem ',
+ 'cancel' => 'Atcelt',
+ 'add_a_new' => 'Jauns ',
+
+ // Edit form
+ 'edit' => 'Rediģēt',
+ 'save' => 'Saglabāt',
+
+ // Revisions
+ 'revisions' => 'Revīzijas',
+ 'no_revisions' => 'Revīzijas nav atrastas',
+ 'created_this' => 'izveidoja',
+ 'changed_the' => 'izmainīja',
+ 'restore_this_value' => 'Atjaunot vērtību',
+ 'from' => 'no',
+ 'to' => 'līdz',
+ 'undo' => 'Atgriezt atpakaļ',
+ 'revision_restored' => 'Revīzija veiksmīgi atjaunota',
+ 'guest_user' => 'Lietotājs: viesis',
+
+ // Translatable models
+ 'edit_translations' => 'LABOT TULKOJUMUS',
+ 'language' => 'Valoda',
+
+ // CRUD table view
+ 'all' => 'Visi ',
+ 'in_the_database' => 'datubāzē',
+ 'list' => 'Saraksts',
+ 'actions' => 'Darbības',
+ 'preview' => 'Priekšapskats',
+ 'delete' => 'Dzēst',
+ 'admin' => 'Admin',
+ 'details_row' => 'Šī ir detaļu rinda.',
+ 'details_row_loading_error' => 'Notika kļuda lādējot detaļas. Lūdzu atkārtojiet.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Vai esat pārliecināti, ka gribat izdzēst šo ierakstu?',
+ 'delete_confirmation_title' => 'Ieraksts Izdzēsts',
+ 'delete_confirmation_message' => 'Elements tika izdzēsts veiksmīgi.',
+ 'delete_confirmation_not_title' => 'NAV izdzēsts',
+ 'delete_confirmation_not_message' => 'Notika kļūda. Ieraksts var būt neizdzēsts.',
+ 'delete_confirmation_not_deleted_title' => 'Nav izdzēsts',
+ 'delete_confirmation_not_deleted_message' => 'Nekas nenotika. Ieraksts ir drošībā.',
+
+ 'ajax_error_title' => 'Kļūda',
+ 'ajax_error_text' => 'Kļūda ielādējot saturu. Lūdzu pārlādē lapu.',
+
+ // DataTables translation
+ 'emptyTable' => 'Dati nav pieejami',
+ 'info' => 'Rādot no _START_ līdz _END_ no kopumā _TOTAL_ ierakstiem',
+ 'infoEmpty' => 'Rādot 0 no 0 no kopumā 0 ierakstiem',
+ 'infoFiltered' => '(filtrēts no _MAX_ kopējiem ierakstiem)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ ieraksti uz lapu',
+ 'loadingRecords' => 'Ielādē...',
+ 'processing' => 'Apstrādā...',
+ 'search' => 'Meklēšana: ',
+ 'zeroRecords' => 'Peimēroti ieraksti nav atrasti',
+ 'paginate' => [
+ 'first' => 'Pirmā',
+ 'last' => 'Pēdējā',
+ 'next' => 'Nākošā',
+ 'previous' => 'Iepriekšējā',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': aktivizējiet lai šķirot augoši',
+ 'sortDescending' => ': aktivizējiet lai šķirot dilstoši',
+ ],
+ 'export' => [
+ 'copy' => 'Kopēt',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Drukāt',
+ 'column_visibility' => 'Kolonnu redzamība',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Neautorizēta pieeja - jums nav nepieciešamo tiesību lai apskatītu šo lapu.',
+ 'please_fix' => 'Lūdzu izlabojiet sekojošas kļūdas:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Ieraksts tika veiksmīgi pievienots.',
+ 'update_success' => 'Ieraksts tika veiksmīgi modificēts.',
+
+ // CRUD reorder view
+ 'reorder' => 'Pārkārtot',
+ 'reorder_text' => 'Izmantojiet drag&drop lai pārkārtotu.',
+ 'reorder_success_title' => 'Gatavs',
+ 'reorder_success_message' => 'Secība tika saglabāta.',
+ 'reorder_error_title' => 'Kļuda',
+ 'reorder_error_message' => 'Secība netika saglabāta.',
+
+ // CRUD yes/no
+ 'yes' => 'Jā',
+ 'no' => 'Nē',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtri',
+ 'toggle_filters' => 'Pārslēgt filtrus',
+ 'remove_filters' => 'Noņemt filtrus',
+
+ // Fields
+ 'browse_uploads' => 'Pārlūkot failus',
+ 'select_all' => 'Atlasīt visu',
+ 'select_files' => 'Izvēlies failus',
+ 'select_file' => 'Izvēlies failu',
+ 'clear' => 'Notīrīt',
+ 'page_link' => 'Lapas saite',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => 'Iekšējā saite',
+ 'internal_link_placeholder' => 'Iekšējās saites vārds. Piemēram: \'admin/page\' (no quotes) for \':url\'',
+ 'external_link' => 'Ārējā saite',
+ 'choose_file' => 'Izvēlaties failu',
+
+ //Table field
+ 'table_cant_add' => 'Nevar pievienot jaunu :entity',
+ 'table_max_reached' => 'Sasniegts maksimālais skaits no :max',
+
+ // File manager
+ 'file_manager' => 'Failu Pārlūks',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Opslaan en nieuw item toevoegen',
+ 'save_action_save_and_edit' => 'Opslaan en item bewerken',
+ 'save_action_save_and_back' => 'Opslaan en terug',
+ 'save_action_changed_notification' => 'Standaard gedrag na opslaan is aangepast.',
+
+ // Create form
+ 'add' => 'Toevoegen',
+ 'back_to_all' => 'Terug naar alle items ',
+ 'cancel' => 'Annuleren',
+ 'add_a_new' => 'Nieuwe toevoegen ',
+
+ // Edit form
+ 'edit' => 'Bewerken',
+ 'save' => 'Opslaan',
+
+ // Revisions
+ 'revisions' => 'Revisies',
+ 'no_revisions' => 'Geen revisies gevonden',
+ 'created_this' => 'heeft dit aangemaakt',
+ 'changed_the' => 'heeft aangepast',
+ 'restore_this_value' => 'Herstel deze waarde',
+ 'from' => 'van',
+ 'to' => 'naar',
+ 'undo' => 'Ongedaan maken',
+ 'revision_restored' => 'Revisie succesvol hersteld',
+
+ // Translatable models
+ 'edit_translations' => 'VERTALING WIJZIGEN',
+ 'language' => 'Taal',
+
+ // CRUD table view
+ 'all' => 'Alles ',
+ 'in_the_database' => 'in de database',
+ 'list' => 'Lijst',
+ 'actions' => 'Acties',
+ 'preview' => 'Voorbeeld',
+ 'delete' => 'Verwijderen ',
+ 'admin' => 'Admin',
+ 'details_row' => 'Dit is de detail rij. Bewerk als gewenst.',
+ 'details_row_loading_error' => 'Er is een fout opgetreden bij het laden van de details. Probeer het opnieuw.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Weet je zeker dat je dit item wilt verwijderen?',
+ 'delete_confirmation_title' => 'Item verwijderd',
+ 'delete_confirmation_message' => 'Het item is succesvol verwijderd.',
+ 'delete_confirmation_not_title' => 'NIET verwijderd',
+ 'delete_confirmation_not_message' => 'Er is een fout opgetreden. Het item is misschien niet verwijderd.',
+ 'delete_confirmation_not_deleted_title' => 'Niet verwijderd',
+ 'delete_confirmation_not_deleted_message' => 'Er is niks gebeurd. Je item is veilig.',
+
+ // DataTables translation
+ 'emptyTable' => 'Geen data beschikbaar in de tabel',
+ 'info' => 'Toon _START_ tot _END_ van _TOTAL_ items',
+ 'infoEmpty' => 'Toon 0 tot 0 van 0 items',
+ 'infoFiltered' => '(gefilterd van _MAX_ totale items)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ items per pagina',
+ 'loadingRecords' => 'Laden...',
+ 'processing' => 'Verwerken...',
+ 'search' => 'Zoeken: ',
+ 'zeroRecords' => 'Geen overeenkomend item gevonden',
+ 'paginate' => [
+ 'first' => 'Eerste',
+ 'last' => 'Laatste',
+ 'next' => 'Volgende',
+ 'previous' => 'Vorige',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': activeer om kolom oplopend te sorteren',
+ 'sortDescending' => ': activeer om kolom aflopend te sorteren',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Geen toegang - je hebt niet de benodigde rechten om deze pagina te bekijken.',
+ 'please_fix' => 'Los de volgende fouten op:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Het item is succesvol toegevoegd.',
+ 'update_success' => 'Het item is succesvol bewerkt.',
+
+ // CRUD reorder view
+ 'reorder' => 'Rangschik',
+ 'reorder_text' => 'Gebruik drag&drop om te rangschikken.',
+ 'reorder_success_title' => 'Klaar',
+ 'reorder_success_message' => 'De rangschikking is opgeslagen.',
+ 'reorder_error_title' => 'Fout',
+ 'reorder_error_message' => 'De rangschikking is niet opgeslagen.',
+
+ // CRUD yes/no
+ 'yes' => 'Ja',
+ 'no' => 'Nee',
+
+ // Fields
+ 'browse_uploads' => 'Blader uploads',
+ 'select_files' => 'Selecteer bestanden',
+ 'select_file' => 'Selecteer bestand',
+ 'clear' => 'Wissen',
+ 'page_link' => 'Pagina link',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => 'Interne link',
+ 'internal_link_placeholder' => 'Interne slug. B.v.: \'admin/page\' (geen quotes) voor \':url\'',
+ 'external_link' => 'Externe link',
+ 'choose_file' => 'Kies bestand',
+
+ //Table field
+ 'table_cant_add' => 'Kan nieuwe :entity niet toevoegen',
+ 'table_max_reached' => 'Maximale grootte van :max bereikt',
+
+ // File manager
+ 'file_manager' => 'Bestandsbeheer',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Guardar e adicionar item',
+ 'save_action_save_and_edit' => 'Guardar e editar este item',
+ 'save_action_save_and_back' => 'Guardar e voltar',
+ 'save_action_changed_notification' => 'Comportamento predefinido depois de gravar.',
+
+ // Create form
+ 'add' => 'Adicionar',
+ 'back_to_all' => 'Voltar à lista de ',
+ 'cancel' => 'Cancelar',
+ 'add_a_new' => 'Adicionar ',
+
+ // Edit form
+ 'edit' => 'Editar',
+ 'save' => 'Gravar',
+
+ // Revisions
+ 'revisions' => 'Revisões',
+ 'no_revisions' => 'Não foram encontradas revisões',
+ 'created_this' => 'criou este',
+ 'changed_the' => 'alterou este',
+ 'restore_this_value' => 'Restaurou este valor',
+ 'from' => 'de',
+ 'to' => 'para',
+ 'undo' => 'Desfazer',
+ 'revision_restored' => 'Revisão restaurada com sucesso',
+ 'guest_user' => 'Convidado',
+
+ // Translatable models
+ 'edit_translations' => 'EDITAR TRADUÇÕES',
+ 'language' => 'Idioma',
+
+ // CRUD table view
+ 'all' => 'Todos ',
+ 'in_the_database' => 'na base de dados',
+ 'list' => 'Lista',
+ 'actions' => 'Acções',
+ 'preview' => 'Visualizar',
+ 'delete' => 'Apagar',
+ 'admin' => 'Administrar',
+ 'details_row' => 'Isto é a linha de detalhes. Modifique conforme quiser.',
+ 'details_row_loading_error' => 'Houve um erro ao carregar os detalhes. Por favor tente novamente.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Tem a certeza que quer apagar este item?',
+ 'delete_confirmation_title' => 'Item apagado',
+ 'delete_confirmation_message' => 'O item foi apagado com sucesso.',
+ 'delete_confirmation_not_title' => 'Não apagado',
+ 'delete_confirmation_not_message' => 'Ocorreu um erro. O item pode não ter sido apagado.',
+ 'delete_confirmation_not_deleted_title' => 'Não apagado',
+ 'delete_confirmation_not_deleted_message' => 'Está tudo bem! O item não foi apagado.',
+
+ // Bulk actions
+ 'bulk_no_entries_selected_title' => 'Nenhum item seleccionado',
+ 'bulk_no_entries_selected_message' => 'Por favor seleccione um ou mais itens para realizar uma acção em massa aos mesmos.',
+
+ // Bulk confirmation
+ 'bulk_delete_are_you_sure' => 'Tem a certeza que quer apagar estes :number itens?',
+ 'bulk_delete_sucess_title' => 'Itens apagados',
+ 'bulk_delete_sucess_message' => ' itens foram apagados',
+ 'bulk_delete_error_title' => 'Ocorreu um erro ao apagar o item',
+ 'bulk_delete_error_message' => 'Um ou mais itens não puderam ser apagados',
+
+ // Ajax errors
+ 'ajax_error_title' => 'Erro',
+ 'ajax_error_text' => 'Erro ao carregar a página. Por favor actualize a página.',
+
+ // DataTables translation
+ 'emptyTable' => 'Sem dados disponíveis na tabela',
+ 'info' => 'A mostrar _START_ a _END_ de _TOTAL_ itens',
+ 'infoEmpty' => 'A mostrar 0 de 0 itens',
+ 'infoFiltered' => '(filtrado de um total de _MAX_ itens)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ itens por página',
+ 'loadingRecords' => 'A carregar...',
+ 'processing' => 'A processar...',
+ 'search' => 'Procurar: ',
+ 'zeroRecords' => 'Nenhum item encontrado',
+ 'paginate' => [
+ 'first' => 'Primeiro',
+ 'last' => 'Último',
+ 'next' => 'Seguinte',
+ 'previous' => 'Anterior',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': activar para colocar por ordem ascendente',
+ 'sortDescending' => ': activar para colocar por ordem descendente',
+ ],
+ 'export' => [
+ 'export' => 'Exportar',
+ 'copy' => 'Copiar',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Imprimir',
+ 'column_visibility' => 'Colunas visíveis',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Acesso não autorizado - não tem as permissões necessárias para ver esta página.',
+ 'please_fix' => 'Por favor corrija os seguintes erros:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'O item foi adicionado com sucesso.',
+ 'update_success' => 'O item foi modificado com sucesso.',
+
+ // CRUD reorder view
+ 'reorder' => 'Reordenar',
+ 'reorder_text' => 'Use \'arrastar e soltar\' para ordenar.',
+ 'reorder_success_title' => 'Feito',
+ 'reorder_success_message' => 'A ordenação foi gravada.',
+ 'reorder_error_title' => 'Erro',
+ 'reorder_error_message' => 'A ordenação não foi gravada.',
+
+ // CRUD yes/no
+ 'yes' => 'Sim',
+ 'no' => 'Não',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtros',
+ 'toggle_filters' => 'Alternar filtros',
+ 'remove_filters' => 'Remover filtros',
+
+ // Fields
+ 'browse_uploads' => 'Procurar uploads',
+ 'select_all' => 'Seleccionar todos',
+ 'select_files' => 'Seleccionar ficheiros',
+ 'select_file' => 'Seleccionar ficheiro',
+ 'clear' => 'Limpar',
+ 'page_link' => 'Link da página',
+ 'page_link_placeholder' => 'http://example.com/a-sua-pagina',
+ 'internal_link' => 'Link interno',
+ 'internal_link_placeholder' => 'Slug interno. Ex: \'admin/page\' (sem aspas) para \':url\'',
+ 'external_link' => 'Link externo',
+ 'choose_file' => 'Escolher ficheiro',
+
+ //Table field
+ 'table_cant_add' => 'Não foi possível adicionar novo :entity',
+ 'table_max_reached' => 'Limite de :max itens atingido',
+
+ // File manager
+ 'file_manager' => 'Gestor de ficheiros',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Salvar e criar novo item',
+ 'save_action_save_and_edit' => 'Salvar e editar item',
+ 'save_action_save_and_back' => 'Salvar e voltar',
+ 'save_action_changed_notification' => 'Comportamento padrão após salvar foi alterado.',
+
+ // Create form
+ 'add' => 'Adicionar',
+ 'back_to_all' => 'Voltar para todos ',
+ 'cancel' => 'Cancelar',
+ 'add_a_new' => 'Adicionar ',
+
+ // Edit form
+ 'edit' => 'Editar',
+ 'save' => 'Salvar',
+
+ // Revisions
+ 'revisions' => 'Revisões',
+ 'no_revisions' => 'Nenhuma revisão encontrada',
+ 'created_this' => 'criou este',
+ 'changed_the' => 'alterou o',
+ 'restore_this_value' => 'Restaurar esse valor',
+ 'from' => 'de',
+ 'to' => 'para',
+ 'undo' => 'Desfazer',
+ 'revision_restored' => 'Revisão restaurada com sucesso',
+ 'guest_user' => 'Convidado',
+
+ // Translatable models
+ 'edit_translations' => 'EDITAR TRADUÇÕES',
+ 'language' => 'Idioma',
+
+ // CRUD table view
+ 'all' => 'Todos ',
+ 'in_the_database' => 'no banco de dados',
+ 'list' => 'Lista',
+ 'actions' => 'Ações',
+ 'preview' => 'Visualizar',
+ 'delete' => 'Excluir',
+ 'admin' => 'Admin',
+ 'details_row' => 'Esta são os detalhes do registro. Faça as modificações necessárias.',
+ 'details_row_loading_error' => 'Ocorreu um erro durante o carregamento dos detalhes. Por favor, tente novamente.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Tem certeza que deseja excluir este item?',
+ 'delete_confirmation_title' => 'Item excluído',
+ 'delete_confirmation_message' => 'Item excluído com sucesso.',
+ 'delete_confirmation_not_title' => 'Item não excluído',
+ 'delete_confirmation_not_message' => 'Ocorreu um erro. O item pode não ter sido excluído.',
+ 'delete_confirmation_not_deleted_title' => 'Item não excluído',
+ 'delete_confirmation_not_deleted_message' => 'Nada aconteceu. Seu item está seguro.',
+
+ 'ajax_error_title' => 'Erro',
+ 'ajax_error_text' => 'Erro ao carregar. Por favor, atualize a página.',
+
+ // DataTables translation
+ 'emptyTable' => 'Nenhum dado cadastrado na tabela',
+ 'info' => 'Exibindo _START_ a _END_ de _TOTAL_ registros',
+ 'infoEmpty' => 'Exibindo 0 a 0 de 0 registros',
+ 'infoFiltered' => '(filtrados de _MAX_ registros)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ registros por página',
+ 'loadingRecords' => 'Carregando...',
+ 'processing' => 'Processando...',
+ 'search' => 'Pesquisar: ',
+ 'zeroRecords' => 'Nenhum registro encontrado',
+ 'paginate' => [
+ 'first' => 'Primeira',
+ 'last' => 'Última',
+ 'next' => 'Próxima',
+ 'previous' => 'Anterior',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': clique para ordenar de forma ascendente',
+ 'sortDescending' => ': clique para ordenar de forma descendente',
+ ],
+ 'export' => [
+ 'copy' => 'Copiar',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Imprimir',
+ 'column_visibility' => 'Visibilidade da coluna',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Acesso negado - você não possui a permissão necessária para acessar esta página.',
+ 'please_fix' => 'Por favor, corrija os seguintes erros:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Item cadastrado com sucesso.',
+ 'update_success' => 'Item atualizado com sucesso.',
+
+ // CRUD reorder view
+ 'reorder' => 'Reordenar',
+ 'reorder_text' => 'Use arrastar-e-soltar para reordenar.',
+ 'reorder_success_title' => 'Pronto',
+ 'reorder_success_message' => 'Sua ordenação foi salva.',
+ 'reorder_error_title' => 'Erro',
+ 'reorder_error_message' => 'Sua ordenação não foi salva.',
+
+ // CRUD yes/no
+ 'yes' => 'Sim',
+ 'no' => 'Não',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtros',
+ 'toggle_filters' => 'Alternar filtros',
+ 'remove_filters' => 'Remover filtros',
+
+ // Fields
+ 'browse_uploads' => 'Pesquisar uploads',
+ 'clear' => 'Limpar',
+ 'page_link' => 'URL da Página',
+ 'page_link_placeholder' => 'http://exemplo.com',
+ 'internal_link' => 'Link Interno',
+ 'internal_link_placeholder' => 'Endereço interno. Ex: \'admin/pagina\' (sem aspas) para \':url\'',
+ 'external_link' => 'Link Externo',
+ 'choose_file' => 'Escolher arquivo',
+ 'select_all' => 'Selecionar todos',
+ 'select_files' => 'Selecionar todos os arquivos',
+ 'select_file' => 'Selecionar arquivo',
+
+ //Table field
+ 'table_cant_add' => 'Não foi possível adicionar um(a) novo(a) :entity',
+ 'table_max_reached' => 'Limite de :max alcançado',
+
+ // File manager
+ 'file_manager' => 'Gerenciador de Arquivos',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Salvează și adaugă o nouă intrare',
+ 'save_action_save_and_edit' => 'Salvează și editează intrarea',
+ 'save_action_save_and_back' => 'Salvează și mergi la listă',
+ 'save_action_changed_notification' => 'A fost salvată preferința redirecționării după salvare.',
+
+ // Create form
+ 'add' => 'Adaugă',
+ 'back_to_all' => 'Înapoi la ',
+ 'cancel' => 'Anulează',
+ 'add_a_new' => 'Adaugă ',
+
+ // Edit form
+ 'edit' => 'Editează',
+ 'save' => 'Salvează',
+
+ // Revisions
+ 'revisions' => 'Revizii',
+ 'no_revisions' => 'Nici o revizie',
+ 'created_this' => 'a generat înregistrarea',
+ 'changed_the' => 'a schimbat câmpul',
+ 'restore_this_value' => 'restabilește valoare',
+ 'from' => 'valoare veche',
+ 'to' => 'valoare nouă',
+ 'undo' => 'Restabilește valoare anterioară',
+ 'revision_restored' => 'Revizie restaurată cu succes',
+ 'guest_user' => 'Vizitator',
+
+ // Translatable models
+ 'edit_translations' => 'EDITEAZĂ TRADUCERILE',
+ 'language' => 'Limbă',
+
+ // CRUD table view
+ 'all' => 'Toate ',
+ 'in_the_database' => 'din baza de date',
+ 'list' => 'Listă',
+ 'actions' => 'Operațiuni',
+ 'preview' => 'Previzualizare',
+ 'delete' => 'Șterge',
+ 'admin' => 'Administrator',
+ 'details_row' => 'Acesta este rândul detalii. Modifică cum dorești',
+ 'details_row_loading_error' => 'A apărut o eroare la încărcarea detaliilor. Te rog să reîncerci.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Ești sigur că vrei să ștergi această intrare?',
+ 'delete_confirmation_title' => 'Intrare ștearsă',
+ 'delete_confirmation_message' => 'Intrarea a fost ștearsă cu succes.',
+ 'delete_confirmation_not_title' => 'Eroare',
+ 'delete_confirmation_not_message' => 'A avut loc o eroare. E posibil ca intrarea să nu fi fost ștearsă.',
+ 'delete_confirmation_not_deleted_title' => 'Intrarea nu a fost ștearsă',
+ 'delete_confirmation_not_deleted_message' => 'Nu am șters intrarea din baza de date.',
+ 'ajax_error_title' => 'Eroare',
+ 'ajax_error_text' => 'Eroare la încărcarea paginii. Te rog să reîncarci pagina.',
+
+ // DataTables translation
+ 'emptyTable' => 'Nu există intrări în baza de date',
+ 'info' => 'Sunt afișate intrările _START_-_END_ din _TOTAL_',
+ 'infoEmpty' => 'Sunt afișate toate intrarile. Adică niciuna.',
+ 'infoFiltered' => '(filtrate din totalul de _MAX_ )',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ pe pagină',
+ 'loadingRecords' => 'Se încarcă...',
+ 'processing' => 'Se procesează...',
+ 'search' => 'Caută: ',
+ 'zeroRecords' => 'Nu au fost găsite intrări care să se potrivească',
+ 'paginate' => [
+ 'first' => 'Prima pagină',
+ 'last' => 'Ultima pagină',
+ 'next' => 'Pagina următoare',
+ 'previous' => 'Pagina anterioară',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': activează pentru a ordona ascendent coloana',
+ 'sortDescending' => ': activează pentru a ordona descendent coloana',
+ ],
+ 'export' => [
+ 'pdf' => 'PDF',
+ 'print' => 'Imprimă',
+ 'column_visibility' => 'Vizibilitate coloane',
+ 'copy' => 'Copiere',
+ 'excel' => 'Fișier Excel',
+ 'csv' => 'Fișier CSV',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Acces neautorizat - Nu ai permisiunea necesară pentru a accesa pagina.',
+ 'please_fix' => 'Vă rugăm să reparați următoarele erori:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Intrarea a fost adăugată cu succes.',
+ 'update_success' => 'Intrarea a fost modificată cu succes.',
+
+ // CRUD reorder view
+ 'reorder' => 'Reordonare',
+ 'reorder_text' => 'Folosește drag&drop pentru a reordona.',
+ 'reorder_success_title' => 'Terminat',
+ 'reorder_success_message' => 'Ordinea a fost salvată.',
+ 'reorder_error_title' => 'Eroare',
+ 'reorder_error_message' => 'Ordinea nu a fost salvată.',
+
+ // CRUD yes/no
+ 'yes' => 'Da',
+ 'no' => 'Nu',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtre',
+ 'toggle_filters' => 'Comutare filtre',
+ 'remove_filters' => 'Anulează filtre',
+
+ // Fields
+ 'browse_uploads' => 'Alege din fișierele urcate',
+ 'clear' => 'Curăță',
+ 'page_link' => 'Link către pagină',
+ 'page_link_placeholder' => 'http://example.com/pagina-dorita-de-tine',
+ 'internal_link' => 'Link intern',
+ 'internal_link_placeholder' => 'Rută internă. De ex: \'admin/page\' (fără ghilimele) pentru \':url\'',
+ 'external_link' => 'Link extern',
+ 'choose_file' => 'Alege fișier',
+
+ //Table field
+ 'table_cant_add' => 'Nu pot adăuga o nouă :entity',
+ 'table_max_reached' => 'Numărul maxim :max a fost atins',
+
+ // File manager
+ 'file_manager' => 'Manager fișiere',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => 'Сохранить и создать',
+ 'save_action_save_and_edit' => 'Сохранить и продолжить редактирование',
+ 'save_action_save_and_back' => 'Сохранить и выйти',
+ 'save_action_changed_notification' => 'Действие после сохранения было изменено',
+
+ // Create form
+ 'add' => 'Добавить',
+ 'back_to_all' => 'Вернуться к списку',
+ 'cancel' => 'Отменить',
+ 'add_a_new' => 'Добавить новый(ую)',
+
+ // Edit form
+ 'edit' => 'Редактировать',
+ 'save' => 'Сохранить',
+
+ // Revisions
+ 'revisions' => 'Версии',
+ 'no_revisions' => 'Версий не найдено',
+ 'created_this' => 'создал(а) это',
+ 'changed_the' => 'изменил(а)',
+ 'restore_this_value' => 'Восстановить это значение',
+ 'from' => 'с',
+ 'to' => 'по',
+ 'undo' => 'Шаг назад',
+ 'revision_restored' => 'Версия успешно восстановлена',
+
+ // CRUD table view
+ 'all' => 'Все ',
+ 'in_the_database' => 'в базе данных',
+ 'list' => 'Список',
+ 'actions' => 'Действия',
+ 'preview' => 'Предпросмотр',
+ 'delete' => 'Удалить',
+ 'admin' => 'Админ',
+ 'details_row' => 'Это строка сведений. Измените, пожалуйста',
+ 'details_row_loading_error' => 'Произошла ошибка при загрузке сведений. Повторите операцию.',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Вы уверены. что хотите удалить эту запись?',
+ 'delete_confirmation_title' => 'Запись удалена',
+ 'delete_confirmation_message' => 'Запись была успешно удалена',
+ 'delete_confirmation_not_title' => 'НЕ удалено',
+ 'delete_confirmation_not_message' => 'Произошла ошибка. Запись не была удалена',
+ 'delete_confirmation_not_deleted_title' => 'Не удалено',
+ 'delete_confirmation_not_deleted_message' => 'Ничего не произошло. Ваша запись сохранена/',
+
+ // DataTables translation
+ 'emptyTable' => 'В таблице нет доступных данных',
+ 'info' => 'Показано _START_ до _END_ из _TOTAL_ совпадений',
+ 'infoEmpty' => 'Показано 0 до 0 из 0 совпадений',
+ 'infoFiltered' => '(отфильтровано из _MAX_ совпадений)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ записей на странице',
+ 'loadingRecords' => 'Загрузка...',
+ 'processing' => 'Обработка...',
+ 'search' => 'Поиск: ',
+ 'zeroRecords' => 'Совпадений не найдено',
+ 'paginate' => [
+ 'first' => 'Первая',
+ 'last' => 'Последняя',
+ 'next' => 'Следующая',
+ 'previous' => 'Предыдущая',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': нажмите для сортировки по возрастанию',
+ 'sortDescending' => ': нажмите для сортировки по убыванию',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'У Вас нет необходимых прав для просмотра этой страницы.',
+ 'please_fix' => 'Пожалуйста, исправьте следующие ошибки:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Запись была успешно добавлена.',
+ 'update_success' => 'Запись была успешно изменена.',
+
+ // CRUD reorder view
+ 'reorder' => 'Изменить порядок',
+ 'reorder_text' => 'Используйте drag&drop для изменения порядка.',
+ 'reorder_success_title' => 'Готово',
+ 'reorder_success_message' => 'Порядок был сохранен.',
+ 'reorder_error_title' => 'Ошибка',
+ 'reorder_error_message' => 'Порядок не был сохранен.',
+
+ // CRUD yes/no
+ 'yes' => 'Да',
+ 'no' => 'Нет',
+
+ // CRUD filters navbar view
+ 'filters' => 'Фильтры',
+ 'toggle_filters' => 'Переключить фильтры',
+ 'remove_filters' => 'Очистить фильтры',
+
+ // Fields
+ 'browse_uploads' => 'Загрузить файлы',
+ 'clear' => 'Очистить',
+ 'page_link' => 'Ссылка на страницу',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => 'Внутренняя ссылка',
+ 'internal_link_placeholder' => 'Внутренний путь. Например: \'admin/page\' (без кавычек) для \':url\'',
+ 'external_link' => 'Внешняя ссылка',
+ 'choose_file' => 'Выбрать файл',
+
+ //Table field
+ 'table_cant_add' => 'Не удалось добавить новую :entity',
+ 'table_max_reached' => 'Максимальное количество из :max достигнуто',
+
+ // File manager
+ 'file_manager' => 'Файловый менеджер',
+];
--- /dev/null
+<?php
+
+return [
+
+ // Forms
+ 'save_action_save_and_new' => 'Kaydet ve yeni öğe',
+ 'save_action_save_and_edit' => 'Bu öğeyi kaydet ve düzenle',
+ 'save_action_save_and_back' => 'Kaydet ve geri dön.',
+ 'save_action_changed_notification' => 'Kaydedildikten sonra varsayılan davranış değiştirildi.',
+
+ // Create form
+ 'add' => 'Ekle',
+ 'back_to_all' => 'Geri Dön ',
+ 'cancel' => 'İptal',
+ 'add_a_new' => 'Yeni Ekle ',
+
+ // Edit form
+ 'edit' => 'Düzenle',
+ 'save' => 'Kaydet',
+
+ // Revisions
+ 'revisions' => 'Düzeltmeler',
+ 'no_revisions' => 'Düzeltme bulunamadı',
+ 'created_this' => 'bunu oluşturdu',
+ 'changed_the' => 'değişti',
+ 'restore_this_value' => 'Bu değeri geri yükle',
+ 'from' => 'dan',
+ 'to' => 'buraya',
+ 'undo' => 'Geri al',
+ 'revision_restored' => 'Revizyon başarıyla geri yüklendi',
+ 'guest_user' => 'Misafir Kullanıcı',
+
+ // Translatable models
+ 'edit_translations' => 'EDIT TRANSLATIONS',
+ 'language' => 'Language',
+
+ // CRUD table view
+ 'all' => 'Tümü ',
+ 'in_the_database' => 'Veritabanında',
+ 'list' => 'Liste',
+ 'actions' => 'Aksiyonlar',
+ 'preview' => 'Önizleme',
+ 'delete' => 'Sil',
+ 'admin' => 'Admin',
+ 'details_row' => 'Detaylar satırı. İstediğiniz gibi değiştirin.',
+ 'details_row_loading_error' => 'Ayrıntılar yüklenirken bir hata oluştu. Lütfen tekrar deneyiniz.',
+ 'confirm_delete' => 'Evet',
+ 'are_you_sure' => 'Emin misiniz?',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => 'Bu öğeyi silmek istediğinizden emin misiniz?',
+ 'delete_confirmation_title' => 'Öğe Silindi.',
+ 'delete_confirmation_message' => 'Öğe başarıyla silindi.',
+ 'delete_confirmation_not_title' => 'Silinemedi',
+ 'delete_confirmation_not_message' => 'Bir hata oluştu. Öğeniz silinmemiş olabilir.',
+ 'delete_confirmation_not_deleted_title' => 'Silinmedi',
+ 'delete_confirmation_not_deleted_message' => 'Hiçbir şey olmadı. Öğeniz güvende.',
+
+ // Bulk actions
+ 'bulk_no_entries_selected_title' => 'Kayıt seçilmedi',
+ 'bulk_no_entries_selected_message' => 'Lütfen toplu işlem gerçekleştirmek için bir veya daha fazla öğe seçin.',
+
+ // Bulk confirmation
+ 'bulk_delete_are_you_sure' => 'Bunları silmek istediğinizden emin misiniz? :number öğe',
+ 'bulk_delete_sucess_title' => 'Girdiler silindi.',
+ 'bulk_delete_sucess_message' => 'Öğeler silindi',
+ 'bulk_delete_error_title' => 'Silme başarısız',
+ 'bulk_delete_error_message' => 'Bir veya daha fazla öğe silinemedi',
+
+ // Ajax errors
+ 'ajax_error_title' => 'Hata',
+ 'ajax_error_text' => 'Sayfa yüklenirken hata oluştu. Lütfen sayfayı yenileyin.',
+
+ // DataTables translation
+ 'emptyTable' => 'Tabloda veri yok',
+ 'info' => '_START_ ile _END_ arası Toplam _TOTAL_ kayıt',
+ 'infoEmpty' => '0 - 0 arası 0 Kayıt',
+ 'infoFiltered' => '(Toplam _MAX_ kayıt filtrelendi)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '_MENU_ kayıt sayfa başına',
+ 'loadingRecords' => 'Yükleniyor...',
+ 'processing' => 'İşleniyor...',
+ 'search' => 'Arama: ',
+ 'zeroRecords' => 'Hiçbir eşleşen kayıt bulunamadı',
+ 'paginate' => [
+ 'first' => 'İlk',
+ 'last' => 'Son',
+ 'next' => 'Sonraki',
+ 'previous' => 'Önceki',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': artan sütun sıralamak için etkinleştir',
+ 'sortDescending' => ': azalan sütun sıralamak için etkinleştir',
+ ],
+ 'export' => [
+ 'copy' => 'Kopyala',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => 'Yazdır',
+ 'column_visibility' => 'Sütün görünürlüğü',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => 'Yetkisiz erişim - bu sayfayı görmek için gerekli izinlere sahip değilsiniz.',
+ 'please_fix' => 'Lütfen aşağıdaki hataları düzeltin:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => 'Öğe başarıyla eklendi.',
+ 'update_success' => 'Öğe başarıyla değiştirildi.',
+
+ // CRUD reorder view
+ 'reorder' => 'Tekrar Sırala',
+ 'reorder_text' => 'Sürükle&bırak olarak sırala.',
+ 'reorder_success_title' => 'Tamam',
+ 'reorder_success_message' => 'Sıralama kayıt edildi.',
+ 'reorder_error_title' => 'Hata',
+ 'reorder_error_message' => 'Sıralama kayıt edilemedi.',
+
+ // CRUD yes/no
+ 'yes' => 'Evet',
+ 'no' => 'Hayır',
+
+ // CRUD filters navbar view
+ 'filters' => 'Filtreler',
+ 'toggle_filters' => 'Geçiş filtreleri',
+ 'remove_filters' => 'Silme filtreleri',
+
+ // Fields
+ 'browse_uploads' => 'Yüklemelere göz atın',
+ 'select_all' => 'Tümünü seç',
+ 'select_files' => 'Dosyaları seç',
+ 'select_file' => 'Dosya seç',
+ 'clear' => 'Temizle',
+ 'page_link' => 'Sayfa linki',
+ 'page_link_placeholder' => 'https://ornek.com/sayfa',
+ 'internal_link' => 'İç link',
+ 'internal_link_placeholder' => 'İç sayfa slug. Örn: \'admin/sayfa\' (tırnak isareti yok) => \':url\'',
+ 'external_link' => 'Dış link',
+ 'choose_file' => 'Dosya seç',
+
+ //Table field
+ 'table_cant_add' => 'Yeni :entity eklenemez',
+ 'table_max_reached' => 'Maksimum :max kadar',
+
+ // File manager
+ 'file_manager' => 'Dosya yöneticisi',
+
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Forms
+ 'save_action_save_and_new' => '儲存並新增',
+ 'save_action_save_and_edit' => '儲存並繼續編輯',
+ 'save_action_save_and_back' => '儲存並返回',
+ 'save_action_changed_notification' => '儲存後的預設行為已更改。',
+
+ // Create form
+ 'add' => '新增',
+ 'back_to_all' => '回到所有 ',
+ 'cancel' => '取消',
+ 'add_a_new' => '新增一個 ',
+
+ // Edit form
+ 'edit' => '編輯',
+ 'save' => '儲存',
+
+ // Revisions
+ 'revisions' => '修訂版本',
+ 'no_revisions' => '找不到修訂版本',
+ 'created_this' => '建立的',
+ 'changed_the' => '更改了',
+ 'restore_this_value' => '回復這個值',
+ 'from' => '由',
+ 'to' => '到',
+ 'undo' => '回復',
+ 'revision_restored' => '成功回復修訂版本',
+ 'guest_user' => '遊客',
+
+ // Translatable models
+ 'edit_translations' => '編輯譯文',
+ 'language' => '語言',
+
+ // CRUD table view
+ 'all' => '全部 ',
+ 'in_the_database' => '資料庫裡',
+ 'list' => '清單',
+ 'actions' => '動作',
+ 'preview' => '預覽',
+ 'delete' => '剛除',
+ 'admin' => '管理員',
+ 'details_row' => '這是詳情列。你可以在這裡作出編輯。',
+ 'details_row_loading_error' => '當載入詳情時遇到錯誤。請重試。',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => '你確定要刪除這項紀錄嗎?',
+ 'delete_confirmation_title' => '紀錄已被刪除',
+ 'delete_confirmation_message' => '這項紀錄已成功被刪除。',
+ 'delete_confirmation_not_title' => '紀錄未被刪除',
+ 'delete_confirmation_not_message' => '嘗試刪除時發生錯誤。這項紀錄或未被成功刪除。',
+ 'delete_confirmation_not_deleted_title' => '紀錄未被刪除',
+ 'delete_confirmation_not_deleted_message' => '沒有任何事情發生過。你的這項紀錄仍然在此。',
+
+ 'ajax_error_title' => '錯誤',
+ 'ajax_error_text' => '載入頁面錯誤. 請重新整理頁面.',
+
+ // DataTables translation
+ 'emptyTable' => '資料庫中沒有相關紀錄',
+ 'info' => '正在顯示 _TOTAL_ 個紀錄中的 _START_ 至 _END_ 項',
+ 'infoEmpty' => '正在顯示 0 個紀錄中的 0 至 0 項',
+ 'infoFiltered' => '(自 _TOTAL_ 個紀錄中篩選出來的紀錄)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '每頁 _MENU_ 項紀錄',
+ 'loadingRecords' => '載入中...',
+ 'processing' => '處理中...',
+ 'search' => '搜尋: ',
+ 'zeroRecords' => '找不到相關紀錄',
+ 'paginate' => [
+ 'first' => '第一頁',
+ 'last' => '最後一頁',
+ 'next' => '下一頁',
+ 'previous' => '上一頁',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': 以由小至大的方式排列',
+ 'sortDescending' => ': 以由大至小的方式排列',
+ ],
+ 'export' => [
+ 'copy' => '複製',
+ 'excel' => 'Excel',
+ 'csv' => 'CSV',
+ 'pdf' => 'PDF',
+ 'print' => '列印',
+ 'column_visibility' => '顯示欄位',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => '未經授權的存取 - 您沒有權限瀏覽此頁面。',
+ 'please_fix' => '請修正以下的錯誤:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => '這項紀錄已成功被新增。',
+ 'update_success' => '這項紀錄已成功被更新。',
+
+ // CRUD reorder view
+ 'reorder' => '重新排序',
+ 'reorder_text' => '請以拖放 (drag and drop) 的放式重新排序。',
+ 'reorder_success_title' => '完成',
+ 'reorder_success_message' => '你的排序已被儲存。',
+ 'reorder_error_title' => '錯誤',
+ 'reorder_error_message' => '你的排序尚未被儲存。',
+
+ // CRUD yes/no
+ 'yes' => '確定',
+ 'no' => '取消',
+
+ // CRUD filters navbar view
+ 'filters' => '篩選',
+ 'toggle_filters' => '切換篩選',
+ 'remove_filters' => '移除篩選',
+
+ // Fields
+ 'browse_uploads' => '檢視已上傳的檔案',
+ 'select_all' => '選擇全部',
+ 'select_files' => '選擇檔案(多個)',
+ 'select_file' => '選擇檔案(單個)',
+ 'clear' => '清除',
+ 'page_link' => '頁面連結',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => '內部連結',
+ 'internal_link_placeholder' => '內部連結短碼,例如: \'admin/page\' (no quotes) for \':url\'',
+ 'external_link' => '外部連結',
+ 'choose_file' => '選擇檔案',
+
+ //Table field
+ 'table_cant_add' => '不能再增加 :entity',
+ 'table_max_reached' => '已達到 :max 項紀錄的上限',
+
+ // File manager
+ 'file_manager' => '檔案管理',
+];
--- /dev/null
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Backpack Crud Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the CRUD interface.
+ | You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ // Create form
+ 'add' => '新增',
+ 'back_to_all' => '回到所有 ',
+ 'cancel' => '取消',
+ 'add_a_new' => '新增一个 ',
+
+ // Create form - advanced options
+ 'after_saving' => '新增后',
+ 'go_to_the_table_view' => '回到总表',
+ 'let_me_add_another_item' => '新增另一个记录',
+ 'edit_the_new_item' => '编辑这个记录',
+
+ // Edit form
+ 'edit' => '编辑',
+ 'save' => '存储',
+
+ // Revisions
+ 'revisions' => '修顶版本',
+ 'no_revisions' => '找不到修订版本',
+ 'created_this' => '建立的',
+ 'changed_the' => '更改了',
+ 'restore_this_value' => '还原这个值',
+ 'from' => '由',
+ 'to' => '到',
+ 'undo' => '撤销',
+ 'revision_restored' => '成功恢复修订版本',
+
+ // CRUD table view
+ 'all' => '全部 ',
+ 'in_the_database' => '',
+ 'list' => '列表',
+ 'actions' => '操作',
+ 'preview' => '预览',
+ 'delete' => '删除',
+ 'admin' => '管理員',
+ 'details_row' => '这是详情列。你可以在这里做出编辑。',
+ 'details_row_loading_error' => '加载详情时出错。请重试。',
+
+ // Confirmation messages and bubbles
+ 'delete_confirm' => '你确定要删除这条记录吗?',
+ 'delete_confirmation_title' => '记录已被删除',
+ 'delete_confirmation_message' => '这条记录已被成功删除。',
+ 'delete_confirmation_not_title' => '记录未被删除',
+ 'delete_confirmation_not_message' => '尝试删除时发生错误。这项记录或未被成功删除。',
+ 'delete_confirmation_not_deleted_title' => '记录未被删除',
+ 'delete_confirmation_not_deleted_message' => '沒有任何事情发生过。你的这条记录纹丝未动。',
+
+ // DataTables translation
+ 'emptyTable' => '数据库中没有相关记录',
+ 'info' => '正在显示 _TOTAL_ 个记录中的 _START_ 至 _END_ 项',
+ 'infoEmpty' => '正在显示 0 个记录中的 0 至 0 项',
+ 'infoFiltered' => '(自 _TOTAL_ 个记录中筛选出来的记录)',
+ 'infoPostFix' => '',
+ 'thousands' => ',',
+ 'lengthMenu' => '每页 _MENU_ 条记录',
+ 'loadingRecords' => '加载中...',
+ 'processing' => '处理中...',
+ 'search' => '搜索: ',
+ 'zeroRecords' => '找不到相关记录',
+ 'paginate' => [
+ 'first' => '首页',
+ 'last' => '尾页',
+ 'next' => '下一页',
+ 'previous' => '上一页',
+ ],
+ 'aria' => [
+ 'sortAscending' => ': 增序排列',
+ 'sortDescending' => ': 降序排列',
+ ],
+
+ // global crud - errors
+ 'unauthorized_access' => '您沒有权限浏览此页面。',
+ 'please_fix' => '请修正以下错误:',
+
+ // global crud - success / error notification bubbles
+ 'insert_success' => '插入成功。',
+ 'update_success' => '更新成功。',
+
+ // CRUD reorder view
+ 'reorder' => '重新排序',
+ 'reorder_text' => '请以拖放 (drag and drop) 的放式重新排序。',
+ 'reorder_success_title' => '完成',
+ 'reorder_success_message' => '你的排序已被儲存。',
+ 'reorder_error_title' => '错误',
+ 'reorder_error_message' => '你的排序尚未被儲存。',
+
+ // CRUD yes/no
+ 'yes' => 'Yes',
+ 'no' => 'No',
+
+ // Fields
+ 'browse_uploads' => '查看已上传的文档',
+ 'clear' => '清除',
+ 'page_link' => '页面链接',
+ 'page_link_placeholder' => 'http://example.com/your-desired-page',
+ 'internal_link' => '内部链接',
+ 'internal_link_placeholder' => '内部链接,例如: \'admin/page\' (no quotes) for \':url\'',
+ 'external_link' => '外部链接',
+ 'choose_file' => '选择文件',
+
+ //Table field
+ 'table_cant_add' => '不能再增加 :entity',
+ 'table_max_reached' => '已达到 :max 条记录的上限',
+
+];
<!-- This file is used to store sidebar items, starting with Backpack\Base 0.9.0 -->
-<li><a href="{{ backpack_url('dashboard') }}"><i class="fa fa-dashboard"></i> <span>{{ trans('backpack::base.dashboard') }}</span></a></li>
\ No newline at end of file
+<li><a href="{{ backpack_url('dashboard') }}"><i class="fa fa-dashboard"></i> <span>{{ trans('backpack::base.dashboard') }}</span></a></li>
+<li><a href="{{ backpack_url('elfinder') }}"><i class="fa fa-files-o"></i> <span>{{ trans('backpack::crud.file_manager') }}</span></a></li>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>elFinder 2.0 - CKEditor</title>
+
+ <!-- jQuery and jQuery UI (REQUIRED) -->
+ <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+
+ <!-- elFinder CSS (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
+ <!-- <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>"> -->
+ <link rel="stylesheet" type="text/css" href="<?= asset('vendor/backpack/elfinder/elfinder.backpack.theme.css') ?>">
+
+ <!-- elFinder JS (REQUIRED) -->
+ <script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
+
+ <?php if ($locale) {
+ ?>
+ <!-- elFinder translation (OPTIONAL) -->
+ <script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
+ <?php
+} ?>
+
+ <!-- elFinder initialization (REQUIRED) -->
+ <script type="text/javascript" charset="utf-8">
+ // Helper function to get parameters from the query string.
+ function getUrlParam(paramName) {
+ var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i') ;
+ var match = window.location.search.match(reParam) ;
+
+ return (match && match.length > 1) ? match[1] : '' ;
+ }
+
+ $().ready(function() {
+ var funcNum = getUrlParam('CKEditorFuncNum');
+
+ var elf = $('#elfinder').elfinder({
+ // set your elFinder options here
+ resizable: false,
+ <?php if ($locale) {
+ ?>
+ lang: '<?= $locale ?>', // locale
+ <?php
+ } ?>
+ customData: {
+ _token: '<?= csrf_token() ?>'
+ },
+ url: '<?= route('elfinder.connector') ?>', // connector URL
+ getFileCallback : function(file) {
+ window.opener.CKEDITOR.tools.callFunction(funcNum, file.url);
+ window.close();
+ }
+ }).elfinder('instance');
+ });
+ $(window).resize(function(){
+ var h = ($(window).height());
+ if($('#elfinder').height() != h){
+ $('#elfinder').height(h).resize();
+ }
+ });
+ </script>
+</head>
+<body class="elfinder">
+ <!-- Element where elFinder will be created (REQUIRED) -->
+ <div id="elfinder"></div>
+</body>
+</html>
--- /dev/null
+@extends('backpack::layout')
+
+@section('after_scripts')
+ <!-- jQuery and jQuery UI (REQUIRED) -->
+ <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
+ <!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> -->
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+
+ <!-- elFinder CSS (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
+ <!-- <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>"> -->
+ <link rel="stylesheet" type="text/css" href="<?= asset('vendor/backpack/elfinder/elfinder.backpack.theme.css') ?>">
+
+ <!-- elFinder JS (REQUIRED) -->
+ <script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
+
+ <?php if ($locale) { ?>
+ <!-- elFinder translation (OPTIONAL) -->
+ <script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
+ <?php } ?>
+
+ <!-- elFinder initialization (REQUIRED) -->
+ <script type="text/javascript" charset="utf-8">
+ // Documentation for client options:
+ // https://github.com/Studio-42/elFinder/wiki/Client-configuration-options
+ $().ready(function() {
+ $('#elfinder').elfinder({
+ // set your elFinder options here
+ <?php if ($locale) { ?>
+ lang: '<?= $locale ?>', // locale
+ <?php } ?>
+ customData: {
+ _token: '<?= csrf_token() ?>'
+ },
+ url : '<?= route("elfinder.connector") ?>' // connector URL
+ });
+ });
+ </script>
+@endsection
+
+@section('header')
+ <section class="content-header">
+ <h1>
+ {{ trans('backpack::crud.file_manager') }}
+ </h1>
+ <ol class="breadcrumb">
+ <li><a href="{{ url(config('backpack.base.route_prefix')) }}">Admin</a></li>
+ <li class="active">{{ trans('backpack::crud.file_manager') }}</li>
+ </ol>
+ </section>
+@endsection
+
+@section('content')
+
+ <!-- Element where elFinder will be created (REQUIRED) -->
+ <div id="elfinder"></div>
+
+@endsection
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>elFinder 2.0 - File Picker</title>
+
+ <!-- jQuery and jQuery UI (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/smoothness/jquery-ui.css">
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+
+ <!-- elFinder CSS (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
+ <!-- <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>"> -->
+ <link rel="stylesheet" type="text/css" href="<?= asset('vendor/backpack/elfinder/elfinder.backpack.theme.css') ?>">
+
+ <!-- elFinder JS (REQUIRED) -->
+ <script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
+
+ <?php if ($locale) {
+ ?>
+ <!-- elFinder translation (OPTIONAL) -->
+ <script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
+ <?php
+} ?>
+ <!-- Include jQuery, jQuery UI, elFinder (REQUIRED) -->
+
+ <?php
+ $mimeTypes = implode(',', array_map(function ($t) {
+ return "'".$t."'";
+ }, explode(',', $type)));
+ ?>
+
+ <script type="text/javascript">
+ $().ready(function () {
+ var elf = $('#elfinder').elfinder({
+ // set your elFinder options here
+ resizable: false,
+ <?php if ($locale) {
+ ?>
+ lang: '<?= $locale ?>', // locale
+ <?php
+ } ?>
+ customData: {
+ _token: '<?= csrf_token() ?>'
+ },
+ url: '<?= route('elfinder.connector') ?>', // connector URL
+ resizable: false,
+ ui: ['toolbar', 'path','stat'],
+ onlyMimes: [<?= $mimeTypes ?>],
+ rememberLastDir : false,
+ height: 300,
+ defaultView: 'list',
+ getFileCallback: function (file) {
+ window.parent.processSelectedFile(file, '<?= $input_id?>');
+ console.log(file);
+ },
+
+ uiOptions : {
+ // toolbar configuration
+ toolbar : [
+ ['home', 'up'],
+ ['upload'],
+
+ ['quicklook'],
+
+ ],
+ // directories tree options
+ tree : {
+ // expand current root on init
+ openRootOnLoad : true,
+ // auto load current dir parents
+ syncTree : true
+ },
+ // navbar options
+ navbar : {
+ minWidth : 150,
+ maxWidth : 500
+ },
+
+ // current working directory options
+ cwd : {
+ // display parent directory in listing as ".."
+ oldSchool : false
+ }
+ }
+ }).elfinder('instance');
+ });
+ $(window).resize(function(){
+ var h = ($(window).height());
+ if($('#elfinder').height() != h){
+ $('#elfinder').height(h).resize();
+ }
+ });
+ </script>
+
+
+</head>
+<body class="elfinder">
+<!-- Element where elFinder will be created (REQUIRED) -->
+<div id="elfinder"></div>
+
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>elFinder 2.0 - Standalone Popup</title>
+
+ <!-- jQuery and jQuery UI (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/smoothness/jquery-ui.css">
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+
+ <!-- elFinder CSS (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
+ <!-- <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>"> -->
+ <link rel="stylesheet" type="text/css" href="<?= asset('vendor/backpack/elfinder/elfinder.backpack.theme.css') ?>">
+
+ <!-- elFinder JS (REQUIRED) -->
+ <script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
+
+ <?php if ($locale) {
+ ?>
+ <!-- elFinder translation (OPTIONAL) -->
+ <script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
+ <?php
+} ?>
+ <!-- Include jQuery, jQuery UI, elFinder (REQUIRED) -->
+
+ <script type="text/javascript">
+ $().ready(function () {
+ var elf = $('#elfinder').elfinder({
+ // set your elFinder options here
+ <?php if ($locale) {
+ ?>
+ lang: '<?= $locale ?>', // locale
+ <?php
+ } ?>
+ customData: {
+ _token: '<?= csrf_token() ?>'
+ },
+ url: '<?= route('elfinder.connector') ?>', // connector URL
+ dialog: {width: 900, modal: true, title: 'Select a file'},
+ resizable: false,
+ commandsOptions: {
+ getfile: {
+ oncomplete: 'destroy'
+ }
+ },
+ getFileCallback: function (file) {
+ window.parent.processSelectedFile(file.path, '<?= $input_id?>');
+ parent.jQuery.colorbox.close();
+ }
+ }).elfinder('instance');
+ });
+ $(window).resize(function(){
+ var h = ($(window).height());
+ if($('#elfinder').height() != h){
+ $('#elfinder').height(h).resize();
+ }
+ });
+ </script>
+
+
+</head>
+<body class="elfinder">
+<!-- Element where elFinder will be created (REQUIRED) -->
+<div id="elfinder"></div>
+
+</body>
+</html>
--- /dev/null
+
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>elFinder 2.0 - TinyMCE</title>
+
+ <!-- jQuery and jQuery UI (REQUIRED) -->
+ <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+
+ <!-- elFinder CSS (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
+ <!-- <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>"> -->
+ <link rel="stylesheet" type="text/css" href="<?= asset('vendor/backpack/elfinder/elfinder.backpack.theme.css') ?>">
+
+ <!-- elFinder JS (REQUIRED) -->
+ <script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
+
+ <!-- TinyMCE Popup class (REQUIRED) -->
+ <script type="text/javascript" src="<?= asset($dir.'/js/tiny_mce_popup.js') ?>"></script>
+
+ <?php if ($locale) {
+ ?>
+ <!-- elFinder translation (OPTIONAL) -->
+ <script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
+ <?php
+} ?>
+
+
+ <script type="text/javascript">
+ var FileBrowserDialogue = {
+ init: function() {
+ // Here goes your code for setting your custom things onLoad.
+ },
+ mySubmit: function (URL) {
+ var win = tinyMCEPopup.getWindowArg('window');
+
+ // pass selected file path to TinyMCE
+ win.document.getElementById(tinyMCEPopup.getWindowArg('input')).value = URL;
+
+ // are we an image browser?
+ if (typeof(win.ImageDialog) != 'undefined') {
+ // update image dimensions
+ if (win.ImageDialog.getImageData) {
+ win.ImageDialog.getImageData();
+ }
+ // update preview if necessary
+ if (win.ImageDialog.showPreviewImage) {
+ win.ImageDialog.showPreviewImage(URL);
+ }
+ }
+
+ // close popup window
+ tinyMCEPopup.close();
+ }
+ }
+
+ tinyMCEPopup.onInit.add(FileBrowserDialogue.init, FileBrowserDialogue);
+
+ $().ready(function() {
+ var elf = $('#elfinder').elfinder({
+ // set your elFinder options here
+ resizable: false,
+ <?php if ($locale) {
+ ?>
+ lang: '<?= $locale ?>', // locale
+ <?php
+ } ?>
+ customData: {
+ _token: '<?= csrf_token() ?>'
+ },
+ url : '<?= route('elfinder.connector') ?>', // connector URL
+ getFileCallback: function(file) { // editor callback
+ FileBrowserDialogue.mySubmit(file.url); // pass selected file path to TinyMCE
+ }
+ }).elfinder('instance');
+ });
+ $(window).resize(function(){
+ var h = ($(window).height());
+ if($('#elfinder').height() != h){
+ $('#elfinder').height(h).resize();
+ }
+ });
+ </script>
+
+</head>
+<body class="elfinder">
+
+<!-- Element where elFinder will be created (REQUIRED) -->
+<div id="elfinder"></div>
+
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>elFinder 2.0 - TinyMCE4</title>
+
+ <!-- jQuery and jQuery UI (REQUIRED) -->
+ <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+
+ <!-- elFinder CSS (REQUIRED) -->
+ <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/elfinder.min.css') ?>">
+ <!-- <link rel="stylesheet" type="text/css" href="<?= asset($dir.'/css/theme.css') ?>"> -->
+ <link rel="stylesheet" type="text/css" href="<?= asset('vendor/backpack/elfinder/elfinder.backpack.theme.css') ?>">
+
+ <!-- elFinder JS (REQUIRED) -->
+ <script src="<?= asset($dir.'/js/elfinder.min.js') ?>"></script>
+
+ <?php if ($locale) {
+ ?>
+ <!-- elFinder translation (OPTIONAL) -->
+ <script src="<?= asset($dir."/js/i18n/elfinder.$locale.js") ?>"></script>
+ <?php
+} ?>
+
+ <!-- elFinder initialization (REQUIRED) -->
+ <script type="text/javascript">
+ var FileBrowserDialogue = {
+ init: function() {
+ // Here goes your code for setting your custom things onLoad.
+ },
+ mySubmit: function (URL) {
+ // pass selected file path to TinyMCE
+ parent.tinymce.activeEditor.windowManager.getParams().setUrl(URL);
+
+ // close popup window
+ parent.tinymce.activeEditor.windowManager.close();
+ }
+ }
+
+ $().ready(function() {
+ var elf = $('#elfinder').elfinder({
+ // set your elFinder options here
+ resizable: false,
+ <?php if ($locale) {
+ ?>
+ lang: '<?= $locale ?>', // locale
+ <?php
+ } ?>
+ customData: {
+ _token: '<?= csrf_token() ?>'
+ },
+ url: '<?= route('elfinder.connector') ?>', // connector URL
+ getFileCallback: function(file) { // editor callback
+ FileBrowserDialogue.mySubmit(file.url); // pass selected file path to TinyMCE
+ }
+ }).elfinder('instance');
+ });
+ $(window).resize(function(){
+ var h = ($(window).height());
+ if($('#elfinder').height() != h){
+ $('#elfinder').height(h).resize();
+ }
+ });
+ </script>
+</head>
+<body class="elfinder">
+ <!-- Element where elFinder will be created (REQUIRED) -->
+ <div id="elfinder"></div>
+</body>
+</html>