diff --git a/ElFinderConnectorAction.php b/ElFinderConnectorAction.php index 99531a7..781eb36 100644 --- a/ElFinderConnectorAction.php +++ b/ElFinderConnectorAction.php @@ -22,6 +22,9 @@ public function run() { $assetsDir = ElFinderHelper::getAssetsDir(); define('ELFINDER_IMG_PARENT_URL', $assetsDir); + Yii::import('elFindervendor.php.elFinderSession'); + Yii::import('elFindervendor.php.elFinderSessionInterface'); + $php_path = Yii::getPathOfAlias('elFindervendor.php'); require_once($php_path . '/elFinder.class.php'); require_once($php_path . '/elFinderConnector.class.php'); diff --git a/ElFinderHelper.php b/ElFinderHelper.php index 240f0a8..f943ac2 100644 --- a/ElFinderHelper.php +++ b/ElFinderHelper.php @@ -43,6 +43,7 @@ class ElFinderHelper extends CComponent { 'sr', 'sv', 'tr', + 'ug_CN', 'uk', 'vi', 'zh_CN', diff --git a/vendor/.gitignore b/vendor/.gitignore new file mode 100644 index 0000000..a7f4802 --- /dev/null +++ b/vendor/.gitignore @@ -0,0 +1,12 @@ +*~ +._* +_* +.DS_Store +php-old +extensions +build +files2 +elFinderVolumeSVN.class.php +connector-svn.php +node_modules +connector.php diff --git a/vendor/Changelog b/vendor/Changelog index 12a32b3..9f47ce1 100644 --- a/vendor/Changelog +++ b/vendor/Changelog @@ -1,3 +1,99 @@ +2016-04-02 Naoki Sawada + + * elFinder (2.1.10): + - Fixed #1061, #1231 Supported controllable folder icons + - Fixed #1240 LocalFileSystem search files it was still follow symlinks + - Added new volume root option `searchExDirReg` for exclusion serach + - Return file.url in result on file upload for 3rd party uploader + - Supported elFinder API version 1 + - Added a new volume driver FlysystemGoogleDriveNetmount that based on flysystem-google-drive + - Added a new connector plugin "AutoRotate" + - And some minor bug fixes + + +2016-03-11 Naoki Sawada + + * elFinder (2.1.9): + - Fixed enbug of 2.1.6-2.1.7 PHP error undefind valiable/array to string conversion + - The function to make thumbnail supports more image types when Imagick enabled + - Correction of the problem that Archive / Extract function don't work well under some environment + - Added a quicklook plugin that is the Google docs online viewer + - Default is disabled. Set `commandsOptions.quicklook.googleDocsMimes` to enable this plugin. + ```javascript + commandsOptions : { + // "quicklook" command options. + quicklook : { + autoplay : true, + jplayer : 'extensions/jplayer', + // MIME types to use Google Docs online viewer + // Example array value + // ['application/pdf', 'image/tiff', 'application/msword', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'] + googleDocsMimes : [] + } + } + ``` + - And some minor bug fixes + + +2016-03-07 Naoki Sawada + + * elFinder (2.1.8): + - Added a new volume driver `MsSQL` + - Fixed #1226 problem of sort by clicking on cloumn headers + - Fixed #1229 bug of selection after sorting in list view + - Replaceable session handling wrapper (elFinderSessionInterface) + - Added Connector main config `defaultMimefile` () + - update mime.types + - Added LocalFileSystem volume root config `followSymLinks` (defailt true) + - And some minor bug fixes + + +2016-02-21 Naoki Sawada + + * elFinder (2.1.7): + - Added connector main options `commonTempPath` and `maxArcFilesSize` + - Fixed #353 It can download files/folders as an archve file + - Fixed #1195 Supported BMP in GD image resize + - Became possible to cancellation while searching + - Supported API protocol version 2.0 for the legacy connector + - Fixed #1206 Configurable places(favorites) (https://github.com/Studio-42/elFinder/issues/1206) + - Fixed #1211 Remove deprecated method jQueryUI.zIndex() + - Supported jQueryUI 1.12.0 + - Fixed #1213 infinite loop in PHP connector + - Cmd:mkdir to callable "New Folder with Selected items" as "Into New Folder" + - Supported nao-pon/flysystem-google-drive with barryvdh/elfinder-flysystem-driver + - barryvdh/elfinder-flysystem-driver (https://github.com/barryvdh/elfinder-flysystem-driver) + - nao-pon/flysystem-google-drive (https://github.com/nao-pon/flysystem-google-drive) + - UX improvement of in Touch devices + - And some minor bug fixes + + +2015-02-21 Naoki Sawada + + * elFinder (2.0.6): + - Fixed #1213 infinite loop in PHP connector + + +2016-01-19 Naoki Sawada + + * elFinder (2.1.6): + - Fixed #1074 startPath for multi volumes + - Fixed #1172 enbug-fix of rename command + - Fixed #1174 support for multi-instance on the same connector + - Plugin: AutoResize New option `preserveExif` + - Fixed #179 JPEG quality specifiable + - Fixed #1176 auto-sync check with HTTP long polling/inotifywait + - Fixed #1181 case insensitive search problem of LocalFileSystem driver + - Added an autosync button into contextmenu `Reload` + - Added new client configuration `syncStart` + - Search result view optimization + - Adddd new volume root option `searchTimeout` (default 30s) + - Added new crient command `opendir` - opens selected item's parent folder at search result + - Sortable "Places" (your favorites) + - Fixed #1193 open the file at direct URL if possible + - And some minor bug fixes + + 2015-12-26 Naoki Sawada * elFinder (2.1.5): @@ -9,6 +105,12 @@ - And some minor bug fixes +2015-12-26 Naoki Sawada + + * elFinder (2.0.5): + - Fixed problem if filename included character that can't be json encode + + 2015-12-16 Naoki Sawada * elFinder (2.1.4): diff --git a/vendor/README.md b/vendor/README.md index bf9c31b..40d756f 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -1,6 +1,5 @@ elFinder ======== -
       _ ______ _           _           
      | |  ____(_)         | |          
@@ -14,8 +13,14 @@ elFinder is an open-source file manager for web, written in JavaScript using
 jQuery UI. Creation is inspired by simplicity and convenience of Finder program
 used in Mac OS X operating system.
 
+[![Download now!](http://studio-42.github.io/elFinder/images/download-icon.png)](https://github.com/Studio-42/elFinder/releases)
+[![Packagist License](https://poser.pugx.org/studio-42/elfinder/license.png)](http://choosealicense.com/licenses/bsd-3-clause/)
+[![Latest Stable Version](https://poser.pugx.org/studio-42/elfinder/version.png)](https://packagist.org/packages/studio-42/elfinder)
+[![Total Downloads](https://poser.pugx.org/studio-42/elfinder/d/total.png)](https://packagist.org/packages/studio-42/elfinder)
+
 Contents
 --------
+* [Branches](#branches)
 * [Features](#features)
 * [Requirements](#requirements)
 * [Installation](#installation)
@@ -29,6 +34,14 @@ Contents
 * [Authors](#authors)
 * [License](#license)
 
+Branches
+--------
+-  [master](https://github.com/Studio-42/elFinder/tree/master) - Main development branch
+-  [2.1-src](https://github.com/Studio-42/elFinder/tree/2.1-src) - 2.1 development branch, auto build to 2.1 on commit
+-  [2.0-src](https://github.com/Studio-42/elFinder/tree/2.0-src) - 2.0 development branch (Security fix only), auto build to 2.0 on commit
+-  [2.1](https://github.com/Studio-42/elFinder/tree/2.1) - 2.1 nightly build branch
+-  [2.0](https://github.com/Studio-42/elFinder/tree/2.0) - 2.0 nightly build branch
+
 Features
 --------
 **2.0.x**
@@ -58,6 +71,7 @@ Features
 **2.1.x**
  * More High performance server backend and light client UI
  * Connector plugin
+     * [AutoRotate](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/AutoRotate/plugin.php) : Auto rotation on file upload of JPEG file by EXIF Orientation.
      * [AutoResize](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/AutoResize/plugin.php) : Auto resize on file upload.
      * [Normalizer](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/Normalizer/plugin.php) : UTF-8 Normalizer of file-name and file-path etc.
      * [Sanitizer](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/Sanitizer/plugin.php) : Sanitizer of file-name and file-path etc.
@@ -72,6 +86,7 @@ Features
  * Supports custom information in info dialog
  * Configuable columns of list view
  * Supports custom CSS class function of tree view
+ * For more details, see the [Changelog](https://github.com/Studio-42/elFinder/blob/master/Changelog)
 
 Requirements
 ------------
@@ -101,15 +116,18 @@ Installation
  2. Rename `/php/connector.minimal.php-dist` to `/php/connector.minimal.php`
  3. Load `/elfinder.src.html` in your browser to run elFinder
 
+### Installer
+ - [Setup elFinder 2.1.x nightly with Composer](https://github.com/Studio-42/elFinder/tree/gh-pages/tools/installer/setup_with_composer)
+
 Downloads
 ------------
-**Stable releases**
- + [elFinder 2.1.5](https://github.com/Studio-42/elFinder/archive/2.1.5.zip)
- + [elFinder 2.0.5](https://github.com/Studio-42/elFinder/archive/2.0.5.zip)
+**Stable releases** ([Changelog](https://github.com/Studio-42/elFinder/blob/master/Changelog))
+ + [elFinder 2.1.10](https://github.com/Studio-42/elFinder/archive/2.1.10.zip)
+ + [elFinder 2.0.6](https://github.com/Studio-42/elFinder/archive/2.0.6.zip)
 
 **Nightly builds**
- + [elFinder 2.1.x (Nightly)](https://github.com/Studio-42/elFinder/archive/2.1-src.zip)
- + [elFinder 2.0.x (Nightly)](https://github.com/Studio-42/elFinder/archive/2.0-src.zip)
+ + [elFinder 2.1.x (Nightly)](https://github.com/Studio-42/elFinder/archive/2.1.zip)
+ + [elFinder 2.0.x (Nightly)](https://github.com/Studio-42/elFinder/archive/2.0.zip)
 
 Demo sites
 ------------
@@ -186,7 +204,7 @@ License
 elFinder is issued under a 3-clauses BSD license.
 
 
-Copyright (c) 2009-2012, Studio 42
+Copyright (c) 2009-2016, Studio 42
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/vendor/assets/css/elfinder.full.css b/vendor/assets/css/elfinder.full.css
index 037ded3..4e45f8c 100644
--- a/vendor/assets/css/elfinder.full.css
+++ b/vendor/assets/css/elfinder.full.css
@@ -1,9 +1,9 @@
 /*!
  * elFinder - file manager for web
- * Version 2.1.5 (2015-12-26)
+ * Version 2.1.10 (2.1-src Nightly: a102376) (2016-04-02)
  * http://elfinder.org
  * 
- * Copyright 2009-2015, Studio 42
+ * Copyright 2009-2016, Studio 42
  * Licensed under a 3 clauses BSD license
  */
 
@@ -164,7 +164,11 @@
 .elfinder-resize-rotate-slider {
 	float: left;
 	width: 195px;
-	margin: 7px 7px 0;
+	margin: 7px;
+}
+
+.elfinder-resize-type span.ui-checkboxradio-icon {
+	display: none;
 }
 
 /********************** COMMAND "EDIT" ****************************/
@@ -284,7 +288,28 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 /*********************************************/
 
 /* common container */
-.elfinder { padding:0; position:relative; display:block; }
+.elfinder {
+	padding: 0;
+	position:relative;
+	display:block;
+	font-size: 18px;
+	font-family: Verdana,Arial,Helvetica,sans-serif;
+}
+
+/* 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; }
@@ -378,9 +403,12 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 /* icon in drag helper */
 .elfinder-drag-helper .elfinder-cwd-icon { margin:0 0 0 -24px; float:left; }
 
-/* transparent overlay >_< */
-/*.elfinder-overlay { opacity: 0; filter:Alpha(Opacity=0); }*/
-.elfinder-overlay { position: absolute; }
+/* transparent overlay */
+.elfinder-overlay {
+	position: absolute;
+	opacity: .2;
+	filter: Alpha(Opacity=20);
+}
 
 /* panels under/below cwd (for search field etc) */
 .elfinder .elfinder-panel {
@@ -414,6 +442,17 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 .elfinder-contextmenu-rtl .elfinder-contextmenu-sub { margin-right:-5px; }
 
 /* menu item */
+.elfinder-contextmenu-header {
+	margin-top: -4px;
+	padding: 0 .5em .2ex;
+	border: none;
+	text-align: center;
+}
+.elfinder-contextmenu-header span {
+	font-weight: normal;
+	font-size: 0.8em;
+	font-weight: bolder;
+}
 .elfinder-contextmenu-item {
 	position:relative;
 	display:block;
@@ -473,8 +512,9 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow { right:5px; }
 .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow { left:5px; background-position: 0 -10px; }
 
-/* command extra icon's  tag */
-.elfinder-contextmenu-extra-icon a {
+/* command extra icon's ,  tag */
+.elfinder-contextmenu-extra-icon a, 
+.elfinder-contextmenu-extra-icon span {
 	display: inline-block;
 	width: 100%;
 	height: 100%;
@@ -482,6 +522,7 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 	margin: 0;
 	color: transparent !important;
 	text-decoration: none;
+	cursor: pointer;
 }
 
 /* disable ui border/bg image on hover */
@@ -516,16 +557,6 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 	margin:0;
 	-ms-touch-action: auto;
 	touch-action: auto;
-	-moz-user-select: -moz-none;
-	-khtml-user-select: none;
-	-webkit-user-select: none;
-	user-select: none;
-	-webkit-tap-highlight-color:rgba(0,0,0,0);
-	-webkit-touch-callout:none;
-	user-select:          none;
-	-webkit-user-select:  none;
-	-moz-user-select:     none;
-	-khtml-user-select:   none;
 }
 
 /* container active on dropenter */
@@ -534,6 +565,21 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 	outline-offset: -2px;
 }
 
+.elfinder-cwd-wrapper-empty .elfinder-cwd:after {
+	display: block;
+	position: absolute;
+	top: 40%;
+	left: 0;
+	right: 0;
+	margin-top: -2em;
+	line-height: 1.5em;
+	text-align: center;
+	white-space: pre-wrap;
+	opacity: 0.6;
+	filter: Alpha(Opacity=60);
+	font-weight: bold;
+}
+
 
 /************************** ICONS VIEW ********************************/
 
@@ -566,18 +612,24 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 
 /* file name place */
 .elfinder-cwd-view-icons .elfinder-cwd-filename {
-	text-align:center;
-	max-height:32px;
-	white-space:pre-wrap;
-	word-break:normal;
-	overflow:hidden;
-	text-overflow:ellipsis;
-    -o-text-overflow:ellipsis;
-	margin:3px 1px 0 1px;
-	padding:1px;
+	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 */
@@ -599,6 +651,10 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 
 /* "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; }
@@ -768,11 +824,15 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 /* premissions/symlink marker */
 .elfinder-cwd-view-list .elfinder-perms, 
 .elfinder-cwd-view-list .elfinder-lock,
-.elfinder-cwd-view-list .elfinder-symlink { top:50%; margin-top:-6px; }
+.elfinder-cwd-view-list .elfinder-symlink {
+	margin-top:-6px;
+	opacity: .6;
+	filter:Alpha(Opacity=60);
+}
 /* markers in ltr/rtl enviroment */
-.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms   { left:7px;  }
-.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock    { left:9px; top:0px; }
-.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink { left:-7px; }
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms   { left:8px; bottom:-4px; }
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock    { left:10px; top:0px; }
+.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink { left:-7px; bottom:-4px; }
 
 /* file icon */
 .elfinder-cwd-view-list td .elfinder-cwd-icon {
@@ -787,8 +847,6 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 .elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon { left:0;  }
 .elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon { right:0; }
 
-
-
 /* File: /css/dialog.css */
 /*********************************************/
 /*                DIALOGS STYLES             */
@@ -827,15 +885,24 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 .std42-dialog .ui-dialog-content {
 	padding:.3em .5em;
 }
+.std42-dialog .ui-dialog-content,
+.std42-dialog .ui-dialog-content * {
+	-webkit-user-select:  auto !important;
+	-moz-user-select:     text !important;
+	-khtml-user-select:   text !important;
+	user-select:          text !important;
+}
 
 /* buttons */
 .std42-dialog .ui-dialog-buttonpane {
-	border:0 solid;
-	margin:0;
-	padding:.5em .7em;
+	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:0 0 0 .4em;	padding:0; outline:0px solid; }
+.std42-dialog .ui-dialog-buttonpane button { margin:.7em 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; }
 
@@ -925,6 +992,7 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 .elfinder-dialog-icon-download    { background-position: 0 -260px; }
 .elfinder-dialog-icon-save        { background-position: 0 -295px; }
 .elfinder-dialog-icon-rename      { 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; }
@@ -938,11 +1006,16 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 
 /*********************** CONFIRM DIALOG **************************/
 
-.elfinder-dialog-confirm-applyall {	padding-top:3px; }
+.elfinder-dialog-confirm-applyall {
+	padding: 0 1em;
+	margin: 0;
+}
+.elfinder-ltr .elfinder-dialog-confirm-applyall { text-align: left; }
+.elfinder-rtl .elfinder-dialog-confirm-applyall { text-align: right; }
 
 .elfinder-dialog-confirm .elfinder-dialog-icon { background-position:0 -32px; }
 
-
+.elfinder-dialog-confirm .ui-dialog-buttonset { width: auto; }
 
 /*********************** FILE INFO DIALOG **************************/
 
@@ -984,7 +1057,15 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 }
 
 .elfinder-netmount-tb { margin:0 auto; }
+.elfinder-netmount-tb select,
 .elfinder-netmount-tb input { border:1px solid #ccc; }
+.elfinder-netmount-tb .elfinder-button-icon { cursor: pointer; }
+
+button.elfinder-info-button {
+	margin: -3.5px 0;
+	cursor: pointer;
+}
+
 /*********************** UPLOAD DIALOG **************************/
 
 .elfinder-upload-dropbox {
@@ -1116,17 +1197,6 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 	overflow:auto;
 	display:none;
 	position:relative;
-	-moz-user-select: none;
-	-khtml-user-select: none;
-	-webkit-user-select: none;
-	user-select: none;
-	-webkit-tap-highlight-color:rgba(0,0,0,0);
-/*	border:1px solid #111;*/
-	-webkit-touch-callout:none;
-	user-select:          none;
-	-webkit-user-select:  none;
-	-moz-user-select:     none;
-	-khtml-user-select:   none;
 }
 
 
@@ -1213,6 +1283,7 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 .elfinder-tree .elfinder-navbar-root-ftp     .elfinder-navbar-icon { background-image:url("../img/volume_icon_ftp.png"); }
 .elfinder-tree .elfinder-navbar-root-sql     .elfinder-navbar-icon { background-image:url("../img/volume_icon_sql.png"); }
 .elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon { background-image:url("../img/volume_icon_dropbox.png"); }
+.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon { background-image:url("../img/volume_icon_googledrive.png"); }
 
 /* icon in active/hove/dropactive state */
 .ui-state-active           .elfinder-navbar-icon, 
@@ -1241,17 +1312,22 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 .elfinder-ltr .elfinder-navbar-spinner { left:0;  margin-left:-2px; }
 .elfinder-rtl .elfinder-navbar-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 { top:50%; margin-top:-8px; }
+.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:  18px; }
-.elfinder-rtl .elfinder-navbar .elfinder-perms   { right: 18px; }
-.elfinder-ltr .elfinder-navbar .elfinder-lock    { left:  18px; }
-.elfinder-rtl .elfinder-navbar .elfinder-lock    { right: 18px; }
+.elfinder-ltr .elfinder-navbar .elfinder-perms   { left:  20px; }
+.elfinder-rtl .elfinder-navbar .elfinder-perms   { right: 20px; }
+.elfinder-ltr .elfinder-navbar .elfinder-lock    { left:  20px; }
+.elfinder-rtl .elfinder-navbar .elfinder-lock    { right: 20px; }
 .elfinder-ltr .elfinder-navbar .elfinder-symlink { left:  8px; }
 .elfinder-rtl .elfinder-navbar .elfinder-symlink { right: 8px; }
 
@@ -1277,12 +1353,32 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 }
 
 
-
-
-
-
-
 /* 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;
+	display: none;
+}
+.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 */
@@ -1322,6 +1418,10 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
 /* hide preview border in fullscreen mode */
 .elfinder-quicklook-fullscreen .elfinder-quicklook-preview { border:0 solid ;}
 
+.elfinder-quicklook-fullscreen iframe {
+	height: 99%;
+}
+
 /* quicklook titlebar */
 .elfinder-quicklook-titlebar {
 	text-align:center;
@@ -1503,7 +1603,8 @@ pre.elfinder-quicklook-preview-text {
 
 /* html/pdf preview */
 .elfinder-quicklook-preview-html,
-.elfinder-quicklook-preview-pdf {
+.elfinder-quicklook-preview-pdf,
+.elfinder-quicklook-preview-iframe {
 	width:100%;
 	height:100%;
 	background:#fff;
@@ -1565,12 +1666,6 @@ embed.elfinder-quicklook-preview-audio {
 	border-right:0 solid transparent;
 	border-bottom:0 solid transparent;
 	border-left:0 solid transparent;
-	
-	-webkit-touch-callout:none;
-	user-select:          none;
-	-webkit-user-select:  none;
-	-moz-user-select:     none;
-	-khtml-user-select:   none;
 }
 
 .elfinder-statusbar a { text-decoration:none; }
@@ -1686,6 +1781,7 @@ embed.elfinder-quicklook-preview-audio {
 .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-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; }
@@ -1717,6 +1813,8 @@ embed.elfinder-quicklook-preview-audio {
 .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-opendir   { background-position: 0  -32px; }
 
 /* button with dropdown menu*/
 .elfinder .elfinder-menubutton { overflow:visible; }
@@ -1828,6 +1926,9 @@ embed.elfinder-quicklook-preview-audio {
 	opacity: .6; 
 	filter:Alpha(Opacity=60);
 }
+.elfinder-button-search .ui-checkboxradio-icon {
+	display: none;
+}
 
 /* search/close icons */
 .elfinder-ltr .elfinder-button-search .ui-icon-search { left:0;}
diff --git a/vendor/assets/css/elfinder.min.css b/vendor/assets/css/elfinder.min.css
index d7eefbd..ace7a17 100644
--- a/vendor/assets/css/elfinder.min.css
+++ b/vendor/assets/css/elfinder.min.css
@@ -1,9 +1,9 @@
 /*!
  * elFinder - file manager for web
- * Version 2.1.5 (2015-12-26)
+ * Version 2.1.10 (2.1-src Nightly: a102376) (2016-04-02)
  * http://elfinder.org
  * 
- * Copyright 2009-2015, Studio 42
+ * Copyright 2009-2016, Studio 42
  * Licensed under a 3 clauses BSD license
  */
-.elfinder-dialog-resize{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{padding-top:3em}.elfinder-resize-control input[type=text]{border:1px solid #aaa;text-align:right}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:auto}.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:0 0}.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-resize-spinner{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:7px;position:relative}.elfinder-resize-label{float:left;width:80px;padding-top:3px}.elfinder-resize-reset{width:16px;height:16px;position:absolute;margin-top:-8px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e{height:100%;width:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-se{background:0 0;bottom:0;right:0;margin-right:-7px;margin-bottom:-7px}.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-resize-row .elfinder-buttonset{float:right}.elfinder-resize-rotate-slider{float:left;width:195px;margin:7px 7px 0}.elfinder-file-edit{width:99%;height:99%;margin:0;padding:2px;border:1px solid #ccc}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:.4em;left:0;right:0;margin:auto 0 auto auto}.elfinder-help{margin-bottom:.5em}.elfinder-help .ui-tabs-panel{padding:.5em}.elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.2em 1em}.elfinder-help-shortcuts{height:300px;padding:1em;margin:.5em 0;overflow:auto}.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{padding:2px}.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: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}.elfinder{padding:0;position:relative;display:block}.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;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-lock{background-position:0 -656px}.elfinder-drag-helper{width:70px;height:60px;padding:0 0 0 25px;z-index:100000}.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{position:absolute;top:0;left:0;width:16px;height:14px;text-align:center;padding-top:2px;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}.elfinder .elfinder-panel{position:relative;background-image:none;padding:7px 12px}[draggable=true]{-khtml-user-drag:element}.elfinder-contextmenu,.elfinder-contextmenu-sub{display:none;position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0}.elfinder-contextmenu-sub{top:5px}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-contextmenu-item.elfinder-touch{padding:12px 30px}.elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-right:12px}.elfinder-contextmenu-extra-icon,.elfinder-contextmenu-arrow,.elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px;overflow:hidden}.elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder-contextmenu-rtl .elfinder-contextmenu-icon,.elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon{right:8px}.elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon{left:8px}.elfinder-contextmenu-arrow{width:16px;height:16px;background:url('../img/arrows-normal.png') 5px 4px no-repeat}.elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder-contextmenu-extra-icon a{display:inline-block;width:100%;height:100%;padding:20px;margin:0;color:transparent!important;text-decoration:none}.elfinder-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder-cwd-wrapper{overflow:auto;position:relative;padding:2px;margin:0}.elfinder-cwd-wrapper-list{padding:0}.elfinder-cwd{position:relative;cursor:default;padding:0;margin:0;-ms-touch-action:auto;touch-action:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-touch-callout:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none}.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:80px;padding-bottom:2px;cursor:default;border:none}.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file{float:left;margin:0 3px 12px 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-view-icons .elfinder-cwd-filename{text-align:center;max-height:32px;white-space:pre-wrap;word-break:normal;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}.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:url('../img/icons-big.png') 0 0 no-repeat;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon{background-position:0 -100px}.elfinder-cwd-icon-directory{background-position:0 -50px}.elfinder-cwd-icon-application{background-position:0 -150px}.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-text{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-postscript{background-position:0 -250px}.elfinder-cwd-icon-audio{background-position:0 -300px}.elfinder-cwd-icon-video,.elfinder-cwd-icon-flash-video{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtfd{background-position:0 -401px}.elfinder-cwd-icon-pdf{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-msword,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-office,.elfinder-cwd-icon-vnd-ms-powerpoint,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,.elfinder-cwd-icon-vnd-oasis-opendocument-chart,.elfinder-cwd-icon-vnd-oasis-opendocument-database,.elfinder-cwd-icon-vnd-oasis-opendocument-formula,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,.elfinder-cwd-icon-vnd-oasis-opendocument-image,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,.elfinder-cwd-icon-vnd-openofficeorg-extension,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template{background-position:0 -500px}.elfinder-cwd-icon-html{background-position:0 -550px}.elfinder-cwd-icon-css{background-position:0 -600px}.elfinder-cwd-icon-javascript,.elfinder-cwd-icon-x-javascript{background-position:0 -650px}.elfinder-cwd-icon-x-perl{background-position:0 -700px}.elfinder-cwd-icon-x-python{background-position:0 -750px}.elfinder-cwd-icon-x-ruby{background-position:0 -800px}.elfinder-cwd-icon-x-sh,.elfinder-cwd-icon-x-shellscript{background-position:0 -850px}.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{background-position:0 -950px}.elfinder-cwd-icon-xml{background-position:0 -1000px}.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,.elfinder-cwd-icon-x-tar{background-position:0 -1100px}.elfinder-cwd-icon-x-bzip,.elfinder-cwd-icon-x-bzip2{background-position:0 -1150px}.elfinder-cwd-icon-x-rar,.elfinder-cwd-icon-x-rar-compressed{background-position:0 -1200px}.elfinder-cwd-icon-x-shockwave-flash{background-position:0 -1250px}.elfinder-cwd-icon-group{background-position:0 -1300px}.elfinder-cwd input{width:100%;border:0 solid;margin:0;padding:0}.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-view-icons{text-align:center}.elfinder-cwd table{width:100%;border-collapse:separate;border:0 solid;margin:0 0 10px;border-spacing:0;box-sizing:padding-box;padding:2px}.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 .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 td div{box-sizing:content-box}.elfinder .elfinder-cwd tr.elfinder-touch td{padding:10px 12px}.elfinder .elfinder-cwd tr.elfinder-cwd-file.elfinder-touch 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}.elfinder-cwd-view-list .elfinder-cwd-file-wrapper{width:97%;position:relative}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-left:23px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-right:23px}.elfinder-cwd-view-list .elfinder-perms,.elfinder-cwd-view-list .elfinder-lock,.elfinder-cwd-view-list .elfinder-symlink{top:50%;margin-top:-6px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms{left:7px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock{left:9px;top:0}.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink{left:-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}.std42-dialog{padding:0;position:absolute;left:auto;right:auto}.std42-dialog .ui-dialog-titlebar{border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;font-weight:400;padding:.2em 1em}.std42-dialog .ui-dialog-titlebar-close,.std42-dialog .ui-dialog-titlebar-close:hover{padding:1px}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar{text-align:right}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close{right:auto;left:.3em}.std42-dialog .ui-dialog-content{padding:.3em .5em}.std42-dialog .ui-dialog-buttonpane{border:0 solid;margin:0;padding:.5em .7em}.std42-dialog .ui-dialog-buttonpane button{margin:0 0 0 .4em;padding:0;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}.elfinder-dialog-icon{position:absolute;width:32px;height:32px;left:12px;top:50%;margin-top:-15px;background:url("../img/dialogs.png") 0 0 no-repeat}.elfinder-rtl .elfinder-dialog-icon{left:auto;right:12px}.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-notify .ui-dialog-titlebar-close{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:30px}.elfinder-rtl .elfinder-notify{padding-right:30px}.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-progressbar,.elfinder-notify-progress{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.elfinder-dialog-icon-open,.elfinder-dialog-icon-readdir,.elfinder-dialog-icon-file,.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,.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{background-position:0 -330px}.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-dim{background-position:0 -434px}.elfinder-dialog-confirm-applyall{padding-top:3px}.elfinder-dialog-confirm .elfinder-dialog-icon{background-position:0 -32px}.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}.elfinder-info-tb{min-width:200px;border:0 solid;margin:1em .2em}.elfinder-info-tb td{white-space:nowrap;padding:2px}.elfinder-info-tb tr td:first-child{text-align:right}.elfinder-info-tb span{float:left}.elfinder-info-tb a{outline:none;text-decoration:underline}.elfinder-info-tb a:hover{text-decoration:none}.elfinder-info-spinner{width:14px;height:14px;float:left;background:url("../img/spinner-mini.gif") center center no-repeat;margin:0 5px}.elfinder-netmount-tb{margin:0 auto}.elfinder-netmount-tb input{border:1px solid #ccc}.elfinder-upload-dropbox{text-align:center;padding:2em 0;border:3px dashed #aaa;height:1em;overflow:hidden}.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;opacity:0;filter:Alpha(Opacity=0)}.elfinder-upload-dialog-wrapper .ui-button form input{padding:0 20px;font-size:3em}.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-rtl .elfinder-rm-title .elfinder-cwd-icon{float:right;margin-right:0;margin-left:1em}.elfinder-rm-title strong{display:block;white-space:pre-wrap;word-break:normal;overflow:hidden;text-overflow:ellipsis}.elfinder-rm-title+br{display:none}.elfinder-contextmenu .elfinder-contextmenu-item span{font-size:.76em}.elfinder-cwd-view-icons .elfinder-cwd-filename,.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,.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}.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 .elfinder-navbar{width:230px;padding:3px 5px;background-image:none;border-top:0 solid;border-bottom:0 solid;overflow:auto;display:none;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-touch-callout:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none}.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}.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-navbar-dir.elfinder-touch{padding:12px}.elfinder-ltr .elfinder-navbar-dir{padding-left:35px}.elfinder-rtl .elfinder-navbar-dir{padding-right:35px}.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}.ui-state-active .elfinder-navbar-arrow{background-image:url("../img/arrows-active.png")}.elfinder-navbar-collapsed .elfinder-navbar-arrow{display:block}.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 4px;left:0}.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 -10px;right:0}.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;position:absolute;top:50%;margin-top:-8px;background-image:url("../img/toolbar.png");background-repeat:no-repeat;background-position:0 -16px}.elfinder-ltr .elfinder-navbar-icon{left:14px}.elfinder-rtl .elfinder-navbar-icon{right:14px}.elfinder-tree .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 0}.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 -704px}.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon{background-image:url("../img/volume_icon_local.png")}.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon{background-image:url("../img/volume_icon_ftp.png")}.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon{background-image:url("../img/volume_icon_sql.png")}.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon{background-image:url("../img/volume_icon_dropbox.png")}.ui-state-active .elfinder-navbar-icon,.elfinder-droppable-active .elfinder-navbar-icon,.ui-state-hover .elfinder-navbar-icon{background-position:0 -32px}.elfinder-navbar-subtree{display:none}.elfinder-ltr .elfinder-navbar-subtree{margin-left:12px}.elfinder-rtl .elfinder-navbar-subtree{margin-right:12px}.elfinder-navbar-spinner{width:14px;height:14px;position:absolute;display:block;top:50%;margin-top:-7px;background:url("../img/spinner-mini.gif") center center no-repeat}.elfinder-ltr .elfinder-navbar-spinner{left:0;margin-left:-2px}.elfinder-rtl .elfinder-navbar-spinner{right:0;margin-right:-2px}.elfinder-navbar .elfinder-perms{top:50%;margin-top:-8px}.elfinder-navbar .elfinder-lock{top:-2px}.elfinder-ltr .elfinder-navbar .elfinder-perms{left:18px}.elfinder-rtl .elfinder-navbar .elfinder-perms{right:18px}.elfinder-ltr .elfinder-navbar .elfinder-lock{left:18px}.elfinder-rtl .elfinder-navbar .elfinder-lock{right:18px}.elfinder-ltr .elfinder-navbar .elfinder-symlink{left:8px}.elfinder-rtl .elfinder-navbar .elfinder-symlink{right:8px}.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-places{border:none;margin:0;padding:0}.elfinder-quicklook{position:absolute;background:url("../img/quicklook-bg.png");display:none;overflow:hidden;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;padding:20px 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-fullscreen{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-background-clip:padding-box;padding:0;background:#000;z-index:90000;display:block}.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar{display:none}.elfinder-quicklook-fullscreen .elfinder-quicklook-preview{border:0 solid}.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;cursor:move}.elfinder-quicklook-title{color:#fff;white-space:nowrap;overflow:hidden;padding:2px 0}.elfinder-quicklook-titlebar .ui-icon{position:absolute;left:4px;top:50%;margin-top:-8px;width:16px;height:16px;cursor:default}.elfinder-quicklook-preview{overflow:hidden;position:relative;border:0 solid;border-left:1px solid transparent;border-right:1px solid transparent;height:100%}.elfinder-quicklook-info-wrapper{position:absolute;width:100%;left:0;top:50%;margin-top:-50px}.elfinder-quicklook-info{padding:0 12px 0 112px}.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child{color:#fff;font-weight:700;padding-bottom:.5em}.elfinder-quicklook-info-data{padding-bottom:.2em;color:#fff}.elfinder-quicklook .elfinder-cwd-icon{position:absolute;left:32px;top:50%;margin-top:-20px}.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}.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-text-wrapper{width:100%;height:100%;background:#fff;color:#222;overflow:auto}pre.elfinder-quicklook-preview-text{margin:0;padding:3px 9px}.elfinder-quicklook-preview-html,.elfinder-quicklook-preview-pdf{width:100%;height:100%;background:#fff;border:0 solid;margin:0}.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-statusbar{text-align:center;font-weight:400;padding:.2em .5em;border-right:0 solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none}.elfinder-statusbar a{text-decoration:none}.elfinder-path{max-width:30%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.elfinder-ltr .elfinder-path{float:left}.elfinder-rtl .elfinder-path{float:right}.elfinder-stat-size{white-space:nowrap}.elfinder-ltr .elfinder-stat-size{float:right}.elfinder-rtl .elfinder-stat-size{float:left}.elfinder-stat-selected{white-space:nowrap;overflow:hidden}.elfinder-toolbar{padding:4px 0 3px;border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent}.elfinder-buttonset{margin:1px 4px;float:left;background:0 0;padding:0;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.elfinder .elfinder-button{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}.elfinder .ui-icon-search{cursor:pointer}.elfinder-button:first-child{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.elfinder-button:last-child{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.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 .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:block;background:url('../img/toolbar.png') no-repeat}.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-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 -224px}.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 .elfinder-menubutton{overflow:visible}.elfinder-button-icon-spinner{background:url("../img/spinner-mini.gif") center center no-repeat}.elfinder-button-menu{position:absolute;left:0;top:25px;padding:3px 0}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.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-n,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-s{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;float:right;width:202px;overflow:visible}.elfinder .elfinder-button-search .elfinder-button-menu{font-size:8pt;text-align:center;width:100%}.elfinder .elfinder-button-search .elfinder-button-menu div{margin-left:auto;margin-right:auto;margin-bottom:5px}.elfinder .elfinder-button-search .elfinder-button-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-button-search input{width:160px;height:22px;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-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-9px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-rtl .elfinder-button-search .ui-icon-search,.elfinder-ltr .elfinder-button-search .ui-icon-close{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0}
\ No newline at end of file
+.elfinder-dialog-resize{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{padding-top:3em}.elfinder-resize-control input[type=text]{border:1px solid #aaa;text-align:right}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:auto}.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:0 0}.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-resize-spinner{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:7px;position:relative}.elfinder-resize-label{float:left;width:80px;padding-top:3px}.elfinder-resize-reset{width:16px;height:16px;position:absolute;margin-top:-8px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e{height:100%;width:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-se{background:0 0;bottom:0;right:0;margin-right:-7px;margin-bottom:-7px}.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-resize-row .elfinder-buttonset{float:right}.elfinder-resize-rotate-slider{float:left;width:195px;margin:7px}.elfinder-resize-type span.ui-checkboxradio-icon{display:none}.elfinder-file-edit{width:99%;height:99%;margin:0;padding:2px;border:1px solid #ccc}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:.4em;left:0;right:0;margin:auto 0 auto auto}.elfinder-help{margin-bottom:.5em}.elfinder-help .ui-tabs-panel{padding:.5em}.elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.2em 1em}.elfinder-help-shortcuts{height:300px;padding:1em;margin:.5em 0;overflow:auto}.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{padding:2px}.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: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}.elfinder{padding:0;position:relative;display:block;font-size:18px;font-family:Verdana,Arial,Helvetica,sans-serif}.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;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-lock{background-position:0 -656px}.elfinder-drag-helper{width:70px;height:60px;padding:0 0 0 25px;z-index:100000}.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{position:absolute;top:0;left:0;width:16px;height:14px;text-align:center;padding-top:2px;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-contextmenu,.elfinder-contextmenu-sub{display:none;position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0}.elfinder-contextmenu-sub{top:5px}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder-contextmenu-header{margin-top:-4px;padding:0 .5em .2ex;border:none;text-align:center}.elfinder-contextmenu-header span{font-weight:400;font-size:.8em;font-weight:bolder}.elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-contextmenu-item.elfinder-touch{padding:12px 30px}.elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-right:12px}.elfinder-contextmenu-extra-icon,.elfinder-contextmenu-arrow,.elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px;overflow:hidden}.elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder-contextmenu-rtl .elfinder-contextmenu-icon,.elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon{right:8px}.elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon{left:8px}.elfinder-contextmenu-arrow{width:16px;height:16px;background:url('../img/arrows-normal.png') 5px 4px no-repeat}.elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder-contextmenu-extra-icon a,.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-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder-cwd-wrapper{overflow:auto;position:relative;padding:2px;margin:0}.elfinder-cwd-wrapper-list{padding:0}.elfinder-cwd{position:relative;cursor:default;padding:0;margin:0;-ms-touch-action:auto;touch-action:auto}.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;top:40%;left:0;right:0;margin-top:-2em;line-height:1.5em;text-align:center;white-space:pre-wrap;opacity:.6;filter:Alpha(Opacity=60);font-weight:700}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:80px;padding-bottom:2px;cursor:default;border:none}.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file{float:left;margin:0 3px 12px 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-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:url('../img/icons-big.png') 0 0 no-repeat;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.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{background-position:0 -150px}.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-text{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-postscript{background-position:0 -250px}.elfinder-cwd-icon-audio{background-position:0 -300px}.elfinder-cwd-icon-video,.elfinder-cwd-icon-flash-video{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtfd{background-position:0 -401px}.elfinder-cwd-icon-pdf{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-msword,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-office,.elfinder-cwd-icon-vnd-ms-powerpoint,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,.elfinder-cwd-icon-vnd-oasis-opendocument-chart,.elfinder-cwd-icon-vnd-oasis-opendocument-database,.elfinder-cwd-icon-vnd-oasis-opendocument-formula,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,.elfinder-cwd-icon-vnd-oasis-opendocument-image,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,.elfinder-cwd-icon-vnd-openofficeorg-extension,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template{background-position:0 -500px}.elfinder-cwd-icon-html{background-position:0 -550px}.elfinder-cwd-icon-css{background-position:0 -600px}.elfinder-cwd-icon-javascript,.elfinder-cwd-icon-x-javascript{background-position:0 -650px}.elfinder-cwd-icon-x-perl{background-position:0 -700px}.elfinder-cwd-icon-x-python{background-position:0 -750px}.elfinder-cwd-icon-x-ruby{background-position:0 -800px}.elfinder-cwd-icon-x-sh,.elfinder-cwd-icon-x-shellscript{background-position:0 -850px}.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{background-position:0 -950px}.elfinder-cwd-icon-xml{background-position:0 -1000px}.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,.elfinder-cwd-icon-x-tar{background-position:0 -1100px}.elfinder-cwd-icon-x-bzip,.elfinder-cwd-icon-x-bzip2{background-position:0 -1150px}.elfinder-cwd-icon-x-rar,.elfinder-cwd-icon-x-rar-compressed{background-position:0 -1200px}.elfinder-cwd-icon-x-shockwave-flash{background-position:0 -1250px}.elfinder-cwd-icon-group{background-position:0 -1300px}.elfinder-cwd input{width:100%;border:0 solid;margin:0;padding:0}.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-view-icons{text-align:center}.elfinder-cwd table{width:100%;border-collapse:separate;border:0 solid;margin:0 0 10px;border-spacing:0;box-sizing:padding-box;padding:2px}.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 .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 td div{box-sizing:content-box}.elfinder .elfinder-cwd tr.elfinder-touch td{padding:10px 12px}.elfinder .elfinder-cwd tr.elfinder-cwd-file.elfinder-touch 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}.elfinder-cwd-view-list .elfinder-cwd-file-wrapper{width:97%;position:relative}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-left:23px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-right:23px}.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-ltr .elfinder-cwd-view-list .elfinder-perms{left:8px;bottom:-4px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock{left:10px;top:0}.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink{left:-7px;bottom:-4px}.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}.std42-dialog{padding:0;position:absolute;left:auto;right:auto}.std42-dialog .ui-dialog-titlebar{border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;font-weight:400;padding:.2em 1em}.std42-dialog .ui-dialog-titlebar-close,.std42-dialog .ui-dialog-titlebar-close:hover{padding:1px}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar{text-align:right}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close{right:auto;left:.3em}.std42-dialog .ui-dialog-content{padding:.3em .5em}.std42-dialog .ui-dialog-content,.std42-dialog .ui-dialog-content *{-webkit-user-select:auto!important;-moz-user-select:text!important;-khtml-user-select:text!important;user-select:text!important}.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:.7em 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}.elfinder-dialog-icon{position:absolute;width:32px;height:32px;left:12px;top:50%;margin-top:-15px;background:url("../img/dialogs.png") 0 0 no-repeat}.elfinder-rtl .elfinder-dialog-icon{left:auto;right:12px}.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-notify .ui-dialog-titlebar-close{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:30px}.elfinder-rtl .elfinder-notify{padding-right:30px}.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-progressbar,.elfinder-notify-progress{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.elfinder-dialog-icon-open,.elfinder-dialog-icon-readdir,.elfinder-dialog-icon-file,.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,.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{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-dim{background-position:0 -434px}.elfinder-dialog-confirm-applyall{padding:0 1em;margin:0}.elfinder-ltr .elfinder-dialog-confirm-applyall{text-align:left}.elfinder-rtl .elfinder-dialog-confirm-applyall{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{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}.elfinder-info-tb td{white-space:nowrap;padding:2px}.elfinder-info-tb tr td:first-child{text-align:right}.elfinder-info-tb span{float:left}.elfinder-info-tb a{outline:none;text-decoration:underline}.elfinder-info-tb a:hover{text-decoration:none}.elfinder-info-spinner{width:14px;height:14px;float:left;background:url("../img/spinner-mini.gif") center center no-repeat;margin:0 5px}.elfinder-netmount-tb{margin:0 auto}.elfinder-netmount-tb select,.elfinder-netmount-tb input{border:1px solid #ccc}.elfinder-netmount-tb .elfinder-button-icon{cursor:pointer}button.elfinder-info-button{margin:-3.5px 0;cursor:pointer}.elfinder-upload-dropbox{text-align:center;padding:2em 0;border:3px dashed #aaa;height:1em;overflow:hidden}.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;opacity:0;filter:Alpha(Opacity=0)}.elfinder-upload-dialog-wrapper .ui-button form input{padding:0 20px;font-size:3em}.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-rtl .elfinder-rm-title .elfinder-cwd-icon{float:right;margin-right:0;margin-left:1em}.elfinder-rm-title strong{display:block;white-space:pre-wrap;word-break:normal;overflow:hidden;text-overflow:ellipsis}.elfinder-rm-title+br{display:none}.elfinder-contextmenu .elfinder-contextmenu-item span{font-size:.76em}.elfinder-cwd-view-icons .elfinder-cwd-filename,.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,.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}.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 .elfinder-navbar{width:230px;padding:3px 5px;background-image:none;border-top:0 solid;border-bottom:0 solid;overflow:auto;display:none;position:relative}.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}.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-navbar-dir.elfinder-touch{padding:12px}.elfinder-ltr .elfinder-navbar-dir{padding-left:35px}.elfinder-rtl .elfinder-navbar-dir{padding-right:35px}.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}.ui-state-active .elfinder-navbar-arrow{background-image:url("../img/arrows-active.png")}.elfinder-navbar-collapsed .elfinder-navbar-arrow{display:block}.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 4px;left:0}.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 -10px;right:0}.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;position:absolute;top:50%;margin-top:-8px;background-image:url("../img/toolbar.png");background-repeat:no-repeat;background-position:0 -16px}.elfinder-ltr .elfinder-navbar-icon{left:14px}.elfinder-rtl .elfinder-navbar-icon{right:14px}.elfinder-tree .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 0}.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 -704px}.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon{background-image:url("../img/volume_icon_local.png")}.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon{background-image:url("../img/volume_icon_ftp.png")}.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon{background-image:url("../img/volume_icon_sql.png")}.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon{background-image:url("../img/volume_icon_dropbox.png")}.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon{background-image:url("../img/volume_icon_googledrive.png")}.ui-state-active .elfinder-navbar-icon,.elfinder-droppable-active .elfinder-navbar-icon,.ui-state-hover .elfinder-navbar-icon{background-position:0 -32px}.elfinder-navbar-subtree{display:none}.elfinder-ltr .elfinder-navbar-subtree{margin-left:12px}.elfinder-rtl .elfinder-navbar-subtree{margin-right:12px}.elfinder-navbar-spinner{width:14px;height:14px;position:absolute;display:block;top:50%;margin-top:-7px;background:url("../img/spinner-mini.gif") center center no-repeat}.elfinder-ltr .elfinder-navbar-spinner{left:0;margin-left:-2px}.elfinder-rtl .elfinder-navbar-spinner{right:0;margin-right:-2px}.elfinder-navbar .elfinder-perms,.elfinder-navbar .elfinder-lock,.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}.elfinder-rtl .elfinder-navbar .elfinder-perms{right:20px}.elfinder-ltr .elfinder-navbar .elfinder-lock{left:20px}.elfinder-rtl .elfinder-navbar .elfinder-lock{right:20px}.elfinder-ltr .elfinder-navbar .elfinder-symlink{left:8px}.elfinder-rtl .elfinder-navbar .elfinder-symlink{right:8px}.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-places{border:none;margin:0;padding:0}.elfinder-navbar-root .elfinder-places-root-icon{position:absolute;top:50%;margin-top:-9px;cursor:pointer;display:none}.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");display:none;overflow:hidden;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;padding:20px 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-fullscreen{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-background-clip:padding-box;padding:0;background:#000;z-index:90000;display:block}.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar{display:none}.elfinder-quicklook-fullscreen .elfinder-quicklook-preview{border:0 solid}.elfinder-quicklook-fullscreen iframe{height:99%}.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;cursor:move}.elfinder-quicklook-title{color:#fff;white-space:nowrap;overflow:hidden;padding:2px 0}.elfinder-quicklook-titlebar .ui-icon{position:absolute;left:4px;top:50%;margin-top:-8px;width:16px;height:16px;cursor:default}.elfinder-quicklook-preview{overflow:hidden;position:relative;border:0 solid;border-left:1px solid transparent;border-right:1px solid transparent;height:100%}.elfinder-quicklook-info-wrapper{position:absolute;width:100%;left:0;top:50%;margin-top:-50px}.elfinder-quicklook-info{padding:0 12px 0 112px}.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child{color:#fff;font-weight:700;padding-bottom:.5em}.elfinder-quicklook-info-data{padding-bottom:.2em;color:#fff}.elfinder-quicklook .elfinder-cwd-icon{position:absolute;left:32px;top:50%;margin-top:-20px}.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}.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-text-wrapper{width:100%;height:100%;background:#fff;color:#222;overflow:auto}pre.elfinder-quicklook-preview-text{margin:0;padding:3px 9px}.elfinder-quicklook-preview-html,.elfinder-quicklook-preview-pdf,.elfinder-quicklook-preview-iframe{width:100%;height:100%;background:#fff;border:0 solid;margin:0}.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-statusbar{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-statusbar a{text-decoration:none}.elfinder-path{max-width:30%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.elfinder-ltr .elfinder-path{float:left}.elfinder-rtl .elfinder-path{float:right}.elfinder-stat-size{white-space:nowrap}.elfinder-ltr .elfinder-stat-size{float:right}.elfinder-rtl .elfinder-stat-size{float:left}.elfinder-stat-selected{white-space:nowrap;overflow:hidden}.elfinder-toolbar{padding:4px 0 3px;border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent}.elfinder-buttonset{margin:1px 4px;float:left;background:0 0;padding:0;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.elfinder .elfinder-button{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}.elfinder .ui-icon-search{cursor:pointer}.elfinder-button:first-child{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.elfinder-button:last-child{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.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 .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:block;background:url('../img/toolbar.png') no-repeat}.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-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 -224px}.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-opendir{background-position:0 -32px}.elfinder .elfinder-menubutton{overflow:visible}.elfinder-button-icon-spinner{background:url("../img/spinner-mini.gif") center center no-repeat}.elfinder-button-menu{position:absolute;left:0;top:25px;padding:3px 0}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.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-n,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-s{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;float:right;width:202px;overflow:visible}.elfinder .elfinder-button-search .elfinder-button-menu{font-size:8pt;text-align:center;width:100%}.elfinder .elfinder-button-search .elfinder-button-menu div{margin-left:auto;margin-right:auto;margin-bottom:5px}.elfinder .elfinder-button-search .elfinder-button-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-button-search input{width:160px;height:22px;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-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-9px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-button-search .ui-checkboxradio-icon{display:none}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-rtl .elfinder-button-search .ui-icon-search,.elfinder-ltr .elfinder-button-search .ui-icon-close{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0}
\ No newline at end of file
diff --git a/vendor/assets/css/theme.css b/vendor/assets/css/theme.css
index fa52982..4265f22 100644
--- a/vendor/assets/css/theme.css
+++ b/vendor/assets/css/theme.css
@@ -5,6 +5,13 @@
  * @author Dmitry (dio) Levashov
  **/
 
+/* input textarea */
+.elfinder input,
+.elfinder textarea {
+	color: #000;
+	background-color: #FFF;
+}
+
 /* dialogs */
 .std42-dialog, .std42-dialog .ui-widget-content { background-color:#ededed; background-image:none; background-clip: content-box; }
 
@@ -50,8 +57,3 @@
 .elfinder-contextmenu .ui-state-hover { background: #3875d7; color:#fff; }
 .elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow { background-image:url('../img/arrows-active.png'); }
 
-
-
-
-
-
diff --git a/vendor/assets/img/toolbar.png b/vendor/assets/img/toolbar.png
index 2419f69..8344de6 100644
Binary files a/vendor/assets/img/toolbar.png and b/vendor/assets/img/toolbar.png differ
diff --git a/vendor/assets/img/volume_icon_googledrive.png b/vendor/assets/img/volume_icon_googledrive.png
new file mode 100644
index 0000000..7b6cc29
Binary files /dev/null and b/vendor/assets/img/volume_icon_googledrive.png differ
diff --git a/vendor/assets/js/elfinder.full.js b/vendor/assets/js/elfinder.full.js
index 7411326..de655d0 100644
--- a/vendor/assets/js/elfinder.full.js
+++ b/vendor/assets/js/elfinder.full.js
@@ -1,9 +1,9 @@
 /*!
  * elFinder - file manager for web
- * Version 2.1.5 (2015-12-26)
+ * Version 2.1.10 (2.1-src Nightly: a102376) (2016-04-02)
  * http://elfinder.org
  * 
- * Copyright 2009-2015, Studio 42
+ * Copyright 2009-2016, Studio 42
  * Licensed under a 3 clauses BSD license
  */
 (function($) {
@@ -19,7 +19,7 @@
  * @author Dmitry (dio) Levashov
  **/
 window.elFinder = function(node, opts) {
-	this.time('load');
+	//this.time('load');
 	
 	var self = this,
 		
@@ -132,6 +132,7 @@ window.elFinder = function(node, opts) {
 			copyOverwrite : true,
 			uploadOverwrite : true,
 			uploadMaxSize : 0,
+			jpgQuality    : 100,
 			tmb           : false // old API
 		},
 		
@@ -225,22 +226,26 @@ window.elFinder = function(node, opts) {
 		open = function(data) {
 			var volumeid, contextmenu, emptyDirs = {}, stayDirs = {};
 			
-			self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {};
-			
-			// support volume driver option `uiCmdMap`
-			if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) {
-				uiCmdMapPrev = JSON.stringify(self.commandMap);
-				if (Object.keys(self.commandMap).length) {
-					// for contextmenu
-					contextmenu = self.getUI('contextmenu');
-					if (!contextmenu.data('cmdMaps')) {
-						contextmenu.data('cmdMaps', {});
-					}
-					volumeid = data.cwd? data.cwd.volumeid : null;
-					if (volumeid && !contextmenu.data('cmdMaps')[volumeid]) {
-						contextmenu.data('cmdMaps')[volumeid] = self.commandMap;
+			if (self.api >= 2.1) {
+				self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {};
+				
+				// support volume driver option `uiCmdMap`
+				if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) {
+					uiCmdMapPrev = JSON.stringify(self.commandMap);
+					if (Object.keys(self.commandMap).length) {
+						// for contextmenu
+						contextmenu = self.getUI('contextmenu');
+						if (!contextmenu.data('cmdMaps')) {
+							contextmenu.data('cmdMaps', {});
+						}
+						volumeid = data.cwd? data.cwd.volumeid : null;
+						if (volumeid && !contextmenu.data('cmdMaps')[volumeid]) {
+							contextmenu.data('cmdMaps')[volumeid] = self.commandMap;
+						}
 					}
 				}
+			} else {
+				self.options.sync = 0;
 			}
 			
 			if (data.init) {
@@ -288,6 +293,7 @@ window.elFinder = function(node, opts) {
 			}
 			self.lastDir(cwd);
 			
+			self.autoSync();
 		},
 		
 		/**
@@ -310,9 +316,13 @@ window.elFinder = function(node, opts) {
 							f.i18 = i18;
 						}
 						
-						// set disabledCmds of each volume
-						if (f.volumeid && f.disabled) {
-							self.disabledCmds[f.volumeid] = f.disabled;
+						// set disabledCmds, tmbUrls for each volume
+						if (f.volumeid) {
+							f.disabled && (self.disabledCmds[f.volumeid] = f.disabled);
+							if (f.tmbUrl) {
+								self.tmbUrls[f.volumeid] = f.tmbUrl;
+							}
+							self.roots[f.volumeid] = f.hash;
 						}
 					}
 					files[f.hash] = f;
@@ -419,7 +429,8 @@ window.elFinder = function(node, opts) {
 			Chrome:webkit && window.chrome,
 			Safari:webkit && !window.chrome,
 			Mobile:typeof window.orientation != "undefined",
-			Touch:typeof window.ontouchstart != "undefined"
+			Touch:typeof window.ontouchstart != "undefined",
+			iOS: navigator.platform.match(/^iP(?:[ao]d|hone)/)
 		};
 	})();
 	
@@ -512,6 +523,23 @@ window.elFinder = function(node, opts) {
 	 **/
 	this.id = id;
 	
+	/**
+	 * 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
 	 *
@@ -600,6 +628,18 @@ window.elFinder = function(node, opts) {
 	 **/
 	this.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-'+(this.direction == 'rtl' ? 'rtl' : 'ltr')+' '+this.options.cssClass;
 
+	/**
+	 * Current search status
+	 * 
+	 * @type Object
+	 */
+	this.searchStatus = {
+		state  : 0, // 0: search ended, 1: search started, 2: in search result
+		query  : '',
+		target : '',
+		mime   : ''
+	};
+
 	/**
 	 * Method to store/fetch data
 	 *
@@ -627,7 +667,7 @@ window.elFinder = function(node, opts) {
 		this.sortStickFolders = !!this.sortStickFolders
 	}
 
-	this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortsRules);
+	this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortRules);
 	
 	$.each(this.sortRules, function(name, method) {
 		if (typeof method != 'function') {
@@ -660,8 +700,7 @@ window.elFinder = function(node, opts) {
 	this.draggable = {
 		appendTo   : 'body',
 		addClasses : true,
-		delay      : 30,
-		distance   : 8,
+		distance   : 4,
 		revert     : true,
 		refreshPositions : false,
 		cursor     : 'crosshair',
@@ -758,6 +797,9 @@ window.elFinder = function(node, opts) {
 			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),
@@ -773,7 +815,7 @@ window.elFinder = function(node, opts) {
 					return false;
 				}
 				if (dst.hasClass(self.res(c, 'cwdfile'))) {
-					hash = dst.attr('id');
+					hash = self.cwdId2Hash(dst.attr('id'));
 				} else if (dst.hasClass(self.res(c, 'navdir'))) {
 					hash = self.navId2Hash(dst.attr('id'));
 				} else {
@@ -847,6 +889,16 @@ window.elFinder = function(node, opts) {
 			return dir.hash;
 		}
 		
+		$.each(self.roots, function(id, rhash) {
+			if (rhash.indexOf(id) === 0) {
+				dir = rhash;
+				return false;
+			}
+		});
+		if (dir) {
+			return dir;
+		}
+		
 		while (i in files && files.hasOwnProperty(i)) {
 			dir = files[i]
 			if (!dir.phash && !dir.mime == 'directory' && dir.read) {
@@ -967,7 +1019,7 @@ window.elFinder = function(node, opts) {
 			return file.url;
 		}
 		
-		if (cwdOptions.url) {
+		if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) {
 			return cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/')
 		}
 
@@ -1011,7 +1063,7 @@ window.elFinder = function(node, opts) {
 	 * Return file url for open in elFinder
 	 * 
 	 * @param  String  file hash
-	 * @param  Bool    for download link
+	 * @param  Boolean for download link
 	 * @return String
 	 */
 	this.openUrl = function(hash, download) {
@@ -1022,8 +1074,14 @@ window.elFinder = function(node, opts) {
 			return '';
 		}
 		
-		if (!download && file.url && file.url != 1) {
-			return file.url;
+		if (!download) {
+			if (file.url) {
+				if (file.url != 1) {
+					return file.url;
+				}
+			} else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) {
+				return cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/');
+			}
 		}
 		
 		url = this.options.url;
@@ -1050,11 +1108,19 @@ window.elFinder = function(node, opts) {
 	 */
 	this.tmb = function(hash) {
 		var file = files[hash],
-			url = file && file.tmb && file.tmb != 1 ? cwdOptions['tmbUrl'] + file.tmb : '';
+			geturl = function(hash){
+				var turl = '';
+				$.each(self.tmbUrls, function(i, u){
+					if (hash.indexOf(i) === 0) {
+						turl = self.tmbUrls[i];
+						return false;
+					}
+				});
+				return turl;
+			},
+			tmbUrl = (self.searchStatus.state && hash.indexOf(self.cwd().volumeid) !== 0)? geturl(hash) : cwdOptions['tmbUrl'],
+			url = tmbUrl && file && file.tmb && file.tmb != 1 ? tmbUrl + file.tmb : '';
 		
-		if (url && (this.UA.Opera || this.UA.IE)) {
-			url += '?_=' + new Date().getTime();
-		}
 		return url;
 	}
 	
@@ -1113,6 +1179,9 @@ window.elFinder = function(node, opts) {
 	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();
@@ -1156,12 +1225,14 @@ window.elFinder = function(node, opts) {
 			defdone  = !(options.preventDefault || options.preventDone),
 			// options for notify dialog
 			notify   = $.extend({}, options.notify),
+			// make cancel button
+			cancel   = !!options.cancel,
 			// do not normalize data - return as is
 			raw      = !!options.raw,
 			// sync files on request fail
 			syncOnFail = options.syncOnFail,
-			// open notify dialog timeout		
-			timeout, 
+			// open notify dialog timeout
+			timeout,
 			// request options
 			options = $.extend({
 				url      : o.url,
@@ -1237,6 +1308,9 @@ window.elFinder = function(node, opts) {
 			 * @return void
 			 **/
 			success = function(response) {
+				// Set currrent request command name
+				self.currentReqCmd = cmd;
+				
 				if (raw) {
 					return dfrd.resolve(response);
 				}
@@ -1255,6 +1329,9 @@ window.elFinder = function(node, opts) {
 
 				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;
 				}
@@ -1275,8 +1352,23 @@ window.elFinder = function(node, opts) {
 				dfrd.resolve(response);
 				response.debug && self.debug('backend-debug', response.debug);
 			},
-			xhr, _xhr
-			;
+			xhr, _xhr,
+			abort = function(e){
+				if (e.type == 'autosync') {
+					if (e.data.action != 'stop') return;
+				} else {
+					if (!e.data.added || !e.data.added.length) {
+						return;
+					}
+				}
+				if (xhr.state() == 'pending') {
+					xhr.quiet = true;
+					xhr.abort();
+					if (e.type != 'unload' && e.type != 'destroy') {
+						self.autoSync();
+					}
+				}
+			};
 
 		defdone && dfrd.done(done);
 		dfrd.fail(function(error) {
@@ -1296,6 +1388,9 @@ window.elFinder = function(node, opts) {
 		}
 
 		if (notify.type && notify.cnt) {
+			if (cancel) {
+				notify.cancel = dfrd;
+			}
 			timeout = setTimeout(function() {
 				self.notify(notify);
 				dfrd.always(function() {
@@ -1321,20 +1416,25 @@ window.elFinder = function(node, opts) {
 
 		delete options.preventFail
 
-		xhr = this.transport.send(options).fail(error).done(success);
-		
-		// this.transport.send(options)
+		dfrd.xhr = xhr = this.transport.send(options).fail(error).done(success);
 		
 		// add "open" xhr into queue
-		if (cmd == 'open') {
+		if (cmd == 'open' || (cmd == 'info' && data.compare)) {
 			queue.unshift(xhr);
+			self.bind(self.cmdsToAdd + ' autosync', abort);
 			dfrd.always(function() {
 				var ndx = $.inArray(xhr, queue);
-				
+				self.unbind(self.cmdsToAdd + ' autosync', abort);
 				ndx !== -1 && queue.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;
 	};
 	
@@ -1344,7 +1444,7 @@ window.elFinder = function(node, opts) {
 	 * @param  Array  new files
 	 * @return Object
 	 */
-	this.diff = function(incoming) {
+	this.diff = function(incoming, onlydir) {
 		var raw       = {},
 			added     = [],
 			removed   = [],
@@ -1365,7 +1465,9 @@ window.elFinder = function(node, opts) {
 			
 		// find removed
 		$.each(files, function(hash, f) {
-			!raw[hash] && removed.push(hash);
+			if (!onlydir || f.phash === onlydir) {
+				!raw[hash] && removed.push(hash);
+			}
 		});
 		
 		// compare files
@@ -1410,37 +1512,69 @@ window.elFinder = function(node, opts) {
 	 * 
 	 * @return jQuery.Deferred
 	 */
-	this.sync = function() {
+	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'); }),
 			opts1 = {
-				data           : {cmd : 'open', reload : 1, target : cwd, tree : this.ui.tree ? 1 : 0},
+				data           : {cmd : 'open', reload : 1, target : cwd, tree : (! onlydir && this.ui.tree) ? 1 : 0, compare : comp},
 				preventDefault : true
 			},
 			opts2 = {
 				data           : {cmd : 'parents', target : cwd},
 				preventDefault : true
 			};
+		
 		$.when(
 			this.request(opts1),
-			this.request(opts2)
+			onlydir? null : this.request(opts2)
 		)
 		.fail(function(error) {
-			dfrd.reject(error);
-			error && self.request({
-				data   : {cmd : 'open', target : self.lastDir(''), tree : 1, init : 1},
-				notify : {type : 'open', cnt : 1, hideCnt : true},
-				preventDefault : true
-			});
+			if (! polling) {
+				dfrd.reject(error);
+				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();
+			}
 		})
 		.done(function(odata, pdata) {
-			var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []));
+			if (odata.cwd.compare) {
+				if (comp === odata.cwd.compare) {
+					return dfrd.reject();
+				}
+			}
+			
+			if (self.api < 2.1) {
+				pdata.tree = (pdata.tree || []).concat([odata.cwd]);
+			}
+			
+			var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir);
 
 			diff.added.push(odata.cwd)
 			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;
@@ -1476,17 +1610,23 @@ window.elFinder = function(node, opts) {
 	
 	/**
 	 * Remove event listener if exists
+	 * To un-bind to multiply events at once, separate events names by space
 	 *
-	 * @param  String    event name
+	 * @param  String    event(s) name(s)
 	 * @param  Function  callback
 	 * @return elFinder
 	 */
 	this.unbind = function(event, callback) {
-		var l = listeners[('' + event).toLowerCase()] || [],
-			i = l.indexOf(callback);
-
-		i > -1 && l.splice(i, 1);
-		//delete callback; // need this?
+		var i, l, ci;
+		
+		event = ('' + event).toLowerCase().split(/\s+/);
+		
+		for (i = 0; i < event.length; i++) {
+			l = listeners[event[i]] || [];
+			ci = $.inArray(callback, l);
+			ci > -1 && l.splice(ci, 1);
+		}
+		
 		callback = null
 		return this;
 	};
@@ -1496,28 +1636,34 @@ window.elFinder = function(node, opts) {
 	 *
 	 * @param  String   event type
 	 * @param  Object   data to send across event
+	 * @param  Boolean  allow modify data (call by reference of data)
 	 * @return elFinder
 	 */
-	this.trigger = function(event, data) {
+	this.trigger = function(event, data, allowModify) {
 		var event    = event.toLowerCase(),
 			isopen   = (event === 'open'),
 			handlers = listeners[event] || [], i, l, jst;
 		
 		this.debug('event-'+event, data);
 		
-		if (isopen) {
+		if (isopen && !allowModify) {
 			// for performance tuning
 			jst = JSON.stringify(data);
 		}
 		if (handlers.length) {
 			event = $.Event(event);
+			if (allowModify) {
+				event.data = data;
+			}
 
 			l = handlers.length;
 			for (i = 0; i < l; i++) {
 				// only callback has argument
 				if (handlers[i].length) {
-					// to avoid data modifications. remember about "sharing" passing arguments in js :) 
-					event.data = isopen? JSON.parse(jst) : $.extend(true, {}, data);
+					if (!allowModify) {
+						// to avoid data modifications. remember about "sharing" passing arguments in js :) 
+						event.data = isopen? JSON.parse(jst) : $.extend(true, {}, data);
+					}
 				}
 
 				try {
@@ -1533,7 +1679,17 @@ window.elFinder = function(node, opts) {
 			}
 		}
 		return this;
-	}
+	};
+	
+	/**
+	 * Get event listeners
+	 *
+	 * @param  String   event type
+	 * @return Array    listed event functions
+	 */
+	this.getListeners = function(event) {
+		return event? listeners[event.toLowerCase()] : listeners;
+	};
 	
 	/**
 	 * Bind keybord shortcut to keydown event
@@ -1648,14 +1804,14 @@ window.elFinder = function(node, opts) {
 	this.isCommandEnabled = function(name, dstHash) {
 		var disabled;
 		if (dstHash && self.root(dstHash) !== cwd) {
+			disabled = [];
 			$.each(self.disabledCmds, function(i, v){
-				if (dstHash.indexOf(i, 0) == 0) {
+				if (dstHash.indexOf(i) === 0) {
 					disabled = v;
 					return false;
 				}
 			});
-		}
-		if (!disabled) {
+		} else {
 			disabled = cwdOptions.disabled;
 		}
 		return this._commands[name] ? $.inArray(name, disabled) === -1 : false;
@@ -1671,6 +1827,9 @@ window.elFinder = function(node, opts) {
 	 * @return $.Deferred
 	 */		
 	this.exec = function(cmd, files, opts, dstHash) {
+		if (cmd === 'open') {
+			this.autoSync('stop');
+		}
 		return this._commands[cmd] && this.isCommandEnabled(cmd, dstHash) 
 			? this._commands[cmd].exec(files, opts) 
 			: $.Deferred().reject('No such command');
@@ -1743,6 +1902,7 @@ window.elFinder = function(node, opts) {
 	 **/
 	this.destroy = function() {
 		if (node && node[0].elfinder) {
+			this.autoSync('stop');
 			this.trigger('destroy').disable();
 			listeners = {};
 			shortcuts = {};
@@ -1751,11 +1911,81 @@ window.elFinder = function(node, opts) {
 			node.children().remove();
 			node.append(prevContent.contents()).removeClass(this.cssClass).attr('style', prevStyle);
 			node[0].elfinder = null;
+		}
+	}
+	
+	/**
+	 * Start or stop auto sync
+	 * 
+	 * @param  String|Bool  stop
+	 * @return void
+	 */
+	this.autoSync = function(stop) {
+		var sync;
+		if (self.options.sync >= 1000) {
 			if (syncInterval) {
-				clearInterval(syncInterval);
+				clearTimeout(syncInterval);
+				syncInterval = null;
+				self.trigger('autosync', {action : 'stop'});
+			}
+			if (stop || !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 && (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){
+								if (error && error != 'errConnect') {
+									self.error(error);
+								} else {
+									syncInterval = setTimeout(function() {
+										sync();
+									}, timeout);
+								}
+							});
+						} else {
+							self.sync(cwd, true).always(function(){
+								sync();
+							});
+						}
+					}, timeout);
+				}
+			};
+			sync(true);
 		}
-	}
+	};
 	
 	/*************  init stuffs  ****************/
 	
@@ -1820,10 +2050,11 @@ window.elFinder = function(node, opts) {
 	 * @return elFinder
 	 **/
 	this.error = function() {
-		var arg = arguments[0];
+		var arg = arguments[0],
+			opts = arguments[1] || null;
 		return arguments.length == 1 && typeof(arg) == 'function'
 			? self.bind('error', arg)
-			: self.trigger('error', {error : arg});
+			: self.trigger('error', {error : arg, opts : opts});
 	}
 	
 	// create bind/trigger aliases for build-in events
@@ -1864,9 +2095,13 @@ window.elFinder = function(node, opts) {
 					destroyOnClose : true,
 					buttons   : {}
 			};
-
+			
 			opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { $(this).elfinderdialog('close'); };
 
+			if (e.data.opts && $.isPlainObject(e.data.opts)) {
+				$.extend(opts, e.data.opts);
+			}
+
 			self.dialog(''+self.i18n(e.data.error), opts);
 		})
 		.bind('tree parents', function(e) {
@@ -1915,9 +2150,17 @@ window.elFinder = function(node, opts) {
 			}
 			
 		})
+		.bind('searchstart', function(e) {
+			$.extend(self.searchStatus, e.data);
+			self.searchStatus.state = 1;
+		})
 		.bind('search', function(e) {
+			self.searchStatus.state = 2;
 			cache(e.data.files);
 		})
+		.bind('searchend', function() {
+			self.searchStatus.state = 0;
+		})
 		.bind('rm', function(e) {
 			var play  = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"');
 		
@@ -1939,26 +2182,36 @@ window.elFinder = function(node, opts) {
 	this.history = new this.history(this);
 	
 	// in getFileCallback set - change default actions on double click/enter/ctrl+enter
-	if (typeof(this.options.getFileCallback) == 'function' && this.commands.getfile) {
-		this.bind('dblclick', function(e) {
-			e.preventDefault();
-			self.exec('getfile').fail(function() {
-				self.exec('open');
+	if (this.commands.getfile) {
+		if (typeof(this.options.getFileCallback) == 'function') {
+			this.bind('dblclick', function(e) {
+				e.preventDefault();
+				self.exec('getfile').fail(function() {
+					self.exec('open');
+				});
 			});
-		});
-		this.shortcut({
-			pattern     : 'enter',
-			description : this.i18n('cmdgetfile'),
-			callback    : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') }) }
-		})
-		.shortcut({
-			pattern     : 'ctrl+enter',
-			description : this.i18n(this.OS == 'mac' ? 'cmdrename' : 'cmdopen'),
-			callback    : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') }
-		});
-		
-	} 
+			this.shortcut({
+				pattern     : 'enter',
+				description : this.i18n('cmdgetfile'),
+				callback    : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') }) }
+			})
+			.shortcut({
+				pattern     : 'ctrl+enter',
+				description : this.i18n(this.OS == 'mac' ? 'cmdrename' : 'cmdopen'),
+				callback    : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') }
+			});
+		} else {
+			delete this.commands.getfile;
+		}
+	}
 
+	/**
+	 * Root hashed
+	 * 
+	 * @type Object
+	 */
+	this.roots = {},
+	
 	/**
 	 * Loaded commands
 	 *
@@ -1981,6 +2234,17 @@ window.elFinder = function(node, opts) {
 			cmd.prototype = base;
 			self._commands[name] = new cmd();
 			self._commands[name].setup(name, self.options.commandsOptions[name]||{});
+			// 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]||{});
+					}
+				});
+			}
 		}
 	});
 	
@@ -1998,6 +2262,13 @@ window.elFinder = function(node, opts) {
 	 */
 	this.disabledCmds = {};
 	
+	/**
+	 * tmbUrls Array of each volume
+	 * 
+	 * @type Object
+	 */
+	this.tmbUrls = {};
+	
 	// prepare node
 	node.addClass(this.cssClass)
 		.on(mousedown, function() {
@@ -2025,12 +2296,13 @@ window.elFinder = function(node, opts) {
 		cwd : $('
').appendTo(node).elfindercwd(this, this.options.uiOptions.cwd || {}), // notification dialog window notify : this.dialog('', { - cssClass : 'elfinder-dialog-notify', - position : this.options.notifyDialog.position, - resizable : false, - autoOpen : false, - title : ' ', - width : parseInt(this.options.notifyDialog.width) + cssClass : 'elfinder-dialog-notify', + position : this.options.notifyDialog.position, + resizable : false, + autoOpen : false, + closeOnEscape : false, + title : ' ', + width : parseInt(this.options.notifyDialog.width) }), statusbar : $('
').hide().appendTo(node) } @@ -2118,13 +2390,6 @@ window.elFinder = function(node, opts) { // update ui's size after init this.one('load', function() { node.trigger('resize'); - if (self.options.sync > 1000) { - syncInterval = setInterval(function() { - self.sync(); - }, self.options.sync) - - } - }); (function(){ @@ -2139,6 +2404,7 @@ window.elFinder = function(node, opts) { if (self.ui.notify.children().length) { return self.i18n('ntfsmth'); } + self.trigger('unload'); }); })(); @@ -2171,31 +2437,36 @@ window.elFinder = function(node, opts) { }); if (self.dragUpload) { - node[0].addEventListener('dragenter', function(e) { - if (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT') { - e.preventDefault(); - e.stopPropagation(); - } - }, false); - node[0].addEventListener('dragleave', function(e) { - if (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT') { - e.preventDefault(); - e.stopPropagation(); + (function(){ + var isin = function(e) { + return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && $(e.target).closest('div.ui-dialog-content').length === 0); } - }, false); - node[0].addEventListener('dragover', function(e) { - if (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT') { - e.preventDefault(); - e.stopPropagation(); - e.dataTransfer.dropEffect = 'none'; - } - }, false); - node[0].addEventListener('drop', function(e) { - if (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT') { - e.stopPropagation(); - e.preventDefault(); - } - }, false); + node[0].addEventListener('dragenter', function(e) { + if (isin(e)) { + e.preventDefault(); + e.stopPropagation(); + } + }, false); + node[0].addEventListener('dragleave', function(e) { + if (isin(e)) { + e.preventDefault(); + e.stopPropagation(); + } + }, false); + node[0].addEventListener('dragover', function(e) { + if (isin(e)) { + e.preventDefault(); + e.stopPropagation(); + e.dataTransfer.dropEffect = 'none'; + } + }, false); + node[0].addEventListener('drop', function(e) { + if (isin(e)) { + e.stopPropagation(); + e.preventDefault(); + } + }, false); + })(); // add event listener for HTML5 DnD upload (function() { @@ -2271,7 +2542,7 @@ window.elFinder = function(node, opts) { e.stopPropagation(); $elm.removeClass(clDropActive); if (e.currentTarget.id) { - id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : e.currentTarget.id; + id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id); } else { id = self.cwd().hash; } @@ -2295,10 +2566,19 @@ window.elFinder = function(node, opts) { */ elFinder.prototype = { + uniqueid : 0, + res : function(type, id) { return this.resources[type] && this.resources[type][id]; }, + /** + * Current request command + * + * @type String + */ + currentReqCmd : '', + /** * Internationalization object * @@ -2468,9 +2748,6 @@ elFinder.prototype = { upload : function(data) { return data && ($.isPlainObject(data.added) || $.isArray(data.added));}, search : function(data) { return data && data.files && $.isArray(data.files)} }, - - - /** * Commands costructors @@ -2479,6 +2756,13 @@ elFinder.prototype = { */ commands : {}, + /** + * Commands to add the item (space delimited) + * + * @type String + */ + cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload', + parseUploadData : function(text) { var data; @@ -2518,7 +2802,7 @@ elFinder.prototype = { } }, check = function() { - var renames = [], existed = [], exists = [], i, c; + var renames = [], hashes = {}, existed = [], exists = [], i, c; var confirm = function(ndx) { var last = ndx == exists.length-1, @@ -2531,7 +2815,7 @@ elFinder.prototype = { callback : function(all) { !last && !all ? confirm(++ndx) - : dfrd.resolve(renames); + : dfrd.resolve(renames, hashes); } }, reject : { @@ -2550,14 +2834,14 @@ elFinder.prototype = { !last && !all ? confirm(++ndx) - : dfrd.resolve(renames); + : dfrd.resolve(renames, hashes); } }, cancel : { label : 'btnCancel', callback : function() { cancel(); - dfrd.resolve(renames); + dfrd.resolve(renames, hashes); } }, buttons : [ @@ -2575,7 +2859,7 @@ elFinder.prototype = { } !last && !all ? confirm(++ndx) - : dfrd.resolve(renames); + : dfrd.resolve(renames, hashes); } } ] @@ -2590,7 +2874,7 @@ elFinder.prototype = { name = $.map(names, function(item) { return item.name;}); fm.request({ - data : {cmd : 'upload', target : target, name : name , FILES : ''}, + data : {cmd : 'ls', target : target, intersect : name}, notify : {type : 'preupload', cnt : 1, hideCnt : true}, preventFail : true }) @@ -2599,13 +2883,22 @@ elFinder.prototype = { if (data.error) { cancel(); } else { - if (data.name) { - existed = data.name || []; - exists = $.map(names, function(name){ return $.inArray(name.name, existed) !== -1 ? name : null ;}); - } - if (data.list && target == fm.cwd().hash - && data.list.length != $.map(fm.files(), function(file) { return file.phash == target ? file.name : null ;}).length) { - fm.sync(); + if (fm.option('uploadOverwrite')) { + if (data.list) { + if ($.isArray(data.list)) { + existed = data.list || []; + } else { + existed = $.map(data.list, function(n) { return n; }); + hashes = data.list; + } + exists = $.map(names, function(name){ return $.inArray(name.name, existed) !== -1 ? name : null ;}); + if (target == fm.cwd().hash && + $($.map(fm.files(), function(file) { return (file.phash == target) ? file.name : null; } )) + .filter(existed).length < 1 + ) { + fm.sync(); + } + } } } } @@ -2621,7 +2914,7 @@ elFinder.prototype = { error && fm.error(error); }); }; - if (fm.option('uploadOverwrite') && typeof files[0] == 'object') { + if (fm.api >= 2.1 && typeof files[0] == 'object') { check(); return dfrd; } else { @@ -2719,13 +3012,15 @@ elFinder.prototype = { processing--; }); } else if (entry.isDirectory) { - if (processing > 0) { - dirctorys.push(entry); - } else { - processing = 0; - dirReader = entry.createReader(); - processing++; - readEntries(dirReader); + if (fm.api >= 2.1) { + if (processing > 0) { + dirctorys.push(entry); + } else { + processing = 0; + dirReader = entry.createReader(); + processing++; + readEntries(dirReader); + } } } } @@ -2736,20 +3031,28 @@ elFinder.prototype = { return item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry(); }); if (items.length > 0) { - fm.uploads.checkExists(items, target, fm).done(function(renames){ + fm.uploads.checkExists(items, target, fm).done(function(renames, hashes){ var notifyto, dfds = []; if (fm.option('uploadOverwrite')) { items = $.map(items, function(item){ - var i, bak, file, dfd; + var i, bak, hash, dfd, hi; if (item.isDirectory) { i = $.inArray(item.name, renames); if (i !== -1) { renames.splice(i, 1); bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, ''); - file = fm.fileByName(item.name, target); - fm.lockfiles({files : [file.hash]}); + $.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 : file.hash, name : bak}, + data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function(error) { @@ -2757,7 +3060,7 @@ elFinder.prototype = { fm.sync(); }) .always(function() { - fm.unlockfiles({files : [file.hash]}) + fm.unlockfiles({files : [hash]}) }); dfds.push(dfd); } @@ -2781,7 +3084,7 @@ elFinder.prototype = { } else { notifyto && clearTimeout(notifyto); fm.notify({type : 'readdir', cnt : -1}); - dfrd.resolve([files, paths, renames]); + dfrd.resolve([files, paths, renames, hashes]); } } }, 10); @@ -2848,22 +3151,26 @@ elFinder.prototype = { // 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'), retry = 0, - cancelBtn = 'div.elfinder-notify-upload div.elfinder-notify-cancel button', dfrd = $.Deferred() .fail(function(error) { - var file = files.length? (isDataType? files[0][0] : files[0]) : {}; - if (file._cid) { - formData = new FormData(); - files = [{_chunkfail: true}]; - formData.append('chunk', file._chunk); - formData.append('cid' , file._cid); - isDataType = false; - send(files); + if (self.uploads.xhrUploading) { + setTimeout(function() { self.sync(); }, 5000); + self.uploads.xhrUploading = false; + var file = files.length? (isDataType? files[0][0] : files[0]) : {}; + if (file._cid) { + formData = new FormData(); + files = [{_chunkfail: true}]; + formData.append('chunk', file._chunk); + formData.append('cid' , file._cid); + isDataType = false; + send(files); + } } files = null; error && self.error(error); @@ -2881,12 +3188,13 @@ elFinder.prototype = { } }) .always(function() { + // 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 && self.ui.notify.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1}); - self.ui.notify.off('click', cancelBtn, fnAbort); - $(document).off('keydown', fnAbort); }), formData = new FormData(), target = (data.target || self.cwd().hash), @@ -2899,34 +3207,32 @@ elFinder.prototype = { checkNotify = function() { return notify = (notify || self.ui.notify.children('.elfinder-notify-upload').length); }, + fnAbort = function() { + abort = true; + if (xhr) { + xhr.quiet = true; + xhr.abort(); + } + }, startNotify = function(size) { if (!size) size = filesize; return setTimeout(function() { notify = true; - self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size, cancel: true}); + self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size, + cancel: function() { + node.trigger('uploadabort'); + } + }); prev = loaded; }, self.options.notifyDelay); }, - fnAbort = function(e) { - if (e.type == 'keydown' && e.keyCode != $.ui.keyCode.ESCAPE) { - return; - } - e.preventDefault(); - e.stopPropagation(); - abort = true; - xhr.abort(); - dfrd.reject(); - self.sync(); - }, renames = (data.renames || null), + hashes = (data.hashes || null), chunkMerge = false; - // regist abort event - self.ui.notify.one('click', cancelBtn, fnAbort); - $(document).on('keydown', fnAbort); - $(window).on('unload', function(e){ - (dfrd.state() == 'pending') && dfrd.reject(); - }); + // regist fnAbort function + node.one('uploadabort', fnAbort); + $(window).one('unload', fnAbort); !chunkMerge && (prev = loaded); @@ -2963,18 +3269,9 @@ elFinder.prototype = { if (error) { if (chunkMerge || retry++ > 3) { var file = isDataType? files[0][0] : files[0]; - if (file._cid) { - formData = new FormData(); - files = [{_chunkfail: true}]; - formData.append('chunk', file._chunk); - formData.append('cid' , file._cid); - formData.append('range', file._range); - isDataType = false; - send(files); - return; - } - return dfrd.reject(error); + return dfrd.reject(file._cid? null : error); } else { + // do retry filesize = 0; xhr.open('POST', self.uploadURL, true); xhr.send(formData); @@ -3080,7 +3377,7 @@ elFinder.prototype = { maxFileSize, totalSize = 0, chunked = [], - chunkID = +new Date(), + chunkID = new Date().getTime(), BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize blobSlice = false, blobSize, i, start, end, chunks, blob, chunk, added, done, last, failChunk, @@ -3090,55 +3387,55 @@ elFinder.prototype = { while(files.length && sfiles.length < num) { sfiles.push(files.shift()); } - } - if (sfiles.length) { - for (var i=0; i < sfiles.length; 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, - renames: renames, - multiupload: true}) - .fail(function(error) { - if (cid) { - failChunk[cid] = true; + if (sfiles.length) { + for (var i=0; i < sfiles.length; i++) { + if (abort) { + break; } - //error && self.error(error); - }) - .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}); - } + cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null); + if (!!failChunk[cid]) { + last--; + continue; } - multi(files, 1); // Next one - }); + fm.exec('upload', { + type: data.type, + isDataType: isDataType, + files: sfiles[i], + checked: true, + target: target, + renames: renames, + hashes: hashes, + multiupload: true}) + .fail(function(error) { + 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}); + } + } + multi(files, 1); // Next one + }); + } } - } else { - self.uploads.xhrUploading = false; + } + if (sfiles.length < 1 || abort) { if (abort) { notifyto && clearTimeout(notifyto); - if (checkNotify()) { - self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); - } - if (cid) { + if (cid) { failChunk[cid] = true; } + dfrd.reject(); + } else { + dfrd.resolve(); + self.uploads.xhrUploading = false; } - dfrd.resolve(); } }, check = function(){ @@ -3156,14 +3453,15 @@ elFinder.prototype = { blob = files[i]; blobSize = blob.size; if (blobSlice === false) { - if ('slice' in blob) { - blobSlice = 'slice'; - } else if ('mozSlice' in blob) { - blobSlice = 'mozSlice'; - } else if ('webkitSlice' in blob) { - blobSlice = 'webkitSlice'; - } else { - blobSlice = ''; + 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'; + } } } @@ -3184,7 +3482,7 @@ elFinder.prototype = { chunked[chunkID] = 0; while(start <= blobSize) { chunk = blob[blobSlice](start, end); - chunk._chunk = blob.name + '.' + ++chunks + '_' + total + '.part'; + chunk._chunk = blob.name + '.' + (++chunks) + '_' + total + '.part'; chunk._cid = chunkID; chunk._range = start + ',' + chunk.size + ',' + blobSize; chunked[chunkID]++; @@ -3303,12 +3601,17 @@ elFinder.prototype = { formData.append('cmd', 'upload'); formData.append(self.newAPI ? 'target' : 'current', target); - if (renames) { - $.each(renames, function(i, v){ + 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.options.customData, function(key, val) { formData.append(key, val); }); @@ -3367,10 +3670,12 @@ elFinder.prototype = { if (files.length > 0) { if (renames == null) { renames = []; + hashes = {}; self.uploads.checkExists(files, target, fm).done( - function(res){ + function(res, res2){ if (fm.option('uploadOverwrite')) { renames = res; + hashes = res2; files = $.map(files, function(file){return !file._remove? file : null ;}); } cnt = files.length; @@ -3397,9 +3702,11 @@ elFinder.prototype = { } else { files.done(function(result){ renames = []; + hashes = {}; cnt = result[0].length; if (cnt) { renames = result[2]; + hashes = result[3]; send(result[0], result[1]); } else { dfrd.reject(['errUploadNoFiles']); @@ -3476,6 +3783,7 @@ elFinder.prototype = { names = [], dfds = [], renames = [], + hashes = {}, cnt, notify, notifyto, abortto; if (files && files.length) { @@ -3488,8 +3796,9 @@ elFinder.prototype = { 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){ + function(res, res2){ renames = res; + hashes = res2; cnt = $.map(names, function(file){return !file._remove? file : null ;}).length; if (cnt != names.length) { cnt = 0; @@ -3514,17 +3823,22 @@ elFinder.prototype = { if (renames.length > 0) { $.each(renames, function(i, rename) { - form.append(''); + form.append(''); }); form.append(''); } + if (hashes) { + $.each(renames, function(i, v) { + form.append(''); + }); + } $.each(self.options.onlyMimes||[], function(i, mime) { - form.append(''); + form.append(''); }); $.each(self.options.customData, function(key, val) { - form.append(''); + form.append(''); }); form.appendTo('body'); @@ -3546,10 +3860,10 @@ elFinder.prototype = { */ one : function(event, callback) { var self = this, - h = $.proxy(callback, function(event) { - setTimeout(function() {self.unbind(event.type, h);}, 3); - return callback.apply(this, arguments); - }); + h = function(e, f) { + setTimeout(function() {self.unbind(event, h);}, 3); + return callback.apply(self.getListeners(e.type), arguments); + }; return this.bind(event, h); }, @@ -3561,14 +3875,22 @@ elFinder.prototype = { * @return String */ localStorage : function(key, val) { - var s = window.localStorage; + var s = window.localStorage, + oldkey = 'elfinder-'+key+this.id, // old key of elFinder < 2.1.6 + retval, oldval; - key = 'elfinder-'+key+this.id; + // new key of elFinder >= 2.1.6 + key = window.location.pathname+'-elfinder-'+key+this.id; 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)) { try { s.setItem(key, val); @@ -3576,9 +3898,10 @@ elFinder.prototype = { s.clear(); s.setItem(key, val); } + retval = s.getItem(key); } - return s.getItem(key); + return retval; }, /** @@ -3916,7 +4239,7 @@ elFinder.prototype = { * cnt : 3, * hideCnt : false, // true for not show count * progress : 10, // progress bar percents (use cnt : 0 to update progress bar) - * cancel : false // show cancel button (should regist event at each caller @see this.uploads.xhr) + * cancel : callback // callback function for cancel button * }) * @return elFinder */ @@ -3925,13 +4248,19 @@ elFinder.prototype = { msg = this.messages['ntf'+type] ? this.i18n('ntf'+type) : this.i18n('ntfsmth'), ndialog = this.ui.notify, notify = ndialog.children('.elfinder-notify-'+type), - ntpl = '
{msg}
', + button = notify.children('div.elfinder-notify-cancel').children('button'), + ntpl = '
{msg}
', 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', - cnt, total, prc, button; + close = function() { + notify._esc && $(document).off('keydown', notify._esc); + notify.remove(); + !ndialog.children().length && ndialog.elfinderdialog('close'); + }, + cnt, total, prc; if (!type) { return this; @@ -3958,6 +4287,32 @@ elFinder.prototype = { 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) { + if (cancel.xhr) { + cancel.xhr.quiet = true; + cancel.xhr.abort(); + } + cancel.reject(); + } else { + cancel(e); + } + }; + button.on('click', function(e) { + notify._esc(e); + }); + $(document).on('keydown', notify._esc); + } + } + !opts.hideCnt && notify.children('.elfinder-notify-cnt').text('('+cnt+')'); ndialog.is(':hidden') && ndialog.elfinderdialog('open'); notify.data('cnt', cnt); @@ -3983,8 +4338,7 @@ elFinder.prototype = { } } else { - notify.remove(); - !ndialog.children().length && ndialog.elfinderdialog('close'); + close(); } return this; @@ -4067,21 +4421,11 @@ elFinder.prototype = { }; if (opts.all) { - if (opts.reject) { - options.width = 370; - } options.create = function() { + var base = $('
'); checkbox = $(''); - $(this).next().children().before($('').prepend(checkbox)); - } - - options.open = function() { - var pane = $(this).next(), - width = parseInt(pane.children(':first').outerWidth() + pane.children(':last').outerWidth()); - - if (width > parseInt(pane.width())) { - $(this).closest('.elfinder-dialog').width(width+30); - } + $(this).next().find('.ui-dialog-buttonset') + .prepend(base.append($('').prepend(checkbox))); } } @@ -4456,11 +4800,19 @@ elFinder.prototype = { }, navHash2Id : function(hash) { - return 'nav-'+hash; + return this.navPrefix + hash; }, navId2Hash : function(id) { - return typeof(id) == 'string' ? id.substr(4) : false; + 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; }, log : function(m) { window.console && window.console.log && window.console.log(m); return this; }, @@ -4529,7 +4881,7 @@ if (!Object.keys) { * * @type String **/ -elFinder.prototype.version = '2.1.5'; +elFinder.prototype.version = '2.1.10 (2.1-src Nightly: a102376)'; @@ -4754,7 +5106,7 @@ elFinder.prototype._options = { * @type Array */ commands : [ - 'open', 'reload', 'home', 'up', 'back', 'forward', 'getfile', 'quicklook', + 'open', 'opendir', 'reload', 'home', 'up', 'back', 'forward', 'getfile', 'quicklook', 'download', 'rm', 'duplicate', 'rename', 'mkdir', 'mkfile', 'upload', 'copy', 'cut', 'paste', 'edit', 'extract', 'archive', 'search', 'info', 'view', 'help', 'resize', 'sort', 'netmount', 'netunmount', 'places', 'chmod' @@ -4798,10 +5150,17 @@ elFinder.prototype._options = { upload : { ui : 'uploadbutton' }, + // "download" command options. + download : { + maxRequests : 10 + }, // "quicklook" command options. quicklook : { autoplay : true, - jplayer : 'extensions/jplayer' + jplayer : 'extensions/jplayer', + // MIME types to use Google Docs online viewer + // Example ['application/pdf', 'image/tiff', 'application/msword', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'] + googleDocsMimes : [] }, // "quicklook" command options. edit : { @@ -4918,6 +5277,7 @@ elFinder.prototype._options = { netmount: { ftp: { + name : 'FTP', inputs: { host : $(''), port : $(''), @@ -4929,6 +5289,7 @@ elFinder.prototype._options = { } }, dropbox: { + name : 'Dropbox.com', inputs: { host : $(''), path : $(''), @@ -4961,6 +5322,78 @@ elFinder.prototype._options = { self.inputs.pass.val("done"); } } + }, + googledrive: { + name : 'GoogleDrive', + inputs: { + offline : $('').on('change', function() { + $(this).parents('table.elfinder-netmount-tb').find('select:first').trigger('change', 'reset'); + }), + host : $(''), + path : $(''), + user : $(''), + pass : $('') + }, + select: function(fm, ev, data){ + var f = this.inputs, oline = f.offline, + data = data || null; + if ($(f.host[0]).find('span.elfinder-info-spinner').length || data === 'reset') { + if (oline.parent().children().length === 1) { + f.path.parent().prev().html(fm.i18n('folderId')); + oline.attr('title', fm.i18n('offlineAccess')); + oline.uniqueId().after($('
').append( + $('"),c=d.val(),u=function(){d.editor&&d.editor.save(d[0],d.editor.instance),c=d.val(),l.notifyWith(d)},p=function(){var e=function(){l.reject(),d.elfinderdialog("close")};d.editor&&d.editor.save(d[0],d.editor.instance),a(c)!==a(d.val())?(c=d.val(),n.confirm({title:t.title,text:"confirmNotSave",accept:{label:"btnSaveClose",callback:function(){u(),e()}},cancel:{label:"btnClose",callback:e}})):e()},h=function(){u(),p()},f={title:n.escape(o.name),width:t.options.dialogWidth||450,buttons:{},btnHoverFocus:!1,closeOnEscape:!1,close:function(){var i=e(this),r=function(){d.editor&&d.editor.close(d[0],d.editor.instance),i.elfinderdialog("destroy")};d.editor&&d.editor.save(d[0],d.editor.instance),a(c)!==a(d.val())?n.confirm({title:t.title,text:"confirmNotSave",accept:{label:"btnSaveClose",callback:function(){u(),r()}},cancel:{label:"btnClose",callback:r}}):r()},open:function(){n.disable(),d.focus(),d[0].setSelectionRange&&d[0].setSelectionRange(0,0),d.editor&&(d.editor.instance=d.editor.load(d[0])||null,d.editor.focus(d[0],d.editor.instance))}},m=function(t,n){if(n=n||i.concat("text/"),-1!==e.inArray(t,n))return!0;var a,r;for(r=n.length,a=0;r>a;a++)if(0===t.indexOf(n[a]))return!0;return!1},g=function(e,t){if(!t||!t.length)return!0;var n,i,a=e.replace(/^.+\.([^.]+)|(.+)$/,"$1$2").toLowerCase();for(i=t.length,n=0;i>n;n++)if(a===t[n].toLowerCase())return!0;return!1};return d.getContent=function(){return d.val()},e.each(t.options.editors||[],function(e,t){return m(o.mime,t.mimes||null)&&g(o.name,t.exts||null)&&"function"==typeof t.load&&"function"==typeof t.save?(d.editor={load:t.load,save:t.save,close:"function"==typeof t.close?t.close:function(){},focus:"function"==typeof t.focus?t.focus:function(){},instance:null,doSave:u,doCancel:p,doClose:h,file:o},!1):void 0}),d.editor||d.keydown(function(e){var t,n,i=e.keyCode;e.stopPropagation(),9==i&&(e.preventDefault(),this.setSelectionRange&&(t=this.value,n=this.selectionStart,this.value=t.substr(0,n)+" "+t.substr(this.selectionEnd),n+=1,this.setSelectionRange(n,n))),(e.ctrlKey||e.metaKey)&&((81==i||87==i)&&(e.preventDefault(),p()),83==i&&(e.preventDefault(),u()))}).on("mouseenter",function(){this.focus()}),f.buttons[n.i18n("btnSave")]=u,f.buttons[n.i18n("btnSaveClose")]=h,f.buttons[n.i18n("btnCancel")]=p,n.dialog(d,f).attr("id",r),l.promise()},s=function(i,a){var r,l=i.hash,d=(n.options,e.Deferred()),c="edit-"+n.namespace+"-"+i.hash,u=n.getUI().find("#"+c),p=a?1:0;return u.length?(u.elfinderdialog("toTop"),d.resolve()):i.read&&i.write?(n.request({data:{cmd:"get",target:l,conv:p},notify:{type:"file",cnt:1},syncOnFail:!0}).done(function(e){e.doconv?n.confirm({title:t.title,text:"confirmConvUTF8",accept:{label:"btnConv",callback:function(){d=s(i,1)}},cancel:{label:"btnCancel",callback:function(){d.reject()}}}):o(c,i,e.content).progress(function(){var e=this;n.request({options:{type:"post"},data:{cmd:"put",target:l,content:e.getContent()},notify:{type:"save",cnt:1},syncOnFail:!0}).fail(function(e){d.reject(e)}).done(function(t){t.changed&&t.changed.length&&n.change(t),d.resolve(t),setTimeout(function(){e.focus(),e.editor&&e.editor.focus(e[0],e.editor.instance)},50)})})}).fail(function(e){d.reject(e)}),d.promise()):(r=["errOpen",i.name,"errPerm"],n.error(r),d.reject(r))};this.shortcuts=[{pattern:"ctrl+e"}],this.init=function(){this.onlyMimes=this.options.mimes||[]},this.getstate=function(e){var e=this.files(e),t=e.length;return!this._disabled&&t&&r(e).length==t?0:-1},this.exec=function(t){var n,i=r(this.files(t)),a=[];if(this.disabled())return e.Deferred().reject();for(;n=i.shift();)a.push(s(n));return a.length?e.when.apply(null,a):e.Deferred().reject()}},elFinder.prototype.commands.extract=function(){var t=this,n=t.fm,i=[],a=function(t){return e.map(t,function(t){return t.read&&-1!==e.inArray(t.mime,i)?t:null})};this.variants=[],this.disableOnSearch=!0,n.bind("open reload",function(){i=n.option("archivers").extract||[],t.variants=[["makedir",n.i18n("cmdmkdir")],["intohere",n.i18n("btnCwd")]],t.change()}),this.getstate=function(e){var e=this.files(e),t=e.length;return!this._disabled&&t&&this.fm.cwd().write&&a(e).length==t?0:-1},this.exec=function(t,a){var r,o,s,l=this.files(t),d=e.Deferred(),c=l.length,u="makedir"==a?1:0,p=!1,h=!1,f=0,m=e.map(n.files(t),function(e){return e.name}),g={};e.map(n.files(t),function(e){g[e.name]=e});var v=function(e){switch(e){case"overwrite_all":p=!0;break;case"omit_all":h=!0}},b=function(t){t.read&&n.file(t.phash).write?-1===e.inArray(t.mime,i)?(o=["errExtract",t.name,"errNoArchive"],n.error(o),d.reject(o)):n.request({data:{cmd:"extract",target:t.hash,makedir:u},notify:{type:"extract",cnt:1},syncOnFail:!0}).fail(function(e){"rejected"!=d.state()&&d.reject(e)}).done(function(){}):(o=["errExtract",t.name,"errPerm"],n.error(o),d.reject(o))},y=function(t,i){var a=t[i],o=a.name.replace(/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/gi,""),l=e.inArray(o,m)>=0,w=function(){c>i+1?y(t,i+1):d.resolve()};!u&&l&&"directory"!=g[o].mime?n.confirm({title:n.i18n("ntfextract"),text:["errExists",o,"confirmRepl"],accept:{label:"btnYes",callback:function(e){if(s=e?"overwrite_all":"overwrite",v(s),p||h){if(p){for(r=i;c>r;r++)b(t[r]);d.resolve()}}else"overwrite"==s&&b(a),c>i+1?y(t,i+1):d.resolve()}},reject:{label:"btnNo",callback:function(e){s=e?"omit_all":"omit",v(s),!p&&!h&&c>i+1?y(t,i+1):h&&d.resolve()}},cancel:{label:"btnCancel",callback:function(){d.resolve()}},all:c>i+1}):u?(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(){d.resolve()}},all:c>i+1}):(f>0&&b(a),w())};return this.enabled()&&c&&i.length?(c>0&&y(l,0),d):d.reject()}},elFinder.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()}},elFinder.prototype.commands.getfile=function(){var t=this,n=this.fm,i=function(n){var i=t.options;return n=e.map(n,function(e){return"directory"!=e.mime||i.folders?e:null}),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 e=this.files(e),t=e.length;return this.callback&&t&&i(e).length==t?0:-1},this.exec=function(n){var i,a,r,o=this.fm,s=this.options,l=this.files(n),d=l.length,c=o.option("url"),u=o.option("tmbUrl"),p=e.Deferred().done(function(e){o.trigger("getfile",{files:e}),t.callback(e,o),"close"==s.oncomplete?o.hide():"destroy"==s.oncomplete&&o.destroy()}),h=function(){return s.onlyURL?s.multiple?e.map(l,function(e){return e.url}):l[0].url:s.multiple?l:l[0]},f=[];if(-1==this.getstate(n))return p.reject();for(i=0;d>i;i++){if(a=l[i],"directory"==a.mime&&!s.folders)return p.reject();a.baseUrl=c,"1"==a.url?f.push(o.request({data:{cmd:"url",target:a.hash},notify:{type:"url",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.url){var t=o.file(this.hash);t.url=this.url=e.url}}.bind(a))):a.url=o.url(a.hash),a.path=o.path(a.hash),a.tmb&&1!=a.tmb&&(a.tmb=u+a.tmb),a.width||a.height||(a.dim?(r=a.dim.split("x"),a.width=r[0],a.height=r[1]):-1!==a.mime.indexOf("image")&&f.push(o.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=o.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(){p.resolve(h(l))}),p):p.resolve(h(l))}},elFinder.prototype.commands.help=function(){var t=this.fm,n=this,i='',a='
{author}
{work}
',r=/\{url\}/,o=/\{link\}/,s=/\{author\}/,l=/\{work\}/,d="replace",c="ui-priority-primary",u="ui-priority-secondary",p="elfinder-help-license",h='
  • {title}
  • ',f=['
    ','
      '],m='
      {pattern}
      {descrip}
      ',g='
      ',v=function(){f.push('
      ")},b=function(){var n=t.shortcuts();f.push('
      '),n.length?(f.push('
      '),e.each(n,function(e,t){f.push(m.replace(/\{pattern\}/,t[0]).replace(/\{descrip\}/,t[1]))}),f.push("
      ")):f.push('
      '+t.i18n("shortcutsof")+"
      "),f.push("
      ")},y=function(){f.push('
      '),f.push('DON\'T PANIC'),f.push("
      ")},w="";this.alwaysEnabled=!0,this.updateOnSelect=!1,this.state=0,this.shortcuts=[{pattern:"f1",description:this.title}],setTimeout(function(){var i=n.options.view||["about","shortcuts","help"];e.each(i,function(e,n){f.push(h[d](/\{id\}/,n)[d](/\{title\}/,t.i18n(n)))}),f.push("
    "),-1!==e.inArray("about",i)&&v(),-1!==e.inArray("shortcuts",i)&&b(),-1!==e.inArray("help",i)&&y(),f.push("
    "),w=e(f.join("")),w.find(".ui-tabs-nav li").hover(function(){e(this).toggleClass("ui-state-hover")}).children().click(function(t){var n=e(this);t.preventDefault(),t.stopPropagation(),n.hasClass("ui-tabs-selected")||(n.parent().addClass("ui-tabs-selected ui-state-active").siblings().removeClass("ui-tabs-selected").removeClass("ui-state-active"),w.find(".ui-tabs-panel").hide().filter(n.attr("href")).show())}).filter(":first").click()},200),this.getstate=function(){return 0},this.exec=function(){this.dialog||(w.find("#apiver").text(this.fm.api),this.dialog=this.fm.dialog(w,{title:this.title,width:530,autoOpen:!1,destroyOnClose:!1})),this.dialog.elfinderdialog("open").find(".ui-tabs-nav li a:first").click()}},elFinder.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())}},elFinder.prototype.commands.info=function(){var t=this.fm,n="elfinder-info-spinner",i={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"),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")};this.tpl={main:'
    {title}
    {content}
    ',itemTitle:'{name}{kind}',groupTitle:"{items}: {num}",row:"{label} : {value}",spinner:'{text} '},this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+i"}],this.init=function(){e.each(i,function(e,n){i[e]=t.i18n(n) -})},this.getstate=function(){return 0},this.exec=function(t){var a=this.files(t);a.length||(a=this.files([this.fm.cwd().hash]));var r,o,s,l,d,c=this.fm,u=this.options,p=this.tpl,h=p.row,f=a.length,m=[],g=p.main,v="{label}",b="{value}",y={title:this.title,width:"auto",close:function(){e(this).elfinderdialog("destroy")}},w=[],x=function(e,t){C.find("."+n+"-"+t).parent().html(e)},k=c.namespace+"-info-"+e.map(a,function(e){return e.hash}).join("-"),C=c.getUI().find("#"+k),T=[];if(!f)return e.Deferred().reject();if(C.length)return C.elfinderdialog("toTop"),e.Deferred().resolve();if(1==f){if(s=a[0],g=g.replace("{class}",c.mime2class(s.mime)),l=p.itemTitle.replace("{name}",c.escape(s.i18||s.name)).replace("{kind}",c.mime2kind(s)),s.tmb&&(o=c.option("tmbUrl")+s.tmb),s.read?"directory"!=s.mime||s.alias?r=c.formatSize(s.size):(r=p.spinner.replace("{text}",i.calc).replace("{name}","size"),w.push(s.hash)):r=i.unknown,m.push(h.replace(v,i.size).replace(b,r)),s.alias&&m.push(h.replace(v,i.aliasfor).replace(b,s.alias)),m.push(h.replace(v,i.path).replace(b,c.escape(c.path(s.hash,!0)))),s.read){var I,F=c.escape(s.name);if("1"==s.url)m.push(h.replace(v,i.link).replace(b,p.spinner.replace("{text}",i.modify).replace("{name}","url"))),c.request({data:{cmd:"url",target:s.hash},preventDefault:!0}).fail(function(){x(F,"url")}).done(function(e){if(x(''+F+""||F,"url"),e.url){var t=c.file(s.hash);t.url=e.url}});else{if(u.nullUrlDirLinkSelf&&"directory"==s.mime&&null===s.url){var M=window.location;I=M.pathname+M.search+"#elf_"+s.hash}else I=c.url(s.hash);m.push(h.replace(v,i.link).replace(b,''+F+""))}}s.dim?m.push(h.replace(v,i.dim).replace(b,s.dim)):-1!==s.mime.indexOf("image")&&(s.width&&s.height?m.push(h.replace(v,i.dim).replace(b,s.width+"x"+s.height)):(m.push(h.replace(v,i.dim).replace(b,p.spinner.replace("{text}",i.calc).replace("{name}","dim"))),c.request({data:{cmd:"dim",target:s.hash},preventDefault:!0}).fail(function(){x(i.unknown,"dim")}).done(function(e){if(x(e.dim||i.unknown,"dim"),e.dim){var t=e.dim.split("x"),n=c.file(s.hash);n.width=t[0],n.height=t[1]}}))),m.push(h.replace(v,i.modify).replace(b,c.formatDate(s))),m.push(h.replace(v,i.perms).replace(b,c.formatPermissions(s))),m.push(h.replace(v,i.locked).replace(b,s.locked?i.yes:i.no)),s.owner&&m.push(h.replace(v,i.owner).replace(b,s.owner)),s.group&&m.push(h.replace(v,i.group).replace(b,s.group)),s.perm&&m.push(h.replace(v,i.perm).replace(b,c.formatFileMode(s.perm))),u.custom&&e.each(u.custom,function(t,n){n.mimes&&!e.map(n.mimes,function(e){return s.mime===e||0===s.mime.indexOf(e+"/")?!0:null}).length||n.hashRegex&&!s.hash.match(n.hashRegex)||(m.push(h.replace(v,c.i18n(n.label)).replace(b,n.tpl.replace("{id}",k))),n.action&&"function"==typeof n.action&&T.push(n.action))})}else g=g.replace("{class}","elfinder-cwd-icon-group"),l=p.groupTitle.replace("{items}",i.items).replace("{num}",f),d=e.map(a,function(e){return"directory"==e.mime?1:null}).length,d?(m.push(h.replace(v,i.kind).replace(b,d==f?i.folders:i.folders+" "+d+", "+i.files+" "+(f-d))),m.push(h.replace(v,i.size).replace(b,p.spinner.replace("{text}",i.calc).replace("{name}","size"))),w=e.map(a,function(e){return e.hash})):(r=0,e.each(a,function(e,t){var n=parseInt(t.size);n>=0&&r>=0?r+=n:r="unknown"}),m.push(h.replace(v,i.kind).replace(b,i.files)),m.push(h.replace(v,i.size).replace(b,c.formatSize(r))));g=g.replace("{title}",l).replace("{content}",m.join("")),C=c.dialog(g,y),C.attr("id",k),o&&e("").load(function(){C.find(".elfinder-cwd-icon").css("background",'url("'+o+'") center center no-repeat')}).attr("src",o),w.length&&c.request({data:{cmd:"size",targets:w},preventDefault:!0}).fail(function(){x(i.unknown,"size")}).done(function(e){var t=parseInt(e.size);x(t>=0?c.formatSize(t):i.unknown,"size")}),T.length&&e.each(T,function(e,t){try{t(s,c,C)}catch(n){c.debug("error",n)}})}},elFinder.prototype.commands.mkdir=function(){this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="directory",this.prefix="untitled folder",this.exec=e.proxy(this.fm.res("mixin","make"),this),this.shortcuts=[{pattern:"ctrl+shift+n"}],this.getstate=function(){return!this._disabled&&this.fm.cwd().write?0:-1}},elFinder.prototype.commands.mkfile=function(){this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="text/plain",this.prefix="untitled file.txt",this.exec=e.proxy(this.fm.res("mixin","make"),this),this.getstate=function(){return!this._disabled&&this.fm.cwd().write?0:-1}},elFinder.prototype.commands.netmount=function(){var t=this;this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){this.drivers=this.fm.netDrivers}},this.getstate=function(){return this.drivers.length?0:-1},this.exec=function(){var n=t.fm,i=e.Deferred(),a=t.options,r=function(){var r,o={protocol:e(""),c=d.val(),u=function(){d.editor&&d.editor.save(d[0],d.editor.instance),c=d.val(),l.notifyWith(d)},p=function(){var e=function(){l.reject(),d.elfinderdialog("close")};d.editor&&d.editor.save(d[0],d.editor.instance),a(c)!==a(d.val())?(c=d.val(),n.confirm({title:t.title,text:"confirmNotSave",accept:{label:"btnSaveClose",callback:function(){u(),e()}},cancel:{label:"btnClose",callback:e}})):e()},h=function(){u(),p()},f={title:n.escape(o.name),width:t.options.dialogWidth||450,buttons:{},btnHoverFocus:!1,closeOnEscape:!1,close:function(){var i=e(this),r=function(){d.editor&&d.editor.close(d[0],d.editor.instance),i.elfinderdialog("destroy")};d.editor&&d.editor.save(d[0],d.editor.instance),a(c)!==a(d.val())?n.confirm({title:t.title,text:"confirmNotSave",accept:{label:"btnSaveClose",callback:function(){u(),r()}},cancel:{label:"btnClose",callback:r}}):r()},open:function(){n.disable(),d.focus(),d[0].setSelectionRange&&d[0].setSelectionRange(0,0),d.editor&&(d.editor.instance=d.editor.load(d[0])||null,d.editor.focus(d[0],d.editor.instance))}},m=function(t,n){if(n=n||i.concat("text/"),-1!==e.inArray(t,n))return!0;var a,r;for(r=n.length,a=0;r>a;a++)if(0===t.indexOf(n[a]))return!0;return!1},g=function(e,t){if(!t||!t.length)return!0;var n,i,a=e.replace(/^.+\.([^.]+)|(.+)$/,"$1$2").toLowerCase();for(i=t.length,n=0;i>n;n++)if(a===t[n].toLowerCase())return!0;return!1};return d.getContent=function(){return d.val()},e.each(t.options.editors||[],function(e,t){return m(o.mime,t.mimes||null)&&g(o.name,t.exts||null)&&"function"==typeof t.load&&"function"==typeof t.save?(d.editor={load:t.load,save:t.save,close:"function"==typeof t.close?t.close:function(){},focus:"function"==typeof t.focus?t.focus:function(){},instance:null,doSave:u,doCancel:p,doClose:h,file:o},!1):void 0}),d.editor||d.keydown(function(e){var t,n,i=e.keyCode;e.stopPropagation(),9==i&&(e.preventDefault(),this.setSelectionRange&&(t=this.value,n=this.selectionStart,this.value=t.substr(0,n)+" "+t.substr(this.selectionEnd),n+=1,this.setSelectionRange(n,n))),(e.ctrlKey||e.metaKey)&&((81==i||87==i)&&(e.preventDefault(),p()),83==i&&(e.preventDefault(),u()))}).on("mouseenter",function(){this.focus()}),f.buttons[n.i18n("btnSave")]=u,f.buttons[n.i18n("btnSaveClose")]=h,f.buttons[n.i18n("btnCancel")]=p,n.dialog(d,f).attr("id",r).on("keydown keyup keypress",function(e){e.stopPropagation()}),l.promise()},s=function(i,a){var r,l=i.hash,d=(n.options,e.Deferred()),c="edit-"+n.namespace+"-"+i.hash,u=n.getUI().find("#"+c),p=a?1:0;return u.length?(u.elfinderdialog("toTop"),d.resolve()):i.read&&i.write?(n.request({data:{cmd:"get",target:l,conv:p},notify:{type:"file",cnt:1},syncOnFail:!0}).done(function(e){e.doconv?n.confirm({title:t.title,text:"confirmConvUTF8",accept:{label:"btnConv",callback:function(){d=s(i,1)}},cancel:{label:"btnCancel",callback:function(){d.reject()}}}):o(c,i,e.content).progress(function(){var e=this;n.request({options:{type:"post"},data:{cmd:"put",target:l,content:e.getContent()},notify:{type:"save",cnt:1},syncOnFail:!0}).fail(function(e){d.reject(e)}).done(function(t){t.changed&&t.changed.length&&n.change(t),d.resolve(t),setTimeout(function(){e.focus(),e.editor&&e.editor.focus(e[0],e.editor.instance)},50)})})}).fail(function(e){d.reject(e)}),d.promise()):(r=["errOpen",i.name,"errPerm"],n.error(r),d.reject(r))};this.shortcuts=[{pattern:"ctrl+e"}],this.init=function(){this.onlyMimes=this.options.mimes||[]},this.getstate=function(e){var e=this.files(e),t=e.length;return!this._disabled&&t&&r(e).length==t?0:-1},this.exec=function(t){var n,i=r(this.files(t)),a=[];if(this.disabled())return e.Deferred().reject();for(;n=i.shift();)a.push(s(n));return a.length?e.when.apply(null,a):e.Deferred().reject()}},elFinder.prototype.commands.extract=function(){var t=this,n=t.fm,i=[],a=function(t){return e.map(t,function(t){return t.read&&-1!==e.inArray(t.mime,i)?t:null})};this.variants=[],this.disableOnSearch=!0,n.bind("open reload",function(){i=n.option("archivers").extract||[],t.variants=n.api>2?[["makedir",n.i18n("cmdmkdir")],["intohere",n.i18n("btnCwd")]]:[["intohere",n.i18n("btnCwd")]],t.change()}),this.getstate=function(e){var e=this.files(e),t=e.length;return!this._disabled&&t&&this.fm.cwd().write&&a(e).length==t?0:-1},this.exec=function(t,a){var r,o,s,l=this.files(t),d=e.Deferred(),c=l.length,u="makedir"==a?1:0,p=!1,h=!1,f=0,m=e.map(n.files(t),function(e){return e.name}),g={};e.map(n.files(t),function(e){g[e.name]=e});var v=function(e){switch(e){case"overwrite_all":p=!0;break;case"omit_all":h=!0}},b=function(t){t.read&&n.file(t.phash).write?-1===e.inArray(t.mime,i)?(o=["errExtract",t.name,"errNoArchive"],n.error(o),d.reject(o)):n.request({data:{cmd:"extract",target:t.hash,makedir:u},notify:{type:"extract",cnt:1},syncOnFail:!0}).fail(function(e){"rejected"!=d.state()&&d.reject(e)}).done(function(){}):(o=["errExtract",t.name,"errPerm"],n.error(o),d.reject(o))},y=function(t,i){var a=t[i],o=a.name.replace(/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/gi,""),l=e.inArray(o,m)>=0,w=function(){c>i+1?y(t,i+1):d.resolve()};!u&&l&&"directory"!=g[o].mime?n.confirm({title:n.i18n("ntfextract"),text:["errExists",o,"confirmRepl"],accept:{label:"btnYes",callback:function(e){if(s=e?"overwrite_all":"overwrite",v(s),p||h){if(p){for(r=i;c>r;r++)b(t[r]);d.resolve()}}else"overwrite"==s&&b(a),c>i+1?y(t,i+1):d.resolve()}},reject:{label:"btnNo",callback:function(e){s=e?"omit_all":"omit",v(s),!p&&!h&&c>i+1?y(t,i+1):h&&d.resolve()}},cancel:{label:"btnCancel",callback:function(){d.resolve()}},all:c>i+1}):u?(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(){d.resolve()}},all:c>i+1}):(f>0&&b(a),w())};return this.enabled()&&c&&i.length?(c>0&&y(l,0),d):d.reject()}},elFinder.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()}},elFinder.prototype.commands.getfile=function(){var t=this,n=this.fm,i=function(n){var i=t.options;return n=e.map(n,function(e){return"directory"!=e.mime||i.folders?e:null}),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 e=this.files(e),t=e.length;return this.callback&&t&&i(e).length==t?0:-1},this.exec=function(n){var i,a,r,o=this.fm,s=this.options,l=this.files(n),d=l.length,c=o.option("url"),u=o.option("tmbUrl"),p=e.Deferred().done(function(e){o.trigger("getfile",{files:e}),t.callback(e,o),"close"==s.oncomplete?o.hide():"destroy"==s.oncomplete&&o.destroy()}),h=function(){return s.onlyURL?s.multiple?e.map(l,function(e){return e.url}):l[0].url:s.multiple?l:l[0]},f=[];if(-1==this.getstate(n))return p.reject();for(i=0;d>i;i++){if(a=l[i],"directory"==a.mime&&!s.folders)return p.reject();a.baseUrl=c,"1"==a.url?f.push(o.request({data:{cmd:"url",target:a.hash},notify:{type:"url",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.url){var t=o.file(this.hash);t.url=this.url=e.url}}.bind(a))):a.url=o.url(a.hash),a.path=o.path(a.hash),a.tmb&&1!=a.tmb&&(a.tmb=u+a.tmb),a.width||a.height||(a.dim?(r=a.dim.split("x"),a.width=r[0],a.height=r[1]):-1!==a.mime.indexOf("image")&&f.push(o.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=o.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(){p.resolve(h(l))}),p):p.resolve(h(l))}},elFinder.prototype.commands.help=function(){var t=this.fm,n=this,i='',a='
    {author}
    {work}
    ',r=/\{url\}/,o=/\{link\}/,s=/\{author\}/,l=/\{work\}/,d="replace",c="ui-priority-primary",u="ui-priority-secondary",p="elfinder-help-license",h='
  • {title}
  • ',f=['
    ','
      '],m='
      {pattern}
      {descrip}
      ',g='
      ',v=function(){f.push('
      ")},b=function(){var n=t.shortcuts();f.push('
      '),n.length?(f.push('
      '),e.each(n,function(e,t){f.push(m.replace(/\{pattern\}/,t[0]).replace(/\{descrip\}/,t[1]))}),f.push("
      ")):f.push('
      '+t.i18n("shortcutsof")+"
      "),f.push("
      ")},y=function(){f.push('
      '),f.push('DON\'T PANIC'),f.push("
      ")},w="";this.alwaysEnabled=!0,this.updateOnSelect=!1,this.state=0,this.shortcuts=[{pattern:"f1",description:this.title}],setTimeout(function(){var i=n.options.view||["about","shortcuts","help"];e.each(i,function(e,n){f.push(h[d](/\{id\}/,n)[d](/\{title\}/,t.i18n(n)))}),f.push("
    "),-1!==e.inArray("about",i)&&v(),-1!==e.inArray("shortcuts",i)&&b(),-1!==e.inArray("help",i)&&y(),f.push("
    "),w=e(f.join("")),w.find(".ui-tabs-nav li").hover(function(){e(this).toggleClass("ui-state-hover")}).children().click(function(t){var n=e(this);t.preventDefault(),t.stopPropagation(),n.hasClass("ui-tabs-selected")||(n.parent().addClass("ui-tabs-selected ui-state-active").siblings().removeClass("ui-tabs-selected").removeClass("ui-state-active"),w.find(".ui-tabs-panel").hide().filter(n.attr("href")).show())}).filter(":first").click()},200),this.getstate=function(){return 0},this.exec=function(){this.dialog||(w.find("#apiver").text(this.fm.api),this.dialog=this.fm.dialog(w,{title:this.title,width:530,autoOpen:!1,destroyOnClose:!1})),this.dialog.elfinderdialog("open").find(".ui-tabs-nav li a:first").click()}},elFinder.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())}},elFinder.prototype.commands.info=function(){var t=this.fm,n="elfinder-info-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"),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")};this.tpl={main:'
    {title}
    {content}
    ',itemTitle:'{name}{kind}',groupTitle:"{items}: {num}",row:"{label} : {value}",spinner:'{text} '},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 o,s,l,d,c,u=this.fm,p=this.options,h=this.tpl,f=h.row,m=r.length,g=[],v=h.main,b="{label}",y="{value}",w=[],k={title:this.title,width:"auto",close:function(){e(this).elfinderdialog("destroy"),e.each(w,function(e,t){var n=t&&t.xhr?t.xhr:null;n&&"pending"==n.state()&&(n.quiet=!0,n.abort())})}},x=[],C=function(e,t){I.find("."+n+"-"+t).parent().html(e)},T=u.namespace+"-info-"+e.map(r,function(e){return e.hash}).join("-"),I=u.getUI().find("#"+T),F=[];if(!m)return e.Deferred().reject();if(I.length)return I.elfinderdialog("toTop"),e.Deferred().resolve();if(1==m){if(l=r[0],v=v.replace("{class}",u.mime2class(l.mime)),d=h.itemTitle.replace("{name}",u.escape(l.i18||l.name)).replace("{kind}",''+u.mime2kind(l)+""),l.tmb&&(s=u.option("tmbUrl")+l.tmb),l.read?"directory"!=l.mime||l.alias?o=u.formatSize(l.size):(o=h.spinner.replace("{text}",a.calc).replace("{name}","size"),x.push(l.hash)):o=a.unknown,g.push(f.replace(b,a.size).replace(y,o)),l.alias&&g.push(f.replace(b,a.aliasfor).replace(y,l.alias)),g.push(f.replace(b,a.path).replace(y,u.escape(u.path(l.hash,!0)))),l.read){var S,M=u.escape(l.name);if("1"==l.url)g.push(f.replace(b,a.link).replace(y,'"));else{if(p.nullUrlDirLinkSelf&&"directory"==l.mime&&null===l.url){var P=window.location;S=P.pathname+P.search+"#elf_"+l.hash}else S=u.url(l.hash);g.push(f.replace(b,a.link).replace(y,''+M+""))}}l.dim?g.push(f.replace(b,a.dim).replace(y,l.dim)):-1!==l.mime.indexOf("image")&&(l.width&&l.height?g.push(f.replace(b,a.dim).replace(y,l.width+"x"+l.height)):(g.push(f.replace(b,a.dim).replace(y,h.spinner.replace("{text}",a.calc).replace("{name}","dim"))),w.push(u.request({data:{cmd:"dim",target:l.hash},preventDefault:!0}).fail(function(){C(a.unknown,"dim")}).done(function(e){if(C(e.dim||a.unknown,"dim"),e.dim){var t=e.dim.split("x"),n=u.file(l.hash);n.width=t[0],n.height=t[1]}})))),g.push(f.replace(b,a.modify).replace(y,u.formatDate(l))),g.push(f.replace(b,a.perms).replace(y,u.formatPermissions(l))),g.push(f.replace(b,a.locked).replace(y,l.locked?a.yes:a.no)),l.owner&&g.push(f.replace(b,a.owner).replace(y,l.owner)),l.group&&g.push(f.replace(b,a.group).replace(y,l.group)),l.perm&&g.push(f.replace(b,a.perm).replace(y,u.formatFileMode(l.perm))),p.custom&&e.each(p.custom,function(t,n){n.mimes&&!e.map(n.mimes,function(e){return l.mime===e||0===l.mime.indexOf(e+"/")?!0:null}).length||n.hashRegex&&!l.hash.match(n.hashRegex)||(g.push(f.replace(b,u.i18n(n.label)).replace(y,n.tpl.replace("{id}",T))),n.action&&"function"==typeof n.action&&F.push(n.action))})}else v=v.replace("{class}","elfinder-cwd-icon-group"),d=h.groupTitle.replace("{items}",a.items).replace("{num}",m),c=e.map(r,function(e){return"directory"==e.mime?1:null}).length,c?(g.push(f.replace(b,a.kind).replace(y,c==m?a.folders:a.folders+" "+c+", "+a.files+" "+(m-c))),g.push(f.replace(b,a.size).replace(y,h.spinner.replace("{text}",a.calc).replace("{name}","size"))),x=e.map(r,function(e){return e.hash})):(o=0,e.each(r,function(e,t){var n=parseInt(t.size);n>=0&&o>=0?o+=n:o="unknown"}),g.push(f.replace(b,a.kind).replace(y,a.files)),g.push(f.replace(b,a.size).replace(y,u.formatSize(o))));v=v.replace("{title}",d).replace("{content}",g.join("")),I=u.dialog(v,k),I.attr("id",T),l&&"1"==l.url&&I.on("click","."+n+"-url",function(){e(this).parent().html(h.spinner.replace("{text}",u.i18n("ntfurl")).replace("{name}","url")),u.request({data:{cmd:"url",target:l.hash},preventDefault:!0}).fail(function(){C(M,"url")}).done(function(e){if(e.url){C(''+M+""||M,"url");var t=u.file(l.hash);t.url=e.url}else C(M,"url")})}),s&&e("").load(function(){I.find(".elfinder-cwd-icon").css("background",'url("'+s+'") center center no-repeat')}).attr("src",s),x.length&&w.push(u.request({data:{cmd:"size",targets:x},preventDefault:!0}).fail(function(){C(a.unknown,"size")}).done(function(e){var t=parseInt(e.size);C(t>=0?u.formatSize(t):a.unknown,"size")})),F.length&&e.each(F,function(e,t){try{t(l,u,I)}catch(n){u.debug("error",n)}})}},elFinder.prototype.commands.mkdir=function(){var t=this.fm,n=this;this.value="",this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="directory",this.prefix="untitled folder",this.exec=e.proxy(t.res("mixin","make"),this),this.shortcuts=[{pattern:"ctrl+shift+n"}],this.options={ui:"mkdirbutton"},t.bind("select",function(e){var i=e.data&&e.data.selected?e.data.selected:[];n.title=i.length?t.i18n("cmdmkdirin"):t.i18n("cmdmkdir"),n.update(void 0,n.title)}),this.getstate=function(n){var i=t.cwd(),n=n&&n[0]!=i.hash?this.files(n):[],a=n.length;return this._disabled||!i.write||a&&e.map(n,function(e){return e.phash&&e.read&&!e.locked?e:null}).length!=a?-1:0}},elFinder.prototype.commands.mkfile=function(){this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="text/plain",this.prefix="untitled file.txt",this.exec=e.proxy(this.fm.res("mixin","make"),this),this.getstate=function(){return!this._disabled&&this.fm.cwd().write?0:-1}},elFinder.prototype.commands.netmount=function(){var t=this;this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){this.drivers=this.fm.netDrivers}},this.getstate=function(){return this.drivers.length?0:-1},this.exec=function(){var n=t.fm,i=e.Deferred(),a=t.options,r=function(){var r,o={protocol:e("